From a5f294bee68d832b2af7d00ae4f93a2dcfea590c Mon Sep 17 00:00:00 2001 From: thkim Date: Mon, 10 Nov 2025 16:42:58 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B0=9C=EC=A3=BC=EA=B8=B0=EA=B4=80=20?= =?UTF-8?q?=EC=86=8C=EC=86=8D=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8?= =?UTF-8?q?=EB=A7=8C=20=EB=B3=B4=EC=9D=B4=EB=8F=84=EB=A1=9D=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 + .../core/service/AbstractService.java | 29 - .../webserver/core/service/Service.java | 182 --- .../plugin/ows/service/WMSService.java | 93 -- .../plugin/ows/wms/wms130/WMSGetMap.java | 78 - .../request/GetCapabilitiesRequest.java | 5 - .../{com => kr/or/geoinfo}/MyStartServer.java | 16 +- .../service/DrillingInquiryMapper.java | 21 + .../service/DrillingInquiryService.java | 16 + .../impl/DrillingInquiryServiceImpl.java | 149 ++ ...otDeployableMybatisSessionFactoryBean.java | 214 +++ .../utils/ApplicationContextUtils.java | 51 + src/main/java/kr/or/geoinfo/utils/MyUtil.java | 908 +++++++++++ .../webserver/core/ServerContext.java | 36 +- .../geoinfo}/webserver/core/ServerInfo.java | 2 +- .../webserver/core/cache/ImgCacheMngr.java | 20 +- .../webserver/core/cache/LogCacheManager.java | 6 +- .../webserver/core/cache/ic/CacheFormat.java | 2 +- .../webserver/core/cache/ic/CacheLevel.java | 2 +- .../core/cache/ic/CacheLevelSet.java | 2 +- .../core/cache/ic/ImgCacheLayer.java | 8 +- .../core/cache/util/FileComparator.java | 2 +- .../core/coverage/O2DemLayerMngr.java | 22 +- .../core/coverage/O2ImgLayerMngr.java | 22 +- .../core/coverage/WpsCovStoreMngr.java | 22 +- .../core/coverage/o2layer/O2LayerIndex.java | 2 +- .../core/coverage/o2layer/O2LayerInfo.java | 8 +- .../core/coverage/o2layer/O2LayerLevel.java | 2 +- .../coverage/o2layer/O2LayerLevelSet.java | 4 +- .../core/coverage/o2layer/O2LayerUtil.java | 8 +- .../webserver/core/feature/FeatureMngr.java | 24 +- .../webserver/core/feature/GeometryMngr.java | 10 +- .../webserver/core/feature/InsertParams.java | 2 +- .../core/feature/O2FeatureCollection.java | 2 +- .../webserver/core/feature/QueryMngr.java | 2 +- .../RefindInsertFeatureCollection.java | 4 +- .../webserver/core/init/ConnMngr.java | 20 +- .../core/init/ServerConfiguration.java | 14 +- .../core/init/conn/ConnAltibase.java | 6 +- .../webserver/core/init/conn/ConnJDBC.java | 8 +- .../webserver/core/init/conn/ConnKairos.java | 6 +- .../webserver/core/init/conn/ConnMySQL.java | 6 +- .../webserver/core/init/conn/ConnOracle.java | 6 +- .../webserver/core/init/conn/ConnPostGIS.java | 6 +- .../webserver/core/init/conn/ConnTibero.java | 6 +- .../core/init/conn/util/FieldInfo.java | 2 +- .../core/init/conn/util/FieldSQL.java | 6 +- .../geoinfo}/webserver/core/log/LogMngr.java | 4 +- .../webserver/core/map/LayerFactory.java | 18 +- .../geoinfo}/webserver/core/map/LayerSet.java | 6 +- .../or/geoinfo}/webserver/core/map/Map.java | 10 +- .../core/map/layer/FeatureLayer.java | 16 +- .../webserver/core/map/layer/GroupLayer.java | 8 +- .../webserver/core/map/layer/Layer.java | 12 +- .../webserver/core/map/layer/LinkLayer.java | 6 +- .../webserver/core/map/layer/O2DemLayer.java | 16 +- .../webserver/core/map/layer/O2ImgLayer.java | 6 +- .../webserver/core/map/layer/WCSLayer.java | 4 +- .../webserver/core/map/layer/WMSLayer.java | 4 +- .../render/ExtractRasterStyleVisitor.java | 2 +- .../webserver/core/render/O2StyleFactory.java | 2 +- .../core/render/RefineRenderStyleVisitor.java | 2 +- .../core/render/RefineStyleVisitor.java | 4 +- .../webserver/core/render/RenderMngr.java | 57 +- .../webserver/core/render/StyleMngr.java | 18 +- .../webserver/core/render/io/O2PngWriter.java | 2 +- .../render/io/RenderFeatureCollection.java | 2 +- .../core/render/io/RenderFeatureReader.java | 8 +- .../core/render/io/RenderFeatureSource.java | 2 +- .../core/render/layer/ExFeatureLayer.java | 4 +- .../core/render/layer/ExO2ImgLayer.java | 10 +- .../core/render/layer/ExWMSLayer.java | 10 +- .../render/legend/LegendGraphicBuilder.java | 18 +- .../core/render/legend/LegendUtils.java | 2 +- .../core/render/sld/CategorizeBinding110.java | 4 +- .../render/sld/InterpolateBinding110.java | 4 +- .../core/render/sld/SLDConfiguration110.java | 4 +- .../core/render/sld/SLDParser100.java | 2 +- .../core/render/sld/SLDTransformer110.java | 4 +- .../sld/StyledLayerDescriptorBinding110.java | 2 +- .../core/render/sld/XSBooleanBinding110.java | 2 +- .../webserver/core/render/style/MapStyle.java | 4 +- .../render/style/O2WellKnownMarkFactory.java | 2 +- .../core/render/style/label/LabelCacheEx.java | 10 +- .../render/style/label/LabelCacheItemEx.java | 2 +- .../core/render/style/label/LabelInfo.java | 2 +- .../render/style/label/LabelPainterEx.java | 2 +- .../render/style/label/TextStyle2DEx.java | 2 +- .../render/style/label/TransformedIconEx.java | 2 +- .../render/style/label/util/AWTLabelUtil.java | 4 +- .../style/label/util/KLISLabelUtil.java | 2 +- .../core/service/AbstractService.java | 29 + .../webserver/core/service/InitServer.java | 6 +- .../core/service/ServerInfoService.java | 18 +- .../webserver/core/service/Service.java | 182 +++ .../webserver/core/service/ServiceMngr.java | 20 +- .../webserver/core/tile/tms/TMSInfo.java | 6 +- .../webserver/core/tile/tms/TMSMngr.java | 8 +- .../webserver/core/tile/wmts/TileMatrix.java | 2 +- .../core/tile/wmts/TileMatrixRule.java | 4 +- .../core/tile/wmts/TileMatrixSet.java | 6 +- .../webserver/core/tile/wmts/WMTSLayer.java | 6 +- .../webserver/core/tile/wmts/WMTSMngr.java | 12 +- .../geoinfo}/webserver/core/util/AVList.java | 2 +- .../webserver/core/util/EncryptUtil.java | 2 +- .../webserver/core/util/ServerUtil.java | 4 +- .../webserver/core/vector/GWaveStoreMngr.java | 22 +- .../webserver/core/vector/JdbcStoreMngr.java | 26 +- .../webserver/core/vector/O2DSMngr.java | 12 +- .../webserver/core/vector/ShpStoreMngr.java | 22 +- .../core/vector/WpsVecStoreMngr.java | 30 +- .../webserver/core/vector/crs/CRSMngr.java | 10 +- .../core/vector/crs/O2CRSFactory.java | 8 +- .../core/vector/crs/O2CRSOverrideFactory.java | 8 +- .../core/vector/geowave/GWaveLayerInfo.java | 6 +- .../core/vector/geowave/GeoWaveDataStore.java | 6 +- .../vector/geowave/GeoWaveFeatureReader.java | 2 +- .../vector/geowave/GeoWaveFeatureSource.java | 2 +- .../core/vector/jdbc/O2DSFactory.java | 16 +- .../vector/jdbc/O2DSPrimaryKeyFinder.java | 4 +- .../core/vector/jdbc/O2GeometryTypeMap.java | 2 +- .../core/vector/jdbc/O2SqlDialect.java | 2 +- .../core/vector/jdbc/WKBAttributeIO.java | 2 +- .../vector/jdbc/ns/NonSpatialDialect.java | 14 +- .../vector/jdbc/ns/NonSpatialFilterToSQL.java | 14 +- .../vector/jdbc/oracle/OracleDialect.java | 14 +- .../vector/jdbc/oracle/OracleFilterToSQL.java | 12 +- .../vector/jdbc/oracle/sdo/AttributeList.java | 2 +- .../jdbc/oracle/sdo/CoordinateAccess.java | 2 +- .../oracle/sdo/CoordinateAccessFactory.java | 2 +- .../vector/jdbc/oracle/sdo/Coordinates.java | 2 +- .../jdbc/oracle/sdo/GeometryConverter.java | 2 +- .../vector/jdbc/oracle/sdo/OrdinateList.java | 2 +- .../core/vector/jdbc/oracle/sdo/SDO.java | 2 +- .../vector/jdbc/simple/SimpleDialect.java | 14 +- .../vector/jdbc/simple/SimpleFilterToSQL.java | 16 +- .../core/vector/jdbc/simple/SimpleSql.java | 2 +- .../O2SpatialIndexFeatureCollection.java | 2 +- .../core/vector/o2wps/O2WpsLayerSet.java | 18 +- .../core/vector/shape/ShpIndexMngr.java | 4 +- .../core/vector/shape/ShpLayerInfo.java | 8 +- .../webserver/plugin/ServicesService.java | 14 +- .../webserver/plugin/ows/OWSConstants.java | 2 +- .../ows/exception/OWSServiceException.java | 6 +- .../webserver/plugin/ows/gml/O2GML.java | 4 +- .../plugin/ows/service/WMSService.java | 104 ++ .../plugin/ows/service/parser/WMSParser.java | 87 +- .../webserver/plugin/ows/util/JsonUtil.java | 2 +- .../webserver/plugin/ows/util/PluginUtil.java | 2 +- .../webserver/plugin/ows/util/XMLUtil.java | 4 +- .../plugin/ows/wms/request/Request.java | 2 +- .../ows/wms/wms130/WMSGetCapabilities.java | 18 +- .../ows/wms/wms130/WMSGetFeatureInfo.java | 30 +- .../ows/wms/wms130/WMSGetLegendGraphic.java | 12 +- .../plugin/ows/wms/wms130/WMSGetMap.java | 78 + .../request/GetCapabilitiesRequest.java | 5 + .../wms130/request/GetFeatureInfoRequest.java | 4 +- .../request/GetLegendGraphicRequest.java | 4 +- .../ows/wms/wms130/request/GetMapRequest.java | 4 +- .../egovframework/spring/context-common.xml | 2 +- .../egovframework/spring/context-mybatis.xml | 31 + .../sqlmap/mapper/com/Jusangdo_SQL.xml | 13 - .../drilling/home/DrillingHomeMapper.xml | 97 -- .../drilling/input/DrillingInputMapper.xml | 134 -- .../inquiry/DrillingInquiryMapper.xml | 130 +- .../mapper/jibanModel/jibanModel_SQL.xml | 42 - .../jihaanjeonMoel/jihaanjeonModel_SQL.xml | 51 - .../sqlmap/mapper/main/Community_SQL.xml | 138 -- .../sqlmap/mapper/main/Data_SQL.xml | 68 - .../sqlmap/mapper/main/Faq_SQL.xml | 38 - .../sqlmap/mapper/main/File2019_SQL.xml | 56 - .../sqlmap/mapper/main/File_SQL.xml | 62 - .../sqlmap/mapper/main/GroundReport_SQL.xml | 116 -- .../sqlmap/mapper/main/Home_SQL.xml | 324 ---- .../sqlmap/mapper/main/Join_SQL.xml | 84 - .../sqlmap/mapper/main/Login_SQL.xml | 590 ------- .../sqlmap/mapper/main/Notice_SQL.xml | 83 - .../sqlmap/mapper/main/QnA_SQL.xml | 129 -- .../sqlmap/mapper/main/Vote_SQL.xml | 55 - .../sqlmap/mapper/map/MapCom_SQL.xml | 6 - .../sqlmap/mapper/map/MapControl_SQL.xml | 787 --------- .../sqlmap/mapper/map/MapCoordSearch_SQL.xml | 74 - .../sqlmap/mapper/map/MapInformation_SQL.xml | 402 ----- .../sqlmap/mapper/map/MapLeft_SQL.xml | 1436 ----------------- .../sqlmap/mapper/map/MapMain_SQL.xml | 57 - .../mapper/map/MapProjectSearch_SQL.xml | 838 ---------- .../sqlmap/mapper/regi/basic_SQL.xml | 772 --------- .../sqlmap/mapper/regi/common.xml | 631 -------- .../sqlmap/mapper/regi/complete.xml | 76 - .../sqlmap/mapper/regi/complete_SQL.xml | 165 -- .../sqlmap/mapper/regi/geoLogging_SQL.xml | 244 --- .../sqlmap/mapper/regi/header.xml | 327 ---- .../sqlmap/mapper/regi/holeCoord.xml | 112 -- .../sqlmap/mapper/regi/info_SQL.xml | 292 ---- .../sqlmap/mapper/regi/layerInfo2019_SQL.xml | 51 - .../sqlmap/mapper/regi/layerInfo_SQL.xml | 59 - .../sqlmap/mapper/regi/listReg.xml | 57 - .../sqlmap/mapper/regi/manageAdd.xml | 53 - .../sqlmap/mapper/regi/manageList.xml | 147 -- .../sqlmap/mapper/regi/manageList2019.xml | 46 - .../egovframework/sqlmap/mapper/regi/map.xml | 25 - .../sqlmap/mapper/regi/projectList.xml | 1364 ---------------- .../egovframework/sqlmap/mapper/regi/regi.xml | 1425 ---------------- .../egovframework/sqlmap/mapper/regi/rock.xml | 1038 ------------ .../sqlmap/mapper/regi/sampleInfo.xml | 241 --- .../sqlmap/mapper/regi/sand_SQL.xml | 905 ----------- .../mapper/regi/selectClass2019_SQL.xml | 839 ---------- .../sqlmap/mapper/regi/selectClass_SQL.xml | 340 ---- .../sqlmap/mapper/regi/surface_SQL.xml | 297 ---- .../mapper/subsidence/subsidence_SQL.xml | 199 --- .../training/home/HomeTrainingMapper.xml | 100 -- .../config/springmvc/action-servlet.xml | 2 +- src/main/webapp/WEB-INF/lib/egovframework.jar | Bin 0 -> 326145 bytes ...egovframework.rte.psl.dataaccess-2.7.0.jar | Bin 0 -> 12493 bytes src/main/webapp/WEB-INF/web.xml | 6 +- 215 files changed, 2482 insertions(+), 16558 deletions(-) delete mode 100644 src/main/java/com/geotwo/webserver/core/service/AbstractService.java delete mode 100644 src/main/java/com/geotwo/webserver/core/service/Service.java delete mode 100644 src/main/java/com/geotwo/webserver/plugin/ows/service/WMSService.java delete mode 100644 src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetMap.java delete mode 100644 src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java rename src/main/java/{com => kr/or/geoinfo}/MyStartServer.java (66%) create mode 100644 src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryMapper.java create mode 100644 src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryService.java create mode 100644 src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java create mode 100644 src/main/java/kr/or/geoinfo/mybatis/HotDeployableMybatisSessionFactoryBean.java create mode 100644 src/main/java/kr/or/geoinfo/utils/ApplicationContextUtils.java create mode 100644 src/main/java/kr/or/geoinfo/utils/MyUtil.java rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/ServerContext.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/ServerInfo.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/ImgCacheMngr.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/LogCacheManager.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/ic/CacheFormat.java (91%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/ic/CacheLevel.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/ic/CacheLevelSet.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/ic/ImgCacheLayer.java (90%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/cache/util/FileComparator.java (83%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/O2DemLayerMngr.java (92%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/O2ImgLayerMngr.java (91%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/WpsCovStoreMngr.java (82%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/o2layer/O2LayerIndex.java (92%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/o2layer/O2LayerInfo.java (92%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/o2layer/O2LayerLevel.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/o2layer/O2LayerLevelSet.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/coverage/o2layer/O2LayerUtil.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/feature/FeatureMngr.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/feature/GeometryMngr.java (92%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/feature/InsertParams.java (87%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/feature/O2FeatureCollection.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/feature/QueryMngr.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/feature/RefindInsertFeatureCollection.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/ConnMngr.java (87%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/ServerConfiguration.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnAltibase.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnJDBC.java (91%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnKairos.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnMySQL.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnOracle.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnPostGIS.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/ConnTibero.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/util/FieldInfo.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/init/conn/util/FieldSQL.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/log/LogMngr.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/LayerFactory.java (82%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/LayerSet.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/Map.java (90%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/FeatureLayer.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/GroupLayer.java (91%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/Layer.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/LinkLayer.java (85%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/O2DemLayer.java (93%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/O2ImgLayer.java (83%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/WCSLayer.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/map/layer/WMSLayer.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/ExtractRasterStyleVisitor.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/O2StyleFactory.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/RefineRenderStyleVisitor.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/RefineStyleVisitor.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/RenderMngr.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/StyleMngr.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/io/O2PngWriter.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/io/RenderFeatureCollection.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/io/RenderFeatureReader.java (93%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/io/RenderFeatureSource.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/layer/ExFeatureLayer.java (81%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/layer/ExO2ImgLayer.java (84%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/layer/ExWMSLayer.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/legend/LegendGraphicBuilder.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/legend/LegendUtils.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/CategorizeBinding110.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/InterpolateBinding110.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/SLDConfiguration110.java (93%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/SLDParser100.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/SLDTransformer110.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/StyledLayerDescriptorBinding110.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/sld/XSBooleanBinding110.java (89%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/MapStyle.java (93%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/O2WellKnownMarkFactory.java (92%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/LabelCacheEx.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/LabelCacheItemEx.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/LabelInfo.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/LabelPainterEx.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/TextStyle2DEx.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/TransformedIconEx.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/util/AWTLabelUtil.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/render/style/label/util/KLISLabelUtil.java (98%) create mode 100644 src/main/java/kr/or/geoinfo/webserver/core/service/AbstractService.java rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/service/InitServer.java (79%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/service/ServerInfoService.java (97%) create mode 100644 src/main/java/kr/or/geoinfo/webserver/core/service/Service.java rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/service/ServiceMngr.java (70%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/tms/TMSInfo.java (90%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/tms/TMSMngr.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/wmts/TileMatrix.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/wmts/TileMatrixRule.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/wmts/TileMatrixSet.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/wmts/WMTSLayer.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/tile/wmts/WMTSMngr.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/util/AVList.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/util/EncryptUtil.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/util/ServerUtil.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/GWaveStoreMngr.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/JdbcStoreMngr.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/O2DSMngr.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/ShpStoreMngr.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/WpsVecStoreMngr.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/crs/CRSMngr.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/crs/O2CRSFactory.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/crs/O2CRSOverrideFactory.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/geowave/GWaveLayerInfo.java (90%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/geowave/GeoWaveDataStore.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/geowave/GeoWaveFeatureReader.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/geowave/GeoWaveFeatureSource.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/O2DSFactory.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/O2GeometryTypeMap.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/O2SqlDialect.java (87%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/WKBAttributeIO.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/ns/NonSpatialDialect.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/OracleDialect.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java (93%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java (82%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/oracle/sdo/SDO.java (99%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/simple/SimpleDialect.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/jdbc/simple/SimpleSql.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/o2wps/O2WpsLayerSet.java (96%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/shape/ShpIndexMngr.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/core/vector/shape/ShpLayerInfo.java (90%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ServicesService.java (88%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/OWSConstants.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/exception/OWSServiceException.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/gml/O2GML.java (98%) create mode 100644 src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/WMSService.java rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/service/parser/WMSParser.java (93%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/util/JsonUtil.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/util/PluginUtil.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/util/XMLUtil.java (98%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/request/Request.java (95%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java (97%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java (92%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java (88%) create mode 100644 src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java create mode 100644 src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java (94%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java (91%) rename src/main/java/{com/geotwo => kr/or/geoinfo}/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java (95%) create mode 100644 src/main/resources/egovframework/spring/context-mybatis.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/com/Jusangdo_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/drilling/home/DrillingHomeMapper.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/jibanModel/jibanModel_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/jihaanjeonMoel/jihaanjeonModel_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Community_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Data_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Faq_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/File2019_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/File_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/GroundReport_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Home_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Join_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Login_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Notice_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/QnA_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/main/Vote_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapCom_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapControl_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapCoordSearch_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapInformation_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapLeft_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapMain_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/map/MapProjectSearch_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/basic_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/common.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/complete.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/complete_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/geoLogging_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/header.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/holeCoord.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/info_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo2019_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/listReg.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/manageAdd.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/manageList.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/manageList2019.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/map.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/projectList.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/regi.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/rock.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/sampleInfo.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/sand_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/selectClass2019_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/selectClass_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/regi/surface_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/subsidence/subsidence_SQL.xml delete mode 100644 src/main/resources/egovframework/sqlmap/mapper/training/home/HomeTrainingMapper.xml create mode 100644 src/main/webapp/WEB-INF/lib/egovframework.jar create mode 100644 src/main/webapp/WEB-INF/lib/egovframework.rte.psl.dataaccess-2.7.0.jar diff --git a/pom.xml b/pom.xml index 2e86795..f9f5280 100644 --- a/pom.xml +++ b/pom.xml @@ -536,8 +536,22 @@ org.eclipse.emf.ecore 2.9.1-v20130827-0309 + + + commons-collections + commons-collections + 3.2.2 + + + + egovframework.rte + egovframework-rte-psl-dataaccess + 2.7.0 + system + ${project.basedir}/src/main/webapp/WEB-INF/lib/egovframework.rte.psl.dataaccess-2.7.0.jar + org.opengis diff --git a/src/main/java/com/geotwo/webserver/core/service/AbstractService.java b/src/main/java/com/geotwo/webserver/core/service/AbstractService.java deleted file mode 100644 index 20a4a03..0000000 --- a/src/main/java/com/geotwo/webserver/core/service/AbstractService.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.geotwo.webserver.core.service; - -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public abstract class AbstractService extends HttpServlet { - private static final long serialVersionUID = 2014061020172321L; - - public abstract Object parseQuery(HttpServletRequest paramHttpServletRequest) throws Exception; - - public abstract String doProcess(String paramString); - - public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { - super.service(arg0, arg1); - } - - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doGet(req, resp); - } - - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doPost(req, resp); - } -} diff --git a/src/main/java/com/geotwo/webserver/core/service/Service.java b/src/main/java/com/geotwo/webserver/core/service/Service.java deleted file mode 100644 index b16762d..0000000 --- a/src/main/java/com/geotwo/webserver/core/service/Service.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.geotwo.webserver.core.service; - -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.ServerInfo; -import com.geotwo.webserver.core.init.ServerConfiguration; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.plugin.ows.util.PluginUtil; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; -import java.text.DecimalFormat; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -public class Service extends AbstractService { - private static final long serialVersionUID = 2014061008205121L; - - private static final int SLEEP_TIME = 1000; - - private static final int MAX_SLEEP_TIME = 20000; - - public String parseQuery(HttpServletRequest req) throws Exception { - return null; - } - - public String doProcess(String str) { - return null; - } - - public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { - req.setCharacterEncoding("UTF-8"); - String rootPath = ((HttpServletRequest)req).getContextPath(); - String serviceName = ((HttpServletRequest)req).getRequestURI().replace(rootPath, ""); - while (serviceName.endsWith("/")) - serviceName = serviceName.substring(0, serviceName.length() - 1); - long reqId = System.currentTimeMillis(); - if (((HttpServletRequest)req).getMethod().equalsIgnoreCase("GET")) { - LogMngr.getInstance().reqInfo("[REQUEST]", - "[" + reqId + "] GET, From " + PluginUtil.getClientIP((HttpServletRequest)req) + - " To " + ((serviceName.length() == 0) ? "/" : serviceName) + " , Request : " + ((HttpServletRequest)req).getQueryString()); - } else { - LogMngr.getInstance().reqInfo("[REQUEST]", - "[" + reqId + "] POST, From " + PluginUtil.getClientIP((HttpServletRequest)req) + - " To " + ((serviceName.length() == 0) ? "/" : serviceName) + " , Request : " + ((HttpServletRequest)req).getQueryString()); - } - if (serviceName.length() == 0) { - RequestDispatcher dispatcher = req.getRequestDispatcher("index.html"); - dispatcher.forward(req, resp); - return; - } - if (isFileService(serviceName)) { - File file = new File(getServletContext().getRealPath(serviceName)); - writeFileResponse(resp, file); - return; - } - HttpServlet service = ServiceMngr.getService(serviceName); - if (service != null) { - if (service instanceof ServerInfoService) { - service.service(req, resp); - } else if (ServerInfo.getInstance().isStarted()) { - if (ServerInfo.getInstance().isReStarting()) { - long sleepTile = System.currentTimeMillis(); - while (true) { - if (System.currentTimeMillis() - sleepTile > 20000L) { - writeFailResponse(resp, "O2Map Web is busy to restart. Waiting time for request has been exceeded. [20/sec]"); - break; - } - if (!ServerInfo.getInstance().isReStarting()) { - service.service(req, resp); - break; - } - try { - Thread.sleep(1000L); - } catch (InterruptedException interruptedException) {} - } - } else { - service.service(req, resp); - } - } else { - writeFailResponse(resp, "O2Map Web is not ready. Please check up server configurations and restart server."); - } - } else { - writeFailResponse(resp, "Service [" + serviceName + "] is unregistered Service on O2Map Web."); - } - LogMngr.getInstance().reqInfo("[RESPONSE]", - "[" + reqId + "] is Finish." + - - "Time : " + (new DecimalFormat(".##")).format((System.currentTimeMillis() - reqId) / 1000.0D) + "/sec"); - } - - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doGet(req, resp); - } - - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - super.doPost(req, resp); - } - - private boolean isFileService(String uri) { - try { - File file = new File(getServletContext().getRealPath(uri)); - if (file.exists()) - return true; - } catch (Exception exception) {} - return false; - } - - private void writeFileResponse(ServletResponse resp, File file) { - try { - int length = 0; - ServletOutputStream outStream = resp.getOutputStream(); - String mimetype = getServletContext().getMimeType(file.getAbsolutePath()); - if (mimetype == null) - mimetype = "application/octet-stream"; - resp.setContentType(mimetype); - resp.setContentLength((int)file.length()); - byte[] byteBuffer = new byte[1024]; - FileInputStream in = new FileInputStream(file); - while (in != null && (length = in.read(byteBuffer)) != -1) - outStream.write(byteBuffer, 0, length); - in.close(); - outStream.close(); - } catch (FileNotFoundException e) { - LogMngr.getInstance().logError("[SERVICE]", "Request file not found. :: " + e.getMessage()); - } catch (IOException e) { - LogMngr.getInstance().logError("[SERVICE]", "Can't make response output stream. :: " + e.getMessage()); - } - } - - private void writeFailResponse(ServletResponse resp, String msg) { - try { - LogMngr.getInstance().logError("[SERVICE]", msg); - Document doc = getFailDocument(msg); - Transformer xformer = TransformerFactory.newInstance().newTransformer(); - if (ServerContext.getDocIndent().intValue() > 0) { - xformer.setOutputProperty("indent", "yes"); - xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", ServerContext.getDocIndent().toString()); - } - resp.setContentType("text/xml; charset=UTF-8"); - xformer.transform(new DOMSource(doc), new StreamResult((OutputStream)resp.getOutputStream())); - } catch (Exception e) { - LogMngr.getInstance().logError("[SERVICE]", "Do not create XML : " + Service.class + " / " + e.getMessage()); - } - } - - private static Document getFailDocument(String msg) throws ParserConfigurationException { - DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); - Document doc = docBuilder.newDocument(); - Element rootElement = doc.createElement("SERVER"); - doc.appendChild(rootElement); - Element result = doc.createElement("RESULT"); - result.appendChild(doc.createTextNode("Fail")); - rootElement.appendChild(result); - Element errorMessage = doc.createElement("INFO"); - errorMessage.appendChild(doc.createTextNode(msg)); - rootElement.appendChild(errorMessage); - return doc; - } - - public void destroy() { - super.destroy(); - ServerConfiguration.getInstance().stopServer(); - } -} diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/service/WMSService.java b/src/main/java/com/geotwo/webserver/plugin/ows/service/WMSService.java deleted file mode 100644 index bcea922..0000000 --- a/src/main/java/com/geotwo/webserver/plugin/ows/service/WMSService.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.geotwo.webserver.plugin.ows.service; - -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.service.AbstractService; -import com.geotwo.webserver.plugin.ows.exception.OWSServiceException; -import com.geotwo.webserver.plugin.ows.service.parser.WMSParser; -import com.geotwo.webserver.plugin.ows.util.XMLUtil; -import com.geotwo.webserver.plugin.ows.wms.request.Request; -import com.geotwo.webserver.plugin.ows.wms.wms130.WMSGetCapabilities; -import com.geotwo.webserver.plugin.ows.wms.wms130.WMSGetFeatureInfo; -import com.geotwo.webserver.plugin.ows.wms.wms130.WMSGetLegendGraphic; -import com.geotwo.webserver.plugin.ows.wms.wms130.WMSGetMap; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetCapabilitiesRequest; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetFeatureInfoRequest; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetLegendGraphicRequest; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; -import java.io.IOException; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.w3c.dom.Document; - -public class WMSService extends AbstractService { - private static final long serialVersionUID = 2014061021213030L; - - public Request parseQuery(HttpServletRequest req) throws OWSServiceException, Exception { - Request requestObj = (new WMSParser(req)).parseQuery(); - return requestObj; - } - - public String doProcess(String str) { - return null; - } - - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - doPost(req, resp); - } - - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - Request requestObj = null; - Document doc = null; - try { - requestObj = parseQuery(req); - } catch (OWSServiceException e) { - doc = e.getDocument(); - LogMngr.getInstance().logDebug("[SERVICE]", "WMS Request Prasing Exception : " + e.getMessage()); - } catch (Exception e) { - OWSServiceException ose = new OWSServiceException("[" + e.getClass().toString() + "] " + e.getMessage()); - doc = ose.getDocument(); - LogMngr.getInstance().logError("[SERVICE]", "WMS Request Prasing Exception : [" + e.getClass().toString() + "] " + e.getMessage()); - } - boolean isXMLWriteHere = true; - if (requestObj != null) { - if (requestObj.getVersion().equals("1.3.0")) { - if (requestObj instanceof GetCapabilitiesRequest) { - WMSGetCapabilities wmsGetCapabilities = new WMSGetCapabilities((GetCapabilitiesRequest)requestObj); - doc = wmsGetCapabilities.getCapabilities(); - } else if (requestObj instanceof GetMapRequest) { - WMSGetMap wmsGetMap = new WMSGetMap((GetMapRequest)requestObj); - doc = wmsGetMap.getMap(resp); - isXMLWriteHere = false; - } else if (requestObj instanceof GetFeatureInfoRequest) { - WMSGetFeatureInfo wmsGet = new WMSGetFeatureInfo((GetFeatureInfoRequest)requestObj); - doc = wmsGet.getFeatureInfo(resp); - isXMLWriteHere = false; - } else if (requestObj instanceof GetLegendGraphicRequest) { - WMSGetLegendGraphic wmsGetLegendGraphic = new WMSGetLegendGraphic((GetLegendGraphicRequest)requestObj); - doc = wmsGetLegendGraphic.getLegendGraphic(resp); - isXMLWriteHere = false; - } - } else { - LogMngr.getInstance().logDebug("[SERVICE]", "ver." + requestObj.getVersion() + " is not supported"); - } - } else { - LogMngr.getInstance().logDebug("[SERVICE]", "requestObj is not generated."); - } - if (doc != null) - try { - XMLUtil.writeToResponse(resp, doc); - } catch (Exception e) { - LogMngr.getInstance().logError("[SERVICE]", "Write XML Exception : " + e.getMessage()); - doc = null; - } - if (doc == null && isXMLWriteHere) { - resp.setContentType("text/xml; charset=UTF-8"); - RequestDispatcher dispatcher = req.getRequestDispatcher("/OWSServiceError.xml"); - dispatcher.forward((ServletRequest)req, (ServletResponse)resp); - } - } -} diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetMap.java b/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetMap.java deleted file mode 100644 index 632cf50..0000000 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetMap.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130; - -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.RenderMngr; -import com.geotwo.webserver.core.render.io.O2PngWriter; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.plugin.ows.exception.OWSServiceException; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; -import java.awt.image.BufferedImage; -import java.io.OutputStream; -import javax.imageio.ImageIO; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import org.w3c.dom.Document; - -public class WMSGetMap { - GetMapRequest requestObj = null; - - public WMSGetMap(GetMapRequest requestObj) { - this.requestObj = requestObj; - } - - public Document getMap(HttpServletResponse resp) { - AVList params = new AVList(); - params.setValue("request.wms.layers", this.requestObj.getLayers()); - params.setValue("request.wms.bbox", this.requestObj.getBbox()); - params.setValue("request.wms.width", Integer.valueOf(this.requestObj.getWidth())); - params.setValue("request.wms.height", Integer.valueOf(this.requestObj.getHeight())); - params.setValue("request.wms.format", this.requestObj.getFormat()); - params.setValue("request.wms.transparent", Boolean.valueOf(this.requestObj.isTransparent())); - params.setValue("request.wms.bgcolor", this.requestObj.getBgcolor()); - params.setValue("request.wms.styles", this.requestObj.getStyles()); - params.setValue("request.wms.filter", this.requestObj.getFilter()); - if (this.requestObj.getSld() != null) - params.setValue("request.wms.sld", this.requestObj.getSld()); - BufferedImage image = null; - Document doc = null; - try { - image = RenderMngr.productMap(params); - } catch (Exception e) { - OWSServiceException ose = new OWSServiceException("WMS GetMap Exception : Image process fails : " + e.getMessage()); - doc = ose.getDocument(); - LogMngr.getInstance().logError("[SERVICE]", "WMS GetMap Exception : Image process fails : " + e.getMessage()); - } - if (image != null) - try { - writeImage(image, resp); - } catch (Exception e) { - OWSServiceException ose = new OWSServiceException("WMS GetMap Exception : Write IMAGE fails : " + e.getMessage()); - doc = ose.getDocument(); - LogMngr.getInstance().logError("[SERVICE]", "WMS GetMap Exception : Write IMAGE fails : " + e.getMessage()); - } - return doc; - } - - private void writeImage(BufferedImage image, HttpServletResponse resp) throws Exception { - ServletOutputStream servletOutputStream = null; - OutputStream out = null; - try { - String format = this.requestObj.getFormat(); - String[] formatElement = format.split("/"); - resp.setContentType(format); - servletOutputStream = resp.getOutputStream(); - if (format.toUpperCase().contains("PNG")) { - O2PngWriter.writePNG(image, (OutputStream)servletOutputStream); - } else { - ImageIO.write(image, formatElement[1], (OutputStream)servletOutputStream); - } - } catch (Exception e) { - throw e; - } finally { - if (servletOutputStream != null) { - servletOutputStream.flush(); - servletOutputStream.close(); - } - } - } -} diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java b/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java deleted file mode 100644 index fb04c0c..0000000 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130.request; - -import com.geotwo.webserver.plugin.ows.wms.request.Request; - -public class GetCapabilitiesRequest extends Request {} diff --git a/src/main/java/com/MyStartServer.java b/src/main/java/kr/or/geoinfo/MyStartServer.java similarity index 66% rename from src/main/java/com/MyStartServer.java rename to src/main/java/kr/or/geoinfo/MyStartServer.java index 127292c..9ba9300 100644 --- a/src/main/java/com/MyStartServer.java +++ b/src/main/java/kr/or/geoinfo/MyStartServer.java @@ -1,12 +1,12 @@ -package com; +package kr.or.geoinfo; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; -import com.geotwo.webserver.core.ServerInfo; -import com.geotwo.webserver.core.init.ServerConfiguration; -import com.geotwo.webserver.core.service.ServiceMngr; +import kr.or.geoinfo.webserver.core.ServerInfo; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.service.ServiceMngr; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,17 +25,11 @@ public class MyStartServer implements ApplicationListener */ @Override public void onApplicationEvent(ContextRefreshedEvent event) { - // 부모 컨텍스트에도 이벤트가 발생할 수 있으므로, 최상위(루트) 컨텍스트에서만 실행되도록 확인합니다. - // 이는 중복 실행을 방지합니다. if (event.getApplicationContext().getParent() == null) { LOGGER.info("**************************************"); - LOGGER.info("* *"); - LOGGER.info("* WMS 서버 시작 *"); - LOGGER.info("* *"); + LOGGER.info("**************WMS 서버 시작 *************"); LOGGER.info("**************************************"); - // 여기에 서버 시작 시 실행하고 싶은 다른 로직을 추가할 수 있습니다. - // 예: 초기 데이터 로드, 스케줄러 시작 등 if (ServerConfiguration.getInstance().startServer()) ServerInfo.getInstance().setStarted(true); diff --git a/src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryMapper.java b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryMapper.java new file mode 100644 index 0000000..fae56b0 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryMapper.java @@ -0,0 +1,21 @@ +package kr.or.geoinfo.drilling.inquiry.service; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import egovframework.rte.psl.dataaccess.util.EgovMap; + +@Mapper("drillingInquiryMapper") +public interface DrillingInquiryMapper { + public String getComCodes(HashMap params) throws SQLException; + public List drillingInquiryProjectCodes(HashMap params) throws SQLException; + + public List getComNameByComCode(HashMap params) throws SQLException; + public void spGetMasterCompanyDistrict(HashMap spGetMasterCompanyDistrictParams) throws SQLException; + +} + + + diff --git a/src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryService.java b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryService.java new file mode 100644 index 0000000..56dbc85 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/DrillingInquiryService.java @@ -0,0 +1,16 @@ +package kr.or.geoinfo.drilling.inquiry.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.json.simple.JSONObject; + +import egovframework.rte.psl.dataaccess.util.EgovMap; + + +public interface DrillingInquiryService { + JSONObject drillingInquiryProjectCodes(HttpServletRequest request, HashMap params) throws Exception; +} diff --git a/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java new file mode 100644 index 0000000..f6b57e0 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/drilling/inquiry/service/impl/DrillingInquiryServiceImpl.java @@ -0,0 +1,149 @@ +package kr.or.geoinfo.drilling.inquiry.service.impl; + +import java.sql.SQLException; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import oracle.sql.TIMESTAMP; + +import org.json.simple.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import egovframework.rte.psl.dataaccess.util.EgovMap; +import kr.or.geoinfo.drilling.inquiry.service.DrillingInquiryMapper; +import kr.or.geoinfo.drilling.inquiry.service.DrillingInquiryService; +import kr.or.geoinfo.utils.MyUtil; + +@Service("drillingInquiryService") +public class DrillingInquiryServiceImpl implements DrillingInquiryService { + + + @Resource(name="drillingInquiryMapper") + private DrillingInquiryMapper drillingInquiryMapper; + + + + + + /** + * 발주기관 사용자의 Gl Gm Gs Gf Codes 구한다 + */ + private HashMap getOrganizationUserGlGmGsGfCodesByProjectMasterCompanyCode(String projectMasterCompanyCode) throws Exception { + + HashMap params = new HashMap(); + + params.put("comCode", projectMasterCompanyCode); + + List datas = drillingInquiryMapper.getComNameByComCode(params); + + + if( datas.size() < 1 ) { + throw new Exception( "발주기관의 gl gm gs gf codes를 구할 수 없습니다." ); + } + + + EgovMap data = datas.get(0); + + String projectMasterCompanyName = MyUtil.getStringFromObject(data.get("comName")); + HashMap spGetMasterCompanyDistrictParams = new HashMap(); + + spGetMasterCompanyDistrictParams.put("projectMasterCompanyName", projectMasterCompanyName); + + + drillingInquiryMapper.spGetMasterCompanyDistrict(spGetMasterCompanyDistrictParams); + + return spGetMasterCompanyDistrictParams; + + } + + + + @Override + public JSONObject drillingInquiryProjectCodes(HttpServletRequest request, HashMap params) throws Exception { + + JSONObject jsonResponse = new JSONObject(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String projectMasterCompanyCode = request.getParameter("projectMasterCompanyCode"); + + if( projectMasterCompanyCode == null){ + throw new Exception( "projectMasterCompanyCode 값이 존재하지 않습니다." ); + } + + + + HashMap spGetMasterCompanyDistrictParams = getOrganizationUserGlGmGsGfCodesByProjectMasterCompanyCode(projectMasterCompanyCode); + + String masterCompanyOCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gl") ); + String masterCompanyTwCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gm") ); + String masterCompanyThCode = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") ); + String masterCompanyName = MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") ); + String sortfield = "C".equals(MyUtil.getStringFromObject(params.get("constTag"))) ? "0" : "2"; + String sorttype = "2"; + params.put("masterCompanyOCode", masterCompanyOCode); + params.put("masterCompanyTwCode", masterCompanyTwCode); + params.put("masterCompanyThCode", masterCompanyThCode); + params.put("masterCompanyName", masterCompanyName); + params.put("sortfield", sortfield); + params.put("sorttype", sorttype); + + + try { + + try { + + String keyName = "constComCodes"; + + if( params.get("constCompanyName") != null && !MyUtil.getStringFromObject(params.get("constCompanyName")).trim().isEmpty() ) { + params.put(keyName, drillingInquiryMapper.getComCodes(params)); + } else { + params.put(keyName, null); + } + + List dataList = drillingInquiryMapper.drillingInquiryProjectCodes(params); + + + + String lpszProjectCodesWithComma = ""; + for( EgovMap data : dataList ) { + + String projectCode = MyUtil.getStringFromObject(data.get("projectCode")); + if( projectCode != null ) { + if( !lpszProjectCodesWithComma.equals("") ) { + lpszProjectCodesWithComma += " OR "; + } + lpszProjectCodesWithComma += "PROJECT_CODE='" + projectCode + "'"; + } + } + + jsonResponse.put("data", lpszProjectCodesWithComma); + return jsonResponse; + } catch (SQLException e) { + String strTxt = + "---------- BUG REPORTING START ----------" + "\n" + + "에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" + + "params:[\n" + params.toString() + "\n]\n" + + "e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" + + "new Date().toString():[" + new Date().toString() + "]\n" + "\n" + + "---------- BUG REPORTING END ----------" + "\n" + + ""; + System.out.println(strTxt); + throw new Exception( "오류가 발생하였습니다." + "\n" + "SQLException" ); + } + + + } catch (org.json.simple.parser.ParseException e) { + // TODO Auto-generated catch block + throw new Exception( e.getMessage() ); + } + } + + +} diff --git a/src/main/java/kr/or/geoinfo/mybatis/HotDeployableMybatisSessionFactoryBean.java b/src/main/java/kr/or/geoinfo/mybatis/HotDeployableMybatisSessionFactoryBean.java new file mode 100644 index 0000000..9adffe6 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/mybatis/HotDeployableMybatisSessionFactoryBean.java @@ -0,0 +1,214 @@ +package kr.or.geoinfo.mybatis; + +import java.io.IOException; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.core.io.Resource; + + +public class HotDeployableMybatisSessionFactoryBean extends SqlSessionFactoryBean implements DisposableBean { + + private static final Logger LOGGER = LoggerFactory.getLogger(HotDeployableMybatisSessionFactoryBean.class); + + private SqlSessionFactory proxy; + private int interval = 500; + private boolean running = false; + + private Timer timer; + private TimerTask task; + + private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); + private final Lock r = rwl.readLock(); + private final Lock w = rwl.writeLock(); + + public Resource[] mapperLocations; + + @Override + public void setMapperLocations(Resource[] mapperLocations) { + super.setMapperLocations(mapperLocations); + this.mapperLocations = mapperLocations; + } + + public void setInterval(int interval) { + this.interval = interval; + } + + public void refresh() throws Exception { + w.lock(); + + try { + super.afterPropertiesSet(); + + } finally { + w.unlock(); + } + + LOGGER.debug("Mybatis Mapper File Reloaded!"); + } + + @Override + public void afterPropertiesSet() throws Exception { + super.afterPropertiesSet(); + + setRefreshable(); + } + + private void setRefreshable() { + proxy = (SqlSessionFactory) Proxy.newProxyInstance( + SqlSessionFactory.class.getClassLoader(), + new Class[]{SqlSessionFactory.class}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, + Object[] args) throws Throwable { + // log.debug("method.getName() : " + method.getName()); + return method.invoke(getParentObject(), args); + } + }); + + task = new TimerTask() { + private final Map map = new HashMap(); + + @Override + public void run() { + if (isModified()) { + try { + refresh(); + } catch (NumberFormatException e) { + if (LOGGER.isDebugEnabled()) { + LOGGER.error("Refresh Error Exception", e); + } else { + LOGGER.error("Refresh Error Exception"); + } + } catch (SQLException e) { + if (LOGGER.isDebugEnabled()) { + LOGGER.error("Refresh Error Exception", e); + } else { + LOGGER.error("Refresh Error Exception"); + } + } catch (Exception e) { + if (LOGGER.isDebugEnabled()) { + LOGGER.error("Refresh Error Exception", e); + } else { + LOGGER.error("Refresh Error Exception"); + } + } + } + } + + private boolean isModified() { + boolean retVal = false; + + if (mapperLocations != null) { + for (int i = 0; i < mapperLocations.length; i++) { + Resource mappingLocation = mapperLocations[i]; + retVal |= findModifiedResource(mappingLocation); + } + } + + return retVal; + } + + private boolean findModifiedResource(Resource resource) { + boolean retVal = false; + List modifiedResources = new ArrayList(); + + try { + long modified = resource.lastModified(); + + if (map.containsKey(resource)) { + long lastModified = map.get(resource).longValue(); + + if (lastModified != modified) { + map.put(resource, new Long(modified)); + modifiedResources.add(resource.getDescription()); + retVal = true; + } + } else { + map.put(resource, new Long(modified)); + } + } catch (NumberFormatException e) { + LOGGER.debug("Exception: " + e); + } catch (IOException e) { + LOGGER.debug("Exception: " + e.toString()); + } catch (Exception e) { + LOGGER.debug("Exception: " + e); + } + + if (retVal) { + LOGGER.debug("Mybatis Mapper File Changed: " + modifiedResources); + } + return retVal; + } + }; + + timer = new Timer(true); + resetInterval(); + + } + + private Object getParentObject() throws Exception { + r.lock(); + try { + return super.getObject(); + } finally { + r.unlock(); + } + } + + @Override + public SqlSessionFactory getObject() { + return this.proxy; + } + + @Override + public Class getObjectType() { + return (this.proxy != null ? this.proxy.getClass() : SqlSessionFactory.class); + } + + @Override + public boolean isSingleton() { + return true; + } + + public void setCheckInterval(int ms) { + interval = ms; + + if (timer != null) { + resetInterval(); + } + } + + private void resetInterval() { + if (running) { + timer.cancel(); + running = false; + } + if (interval > 0) { + timer.schedule(task, 0, interval); + running = true; + } + } + + @Override + public void destroy() { + timer.cancel(); + } + +} diff --git a/src/main/java/kr/or/geoinfo/utils/ApplicationContextUtils.java b/src/main/java/kr/or/geoinfo/utils/ApplicationContextUtils.java new file mode 100644 index 0000000..21a266c --- /dev/null +++ b/src/main/java/kr/or/geoinfo/utils/ApplicationContextUtils.java @@ -0,0 +1,51 @@ +package kr.or.geoinfo.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * Spring이 관리하지 않는 클래스(static 클래스 등)에서 + * Spring ApplicationContext에 접근하여 Bean을 가져올 수 있게 해주는 유틸리티 클래스. + * * @Component 어노테이션을 통해 Spring이 이 클래스를 Bean으로 등록하고 + * ApplicationContextAware 인터페이스를 통해 ApplicationContext를 주입받습니다. + */ +@Component +public class ApplicationContextUtils implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException { + // Spring이 초기화될 때 이 메서드를 호출하여 ApplicationContext를 저장합니다. + applicationContext = context; + } + + /** + * 저장된 ApplicationContext를 반환합니다. + * @return ApplicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * Bean 이름으로 Spring Bean을 조회합니다. + * @param beanName Spring Bean의 이름 + * @return Object 타입의 Bean (형변환 필요) + */ + public static Object getBean(String beanName) { + return applicationContext.getBean(beanName); + } + + /** + * Bean 타입(Class)으로 Spring Bean을 조회합니다. + * @param Bean의 타입 + * @param requiredType Bean의 클래스 + * @return 제네릭으로 지정된 타입의 Bean + */ + public static T getBean(Class requiredType) { + return applicationContext.getBean(requiredType); + } +} \ No newline at end of file diff --git a/src/main/java/kr/or/geoinfo/utils/MyUtil.java b/src/main/java/kr/or/geoinfo/utils/MyUtil.java new file mode 100644 index 0000000..efcb2c4 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/utils/MyUtil.java @@ -0,0 +1,908 @@ +package kr.or.geoinfo.utils; + +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.net.URLDecoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.httpclient.NameValuePair; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + + +public final class MyUtil { + + private static final Logger logger = LoggerFactory.getLogger(MyUtil.class); + + public static final String VERSION = "20240816_1430"; + + private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); + + // 주석 다는 기준: https://www.oracle.com/technetwork/java/javase/tech/index-137868.html + + /** + * 특정 자리수의 랜덤 숫자를 생성한다. + * @param nLength 랜덤문자의 길이 + * @return 생성된 랜덤 문자 + */ + public static String getRandomNumber(int nLength) { + Random generator = new Random(); + String strRandValue = ""; + + for (int i = 0; i < nLength; i++) { + strRandValue += Integer.toString( generator.nextInt(10) ); + } + + return strRandValue; + } + + /** + * 현재 Timestamp를 반환한다 + * @return 현재 Timestamp yyyy-MM-dd hh:mm:ss + */ + public static String getCurrentDateTime() { + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + System.out.println(timestamp); + + return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(timestamp); + } + + + /** + * 현재 date를 반환한다 + * @return 현재 Timestamp yyyy-MM-dd + */ + public static String getCurrentDate() { + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + System.out.println(timestamp); + + return new SimpleDateFormat("yyyy-MM-dd").format(timestamp); + } + + + /** + * 현재 시각 구하기 + * @return 현재 Timestamp hh:mm:ss + */ + public static String getCurrentTime() { + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + System.out.println(timestamp); + + return new SimpleDateFormat("hh:mm:ss").format(timestamp); + } + + /** + * 년 월 일 날짜 더하기 + * + * @param dt(날짜) , y(년) , m(월), d(일) + * @Exam addDate("2018-09-10",1,12,1) -->20200911 addDate("2018-09-10",1,-2,1) -->20200711 + * @return String + */ + public static String addDate(String dt, int y, int m, int d) throws Exception { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + + Calendar cal = Calendar.getInstance(); + Date date = format.parse(dt); + cal.setTime(date); + cal.add(Calendar.YEAR, y); //년 더하기 + cal.add(Calendar.MONTH, m); //월 더하기 + cal.add(Calendar.DATE, d); //일 더하기 + + return format.format(cal.getTime()); + } + + /** + * 일 구하기 + * + * @param dt(날짜) + * @Exam addDate("2018-09-10",1,12,1) -->20200911 addDate("2018-09-10",1,-2,1) -->20200711 + * @return int + */ + public static int getDate(String dt) throws Exception { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + + Calendar cal = Calendar.getInstance(); + Date date = format.parse(dt); + cal.setTime(date); + logger.info("getDate:" + cal.get(cal.DATE)); + return cal.get(cal.DATE); + } + + + + /** + * UPDATE 문에서 문자열 타입의 필드를 추가한다. + * + * @param strQuery 쿼리, strColumnName 컬럼명, strTarget + * @Exam addUpdateString("UPDATE SET ", "name", "홍길동") --> UPDATE SET name='홍길동', + * @return String + */ + public static String addUpdateString(String strQuery, String strColumnName, String strValue ) { + + if( strValue != null && strValue.isEmpty() == false && strValue.equals("undefined") == false && strValue.equals("null") == false ) { + strQuery += strColumnName + "='" + strValue + "',"; + } + return strQuery; + } + + /** + * UPDATE 문에서 Long 타입의 필드를 추가한다. + * + * @param strQuery 쿼리, strColumnName 컬럼명, longTarget + * @Exam addUpdateString("UPDATE SET ", "age", 2l) --> UPDATE SET age=2, + * @return String + */ + public static String addUpdateLong(String strQuery, String strColumnName, Long longTarget ) { + + if( longTarget != null ) { + strQuery += strColumnName + "=" + longTarget + ","; + } + return strQuery; + } + + /* + public static boolean isJSONValid(String test) { + try { + new JSONObject(test); + } catch (JSONException ex) { + // edited, to include @Arthur's comment + // e.g. in case JSONArray is valid as well... + try { + new JSONArray(test); + } catch (JSONException ex1) { + return false; + } + } + return true; + } + */ + + public static String getQuery(List params) throws UnsupportedEncodingException + { + StringBuilder result = new StringBuilder(); + boolean first = true; + + for (NameValuePair pair : params) + { + if (first) + first = false; + else + result.append("&"); + + //result.append(URLEncoder.encode(pair.getName(), "UTF-8")); + result.append(pair.getName()); + result.append("="); + result.append(pair.getValue()); + //result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); + } + + return result.toString(); + } + + /** + * SHA-256으로 해싱하는 메소드 + * @param msg + * @return + * @throws NoSuchAlgorithmException + */ + public static String sha256(String msg) throws NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + md.update(msg.getBytes()); + + return bytesToHex(md.digest()); + } + + + /** + * 바이트를 헥스값으로 변환한다 + * + * @param bytes + * @return + */ + public static String bytesToHex(byte[] bytes) { + StringBuilder builder = new StringBuilder(); + for (byte b: bytes) { + builder.append(String.format("%02x", b)); + } + return builder.toString(); + } + + /** + * 세틀뱅크 수취인 조회 서비스 HTML문서에서 특정 값 추출하기 + * @param html_line + * @param inputName + * @return + */ + public static String parseInpuValueForSettleBankResponse(String html_line, String inputName) { + + String[] strArrValue = html_line.split("name=\"" + inputName + "\" value="); + String strValue = ""; + + if( strArrValue.length == 2 ) { + strValue = strArrValue[1].replaceAll("[\"|>|\\r\\n|\\n\\r|\\r|\\n|\\s|\\+)]",""); + try { + //logger.info("Encoding EUC-KR:" + URLDecoder.decode(strValue, "EUC-KR")); + //logger.info("Encoding UTF-8:" + URLDecoder.decode(strValue, "UTF-8")); + strValue = URLDecoder.decode(strValue, "UTF-8"); + } catch (UnsupportedEncodingException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + } + return strValue; + } + + /** + * 숫자 외 소수점을 포함한 모든 특수문자를 제거해준다. + * + */ + public static String removeSpecialChractersNumber( String decimalNumber ) { + decimalNumber = decimalNumber.replaceAll("[^0-9]", ""); //숫자 외 모두 제거한다. + return decimalNumber; + } + + /** + * 수수점을 제외한 나머지 특수문자를 제거해준다. 그리고 소수점은 1개만 들어가도록 해준다. + * + */ + public static String removeSpecialChractersDecimalNumber( String decimalNumber ) { + decimalNumber = decimalNumber.replaceAll("[^0-9.\\-]", ""); //숫자와 쩜.-말고는 제거한다. + // 소수점 1개만 넣도록 하기 + int nDotIdx = decimalNumber.indexOf("."); + if( nDotIdx > -1 ) { + String[] arrSplit = decimalNumber.split("\\."); + if( arrSplit.length != 0) { + decimalNumber = ""; + } + for( int i = 0; i < arrSplit.length ; i++ ) { + decimalNumber += arrSplit[i]; + if( i == 0 ) { + decimalNumber += "."; + } + } + } + logger.info("removeSpecialChractersDecimalNumber() decimalNumber:" + decimalNumber); + return decimalNumber; + } + + + /** + * 소수점자리수가 3자리 이상이면 2자리까지만 남기고 나머지는 지운다. + * @param decimalNumber 소수점 자리 n개 이상 인 경우, 지울 숫자가 들어있는 문자열 + * @param nLimitDecimalNumber 허용할 소수점 자 + * @return + */ + public static String removeOverDecimalNumber( String decimalNumber, int nLimitDecimalNumber ) { + logger.error("decimalNumber:" + decimalNumber); + int nDotIdx = decimalNumber.indexOf("."); + if( nDotIdx > -1 ) { + String[] arrSplit = decimalNumber.split("\\."); + if( arrSplit[1].length() > nLimitDecimalNumber ) { + return arrSplit[0] + "." + arrSplit[1].substring(0,2); + } + } + logger.error("decimalNumber:" + decimalNumber); + return decimalNumber; + } + + /** + * 1,000 단위마다 콤마를 찍는다. + * @param bdAmount + * @return + */ + public static String addComma(BigDecimal bdAmount) { + return addComma(bdAmount.toPlainString()); + } + + /** + * 1,000 단위마다 콤마를 찍는다. + * @param doubleAmount + * @return + */ + public static String addComma(Double doubleAmount) { + return addComma(BigDecimal.valueOf(doubleAmount)); + } + + /** + * 1,000 단위마다 콤마를 찍는다. + * @param longAmount + * @return + */ + public static String addComma(Long longAmount) { + return addComma(BigDecimal.valueOf(longAmount)); + } + + /** + * 1,000 단위마다 콤마를 찍는다. + * @param strAmount + * @return + */ + public static String addComma(String strAmount) { + DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US); + DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); + + if( isNumeric(strAmount) == false ) { + return strAmount; + } + + int nDotIndex = strAmount.indexOf("."); + + + symbols.setGroupingSeparator(','); + formatter.setDecimalFormatSymbols(symbols); + if( nDotIndex > -1 ) { + return formatter.format(Double.parseDouble( strAmount )); + } else { + return formatter.format(Long.parseLong( strAmount )); + } + + } + + /** + * 숫자에서 끝에 0000을 제거한다. + * + */ + public static String trimTrailingZero( String decimalNumber ) { + decimalNumber = decimalNumber.replaceAll("[^0-9.\\-]", ""); //숫자와 쩜.-말고는 제거한다. + decimalNumber = decimalNumber.indexOf(".") < 0 ? decimalNumber : decimalNumber.replaceAll("0*$", "").replaceAll("\\.$", ""); + logger.info("trimTrailingZero() decimalNumber:" + decimalNumber); + return decimalNumber; + } + + /** + * SQL 인젝션 방어를 위해 특수문자를 제거한다. + * @param myString + * @return + */ + public static String removeSQLInjectionSpecialCharacter(String myString) { + if( myString == null ) { + return myString; + } + myString = myString.replaceAll( "<|>|\\(|\\)|'|\"|\\|;|=|\\+|\\||&|#|\\.\\.", " "); + + return myString; + } + + + /** + * UUID(GUID)를 얻는다. + * @return 구한 UUID(GUID) 값. + */ + public static String getUuid() { + String uuid = UUID.randomUUID().toString(); + return uuid; + } + + /** 숫자인지 아닌지 확인한다. */ + public static boolean isNumeric(String strNum) { + if (strNum == null) { + return false; + } + try { + double d = Double.parseDouble(strNum); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } + + public static boolean isNumeric(Double num) { + if (num == null) { + return false; + } + return isNumeric(num.toString()); + } + + public static boolean isNumeric(Integer num) { + if (num == null) { + return false; + } + return isNumeric(num.toString()); + } + + public static boolean isNumeric(Long num) { + if (num == null) { + return false; + } + return isNumeric(num.toString()); + } + + /** Long형태의 숫자인지 아닌지 확인한다. */ + public static boolean isNumericForLong(String strNum) { + if (strNum == null) { + return false; + } + try { + Long lValue = Long.parseLong(strNum); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } + + + public static Integer getIntegerFromObject(Object obj) { + if (obj instanceof Integer ) { + return (Integer) obj; + } else if (obj instanceof String ) { + return Integer.parseInt((String) obj); + } else if (obj instanceof Long) { + return ((Long) obj).intValue(); + } else if (obj instanceof Double) { + return ((Long)Math.round((Double)obj)).intValue(); + } else if (obj instanceof BigDecimal) { + return ((BigDecimal)obj).intValue(); + } + + return null; + } + + public static Long getLongFromObject(Object obj) { + if (obj instanceof String ) { + String strObj = (String) obj; + if( isNumeric(strObj) ) { + return Long.parseLong((String) obj); + } + } else if (obj instanceof Integer) { + return ((Integer) obj).longValue(); + } else if (obj instanceof Long) { + return (Long) obj; + } else if (obj instanceof Double) { + return ((Long)Math.round((Double)obj)); + } + + return null; + } + + public static Double getDoubleFromObject(Object obj) throws Exception { + String str = getStringFromObject(obj); + str = removeSpecialChractersDecimalNumber(str); + return Double.parseDouble((String) str); + } + + public static BigDecimal getBigDecimalFromObject(Object obj) throws Exception { + return BigDecimal.valueOf(getDoubleFromObject(obj)); + } + + + + public static String getStringFromObject(Object obj) throws Exception { + if (obj == null) { + return null; + } else if (obj instanceof String ) { + return (String) obj; + } else if (obj instanceof Integer) { + return ((Integer)obj).toString(); + } else if (obj instanceof Long) { + return ((Long) obj).toString(); + } else if (obj instanceof Float) { + return ((Float)obj).toString(); + } else if (obj instanceof Double) { + return ((Double)obj).toString(); + } else if (obj instanceof BigDecimal) { + return ((BigDecimal)obj).toPlainString(); + } else if (obj instanceof Date) { + return ((Date)obj).toString(); + } + + return null; + } + + public static org.json.simple.JSONObject getJSONObjectFromObject(Object obj) { + if (obj instanceof org.json.simple.JSONObject ) { + return (org.json.simple.JSONObject) obj; + } else if (obj instanceof String ) { + JSONParser parser = new JSONParser(); + try { + obj = parser.parse( (String) obj ); + } catch (ParseException e) { + e.printStackTrace(); + } + return (org.json.simple.JSONObject) obj; + } + return null; + } + + public static org.json.simple.JSONArray getJSONArrayFromObject(Object obj) { + if (obj instanceof org.json.simple.JSONArray ) { + return (org.json.simple.JSONArray) obj; + } else if (obj instanceof String ) { + JSONParser parser = new JSONParser(); + try { + obj = parser.parse( (String) obj ); + } catch (ParseException e) { + e.printStackTrace(); + } + return (org.json.simple.JSONArray) obj; + } + return null; + } + + public static Boolean getBooleanFromObject(Object obj) { + + if (obj instanceof String ) { + return Boolean.parseBoolean( ((String)obj).trim() ); + } else if (obj instanceof Boolean) { + return (Boolean)obj; + } + + return null; + } + + /** + * Parse a URI String into Name-Value Collection + * 쿼리스트링을 분석해서 Map형태로 return해준다. + * @param query + * @return query string name-value Map. + * @throws UnsupportedEncodingException + */ + public static Map splitQuery(String query, String token) throws UnsupportedEncodingException { + Map query_pairs = new LinkedHashMap(); + String[] pairs = query.split(token); + for (String pair : pairs) { + int idx = pair.indexOf("="); + query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); + } + return query_pairs; + } + + + + public static SortedMap getParameterMap(HttpServletRequest request) { + + SortedMap sMap = Collections.synchronizedSortedMap + ( new TreeMap(request.getParameterMap())); + + String params = "\n--------------------------------------------------------------\n" + + MyUtil.getBASEURL(request) + request.getRequestURI() + " IN:" + + "\n--------------------------------------------------------------\n"; + synchronized(sMap) { + for(String key : sMap.keySet()) { + String[] value = sMap.get(key); + for(int i=0; i sMap = Collections.synchronizedSortedMap + ( new TreeMap(request.getParameterMap())); + + String params = "\n--------------------------------------------------------------\n" + + MyUtil.getBASEURL(request) + request.getRequestURI() + " IN:" + + "\n--------------------------------------------------------------\n"; + synchronized(sMap) { + for(String key : sMap.keySet()) { + String[] value = sMap.get(key); + for(int i=0; i 1.23 + * @return + * @throws Exception + */ + public static Double floor(String strAmount, int decimalPlace) throws Exception { + + Double dPoint = Double.parseDouble(strAmount); + + String[] arrSplitedDot = strAmount.split("\\."); + int nLength = arrSplitedDot.length; + if (arrSplitedDot.length == 2) { + if (MyUtil.isNumeric(arrSplitedDot[1])) { + + //소수부 끝에 0을 제거해준다. + arrSplitedDot[1] = arrSplitedDot[1].replaceAll("0+$", ""); + + int nDecimalLength = arrSplitedDot[1].length(); + if( nDecimalLength >= decimalPlace ) { + String strDecimal = "1"; + for (int i = 0; i < decimalPlace; i++) { + strDecimal += "0"; + } + dPoint = Math.floor(dPoint*Long.valueOf(strDecimal)) / Long.valueOf(strDecimal); + } + } + } + + return dPoint; + } + + + /** + * days안에는 "월" 또는 "월,수,금" 이런 요일에 대한 한글문자가 들어가고 오늘이 주어진 요일 안에 포함되는지 여부를 알아낸다. + * + * @param days "월" 또는 "월,수,금'과 같이 요일이 한글로 들어있다. + * @return 만약 days에 "월"이 들어가 있고 오늘이 월요일이라면 true를 return한다. + */ + public static Boolean isContainDayOfWeekToday( String days ) { + + // 1. Date 생성 / 현재 날짜 + Date currentDate = new Date(); + System.out.println(currentDate); + + // 2. Calendar 생성 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(currentDate); + + // 3. 텍스트 요일 구하기 (숫자) + int dayOfWeekNumber = calendar.get(Calendar.DAY_OF_WEEK); + + if( dayOfWeekNumber == 1 ) { + if( days.indexOf("일") > -1 ) { + return true; + } + } else if( dayOfWeekNumber == 2 ) { + if( days.indexOf("월") > -1 ) { + return true; + } + } else if( dayOfWeekNumber == 3 ) { + if( days.indexOf("화") > -1 ) { + return true; + } + } else if( dayOfWeekNumber == 4 ) { + if( days.indexOf("수") > -1 ) { + return true; + } + } else if( dayOfWeekNumber == 5 ) { + if( days.indexOf("목") > -1 ) { + return true; + } + } else if( dayOfWeekNumber == 6 ) { + if( days.indexOf("금") > -1 ) { + return true; + } + } else if( dayOfWeekNumber == 7 ) { + if( days.indexOf("토") > -1 ) { + return true; + } + } + + return false; + } + + /** + * 현재 시각이 timeRange에 명시한 시간대 안에 포함되는지 여부를 return 한다. + * @param timeRange 01~14 -> 오전 1시부터 오후 2시를 의미하며 ~ 구분자를 사용한다. + * @return 현재 시각이 해당 시간대 내에 포함되면 true를 return 한다. + * @throws Exception timeRange이 형식에 맞지 않으면 Exception이 발생한다. + */ + public static Boolean isInTimeRange( String timeRange ) throws Exception { + + String[] arrTimeRange = timeRange.split("~"); + if( arrTimeRange.length != 2 ) { + throw new Exception("timeRange이 형식에 맞지 않습니다."); + } + + if( MyUtil.isNumeric(arrTimeRange[0]) == false ) { + throw new Exception("timeRange이 형식에 맞지 않습니다 - 1"); + } + + if( MyUtil.isNumeric(arrTimeRange[1]) == false ) { + throw new Exception("timeRange이 형식에 맞지 않습니다 - 1"); + } + + + Date currentDate = new Date(); + // 포맷팅 정의 + SimpleDateFormat formatter = new SimpleDateFormat("HH"); + // 포맷팅 적용 + String formatedNow = formatter.format(currentDate); + + Integer currentHour = MyUtil.getIntegerFromObject( formatedNow ); + Integer rangeStart = MyUtil.getIntegerFromObject( arrTimeRange[0] ); + Integer rangeEnd = MyUtil.getIntegerFromObject( arrTimeRange[0] ); + + if( rangeStart <= rangeEnd && rangeEnd <= rangeEnd ) { + return true; + } + + return false; + } + + /** + * Oracle 11g의 CLOB값을 String 값으로 변환한다. + * @param clob + * @return + * @throws SQLException + */ + public static String ClobToString(java.sql.Clob clob) throws SQLException { + String clobData = ""; + if (clob != null) { + java.io.Reader reader = clob.getCharacterStream(); + java.io.BufferedReader br = new java.io.BufferedReader(reader); + StringBuilder sb = new StringBuilder(); + String line; + try { + while ((line = br.readLine()) != null) { + sb.append(line); + sb.append("\n"); // 필요에 따라 줄바꿈 추가 + } + clobData = sb.toString(); + } catch (java.io.IOException e) { + e.printStackTrace(); + // 오류 처리 + } finally { + try { + br.close(); + reader.close(); + } catch (java.io.IOException e) { + e.printStackTrace(); + } + } + } + return clobData; + } + + // JSONObject를 HashMap으로 변환 + public static HashMap JSONObjectToHashMap( JSONObject jsonObject ) { + + HashMap params = new HashMap<>(); + for (Object key : jsonObject.keySet()) { + String keyStr = (String) key; + Object value = jsonObject.get(keyStr); + params.put(keyStr, value); + } + + return params; + } + + /** + * 문자열의 공백을 제거 후 return한다 + * @param target 공백을 제거할 대상 + * @return + * @throws Exception + */ + public static String removeBlank( Object target ) throws Exception { + + String str = getStringFromObject( target ); + + if( str != null ) { + str = str.replaceAll("\\s", ""); + } + + return str; + } + + public static String removeBlank( String target ) throws Exception { + return removeBlank( (Object) target ); + } + + + + public static String getIpAddress( HttpServletRequest request ) throws Exception { + String clientIp = ""; + clientIp = request.getHeader("X-Forwarded-For"); + + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("Proxy-Client-IP"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("WL-Proxy-Client-IP"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("HTTP_CLIENT_IP"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("X-Real-IP"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("X-RealIP"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getHeader("REMOTE_ADDR"); + } + if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) { + clientIp = request.getRemoteAddr(); + } + + return clientIp; + } + + +} diff --git a/src/main/java/com/geotwo/webserver/core/ServerContext.java b/src/main/java/kr/or/geoinfo/webserver/core/ServerContext.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/ServerContext.java rename to src/main/java/kr/or/geoinfo/webserver/core/ServerContext.java index 144186d..8809aa6 100644 --- a/src/main/java/com/geotwo/webserver/core/ServerContext.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/ServerContext.java @@ -1,22 +1,22 @@ -package com.geotwo.webserver.core; +package kr.or.geoinfo.webserver.core; -import com.geotwo.webserver.core.cache.ImgCacheMngr; -import com.geotwo.webserver.core.coverage.O2DemLayerMngr; -import com.geotwo.webserver.core.coverage.O2ImgLayerMngr; -import com.geotwo.webserver.core.coverage.WpsCovStoreMngr; -import com.geotwo.webserver.core.init.ServerConfiguration; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.Map; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.map.layer.O2DemLayer; -import com.geotwo.webserver.core.tile.tms.TMSMngr; -import com.geotwo.webserver.core.tile.wmts.WMTSMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.GWaveStoreMngr; -import com.geotwo.webserver.core.vector.JdbcStoreMngr; -import com.geotwo.webserver.core.vector.ShpStoreMngr; -import com.geotwo.webserver.core.vector.WpsVecStoreMngr; +import kr.or.geoinfo.webserver.core.cache.ImgCacheMngr; +import kr.or.geoinfo.webserver.core.coverage.O2DemLayerMngr; +import kr.or.geoinfo.webserver.core.coverage.O2ImgLayerMngr; +import kr.or.geoinfo.webserver.core.coverage.WpsCovStoreMngr; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.Map; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.map.layer.O2DemLayer; +import kr.or.geoinfo.webserver.core.tile.tms.TMSMngr; +import kr.or.geoinfo.webserver.core.tile.wmts.WMTSMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.GWaveStoreMngr; +import kr.or.geoinfo.webserver.core.vector.JdbcStoreMngr; +import kr.or.geoinfo.webserver.core.vector.ShpStoreMngr; +import kr.or.geoinfo.webserver.core.vector.WpsVecStoreMngr; import java.io.File; import java.io.IOException; import java.net.URL; diff --git a/src/main/java/com/geotwo/webserver/core/ServerInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/ServerInfo.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/ServerInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/ServerInfo.java index 964ce07..9f5bfee 100644 --- a/src/main/java/com/geotwo/webserver/core/ServerInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/ServerInfo.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core; +package kr.or.geoinfo.webserver.core; public class ServerInfo { diff --git a/src/main/java/com/geotwo/webserver/core/cache/ImgCacheMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/ImgCacheMngr.java similarity index 95% rename from src/main/java/com/geotwo/webserver/core/cache/ImgCacheMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/ImgCacheMngr.java index 905fa88..7b44472 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/ImgCacheMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/ImgCacheMngr.java @@ -1,14 +1,14 @@ -package com.geotwo.webserver.core.cache; +package kr.or.geoinfo.webserver.core.cache; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.cache.ic.CacheFormat; -import com.geotwo.webserver.core.cache.ic.CacheLevel; -import com.geotwo.webserver.core.cache.ic.CacheLevelSet; -import com.geotwo.webserver.core.cache.ic.ImgCacheLayer; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.cache.ic.CacheFormat; +import kr.or.geoinfo.webserver.core.cache.ic.CacheLevel; +import kr.or.geoinfo.webserver.core.cache.ic.CacheLevelSet; +import kr.or.geoinfo.webserver.core.cache.ic.ImgCacheLayer; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import java.io.File; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/com/geotwo/webserver/core/cache/LogCacheManager.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/LogCacheManager.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/cache/LogCacheManager.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/LogCacheManager.java index d6b753f..3b60789 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/LogCacheManager.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/LogCacheManager.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.cache; +package kr.or.geoinfo.webserver.core.cache; -import com.geotwo.webserver.core.cache.util.FileComparator; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.cache.util.FileComparator; +import kr.or.geoinfo.webserver.core.log.LogMngr; import java.io.File; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/com/geotwo/webserver/core/cache/ic/CacheFormat.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheFormat.java similarity index 91% rename from src/main/java/com/geotwo/webserver/core/cache/ic/CacheFormat.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheFormat.java index 833b49a..3c535f2 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/ic/CacheFormat.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheFormat.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.cache.ic; +package kr.or.geoinfo.webserver.core.cache.ic; public class CacheFormat { int width = 256; diff --git a/src/main/java/com/geotwo/webserver/core/cache/ic/CacheLevel.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheLevel.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/cache/ic/CacheLevel.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheLevel.java index 27ade9d..4b6e1b7 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/ic/CacheLevel.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheLevel.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.cache.ic; +package kr.or.geoinfo.webserver.core.cache.ic; import java.io.File; import javax.management.modelmbean.XMLParseException; diff --git a/src/main/java/com/geotwo/webserver/core/cache/ic/CacheLevelSet.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheLevelSet.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/cache/ic/CacheLevelSet.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheLevelSet.java index b876d6e..4657cf1 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/ic/CacheLevelSet.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/CacheLevelSet.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.cache.ic; +package kr.or.geoinfo.webserver.core.cache.ic; import java.io.File; import java.util.TreeMap; diff --git a/src/main/java/com/geotwo/webserver/core/cache/ic/ImgCacheLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/ImgCacheLayer.java similarity index 90% rename from src/main/java/com/geotwo/webserver/core/cache/ic/ImgCacheLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/ic/ImgCacheLayer.java index 954ff9e..fe5b781 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/ic/ImgCacheLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/ic/ImgCacheLayer.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.cache.ic; +package kr.or.geoinfo.webserver.core.cache.ic; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.File; import java.io.IOException; import org.geotools.geometry.jts.ReferencedEnvelope; diff --git a/src/main/java/com/geotwo/webserver/core/cache/util/FileComparator.java b/src/main/java/kr/or/geoinfo/webserver/core/cache/util/FileComparator.java similarity index 83% rename from src/main/java/com/geotwo/webserver/core/cache/util/FileComparator.java rename to src/main/java/kr/or/geoinfo/webserver/core/cache/util/FileComparator.java index d195cc9..a578590 100644 --- a/src/main/java/com/geotwo/webserver/core/cache/util/FileComparator.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/cache/util/FileComparator.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.cache.util; +package kr.or.geoinfo.webserver.core.cache.util; import java.io.File; import java.util.Comparator; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/O2DemLayerMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/O2DemLayerMngr.java similarity index 92% rename from src/main/java/com/geotwo/webserver/core/coverage/O2DemLayerMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/O2DemLayerMngr.java index 0488c8b..40ab88a 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/O2DemLayerMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/O2DemLayerMngr.java @@ -1,15 +1,15 @@ -package com.geotwo.webserver.core.coverage; +package kr.or.geoinfo.webserver.core.coverage; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerInfo; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerLevelSet; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerUtil; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.map.layer.O2DemLayer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerInfo; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.map.layer.O2DemLayer; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/O2ImgLayerMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/O2ImgLayerMngr.java similarity index 91% rename from src/main/java/com/geotwo/webserver/core/coverage/O2ImgLayerMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/O2ImgLayerMngr.java index 83a6535..d24bcc1 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/O2ImgLayerMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/O2ImgLayerMngr.java @@ -1,15 +1,15 @@ -package com.geotwo.webserver.core.coverage; +package kr.or.geoinfo.webserver.core.coverage; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerInfo; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerLevelSet; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerUtil; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.map.layer.O2ImgLayer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerInfo; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.map.layer.O2ImgLayer; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/WpsCovStoreMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/WpsCovStoreMngr.java similarity index 82% rename from src/main/java/com/geotwo/webserver/core/coverage/WpsCovStoreMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/WpsCovStoreMngr.java index ecfdb70..0d26242 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/WpsCovStoreMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/WpsCovStoreMngr.java @@ -1,15 +1,15 @@ -package com.geotwo.webserver.core.coverage; +package kr.or.geoinfo.webserver.core.coverage; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerLevelSet; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerUtil; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.map.layer.O2DemLayer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.WpsVecStoreMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.map.layer.O2DemLayer; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.WpsVecStoreMngr; import java.io.File; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerIndex.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerIndex.java similarity index 92% rename from src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerIndex.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerIndex.java index c7b559b..ff213d9 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerIndex.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerIndex.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.coverage.o2layer; +package kr.or.geoinfo.webserver.core.coverage.o2layer; import com.vividsolutions.jts.geom.Envelope; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerInfo.java similarity index 92% rename from src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerInfo.java index 9bb89a5..763ca53 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerInfo.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.coverage.o2layer; +package kr.or.geoinfo.webserver.core.coverage.o2layer; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import java.io.File; import org.opengis.referencing.crs.CoordinateReferenceSystem; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerLevel.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerLevel.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerLevel.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerLevel.java index f11df39..6da6ba2 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerLevel.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerLevel.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.coverage.o2layer; +package kr.or.geoinfo.webserver.core.coverage.o2layer; import com.vividsolutions.jts.geom.Envelope; import java.io.File; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerLevelSet.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerLevelSet.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerLevelSet.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerLevelSet.java index 2fdb86b..dc2f579 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerLevelSet.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerLevelSet.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.coverage.o2layer; +package kr.or.geoinfo.webserver.core.coverage.o2layer; -import com.geotwo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.LayerFactory; import com.vividsolutions.jts.geom.Envelope; import java.io.File; import java.util.TreeMap; diff --git a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerUtil.java b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerUtil.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerUtil.java rename to src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerUtil.java index 9081b51..6c19935 100644 --- a/src/main/java/com/geotwo/webserver/core/coverage/o2layer/O2LayerUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/coverage/o2layer/O2LayerUtil.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.coverage.o2layer; +package kr.or.geoinfo.webserver.core.coverage.o2layer; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import com.vividsolutions.jts.geom.Envelope; import java.awt.Graphics2D; import java.awt.Point; diff --git a/src/main/java/com/geotwo/webserver/core/feature/FeatureMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/feature/FeatureMngr.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/feature/FeatureMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/feature/FeatureMngr.java index 553beec..dee9fbb 100644 --- a/src/main/java/com/geotwo/webserver/core/feature/FeatureMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/feature/FeatureMngr.java @@ -1,16 +1,16 @@ -package com.geotwo.webserver.core.feature; +package kr.or.geoinfo.webserver.core.feature; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.init.ConnMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.O2DSMngr; -import com.geotwo.webserver.core.vector.jdbc.O2SqlDialect; -import com.geotwo.webserver.core.vector.jdbc.ns.NonSpatialDialect; -import com.geotwo.webserver.core.vector.jdbc.oracle.OracleDialect; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.init.ConnMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.O2DSMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2SqlDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.ns.NonSpatialDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.oracle.OracleDialect; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import java.io.IOException; diff --git a/src/main/java/com/geotwo/webserver/core/feature/GeometryMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/feature/GeometryMngr.java similarity index 92% rename from src/main/java/com/geotwo/webserver/core/feature/GeometryMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/feature/GeometryMngr.java index 2a16764..9484efa 100644 --- a/src/main/java/com/geotwo/webserver/core/feature/GeometryMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/feature/GeometryMngr.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.feature; +package kr.or.geoinfo.webserver.core.feature; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.vector.O2DSMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.vector.O2DSMngr; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.MultiLineString; diff --git a/src/main/java/com/geotwo/webserver/core/feature/InsertParams.java b/src/main/java/kr/or/geoinfo/webserver/core/feature/InsertParams.java similarity index 87% rename from src/main/java/com/geotwo/webserver/core/feature/InsertParams.java rename to src/main/java/kr/or/geoinfo/webserver/core/feature/InsertParams.java index 111e967..28de417 100644 --- a/src/main/java/com/geotwo/webserver/core/feature/InsertParams.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/feature/InsertParams.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.feature; +package kr.or.geoinfo.webserver.core.feature; import java.util.ArrayList; import org.opengis.filter.identity.FeatureId; diff --git a/src/main/java/com/geotwo/webserver/core/feature/O2FeatureCollection.java b/src/main/java/kr/or/geoinfo/webserver/core/feature/O2FeatureCollection.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/feature/O2FeatureCollection.java rename to src/main/java/kr/or/geoinfo/webserver/core/feature/O2FeatureCollection.java index 101e208..fb788db 100644 --- a/src/main/java/com/geotwo/webserver/core/feature/O2FeatureCollection.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/feature/O2FeatureCollection.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.feature; +package kr.or.geoinfo.webserver.core.feature; import java.io.IOException; import java.util.Iterator; diff --git a/src/main/java/com/geotwo/webserver/core/feature/QueryMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/feature/QueryMngr.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/feature/QueryMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/feature/QueryMngr.java index ec7563d..67a8a5d 100644 --- a/src/main/java/com/geotwo/webserver/core/feature/QueryMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/feature/QueryMngr.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.feature; +package kr.or.geoinfo.webserver.core.feature; import com.vividsolutions.jts.geom.Envelope; import java.io.IOException; diff --git a/src/main/java/com/geotwo/webserver/core/feature/RefindInsertFeatureCollection.java b/src/main/java/kr/or/geoinfo/webserver/core/feature/RefindInsertFeatureCollection.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/feature/RefindInsertFeatureCollection.java rename to src/main/java/kr/or/geoinfo/webserver/core/feature/RefindInsertFeatureCollection.java index 1c9c796..e73d975 100644 --- a/src/main/java/com/geotwo/webserver/core/feature/RefindInsertFeatureCollection.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/feature/RefindInsertFeatureCollection.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.feature; +package kr.or.geoinfo.webserver.core.feature; -import com.geotwo.webserver.core.vector.jdbc.oracle.OracleDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.oracle.OracleDialect; import com.vividsolutions.jts.geom.Geometry; import java.io.IOException; import java.util.NoSuchElementException; diff --git a/src/main/java/com/geotwo/webserver/core/init/ConnMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/init/ConnMngr.java similarity index 87% rename from src/main/java/com/geotwo/webserver/core/init/ConnMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/ConnMngr.java index ae7b9a6..a27fbe7 100644 --- a/src/main/java/com/geotwo/webserver/core/init/ConnMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/ConnMngr.java @@ -1,14 +1,14 @@ -package com.geotwo.webserver.core.init; +package kr.or.geoinfo.webserver.core.init; -import com.geotwo.webserver.core.init.conn.ConnAltibase; -import com.geotwo.webserver.core.init.conn.ConnJDBC; -import com.geotwo.webserver.core.init.conn.ConnKairos; -import com.geotwo.webserver.core.init.conn.ConnMySQL; -import com.geotwo.webserver.core.init.conn.ConnOracle; -import com.geotwo.webserver.core.init.conn.ConnPostGIS; -import com.geotwo.webserver.core.init.conn.ConnTibero; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.ConnAltibase; +import kr.or.geoinfo.webserver.core.init.conn.ConnJDBC; +import kr.or.geoinfo.webserver.core.init.conn.ConnKairos; +import kr.or.geoinfo.webserver.core.init.conn.ConnMySQL; +import kr.or.geoinfo.webserver.core.init.conn.ConnOracle; +import kr.or.geoinfo.webserver.core.init.conn.ConnPostGIS; +import kr.or.geoinfo.webserver.core.init.conn.ConnTibero; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; diff --git a/src/main/java/com/geotwo/webserver/core/init/ServerConfiguration.java b/src/main/java/kr/or/geoinfo/webserver/core/init/ServerConfiguration.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/init/ServerConfiguration.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/ServerConfiguration.java index c376040..7a379db 100644 --- a/src/main/java/com/geotwo/webserver/core/init/ServerConfiguration.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/ServerConfiguration.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.init; +package kr.or.geoinfo.webserver.core.init; import java.io.File; import java.io.FileNotFoundException; @@ -15,12 +15,12 @@ import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.cache.LogCacheManager; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.RenderMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.O2DSMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.cache.LogCacheManager; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.RenderMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.O2DSMngr; public class ServerConfiguration { private static ServerConfiguration instance = null; diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnAltibase.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnAltibase.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnAltibase.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnAltibase.java index de040b5..3d7690d 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnAltibase.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnAltibase.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.util.HashMap; public class ConnAltibase extends ConnJDBC { diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnJDBC.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnJDBC.java similarity index 91% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnJDBC.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnJDBC.java index 1c3f578..746df11 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnJDBC.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnJDBC.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.ServerConfiguration; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.log.LogMngr; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnKairos.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnKairos.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnKairos.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnKairos.java index 1b6c0fd..a39b399 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnKairos.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnKairos.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.util.HashMap; public class ConnKairos extends ConnJDBC { diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnMySQL.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnMySQL.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnMySQL.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnMySQL.java index 8a46de6..19610f1 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnMySQL.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnMySQL.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.util.HashMap; public class ConnMySQL extends ConnJDBC { diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnOracle.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnOracle.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnOracle.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnOracle.java index 32921f8..f0b30b0 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnOracle.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnOracle.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.util.HashMap; public class ConnOracle extends ConnJDBC { diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnPostGIS.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnPostGIS.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnPostGIS.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnPostGIS.java index 9d97809..a770c33 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnPostGIS.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnPostGIS.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.util.HashMap; public class ConnPostGIS extends ConnJDBC { diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/ConnTibero.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnTibero.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/init/conn/ConnTibero.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnTibero.java index e073ebd..f1722fa 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/ConnTibero.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/ConnTibero.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn; +package kr.or.geoinfo.webserver.core.init.conn; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.util.HashMap; public class ConnTibero extends ConnJDBC { diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/util/FieldInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/util/FieldInfo.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/init/conn/util/FieldInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/util/FieldInfo.java index e565f38..3303f71 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/util/FieldInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/util/FieldInfo.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.init.conn.util; +package kr.or.geoinfo.webserver.core.init.conn.util; public class FieldInfo { private FieldSQL.FieldType type; diff --git a/src/main/java/com/geotwo/webserver/core/init/conn/util/FieldSQL.java b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/util/FieldSQL.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/init/conn/util/FieldSQL.java rename to src/main/java/kr/or/geoinfo/webserver/core/init/conn/util/FieldSQL.java index 9aab325..594605b 100644 --- a/src/main/java/com/geotwo/webserver/core/init/conn/util/FieldSQL.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/init/conn/util/FieldSQL.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.init.conn.util; +package kr.or.geoinfo.webserver.core.init.conn.util; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import com.vividsolutions.jts.geom.Geometry; import java.sql.SQLException; import java.util.Collections; diff --git a/src/main/java/com/geotwo/webserver/core/log/LogMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/log/LogMngr.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/log/LogMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/log/LogMngr.java index 869adba..a1f5edf 100644 --- a/src/main/java/com/geotwo/webserver/core/log/LogMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/log/LogMngr.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.log; +package kr.or.geoinfo.webserver.core.log; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.File; import java.util.HashMap; import java.util.Properties; diff --git a/src/main/java/com/geotwo/webserver/core/map/LayerFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/map/LayerFactory.java similarity index 82% rename from src/main/java/com/geotwo/webserver/core/map/LayerFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/LayerFactory.java index b9ee57f..5c3ba5e 100644 --- a/src/main/java/com/geotwo/webserver/core/map/LayerFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/LayerFactory.java @@ -1,13 +1,13 @@ -package com.geotwo.webserver.core.map; +package kr.or.geoinfo.webserver.core.map; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.GroupLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.map.layer.O2DemLayer; -import com.geotwo.webserver.core.map.layer.O2ImgLayer; -import com.geotwo.webserver.core.map.layer.WCSLayer; -import com.geotwo.webserver.core.map.layer.WMSLayer; -import com.geotwo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.GroupLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.map.layer.O2DemLayer; +import kr.or.geoinfo.webserver.core.map.layer.O2ImgLayer; +import kr.or.geoinfo.webserver.core.map.layer.WCSLayer; +import kr.or.geoinfo.webserver.core.map.layer.WMSLayer; +import kr.or.geoinfo.webserver.core.util.AVList; public class LayerFactory { public enum LayerType { diff --git a/src/main/java/com/geotwo/webserver/core/map/LayerSet.java b/src/main/java/kr/or/geoinfo/webserver/core/map/LayerSet.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/map/LayerSet.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/LayerSet.java index 562222f..b3dd89f 100644 --- a/src/main/java/com/geotwo/webserver/core/map/LayerSet.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/LayerSet.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.map; +package kr.or.geoinfo.webserver.core.map; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/com/geotwo/webserver/core/map/Map.java b/src/main/java/kr/or/geoinfo/webserver/core/map/Map.java similarity index 90% rename from src/main/java/com/geotwo/webserver/core/map/Map.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/Map.java index eb330ee..29cdc50 100644 --- a/src/main/java/com/geotwo/webserver/core/map/Map.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/Map.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.map; +package kr.or.geoinfo.webserver.core.map; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.WpsVecStoreMngr; -import com.geotwo.webserver.core.vector.o2wps.O2WpsLayerSet; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.WpsVecStoreMngr; +import kr.or.geoinfo.webserver.core.vector.o2wps.O2WpsLayerSet; import java.util.ArrayList; public class Map { diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/FeatureLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/FeatureLayer.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/map/layer/FeatureLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/FeatureLayer.java index 19a6fd0..52a6894 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/FeatureLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/FeatureLayer.java @@ -1,12 +1,12 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.RefineRenderStyleVisitor; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.O2DSMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.RefineRenderStyleVisitor; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.O2DSMngr; import java.util.ArrayList; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/GroupLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/GroupLayer.java similarity index 91% rename from src/main/java/com/geotwo/webserver/core/map/layer/GroupLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/GroupLayer.java index b4597b6..23a4c66 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/GroupLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/GroupLayer.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.AVList; import com.vividsolutions.jts.geom.Envelope; import java.util.ArrayList; import org.geotools.geometry.jts.ReferencedEnvelope; diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/Layer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/Layer.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/map/layer/Layer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/Layer.java index 627c3ee..52171fd 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/Layer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/Layer.java @@ -1,10 +1,10 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import java.util.Date; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.referencing.CRS; diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/LinkLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/LinkLayer.java similarity index 85% rename from src/main/java/com/geotwo/webserver/core/map/layer/LinkLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/LinkLayer.java index 86cb9f9..7bae4b0 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/LinkLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/LinkLayer.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.net.URL; public abstract class LinkLayer extends Layer { diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/O2DemLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/O2DemLayer.java similarity index 93% rename from src/main/java/com/geotwo/webserver/core/map/layer/O2DemLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/O2DemLayer.java index 1d2e176..43029f6 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/O2DemLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/O2DemLayer.java @@ -1,12 +1,12 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerLevelSet; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.ExtractRasterStyleVisitor; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.ExtractRasterStyleVisitor; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.IOException; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/O2ImgLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/O2ImgLayer.java similarity index 83% rename from src/main/java/com/geotwo/webserver/core/map/layer/O2ImgLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/O2ImgLayer.java index f4565d4..2d1c8a8 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/O2ImgLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/O2ImgLayer.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerLevelSet; -import com.geotwo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; +import kr.or.geoinfo.webserver.core.util.AVList; import java.io.IOException; import org.geotools.geometry.jts.ReferencedEnvelope; diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/WCSLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/WCSLayer.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/map/layer/WCSLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/WCSLayer.java index 1eb36ac..419ea8a 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/WCSLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/WCSLayer.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.AVList; import com.vividsolutions.jts.geom.Envelope; import java.net.URL; import java.net.URLConnection; diff --git a/src/main/java/com/geotwo/webserver/core/map/layer/WMSLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/WMSLayer.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/map/layer/WMSLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/map/layer/WMSLayer.java index 19343f0..f430b9b 100644 --- a/src/main/java/com/geotwo/webserver/core/map/layer/WMSLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/map/layer/WMSLayer.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.map.layer; +package kr.or.geoinfo.webserver.core.map.layer; -import com.geotwo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.AVList; import com.vividsolutions.jts.geom.Envelope; import java.net.URL; import java.net.URLConnection; diff --git a/src/main/java/com/geotwo/webserver/core/render/ExtractRasterStyleVisitor.java b/src/main/java/kr/or/geoinfo/webserver/core/render/ExtractRasterStyleVisitor.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/render/ExtractRasterStyleVisitor.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/ExtractRasterStyleVisitor.java index 2b7a60d..e495010 100644 --- a/src/main/java/com/geotwo/webserver/core/render/ExtractRasterStyleVisitor.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/ExtractRasterStyleVisitor.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render; +package kr.or.geoinfo.webserver.core.render; import org.geotools.styling.Description; import org.geotools.styling.Rule; diff --git a/src/main/java/com/geotwo/webserver/core/render/O2StyleFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/render/O2StyleFactory.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/O2StyleFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/O2StyleFactory.java index f654136..d3bb418 100644 --- a/src/main/java/com/geotwo/webserver/core/render/O2StyleFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/O2StyleFactory.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render; +package kr.or.geoinfo.webserver.core.render; import org.geotools.styling.ChannelSelection; import org.geotools.styling.ColorMap; diff --git a/src/main/java/com/geotwo/webserver/core/render/RefineRenderStyleVisitor.java b/src/main/java/kr/or/geoinfo/webserver/core/render/RefineRenderStyleVisitor.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/RefineRenderStyleVisitor.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/RefineRenderStyleVisitor.java index 6f9d868..a1587be 100644 --- a/src/main/java/com/geotwo/webserver/core/render/RefineRenderStyleVisitor.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/RefineRenderStyleVisitor.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render; +package kr.or.geoinfo.webserver.core.render; import java.awt.BasicStroke; import java.awt.Graphics2D; diff --git a/src/main/java/com/geotwo/webserver/core/render/RefineStyleVisitor.java b/src/main/java/kr/or/geoinfo/webserver/core/render/RefineStyleVisitor.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/render/RefineStyleVisitor.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/RefineStyleVisitor.java index 2ed359f..6d69063 100644 --- a/src/main/java/com/geotwo/webserver/core/render/RefineStyleVisitor.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/RefineStyleVisitor.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render; +package kr.or.geoinfo.webserver.core.render; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; diff --git a/src/main/java/com/geotwo/webserver/core/render/RenderMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/render/RenderMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java index 2898e02..6c766a6 100644 --- a/src/main/java/com/geotwo/webserver/core/render/RenderMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/RenderMngr.java @@ -1,27 +1,28 @@ -package com.geotwo.webserver.core.render; +package kr.or.geoinfo.webserver.core.render; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerLevelSet; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerUtil; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.GroupLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.map.layer.LinkLayer; -import com.geotwo.webserver.core.map.layer.O2DemLayer; -import com.geotwo.webserver.core.map.layer.O2ImgLayer; -import com.geotwo.webserver.core.map.layer.WMSLayer; -import com.geotwo.webserver.core.render.io.RenderFeatureSource; -import com.geotwo.webserver.core.render.layer.ExFeatureLayer; -import com.geotwo.webserver.core.render.layer.ExO2ImgLayer; -import com.geotwo.webserver.core.render.layer.ExWMSLayer; -import com.geotwo.webserver.core.render.style.MapStyle; -import com.geotwo.webserver.core.render.style.label.LabelCacheEx; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.O2DSMngr; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.drilling.inquiry.service.DrillingInquiryService; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerLevelSet; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.GroupLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.map.layer.LinkLayer; +import kr.or.geoinfo.webserver.core.map.layer.O2DemLayer; +import kr.or.geoinfo.webserver.core.map.layer.O2ImgLayer; +import kr.or.geoinfo.webserver.core.map.layer.WMSLayer; +import kr.or.geoinfo.webserver.core.render.io.RenderFeatureSource; +import kr.or.geoinfo.webserver.core.render.layer.ExFeatureLayer; +import kr.or.geoinfo.webserver.core.render.layer.ExO2ImgLayer; +import kr.or.geoinfo.webserver.core.render.layer.ExWMSLayer; +import kr.or.geoinfo.webserver.core.render.style.MapStyle; +import kr.or.geoinfo.webserver.core.render.style.label.LabelCacheEx; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.O2DSMngr; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import java.awt.Color; @@ -74,11 +75,13 @@ import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.Name; import org.opengis.filter.Filter; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.springframework.beans.factory.annotation.Autowired; public class RenderMngr { static boolean useImageAntialias = true; static boolean useTextAntialias = true; static Interpolation interpolationMethod = Interpolation.NN; static ThreadPoolExecutor RENDERING_POOL; + public static BufferedImage productMap(AVList params) throws Exception { String[] layers = (String[])params.getValue("request.wms.layers"); @@ -145,6 +148,7 @@ public class RenderMngr { private static void addRenderLayers(ArrayList targetLayers, Layer[] layers, String[] styles, AVList params) throws Exception { int i = 0; + System.out.println("private static void addRenderLayers(ArrayList targetLayers, Layer[] layers, String[] styles, AVList params) throws Exception { layers.length:" + layers.length); while (i < layers.length) { RenderMngr.makeNamedLayer(targetLayers, layers[i], styles[i], params); ++i; @@ -287,7 +291,7 @@ public class RenderMngr { if (layer instanceof FeatureLayer) { Filter filter = (Filter)params.getValue("request.wms.filter"); Style layerStyle = ((FeatureLayer)layer).getRenderStyle(styleName); - RenderMngr.addFeatureLayer(targetLayers, layerStyle, (FeatureLayer)layer, filter); + RenderMngr.addFeatureLayer(targetLayers, layerStyle, (FeatureLayer)layer, filter); // 여기를 주석처리하면 쩜이 박히지 않은 이미지만 생성된다. } else if (layer instanceof GroupLayer) { GroupLayer groupLayer = (GroupLayer)layer; Filter filter = (Filter)params.getValue("request.wms.filter"); @@ -359,6 +363,11 @@ public class RenderMngr { LinkedList styleList = new LinkedList(); for (FeatureTypeStyle fStyle : style.featureTypeStyles()) { if (fStyle.featureTypeNames().isEmpty()) { + System.out.println( + "layer.getLayerType(): [" + layer.getLayerType() + "]\n" + + "layer.getServerName(): [" + layer.getServerName() + "]\n" + + "layer.getSourceName(): [" + layer.getSourceName() + "]\n" + ); RenderMngr.addFeatureTypeStyleList(styleList, layer.getLayerType(), layer.getServerName(), layer.getSourceName(), fStyle); continue; } diff --git a/src/main/java/com/geotwo/webserver/core/render/StyleMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/render/StyleMngr.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/render/StyleMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/StyleMngr.java index 17b5315..d13dc3b 100644 --- a/src/main/java/com/geotwo/webserver/core/render/StyleMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/StyleMngr.java @@ -1,13 +1,13 @@ -package com.geotwo.webserver.core.render; +package kr.or.geoinfo.webserver.core.render; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.feature.GeometryMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.render.sld.SLDConfiguration110; -import com.geotwo.webserver.core.render.sld.SLDParser100; -import com.geotwo.webserver.core.render.sld.SLDTransformer110; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.feature.GeometryMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.render.sld.SLDConfiguration110; +import kr.or.geoinfo.webserver.core.render.sld.SLDParser100; +import kr.or.geoinfo.webserver.core.render.sld.SLDTransformer110; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; diff --git a/src/main/java/com/geotwo/webserver/core/render/io/O2PngWriter.java b/src/main/java/kr/or/geoinfo/webserver/core/render/io/O2PngWriter.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/io/O2PngWriter.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/io/O2PngWriter.java index 503a8d3..af911d1 100644 --- a/src/main/java/com/geotwo/webserver/core/render/io/O2PngWriter.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/io/O2PngWriter.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.io; +package kr.or.geoinfo.webserver.core.render.io; import ar.com.hjg.pngj.FilterType; import ar.com.hjg.pngj.IImageLine; diff --git a/src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureCollection.java b/src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureCollection.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureCollection.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureCollection.java index fbf4325..aa4c722 100644 --- a/src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureCollection.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureCollection.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.io; +package kr.or.geoinfo.webserver.core.render.io; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Point; diff --git a/src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureReader.java b/src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureReader.java similarity index 93% rename from src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureReader.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureReader.java index ade3c46..e4e37cb 100644 --- a/src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureReader.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureReader.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.io; +package kr.or.geoinfo.webserver.core.render.io; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; @@ -14,6 +14,12 @@ import org.geotools.renderer.ScreenMap; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; +//--- SQL을 얻기 위해 필요한 import --- +import org.geotools.jdbc.JDBCDataStore; +import org.geotools.jdbc.JDBCFeatureStore; +import org.geotools.jdbc.SQLDialect; +import java.io.StringWriter; + class RenderFeatureReader implements FeatureReader { SimpleFeatureSource source; diff --git a/src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureSource.java b/src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureSource.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureSource.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureSource.java index a8a7a75..440b910 100644 --- a/src/main/java/com/geotwo/webserver/core/render/io/RenderFeatureSource.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/io/RenderFeatureSource.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.io; +package kr.or.geoinfo.webserver.core.render.io; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Point; diff --git a/src/main/java/com/geotwo/webserver/core/render/layer/ExFeatureLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExFeatureLayer.java similarity index 81% rename from src/main/java/com/geotwo/webserver/core/render/layer/ExFeatureLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExFeatureLayer.java index 0aabf7f..4a7ee88 100644 --- a/src/main/java/com/geotwo/webserver/core/render/layer/ExFeatureLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExFeatureLayer.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.layer; +package kr.or.geoinfo.webserver.core.render.layer; -import com.geotwo.webserver.core.render.style.MapStyle; +import kr.or.geoinfo.webserver.core.render.style.MapStyle; import org.geotools.data.FeatureSource; import org.geotools.map.FeatureLayer; import org.geotools.styling.Style; diff --git a/src/main/java/com/geotwo/webserver/core/render/layer/ExO2ImgLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExO2ImgLayer.java similarity index 84% rename from src/main/java/com/geotwo/webserver/core/render/layer/ExO2ImgLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExO2ImgLayer.java index 0fcd76a..69b1f42 100644 --- a/src/main/java/com/geotwo/webserver/core/render/layer/ExO2ImgLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExO2ImgLayer.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.render.layer; +package kr.or.geoinfo.webserver.core.render.layer; -import com.geotwo.webserver.core.coverage.o2layer.O2LayerUtil; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.O2ImgLayer; -import com.geotwo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.coverage.o2layer.O2LayerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.O2ImgLayer; +import kr.or.geoinfo.webserver.core.util.AVList; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import org.geotools.geometry.jts.ReferencedEnvelope; diff --git a/src/main/java/com/geotwo/webserver/core/render/layer/ExWMSLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExWMSLayer.java similarity index 95% rename from src/main/java/com/geotwo/webserver/core/render/layer/ExWMSLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExWMSLayer.java index 8c296b7..1f947ef 100644 --- a/src/main/java/com/geotwo/webserver/core/render/layer/ExWMSLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/layer/ExWMSLayer.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.render.layer; +package kr.or.geoinfo.webserver.core.render.layer; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.LinkLayer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.LinkLayer; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; diff --git a/src/main/java/com/geotwo/webserver/core/render/legend/LegendGraphicBuilder.java b/src/main/java/kr/or/geoinfo/webserver/core/render/legend/LegendGraphicBuilder.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/render/legend/LegendGraphicBuilder.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/legend/LegendGraphicBuilder.java index 1eea59d..08f106d 100644 --- a/src/main/java/com/geotwo/webserver/core/render/legend/LegendGraphicBuilder.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/legend/LegendGraphicBuilder.java @@ -1,13 +1,13 @@ -package com.geotwo.webserver.core.render.legend; +package kr.or.geoinfo.webserver.core.render.legend; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.GroupLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.O2DSMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.GroupLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.O2DSMngr; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; diff --git a/src/main/java/com/geotwo/webserver/core/render/legend/LegendUtils.java b/src/main/java/kr/or/geoinfo/webserver/core/render/legend/LegendUtils.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/legend/LegendUtils.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/legend/LegendUtils.java index 99e72ba..bc0ebac 100644 --- a/src/main/java/com/geotwo/webserver/core/render/legend/LegendUtils.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/legend/LegendUtils.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.legend; +package kr.or.geoinfo.webserver.core.render.legend; import java.awt.Color; import java.awt.Font; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/CategorizeBinding110.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/CategorizeBinding110.java similarity index 95% rename from src/main/java/com/geotwo/webserver/core/render/sld/CategorizeBinding110.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/CategorizeBinding110.java index 979d4b5..1013f9b 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/CategorizeBinding110.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/CategorizeBinding110.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.awt.Color; import java.util.List; import javax.xml.namespace.QName; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/InterpolateBinding110.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/InterpolateBinding110.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/render/sld/InterpolateBinding110.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/InterpolateBinding110.java index d14090b..7ea5cf2 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/InterpolateBinding110.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/InterpolateBinding110.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.awt.Color; import java.util.List; import javax.xml.namespace.QName; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/SLDConfiguration110.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDConfiguration110.java similarity index 93% rename from src/main/java/com/geotwo/webserver/core/render/sld/SLDConfiguration110.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDConfiguration110.java index b9c7549..8b472a4 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/SLDConfiguration110.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDConfiguration110.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; -import com.geotwo.webserver.core.render.O2StyleFactory; +import kr.or.geoinfo.webserver.core.render.O2StyleFactory; import java.util.Map; import javax.xml.namespace.QName; import org.geotools.se.v1_1.SE; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/SLDParser100.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDParser100.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/sld/SLDParser100.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDParser100.java index 3f3a2c0..3076fff 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/SLDParser100.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDParser100.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; import java.awt.Component; import java.awt.Graphics; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/SLDTransformer110.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDTransformer110.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/sld/SLDTransformer110.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDTransformer110.java index f502935..3a38e1f 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/SLDTransformer110.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/SLDTransformer110.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; -import com.geotwo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.render.StyleMngr; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/StyledLayerDescriptorBinding110.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/StyledLayerDescriptorBinding110.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/render/sld/StyledLayerDescriptorBinding110.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/StyledLayerDescriptorBinding110.java index ffb2db9..8a98e9e 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/StyledLayerDescriptorBinding110.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/StyledLayerDescriptorBinding110.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; import java.util.ArrayList; import java.util.Iterator; diff --git a/src/main/java/com/geotwo/webserver/core/render/sld/XSBooleanBinding110.java b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/XSBooleanBinding110.java similarity index 89% rename from src/main/java/com/geotwo/webserver/core/render/sld/XSBooleanBinding110.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/sld/XSBooleanBinding110.java index de742b8..5f41081 100644 --- a/src/main/java/com/geotwo/webserver/core/render/sld/XSBooleanBinding110.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/sld/XSBooleanBinding110.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.sld; +package kr.or.geoinfo.webserver.core.render.sld; import org.geotools.xml.InstanceComponent; import org.geotools.xs.bindings.XSBooleanBinding; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/MapStyle.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/MapStyle.java similarity index 93% rename from src/main/java/com/geotwo/webserver/core/render/style/MapStyle.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/MapStyle.java index 39b6ac2..31f0838 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/MapStyle.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/MapStyle.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.style; +package kr.or.geoinfo.webserver.core.render.style; -import com.geotwo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.LayerFactory; import org.geotools.styling.StyleImpl; public class MapStyle extends StyleImpl { diff --git a/src/main/java/com/geotwo/webserver/core/render/style/O2WellKnownMarkFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/O2WellKnownMarkFactory.java similarity index 92% rename from src/main/java/com/geotwo/webserver/core/render/style/O2WellKnownMarkFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/O2WellKnownMarkFactory.java index 3950510..6f2ecdc 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/O2WellKnownMarkFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/O2WellKnownMarkFactory.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style; +package kr.or.geoinfo.webserver.core.render.style; import java.awt.Graphics2D; import java.awt.Shape; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelCacheEx.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelCacheEx.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/style/label/LabelCacheEx.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelCacheEx.java index 0999f65..c99b442 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelCacheEx.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelCacheEx.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.render.style.label; +package kr.or.geoinfo.webserver.core.render.style.label; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.render.style.label.util.AWTLabelUtil; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.render.style.label.util.AWTLabelUtil; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelCacheItemEx.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelCacheItemEx.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/render/style/label/LabelCacheItemEx.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelCacheItemEx.java index dfc18de..aace1dd 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelCacheItemEx.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelCacheItemEx.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style.label; +package kr.or.geoinfo.webserver.core.render.style.label; import org.geotools.geometry.jts.LiteShape2; import org.geotools.renderer.label.LabelCacheItem; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelInfo.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/render/style/label/LabelInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelInfo.java index 46c1d5b..0afd926 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelInfo.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style.label; +package kr.or.geoinfo.webserver.core.render.style.label; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Polygon; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelPainterEx.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelPainterEx.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/style/label/LabelPainterEx.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelPainterEx.java index 93b74ed..f5aa162 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/LabelPainterEx.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/LabelPainterEx.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style.label; +package kr.or.geoinfo.webserver.core.render.style.label; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/TextStyle2DEx.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/TextStyle2DEx.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/render/style/label/TextStyle2DEx.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/TextStyle2DEx.java index b0e6ad1..0a32dbd 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/TextStyle2DEx.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/TextStyle2DEx.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style.label; +package kr.or.geoinfo.webserver.core.render.style.label; import com.vividsolutions.jts.algorithm.MinimumDiameter; import com.vividsolutions.jts.geom.Coordinate; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/TransformedIconEx.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/TransformedIconEx.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/render/style/label/TransformedIconEx.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/TransformedIconEx.java index b082ae5..e98723e 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/TransformedIconEx.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/TransformedIconEx.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style.label; +package kr.or.geoinfo.webserver.core.render.style.label; import java.awt.Component; import java.awt.Graphics; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/util/AWTLabelUtil.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/util/AWTLabelUtil.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/render/style/label/util/AWTLabelUtil.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/util/AWTLabelUtil.java index 5764c28..2924ebc 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/util/AWTLabelUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/util/AWTLabelUtil.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.render.style.label.util; +package kr.or.geoinfo.webserver.core.render.style.label.util; -import com.geotwo.webserver.core.render.style.label.LabelInfo; +import kr.or.geoinfo.webserver.core.render.style.label.LabelInfo; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; diff --git a/src/main/java/com/geotwo/webserver/core/render/style/label/util/KLISLabelUtil.java b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/util/KLISLabelUtil.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/render/style/label/util/KLISLabelUtil.java rename to src/main/java/kr/or/geoinfo/webserver/core/render/style/label/util/KLISLabelUtil.java index 784b2b2..35cd080 100644 --- a/src/main/java/com/geotwo/webserver/core/render/style/label/util/KLISLabelUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/render/style/label/util/KLISLabelUtil.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.render.style.label.util; +package kr.or.geoinfo.webserver.core.render.style.label.util; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Polygon; diff --git a/src/main/java/kr/or/geoinfo/webserver/core/service/AbstractService.java b/src/main/java/kr/or/geoinfo/webserver/core/service/AbstractService.java new file mode 100644 index 0000000..a8870e1 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/webserver/core/service/AbstractService.java @@ -0,0 +1,29 @@ +package kr.or.geoinfo.webserver.core.service; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public abstract class AbstractService extends HttpServlet { + private static final long serialVersionUID = 2014061020172321L; + + public abstract Object parseQuery(HttpServletRequest paramHttpServletRequest) throws Exception; + + public abstract String doProcess(String paramString); + + public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { + super.service(arg0, arg1); + } + + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.doGet(req, resp); + } + + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.doPost(req, resp); + } +} \ No newline at end of file diff --git a/src/main/java/com/geotwo/webserver/core/service/InitServer.java b/src/main/java/kr/or/geoinfo/webserver/core/service/InitServer.java similarity index 79% rename from src/main/java/com/geotwo/webserver/core/service/InitServer.java rename to src/main/java/kr/or/geoinfo/webserver/core/service/InitServer.java index b6d35e9..c9a5071 100644 --- a/src/main/java/com/geotwo/webserver/core/service/InitServer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/service/InitServer.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.service; +package kr.or.geoinfo.webserver.core.service; -import com.geotwo.webserver.core.ServerInfo; -import com.geotwo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.ServerInfo; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; diff --git a/src/main/java/com/geotwo/webserver/core/service/ServerInfoService.java b/src/main/java/kr/or/geoinfo/webserver/core/service/ServerInfoService.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/service/ServerInfoService.java rename to src/main/java/kr/or/geoinfo/webserver/core/service/ServerInfoService.java index 0ea79e1..b7801fd 100644 --- a/src/main/java/com/geotwo/webserver/core/service/ServerInfoService.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/service/ServerInfoService.java @@ -1,13 +1,13 @@ -package com.geotwo.webserver.core.service; +package kr.or.geoinfo.webserver.core.service; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.ServerInfo; -import com.geotwo.webserver.core.cache.ImgCacheMngr; -import com.geotwo.webserver.core.init.ServerConfiguration; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.plugin.ows.util.PluginUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.ServerInfo; +import kr.or.geoinfo.webserver.core.cache.ImgCacheMngr; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.plugin.ows.util.PluginUtil; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; diff --git a/src/main/java/kr/or/geoinfo/webserver/core/service/Service.java b/src/main/java/kr/or/geoinfo/webserver/core/service/Service.java new file mode 100644 index 0000000..509df5d --- /dev/null +++ b/src/main/java/kr/or/geoinfo/webserver/core/service/Service.java @@ -0,0 +1,182 @@ +package kr.or.geoinfo.webserver.core.service; + +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.ServerInfo; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.plugin.ows.util.PluginUtil; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.OutputStream; +import java.text.DecimalFormat; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class Service extends AbstractService { + private static final long serialVersionUID = 2014061008205121L; + + private static final int SLEEP_TIME = 1000; + + private static final int MAX_SLEEP_TIME = 20000; + + public String parseQuery(HttpServletRequest req) throws Exception { + return null; + } + + public String doProcess(String str) { + return null; + } + + public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { + req.setCharacterEncoding("UTF-8"); + String rootPath = ((HttpServletRequest) req).getContextPath(); + String serviceName = ((HttpServletRequest) req).getRequestURI().replace(rootPath, ""); + while (serviceName.endsWith("/")) + serviceName = serviceName.substring(0, serviceName.length() - 1); + long reqId = System.currentTimeMillis(); + if (((HttpServletRequest) req).getMethod().equalsIgnoreCase("GET")) { + LogMngr.getInstance().reqInfo("[REQUEST]", + "[" + reqId + "] GET, From " + PluginUtil.getClientIP((HttpServletRequest) req) + + " To " + ((serviceName.length() == 0) ? "/" : serviceName) + " , Request : " + ((HttpServletRequest) req).getQueryString()); + } else { + LogMngr.getInstance().reqInfo("[REQUEST]", + "[" + reqId + "] POST, From " + PluginUtil.getClientIP((HttpServletRequest) req) + + " To " + ((serviceName.length() == 0) ? "/" : serviceName) + " , Request : " + ((HttpServletRequest) req).getQueryString()); + } + if (serviceName.length() == 0) { + RequestDispatcher dispatcher = req.getRequestDispatcher("index.html"); + dispatcher.forward(req, resp); + return; + } + if (isFileService(serviceName)) { + File file = new File(getServletContext().getRealPath(serviceName)); + writeFileResponse(resp, file); + return; + } + HttpServlet service = ServiceMngr.getService(serviceName); + if (service != null) { + if (service instanceof ServerInfoService) { + service.service(req, resp); + } else if (ServerInfo.getInstance().isStarted()) { + if (ServerInfo.getInstance().isReStarting()) { + long sleepTile = System.currentTimeMillis(); + while (true) { + if (System.currentTimeMillis() - sleepTile > 20000L) { + writeFailResponse(resp, "O2Map Web is busy to restart. Waiting time for request has been exceeded. [20/sec]"); + break; + } + if (!ServerInfo.getInstance().isReStarting()) { + service.service(req, resp); + break; + } + try { + Thread.sleep(1000L); + } catch (InterruptedException interruptedException) {} + } + } else { + service.service(req, resp); + } + } else { + writeFailResponse(resp, "O2Map Web is not ready. Please check up server configurations and restart server."); + } + } else { + writeFailResponse(resp, "Service [" + serviceName + "] is unregistered Service on O2Map Web."); + } + LogMngr.getInstance().reqInfo("[RESPONSE]", + "[" + reqId + "] is Finish." + + + "Time : " + (new DecimalFormat(".##")).format((System.currentTimeMillis() - reqId) / 1000.0D) + "/sec"); + } + + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.doGet(req, resp); + } + + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.doPost(req, resp); + } + + private boolean isFileService(String uri) { + try { + File file = new File(getServletContext().getRealPath(uri)); + if (file.exists()) + return true; + } catch (Exception exception) {} + return false; + } + + private void writeFileResponse(ServletResponse resp, File file) { + try { + int length = 0; + ServletOutputStream outStream = resp.getOutputStream(); + String mimetype = getServletContext().getMimeType(file.getAbsolutePath()); + if (mimetype == null) + mimetype = "application/octet-stream"; + resp.setContentType(mimetype); + resp.setContentLength((int) file.length()); + byte[] byteBuffer = new byte[1024]; + FileInputStream in = new FileInputStream(file); + while (in != null && (length = in.read(byteBuffer)) != -1) + outStream.write(byteBuffer, 0, length); + in.close(); + outStream.close(); + } catch (FileNotFoundException e) { + LogMngr.getInstance().logError("[SERVICE]", "Request file not found. :: " + e.getMessage()); + } catch (IOException e) { + LogMngr.getInstance().logError("[SERVICE]", "Can't make response output stream. :: " + e.getMessage()); + } + } + + private void writeFailResponse(ServletResponse resp, String msg) { + try { + LogMngr.getInstance().logError("[SERVICE]", msg); + Document doc = getFailDocument(msg); + Transformer xformer = TransformerFactory.newInstance().newTransformer(); + if (ServerContext.getDocIndent().intValue() > 0) { + xformer.setOutputProperty("indent", "yes"); + xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", ServerContext.getDocIndent().toString()); + } + resp.setContentType("text/xml; charset=UTF-8"); + xformer.transform(new DOMSource(doc), new StreamResult((OutputStream) resp.getOutputStream())); + } catch (Exception e) { + LogMngr.getInstance().logError("[SERVICE]", "Do not create XML : " + Service.class + " / " + e.getMessage()); + } + } + + private static Document getFailDocument(String msg) throws ParserConfigurationException { + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.newDocument(); + Element rootElement = doc.createElement("SERVER"); + doc.appendChild(rootElement); + Element result = doc.createElement("RESULT"); + result.appendChild(doc.createTextNode("Fail")); + rootElement.appendChild(result); + Element errorMessage = doc.createElement("INFO"); + errorMessage.appendChild(doc.createTextNode(msg)); + rootElement.appendChild(errorMessage); + return doc; + } + + public void destroy() { + super.destroy(); + ServerConfiguration.getInstance().stopServer(); + } +} \ No newline at end of file diff --git a/src/main/java/com/geotwo/webserver/core/service/ServiceMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/service/ServiceMngr.java similarity index 70% rename from src/main/java/com/geotwo/webserver/core/service/ServiceMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/service/ServiceMngr.java index 3902193..705dc2e 100644 --- a/src/main/java/com/geotwo/webserver/core/service/ServiceMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/service/ServiceMngr.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.service; +package kr.or.geoinfo.webserver.core.service; -import com.geotwo.webserver.core.ServerInfo; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.ServerInfo; +import kr.or.geoinfo.webserver.core.log.LogMngr; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -59,20 +59,8 @@ public class ServiceMngr { LogMngr.getInstance().logInfo("[SERVICE]", "======================================"); LogMngr.getInstance().logDebug("[SERVICE]", "Exist Services clear all"); ServiceMngr.clearService(); - ServiceMngr.createService("/serverinfo", "geoinfo.map.myMap.ServerInfoService"); if (ServerInfo.getInstance().isStarted()) { - ServiceMngr.createService("/service", "geoinfo.map.myMap.ServicesService"); - ServiceMngr.createService("/drilling/map/start.do", "com.geotwo.webserver.plugin.ows.service.WMSService"); - ServiceMngr.createService("/drilling/map/wms.do", "com.geotwo.webserver.plugin.ows.service.WMSService"); - ServiceMngr.createService("/services/wms", "com.geotwo.webserver.plugin.ows.service.WMSService"); - ServiceMngr.createService("/services/wfs", "com.geotwo.webserver.plugin.ows.service.WFSService"); - ServiceMngr.createService("/services/wcs", "com.geotwo.webserver.plugin.ows.service.WCSService"); - ServiceMngr.createService("/services/wps", "com.geotwo.webserver.plugin.ows.service.WPSService"); - ServiceMngr.createService("/services/wmts", "com.geotwo.webserver.plugin.ows.service.WMTSService"); - ServiceMngr.createService("/services/tms", "com.geotwo.webserver.plugin.ows.service.TMSService"); - ServiceMngr.createService("/services/uwes", "com.geotwo.webserver.plugin.uwes.service.UWESService"); - ServiceMngr.createService("/services/o2wps", "com.geotwo.webserver.plugin.o2wps.service.O2WPSService"); - ServiceMngr.createService("/services/icache", "com.geotwo.webserver.plugin.ows.service.ImgCacheService"); + ServiceMngr.createService("/services/wms", "kr.or.geoinfo.webserver.plugin.ows.service.WMSService"); } LogMngr.getInstance().logInfo("[SERVICE]", ""); LogMngr.getInstance().logInfo("[SERVER]", "================================="); diff --git a/src/main/java/com/geotwo/webserver/core/tile/tms/TMSInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/tms/TMSInfo.java similarity index 90% rename from src/main/java/com/geotwo/webserver/core/tile/tms/TMSInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/tms/TMSInfo.java index 53bb686..c679246 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/tms/TMSInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/tms/TMSInfo.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.tile.tms; +package kr.or.geoinfo.webserver.core.tile.tms; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.File; public class TMSInfo { diff --git a/src/main/java/com/geotwo/webserver/core/tile/tms/TMSMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/tms/TMSMngr.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/tile/tms/TMSMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/tms/TMSMngr.java index 5222e37..72e2459 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/tms/TMSMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/tms/TMSMngr.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.tile.tms; +package kr.or.geoinfo.webserver.core.tile.tms; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; diff --git a/src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrix.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrix.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrix.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrix.java index 8d875d5..2147bc7 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrix.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrix.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.tile.wmts; +package kr.or.geoinfo.webserver.core.tile.wmts; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; diff --git a/src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrixRule.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrixRule.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrixRule.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrixRule.java index f6869ce..bdf962e 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrixRule.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrixRule.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.tile.wmts; +package kr.or.geoinfo.webserver.core.tile.wmts; -import com.geotwo.webserver.core.tile.wmts.TileMatrix; +import kr.or.geoinfo.webserver.core.tile.wmts.TileMatrix; import java.io.File; public class TileMatrixRule { diff --git a/src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrixSet.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrixSet.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrixSet.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrixSet.java index 357c3d6..413f3bc 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/wmts/TileMatrixSet.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/TileMatrixSet.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.tile.wmts; +package kr.or.geoinfo.webserver.core.tile.wmts; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.File; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/com/geotwo/webserver/core/tile/wmts/WMTSLayer.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/WMTSLayer.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/tile/wmts/WMTSLayer.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/WMTSLayer.java index 8650287..433b1e0 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/wmts/WMTSLayer.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/WMTSLayer.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.tile.wmts; +package kr.or.geoinfo.webserver.core.tile.wmts; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import org.geotools.geometry.jts.ReferencedEnvelope; public class WMTSLayer { diff --git a/src/main/java/com/geotwo/webserver/core/tile/wmts/WMTSMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/WMTSMngr.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/tile/wmts/WMTSMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/WMTSMngr.java index 2dd6872..c3a47e7 100644 --- a/src/main/java/com/geotwo/webserver/core/tile/wmts/WMTSMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/tile/wmts/WMTSMngr.java @@ -1,10 +1,10 @@ -package com.geotwo.webserver.core.tile.wmts; +package kr.or.geoinfo.webserver.core.tile.wmts; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; diff --git a/src/main/java/com/geotwo/webserver/core/util/AVList.java b/src/main/java/kr/or/geoinfo/webserver/core/util/AVList.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/util/AVList.java rename to src/main/java/kr/or/geoinfo/webserver/core/util/AVList.java index ad87bab..57d81f1 100644 --- a/src/main/java/com/geotwo/webserver/core/util/AVList.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/util/AVList.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.util; +package kr.or.geoinfo.webserver.core.util; import java.awt.Color; import java.net.URL; diff --git a/src/main/java/com/geotwo/webserver/core/util/EncryptUtil.java b/src/main/java/kr/or/geoinfo/webserver/core/util/EncryptUtil.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/util/EncryptUtil.java rename to src/main/java/kr/or/geoinfo/webserver/core/util/EncryptUtil.java index f027913..aaea1cb 100644 --- a/src/main/java/com/geotwo/webserver/core/util/EncryptUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/util/EncryptUtil.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.util; +package kr.or.geoinfo.webserver.core.util; import java.io.IOException; import java.io.UnsupportedEncodingException; diff --git a/src/main/java/com/geotwo/webserver/core/util/ServerUtil.java b/src/main/java/kr/or/geoinfo/webserver/core/util/ServerUtil.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/util/ServerUtil.java rename to src/main/java/kr/or/geoinfo/webserver/core/util/ServerUtil.java index 81832b1..a949191 100644 --- a/src/main/java/com/geotwo/webserver/core/util/ServerUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/util/ServerUtil.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.util; +package kr.or.geoinfo.webserver.core.util; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; import com.vividsolutions.jts.geom.Envelope; import java.awt.Color; import java.awt.Rectangle; diff --git a/src/main/java/com/geotwo/webserver/core/vector/GWaveStoreMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/GWaveStoreMngr.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/GWaveStoreMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/GWaveStoreMngr.java index d530896..e84f113 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/GWaveStoreMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/GWaveStoreMngr.java @@ -1,15 +1,15 @@ -package com.geotwo.webserver.core.vector; +package kr.or.geoinfo.webserver.core.vector; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.core.vector.geowave.GWaveLayerInfo; -import com.geotwo.webserver.core.vector.geowave.GeoWaveDataStore; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.vector.geowave.GWaveLayerInfo; +import kr.or.geoinfo.webserver.core.vector.geowave.GeoWaveDataStore; import com.geowave.drvier.GWDriver; import com.geowave.vectordrvier.GWVectorDriver; import java.io.BufferedReader; diff --git a/src/main/java/com/geotwo/webserver/core/vector/JdbcStoreMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/JdbcStoreMngr.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/JdbcStoreMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/JdbcStoreMngr.java index 03d1e52..bafa155 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/JdbcStoreMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/JdbcStoreMngr.java @@ -1,17 +1,17 @@ -package com.geotwo.webserver.core.vector; +package kr.or.geoinfo.webserver.core.vector; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.init.ConnMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.EncryptUtil; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.init.ConnMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.EncryptUtil; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/src/main/java/com/geotwo/webserver/core/vector/O2DSMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/O2DSMngr.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/O2DSMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/O2DSMngr.java index 4f2ab60..0faa049 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/O2DSMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/O2DSMngr.java @@ -1,10 +1,10 @@ -package com.geotwo.webserver.core.vector; +package kr.or.geoinfo.webserver.core.vector; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.geowave.GeoWaveDataStore; -import com.geotwo.webserver.core.vector.memory.O2SpatialIndexFeatureCollection; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.geowave.GeoWaveDataStore; +import kr.or.geoinfo.webserver.core.vector.memory.O2SpatialIndexFeatureCollection; import java.io.IOException; import java.util.Collections; import java.util.HashMap; diff --git a/src/main/java/com/geotwo/webserver/core/vector/ShpStoreMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/ShpStoreMngr.java similarity index 95% rename from src/main/java/com/geotwo/webserver/core/vector/ShpStoreMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/ShpStoreMngr.java index 986236b..b391f4e 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/ShpStoreMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/ShpStoreMngr.java @@ -1,15 +1,15 @@ -package com.geotwo.webserver.core.vector; +package kr.or.geoinfo.webserver.core.vector; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.shape.ShpIndexMngr; -import com.geotwo.webserver.core.vector.shape.ShpLayerInfo; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.shape.ShpIndexMngr; +import kr.or.geoinfo.webserver.core.vector.shape.ShpLayerInfo; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; diff --git a/src/main/java/com/geotwo/webserver/core/vector/WpsVecStoreMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/WpsVecStoreMngr.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/WpsVecStoreMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/WpsVecStoreMngr.java index 32abc53..16bfbb5 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/WpsVecStoreMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/WpsVecStoreMngr.java @@ -1,19 +1,19 @@ -package com.geotwo.webserver.core.vector; +package kr.or.geoinfo.webserver.core.vector; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.init.ConnMngr; -import com.geotwo.webserver.core.init.ServerConfiguration; -import com.geotwo.webserver.core.init.conn.util.FieldInfo; -import com.geotwo.webserver.core.init.conn.util.FieldSQL; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; -import com.geotwo.webserver.core.vector.shape.ShpIndexMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.init.ConnMngr; +import kr.or.geoinfo.webserver.core.init.ServerConfiguration; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldInfo; +import kr.or.geoinfo.webserver.core.init.conn.util.FieldSQL; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.vector.shape.ShpIndexMngr; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; diff --git a/src/main/java/com/geotwo/webserver/core/vector/crs/CRSMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/crs/CRSMngr.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/vector/crs/CRSMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/crs/CRSMngr.java index ef04604..6b41488 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/crs/CRSMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/crs/CRSMngr.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.vector.crs; +package kr.or.geoinfo.webserver.core.vector.crs; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.Map; -import com.geotwo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.Map; +import kr.or.geoinfo.webserver.core.map.layer.Layer; import java.awt.RenderingHints; import java.util.Iterator; import org.geotools.factory.GeoTools; diff --git a/src/main/java/com/geotwo/webserver/core/vector/crs/O2CRSFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/crs/O2CRSFactory.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/crs/O2CRSFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/crs/O2CRSFactory.java index 8251964..e8d63af 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/crs/O2CRSFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/crs/O2CRSFactory.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.vector.crs; +package kr.or.geoinfo.webserver.core.vector.crs; -import com.geotwo.webserver.core.init.ConnMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.init.ConnMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; diff --git a/src/main/java/com/geotwo/webserver/core/vector/crs/O2CRSOverrideFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/crs/O2CRSOverrideFactory.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/crs/O2CRSOverrideFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/crs/O2CRSOverrideFactory.java index 016c3bb..77928cc 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/crs/O2CRSOverrideFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/crs/O2CRSOverrideFactory.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.vector.crs; +package kr.or.geoinfo.webserver.core.vector.crs; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; diff --git a/src/main/java/com/geotwo/webserver/core/vector/geowave/GWaveLayerInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GWaveLayerInfo.java similarity index 90% rename from src/main/java/com/geotwo/webserver/core/vector/geowave/GWaveLayerInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GWaveLayerInfo.java index 6d6684c..5b2e1a4 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/geowave/GWaveLayerInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GWaveLayerInfo.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.vector.geowave; +package kr.or.geoinfo.webserver.core.vector.geowave; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; public class GWaveLayerInfo { private boolean activate = false; diff --git a/src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveDataStore.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveDataStore.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveDataStore.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveDataStore.java index 796cfbd..3480cb1 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveDataStore.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveDataStore.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.core.vector.geowave; +package kr.or.geoinfo.webserver.core.vector.geowave; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.StyleMngr; import com.geowave.vectordrvier.GWVectorDriver; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveFeatureReader.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveFeatureReader.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveFeatureReader.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveFeatureReader.java index 25e950a..658101a 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveFeatureReader.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveFeatureReader.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.geowave; +package kr.or.geoinfo.webserver.core.vector.geowave; import com.geowave.vectordrvier.GWVectorDriver; import com.geowave.vectordrvier.GWVectorQuery; diff --git a/src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveFeatureSource.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveFeatureSource.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveFeatureSource.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveFeatureSource.java index 8d5972a..9b30007 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/geowave/GeoWaveFeatureSource.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/geowave/GeoWaveFeatureSource.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.geowave; +package kr.or.geoinfo.webserver.core.vector.geowave; import com.geowave.metadata.FeatureColumnInfo; import com.geowave.vectordrvier.GWVectorDriver; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2DSFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2DSFactory.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/O2DSFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2DSFactory.java index 7209270..61c2be0 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2DSFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2DSFactory.java @@ -1,12 +1,12 @@ -package com.geotwo.webserver.core.vector.jdbc; +package kr.or.geoinfo.webserver.core.vector.jdbc; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.init.ConnMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.vector.jdbc.ns.NonSpatialDialect; -import com.geotwo.webserver.core.vector.jdbc.oracle.OracleDialect; -import com.geotwo.webserver.core.vector.jdbc.simple.SimpleDialect; -import com.geotwo.webserver.core.vector.jdbc.simple.SimpleSql; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.init.ConnMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.ns.NonSpatialDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.oracle.OracleDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.simple.SimpleDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.simple.SimpleSql; import java.io.File; import java.io.FileInputStream; import java.io.IOException; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java index b0b2674..1db8efc 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2DSPrimaryKeyFinder.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.vector.jdbc; +package kr.or.geoinfo.webserver.core.vector.jdbc; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2GeometryTypeMap.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2GeometryTypeMap.java similarity index 95% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/O2GeometryTypeMap.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2GeometryTypeMap.java index 0ae5f66..7b113e7 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2GeometryTypeMap.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2GeometryTypeMap.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc; +package kr.or.geoinfo.webserver.core.vector.jdbc; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2SqlDialect.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2SqlDialect.java similarity index 87% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/O2SqlDialect.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2SqlDialect.java index 9f17e31..b81f97a 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/O2SqlDialect.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/O2SqlDialect.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc; +package kr.or.geoinfo.webserver.core.vector.jdbc; import java.sql.Connection; import java.util.List; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/WKBAttributeIO.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/WKBAttributeIO.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/WKBAttributeIO.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/WKBAttributeIO.java index cb2a282..fd75509 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/WKBAttributeIO.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/WKBAttributeIO.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc; +package kr.or.geoinfo.webserver.core.vector.jdbc; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/ns/NonSpatialDialect.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/ns/NonSpatialDialect.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/ns/NonSpatialDialect.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/ns/NonSpatialDialect.java index 3f10b5e..3badd8c 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/ns/NonSpatialDialect.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/ns/NonSpatialDialect.java @@ -1,11 +1,11 @@ -package com.geotwo.webserver.core.vector.jdbc.ns; +package kr.or.geoinfo.webserver.core.vector.jdbc.ns; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; -import com.geotwo.webserver.core.vector.jdbc.O2GeometryTypeMap; -import com.geotwo.webserver.core.vector.jdbc.O2SqlDialect; -import com.geotwo.webserver.core.vector.jdbc.WKBAttributeIO; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2GeometryTypeMap; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2SqlDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.WKBAttributeIO; import com.tmax.tibero.jdbc.TbBlob; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java similarity index 95% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java index 5a5b249..b44791d 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/ns/NonSpatialFilterToSQL.java @@ -1,9 +1,9 @@ -package com.geotwo.webserver.core.vector.jdbc.ns; +package kr.or.geoinfo.webserver.core.vector.jdbc.ns; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import com.vividsolutions.jts.geom.Envelope; import java.sql.Connection; import java.sql.ResultSet; @@ -125,7 +125,7 @@ public class NonSpatialFilterToSQL extends PreparedFilterToSQL { try { ArrayList layers = ServerContext.getMap().getAllLayers(); for (Layer layer : layers) { - if (!(layer instanceof com.geotwo.webserver.core.map.layer.FeatureLayer)) + if (!(layer instanceof kr.or.geoinfo.webserver.core.map.layer.FeatureLayer)) continue; if (layer.getServerName().equalsIgnoreCase(this.dsDialectNS.serverName) && layer.getSourceName().equalsIgnoreCase(this.featureType.getTypeName())) @@ -152,7 +152,7 @@ public class NonSpatialFilterToSQL extends PreparedFilterToSQL { try { ArrayList layers = ServerContext.getMap().getAllLayers(); for (Layer layer : layers) { - if (!(layer instanceof com.geotwo.webserver.core.map.layer.FeatureLayer)) + if (!(layer instanceof kr.or.geoinfo.webserver.core.map.layer.FeatureLayer)) continue; if (layer.getSourceName().equalsIgnoreCase(typeName)) return layer.getCRS(); diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/OracleDialect.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/OracleDialect.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/OracleDialect.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/OracleDialect.java index 461bd5f..51fff26 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/OracleDialect.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/OracleDialect.java @@ -1,11 +1,11 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; -import com.geotwo.webserver.core.vector.jdbc.O2GeometryTypeMap; -import com.geotwo.webserver.core.vector.jdbc.O2SqlDialect; -import com.geotwo.webserver.core.vector.jdbc.oracle.sdo.GeometryConverter; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2GeometryTypeMap; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2SqlDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo.GeometryConverter; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.Envelope; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java index ee52f41..4db3a03 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/OracleFilterToSQL.java @@ -1,10 +1,10 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle; //thkim 완전히 검증됨 -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.vector.jdbc.oracle.OracleDialect; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.vector.jdbc.oracle.OracleDialect; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Polygon; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java index 4e3ccff..5618edd 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/AttributeList.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import java.lang.reflect.Array; import java.util.AbstractList; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java similarity index 93% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java index 5178acf..3e715a5 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccess.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import com.vividsolutions.jts.geom.CoordinateSequence; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java similarity index 82% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java index ba40ea8..3d73843 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/CoordinateAccessFactory.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import com.vividsolutions.jts.geom.CoordinateSequenceFactory; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java index 1d86af0..335a8bc 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/Coordinates.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java index 1506859..02b612d 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/GeometryConverter.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateList; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java index f30a814..5545bc7 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/OrdinateList.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import java.util.AbstractList; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/SDO.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/SDO.java similarity index 99% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/SDO.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/SDO.java index 1cca4a5..c4507f7 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/oracle/sdo/SDO.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/oracle/sdo/SDO.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.oracle.sdo; +package kr.or.geoinfo.webserver.core.vector.jdbc.oracle.sdo; import com.vividsolutions.jts.algorithm.RobustCGAlgorithms; import com.vividsolutions.jts.geom.Coordinate; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleDialect.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleDialect.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleDialect.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleDialect.java index 312eafe..cc353b8 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleDialect.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleDialect.java @@ -1,11 +1,11 @@ -package com.geotwo.webserver.core.vector.jdbc.simple; +package kr.or.geoinfo.webserver.core.vector.jdbc.simple; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.core.vector.jdbc.O2DSFactory; -import com.geotwo.webserver.core.vector.jdbc.O2GeometryTypeMap; -import com.geotwo.webserver.core.vector.jdbc.O2SqlDialect; -import com.geotwo.webserver.core.vector.jdbc.WKBAttributeIO; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2DSFactory; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2GeometryTypeMap; +import kr.or.geoinfo.webserver.core.vector.jdbc.O2SqlDialect; +import kr.or.geoinfo.webserver.core.vector.jdbc.WKBAttributeIO; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java similarity index 94% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java index c12db0f..a69849a 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleFilterToSQL.java @@ -1,12 +1,12 @@ -package com.geotwo.webserver.core.vector.jdbc.simple; +package kr.or.geoinfo.webserver.core.vector.jdbc.simple; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.core.vector.jdbc.simple.SimpleDialect; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.vector.jdbc.simple.SimpleDialect; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Polygon; diff --git a/src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleSql.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleSql.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleSql.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleSql.java index f41cf8a..8f0f84c 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/jdbc/simple/SimpleSql.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/jdbc/simple/SimpleSql.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.jdbc.simple; +package kr.or.geoinfo.webserver.core.vector.jdbc.simple; public class SimpleSql { public final String KEY_GEOMTRY = "?GEOMETRY?"; diff --git a/src/main/java/com/geotwo/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java similarity index 97% rename from src/main/java/com/geotwo/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java index 6f63e99..6dad28b 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/memory/O2SpatialIndexFeatureCollection.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.core.vector.memory; +package kr.or.geoinfo.webserver.core.vector.memory; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.index.ItemVisitor; diff --git a/src/main/java/com/geotwo/webserver/core/vector/o2wps/O2WpsLayerSet.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/o2wps/O2WpsLayerSet.java similarity index 96% rename from src/main/java/com/geotwo/webserver/core/vector/o2wps/O2WpsLayerSet.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/o2wps/O2WpsLayerSet.java index 99a4e94..f57cf14 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/o2wps/O2WpsLayerSet.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/o2wps/O2WpsLayerSet.java @@ -1,14 +1,14 @@ -package com.geotwo.webserver.core.vector.o2wps; +package kr.or.geoinfo.webserver.core.vector.o2wps; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.map.LayerFactory; -import com.geotwo.webserver.core.map.LayerFactory.LayerType; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.WpsVecStoreMngr; -import com.geotwo.webserver.core.vector.WpsVecStoreMngr.O2WpsMetaFieldName; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.map.LayerFactory; +import kr.or.geoinfo.webserver.core.map.LayerFactory.LayerType; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.WpsVecStoreMngr; +import kr.or.geoinfo.webserver.core.vector.WpsVecStoreMngr.O2WpsMetaFieldName; import java.io.IOException; import java.sql.Connection; diff --git a/src/main/java/com/geotwo/webserver/core/vector/shape/ShpIndexMngr.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/shape/ShpIndexMngr.java similarity index 98% rename from src/main/java/com/geotwo/webserver/core/vector/shape/ShpIndexMngr.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/shape/ShpIndexMngr.java index bfb5872..fa42fd1 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/shape/ShpIndexMngr.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/shape/ShpIndexMngr.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.core.vector.shape; +package kr.or.geoinfo.webserver.core.vector.shape; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.GeometryFactory; import java.io.File; diff --git a/src/main/java/com/geotwo/webserver/core/vector/shape/ShpLayerInfo.java b/src/main/java/kr/or/geoinfo/webserver/core/vector/shape/ShpLayerInfo.java similarity index 90% rename from src/main/java/com/geotwo/webserver/core/vector/shape/ShpLayerInfo.java rename to src/main/java/kr/or/geoinfo/webserver/core/vector/shape/ShpLayerInfo.java index d6ef3d5..8c34286 100644 --- a/src/main/java/com/geotwo/webserver/core/vector/shape/ShpLayerInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/core/vector/shape/ShpLayerInfo.java @@ -1,8 +1,8 @@ -package com.geotwo.webserver.core.vector.shape; +package kr.or.geoinfo.webserver.core.vector.shape; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; import java.io.File; import org.opengis.referencing.crs.CoordinateReferenceSystem; diff --git a/src/main/java/com/geotwo/webserver/plugin/ServicesService.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ServicesService.java similarity index 88% rename from src/main/java/com/geotwo/webserver/plugin/ServicesService.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ServicesService.java index f73620d..b73e863 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ServicesService.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ServicesService.java @@ -1,11 +1,11 @@ -package com.geotwo.webserver.plugin; +package kr.or.geoinfo.webserver.plugin; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.service.AbstractService; -import com.geotwo.webserver.core.service.Service; -import com.geotwo.webserver.core.service.ServiceMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.plugin.ows.util.XMLUtil; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.service.AbstractService; +import kr.or.geoinfo.webserver.core.service.Service; +import kr.or.geoinfo.webserver.core.service.ServiceMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.plugin.ows.util.XMLUtil; import java.io.IOException; import java.util.Iterator; import java.util.Set; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/OWSConstants.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/OWSConstants.java similarity index 98% rename from src/main/java/com/geotwo/webserver/plugin/ows/OWSConstants.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/OWSConstants.java index 95f2ba0..ead4dab 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/OWSConstants.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/OWSConstants.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.plugin.ows; +package kr.or.geoinfo.webserver.plugin.ows; import java.util.Arrays; import java.util.Iterator; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/exception/OWSServiceException.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/exception/OWSServiceException.java similarity index 95% rename from src/main/java/com/geotwo/webserver/plugin/ows/exception/OWSServiceException.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/exception/OWSServiceException.java index 295a707..220127a 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/exception/OWSServiceException.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/exception/OWSServiceException.java @@ -1,7 +1,7 @@ -package com.geotwo.webserver.plugin.ows.exception; +package kr.or.geoinfo.webserver.plugin.ows.exception; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.log.LogMngr; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/gml/O2GML.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/gml/O2GML.java similarity index 98% rename from src/main/java/com/geotwo/webserver/plugin/ows/gml/O2GML.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/gml/O2GML.java index 21ca216..e5841fd 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/gml/O2GML.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/gml/O2GML.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.plugin.ows.gml; +package kr.or.geoinfo.webserver.plugin.ows.gml; -import com.geotwo.webserver.plugin.ows.util.XMLUtil; +import kr.or.geoinfo.webserver.plugin.ows.util.XMLUtil; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; diff --git a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/WMSService.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/WMSService.java new file mode 100644 index 0000000..f10f384 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/WMSService.java @@ -0,0 +1,104 @@ +package kr.or.geoinfo.webserver.plugin.ows.service; + +import kr.or.geoinfo.drilling.inquiry.service.DrillingInquiryService; +import kr.or.geoinfo.utils.ApplicationContextUtils; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.service.AbstractService; +import kr.or.geoinfo.webserver.plugin.ows.exception.OWSServiceException; +import kr.or.geoinfo.webserver.plugin.ows.service.parser.WMSParser; +import kr.or.geoinfo.webserver.plugin.ows.util.XMLUtil; +import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.WMSGetCapabilities; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.WMSGetFeatureInfo; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.WMSGetLegendGraphic; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.WMSGetMap; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetCapabilitiesRequest; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetFeatureInfoRequest; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetLegendGraphicRequest; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; +import java.io.IOException; +import java.util.HashMap; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.json.simple.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.w3c.dom.Document; + +public class WMSService extends AbstractService { + private static final long serialVersionUID = 2014061021213030L; + + @Autowired + DrillingInquiryService drillingInquiryService; + + public Request parseQuery(HttpServletRequest req) throws OWSServiceException, Exception { + Request requestObj = (new WMSParser(req)).parseQuery(); + return requestObj; + } + + public String doProcess(String str) { + return null; + } + + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + doPost(req, resp); + } + + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + Request requestObj = null; + Document doc = null; + + try { + requestObj = parseQuery(req); + } catch (OWSServiceException e) { + doc = e.getDocument(); + LogMngr.getInstance().logDebug("[SERVICE]", "WMS Request Prasing Exception : " + e.getMessage()); + } catch (Exception e) { + OWSServiceException ose = new OWSServiceException("[" + e.getClass().toString() + "] " + e.getMessage()); + doc = ose.getDocument(); + LogMngr.getInstance().logError("[SERVICE]", "WMS Request Prasing Exception : [" + e.getClass().toString() + "] " + e.getMessage()); + } + boolean isXMLWriteHere = true; + if (requestObj != null) { + if (requestObj.getVersion().equals("1.3.0")) { + if (requestObj instanceof GetCapabilitiesRequest) { + WMSGetCapabilities wmsGetCapabilities = new WMSGetCapabilities((GetCapabilitiesRequest) requestObj); + doc = wmsGetCapabilities.getCapabilities(); + } else if (requestObj instanceof GetMapRequest) { + WMSGetMap wmsGetMap = new WMSGetMap((GetMapRequest) requestObj); + doc = wmsGetMap.getMap(resp); + isXMLWriteHere = false; + } else if (requestObj instanceof GetFeatureInfoRequest) { + WMSGetFeatureInfo wmsGet = new WMSGetFeatureInfo((GetFeatureInfoRequest) requestObj); + doc = wmsGet.getFeatureInfo(resp); + isXMLWriteHere = false; + } else if (requestObj instanceof GetLegendGraphicRequest) { + WMSGetLegendGraphic wmsGetLegendGraphic = new WMSGetLegendGraphic((GetLegendGraphicRequest) requestObj); + doc = wmsGetLegendGraphic.getLegendGraphic(resp); + isXMLWriteHere = false; + } + } else { + LogMngr.getInstance().logDebug("[SERVICE]", "ver." + requestObj.getVersion() + " is not supported"); + } + } else { + LogMngr.getInstance().logDebug("[SERVICE]", "requestObj is not generated."); + } + if (doc != null) + try { + XMLUtil.writeToResponse(resp, doc); + } catch (Exception e) { + LogMngr.getInstance().logError("[SERVICE]", "Write XML Exception : " + e.getMessage()); + doc = null; + } + if (doc == null && isXMLWriteHere) { + resp.setContentType("text/xml; charset=UTF-8"); + RequestDispatcher dispatcher = req.getRequestDispatcher("/OWSServiceError.xml"); + dispatcher.forward((ServletRequest) req, (ServletResponse) resp); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/service/parser/WMSParser.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java similarity index 93% rename from src/main/java/com/geotwo/webserver/plugin/ows/service/parser/WMSParser.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java index 688b77c..f1425a0 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/service/parser/WMSParser.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/service/parser/WMSParser.java @@ -1,20 +1,23 @@ -package com.geotwo.webserver.plugin.ows.service.parser; +package kr.or.geoinfo.webserver.plugin.ows.service.parser; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.feature.QueryMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.render.StyleMngr; -import com.geotwo.webserver.core.util.ServerUtil; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.plugin.ows.OWSConstants; -import com.geotwo.webserver.plugin.ows.exception.OWSServiceException; -import com.geotwo.webserver.plugin.ows.util.PluginUtil; -import com.geotwo.webserver.plugin.ows.wms.request.Request; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetCapabilitiesRequest; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetFeatureInfoRequest; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetLegendGraphicRequest; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; +import kr.or.geoinfo.drilling.inquiry.service.DrillingInquiryService; +import kr.or.geoinfo.utils.ApplicationContextUtils; +import kr.or.geoinfo.utils.MyUtil; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.feature.QueryMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.render.StyleMngr; +import kr.or.geoinfo.webserver.core.util.ServerUtil; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.plugin.ows.OWSConstants; +import kr.or.geoinfo.webserver.plugin.ows.exception.OWSServiceException; +import kr.or.geoinfo.webserver.plugin.ows.util.PluginUtil; +import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetCapabilitiesRequest; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetFeatureInfoRequest; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetLegendGraphicRequest; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -45,6 +48,7 @@ import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.styling.StyledLayerDescriptor; import org.geotools.xml.Configuration; import org.geotools.xml.Parser; +import org.json.simple.JSONObject; import org.opengis.filter.And; import org.opengis.filter.Filter; import org.opengis.referencing.crs.CoordinateReferenceSystem; @@ -268,6 +272,9 @@ public class WMSParser { } Filter cFilter = null; String strCql = this.reqMap.get("CQL"); + + // thkim 발주기관에서 요청한 경우, 발주기관에 소속된 시추공만 보여준다. + strCql = drillingProjectCodes(strCql); if (!ServerUtil.isNullString(strCql)) cFilter = CQL.toFilter(strCql); if (fFilter != null) { @@ -924,4 +931,52 @@ public class WMSParser { } return filter; } + + + + private String drillingProjectCodes(String strCql) throws Exception { + JSONObject result = null; + String projectCodes = null; + + String projectMasterCompanyCode = req.getParameter("projectMasterCompanyCode"); + if( projectMasterCompanyCode != null ) { + try { + // 1. ApplicationContext에서 Service Bean을 직접 가져옵니다. + DrillingInquiryService inquiryService = + (DrillingInquiryService) ApplicationContextUtils.getBean("drillingInquiryService"); + + // 2. 서비스 호출에 필요한 파라미터 준비 + HashMap serviceParams = new HashMap<>(); + // 예: req에서 파라미터를 꺼내서 serviceParams에 담기 + // serviceParams.put("constName", req.getParameter("constName")); + + // 3. 서비스 메서드 호출 + result = inquiryService.drillingInquiryProjectCodes(req, serviceParams); + + projectCodes = MyUtil.getStringFromObject( result.get("data") ); + + // 4. 결과 사용 + System.out.println("WMSService에서 조회된 코드: " + projectCodes); + + } catch (Exception e) { + // Bean을 가져오거나 서비스 호출 시 발생한 예외 처리 + LogMngr.getInstance().logError("[SERVICE]", "DrillingInquiryService 호출 오류: " + e.getMessage()); + } + + + if( projectCodes == null ) { + throw new Exception("projectCodes를 구할 수 없습니다."); + } + if( strCql == null ) { + strCql = " PROJECT_CODE IN (" + projectCodes + ") "; + } else { + strCql = " ( " + strCql + " ) AND (" + projectCodes + ") "; + } + } + + return strCql; + } + + + } diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/util/JsonUtil.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/JsonUtil.java similarity index 95% rename from src/main/java/com/geotwo/webserver/plugin/ows/util/JsonUtil.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/JsonUtil.java index a012362..547a155 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/util/JsonUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/JsonUtil.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.plugin.ows.util; +package kr.or.geoinfo.webserver.plugin.ows.util; import java.io.StringWriter; import javax.servlet.http.HttpServletResponse; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/util/PluginUtil.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/PluginUtil.java similarity index 97% rename from src/main/java/com/geotwo/webserver/plugin/ows/util/PluginUtil.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/PluginUtil.java index 35fee76..cda27de 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/util/PluginUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/PluginUtil.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.plugin.ows.util; +package kr.or.geoinfo.webserver.plugin.ows.util; import java.io.File; import java.net.URLDecoder; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/util/XMLUtil.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/XMLUtil.java similarity index 98% rename from src/main/java/com/geotwo/webserver/plugin/ows/util/XMLUtil.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/XMLUtil.java index 03aa4b9..ea824da 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/util/XMLUtil.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/util/XMLUtil.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.plugin.ows.util; +package kr.or.geoinfo.webserver.plugin.ows.util; -import com.geotwo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.ServerContext; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/request/Request.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/request/Request.java similarity index 95% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/request/Request.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/request/Request.java index 78e65fd..81c6956 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/request/Request.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/request/Request.java @@ -1,4 +1,4 @@ -package com.geotwo.webserver.plugin.ows.wms.request; +package kr.or.geoinfo.webserver.plugin.ows.wms.request; import org.opengis.filter.Filter; public class Request { diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java similarity index 97% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java index 086ffd9..372fa16 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetCapabilities.java @@ -1,13 +1,13 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130; +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.feature.GeometryMngr; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.core.vector.crs.CRSMngr; -import com.geotwo.webserver.plugin.ows.OWSConstants; -import com.geotwo.webserver.plugin.ows.exception.OWSServiceException; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetCapabilitiesRequest; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.feature.GeometryMngr; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.core.vector.crs.CRSMngr; +import kr.or.geoinfo.webserver.plugin.ows.OWSConstants; +import kr.or.geoinfo.webserver.plugin.ows.exception.OWSServiceException; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetCapabilitiesRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java similarity index 92% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java index 6dab4c6..fafba66 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetFeatureInfo.java @@ -1,17 +1,17 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130; +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130; -import com.geotwo.webserver.core.ServerContext; -import com.geotwo.webserver.core.feature.FeatureMngr; -import com.geotwo.webserver.core.feature.GeometryMngr; -import com.geotwo.webserver.core.feature.O2FeatureCollection; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.map.layer.FeatureLayer; -import com.geotwo.webserver.core.map.layer.Layer; -import com.geotwo.webserver.plugin.ows.exception.OWSServiceException; -import com.geotwo.webserver.plugin.ows.gml.O2GML; -import com.geotwo.webserver.plugin.ows.util.JsonUtil; -import com.geotwo.webserver.plugin.ows.util.XMLUtil; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetFeatureInfoRequest; +import kr.or.geoinfo.webserver.core.ServerContext; +import kr.or.geoinfo.webserver.core.feature.FeatureMngr; +import kr.or.geoinfo.webserver.core.feature.GeometryMngr; +import kr.or.geoinfo.webserver.core.feature.O2FeatureCollection; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.map.layer.FeatureLayer; +import kr.or.geoinfo.webserver.core.map.layer.Layer; +import kr.or.geoinfo.webserver.plugin.ows.exception.OWSServiceException; +import kr.or.geoinfo.webserver.plugin.ows.gml.O2GML; +import kr.or.geoinfo.webserver.plugin.ows.util.JsonUtil; +import kr.or.geoinfo.webserver.plugin.ows.util.XMLUtil; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetFeatureInfoRequest; import com.vividsolutions.jts.geom.Polygon; import java.io.IOException; import java.nio.charset.Charset; @@ -77,9 +77,9 @@ public class WMSGetFeatureInfo { Layer mapLayer = ServerContext.getMap().getLayer(layerName); if (mapLayer == null) throw new IllegalArgumentException("QUERY_LAYERS [" + layerName + "] is not exist."); - if (mapLayer instanceof com.geotwo.webserver.core.map.layer.LinkLayer) + if (mapLayer instanceof kr.or.geoinfo.webserver.core.map.layer.LinkLayer) throw new IllegalArgumentException("[" + layerName + "] is not support this operation."); - if (mapLayer instanceof com.geotwo.webserver.core.map.layer.GroupLayer) + if (mapLayer instanceof kr.or.geoinfo.webserver.core.map.layer.GroupLayer) throw new IllegalArgumentException("[" + layerName + "] is not support this operation."); mapLayers.add((FeatureLayer)mapLayer); } catch (Exception e) { diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java similarity index 88% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java index 2490bad..bcbb0ba 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetLegendGraphic.java @@ -1,10 +1,10 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130; +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130; -import com.geotwo.webserver.core.log.LogMngr; -import com.geotwo.webserver.core.render.legend.LegendGraphicBuilder; -import com.geotwo.webserver.core.util.AVList; -import com.geotwo.webserver.plugin.ows.exception.OWSServiceException; -import com.geotwo.webserver.plugin.ows.wms.wms130.request.GetLegendGraphicRequest; +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.legend.LegendGraphicBuilder; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.plugin.ows.exception.OWSServiceException; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetLegendGraphicRequest; import java.awt.image.BufferedImage; import java.io.OutputStream; import javax.imageio.ImageIO; diff --git a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java new file mode 100644 index 0000000..b5c66f8 --- /dev/null +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/WMSGetMap.java @@ -0,0 +1,78 @@ +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130; + +import kr.or.geoinfo.webserver.core.log.LogMngr; +import kr.or.geoinfo.webserver.core.render.RenderMngr; +import kr.or.geoinfo.webserver.core.render.io.O2PngWriter; +import kr.or.geoinfo.webserver.core.util.AVList; +import kr.or.geoinfo.webserver.plugin.ows.exception.OWSServiceException; +import kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request.GetMapRequest; +import java.awt.image.BufferedImage; +import java.io.OutputStream; +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import org.w3c.dom.Document; + +public class WMSGetMap { + GetMapRequest requestObj = null; + + public WMSGetMap(GetMapRequest requestObj) { + this.requestObj = requestObj; + } + + public Document getMap(HttpServletResponse resp) { + AVList params = new AVList(); + params.setValue("request.wms.layers", this.requestObj.getLayers()); + params.setValue("request.wms.bbox", this.requestObj.getBbox()); + params.setValue("request.wms.width", Integer.valueOf(this.requestObj.getWidth())); + params.setValue("request.wms.height", Integer.valueOf(this.requestObj.getHeight())); + params.setValue("request.wms.format", this.requestObj.getFormat()); + params.setValue("request.wms.transparent", Boolean.valueOf(this.requestObj.isTransparent())); + params.setValue("request.wms.bgcolor", this.requestObj.getBgcolor()); + params.setValue("request.wms.styles", this.requestObj.getStyles()); + params.setValue("request.wms.filter", this.requestObj.getFilter()); + if (this.requestObj.getSld() != null) + params.setValue("request.wms.sld", this.requestObj.getSld()); + BufferedImage image = null; + Document doc = null; + try { + image = RenderMngr.productMap(params); + } catch (Exception e) { + OWSServiceException ose = new OWSServiceException("WMS GetMap Exception : Image process fails : " + e.getMessage()); + doc = ose.getDocument(); + LogMngr.getInstance().logError("[SERVICE]", "WMS GetMap Exception : Image process fails : " + e.getMessage()); + } + if (image != null) + try { + writeImage(image, resp); + } catch (Exception e) { + OWSServiceException ose = new OWSServiceException("WMS GetMap Exception : Write IMAGE fails : " + e.getMessage()); + doc = ose.getDocument(); + LogMngr.getInstance().logError("[SERVICE]", "WMS GetMap Exception : Write IMAGE fails : " + e.getMessage()); + } + return doc; + } + + private void writeImage(BufferedImage image, HttpServletResponse resp) throws Exception { + ServletOutputStream servletOutputStream = null; + OutputStream out = null; + try { + String format = this.requestObj.getFormat(); + String[] formatElement = format.split("/"); + resp.setContentType(format); + servletOutputStream = resp.getOutputStream(); + if (format.toUpperCase().contains("PNG")) { + O2PngWriter.writePNG(image, (OutputStream) servletOutputStream); + } else { + ImageIO.write(image, formatElement[1], (OutputStream) servletOutputStream); + } + } catch (Exception e) { + throw e; + } finally { + if (servletOutputStream != null) { + servletOutputStream.flush(); + servletOutputStream.close(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java new file mode 100644 index 0000000..452a05f --- /dev/null +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetCapabilitiesRequest.java @@ -0,0 +1,5 @@ +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request; + +import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; + +public class GetCapabilitiesRequest extends Request {} diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java similarity index 94% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java index e3b92cf..c06c789 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetFeatureInfoRequest.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130.request; +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request; -import com.geotwo.webserver.plugin.ows.wms.request.Request; +import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.styling.StyledLayerDescriptor; import org.opengis.referencing.crs.CoordinateReferenceSystem; diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java similarity index 91% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java index 925b0c1..8a32f1b 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetLegendGraphicRequest.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130.request; +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request; -import com.geotwo.webserver.plugin.ows.wms.request.Request; +import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; import org.geotools.styling.StyledLayerDescriptor; public class GetLegendGraphicRequest extends Request { diff --git a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java similarity index 95% rename from src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java rename to src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java index 34fe6d9..5f44dbd 100644 --- a/src/main/java/com/geotwo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java +++ b/src/main/java/kr/or/geoinfo/webserver/plugin/ows/wms/wms130/request/GetMapRequest.java @@ -1,6 +1,6 @@ -package com.geotwo.webserver.plugin.ows.wms.wms130.request; +package kr.or.geoinfo.webserver.plugin.ows.wms.wms130.request; -import com.geotwo.webserver.plugin.ows.wms.request.Request; +import kr.or.geoinfo.webserver.plugin.ows.wms.request.Request; import java.awt.Color; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.styling.StyledLayerDescriptor; diff --git a/src/main/resources/egovframework/spring/context-common.xml b/src/main/resources/egovframework/spring/context-common.xml index b96145f..58079a3 100644 --- a/src/main/resources/egovframework/spring/context-common.xml +++ b/src/main/resources/egovframework/spring/context-common.xml @@ -4,7 +4,7 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> - + diff --git a/src/main/resources/egovframework/spring/context-mybatis.xml b/src/main/resources/egovframework/spring/context-mybatis.xml new file mode 100644 index 0000000..a76fb6a --- /dev/null +++ b/src/main/resources/egovframework/spring/context-mybatis.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/egovframework/sqlmap/mapper/com/Jusangdo_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/com/Jusangdo_SQL.xml deleted file mode 100644 index 127c108..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/com/Jusangdo_SQL.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/drilling/home/DrillingHomeMapper.xml b/src/main/resources/egovframework/sqlmap/mapper/drilling/home/DrillingHomeMapper.xml deleted file mode 100644 index 0e50303..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/drilling/home/DrillingHomeMapper.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml b/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml deleted file mode 100644 index 2dc5735..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/drilling/input/DrillingInputMapper.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml b/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml index 16f0071..e035958 100644 --- a/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml +++ b/src/main/resources/egovframework/sqlmap/mapper/drilling/inquiry/DrillingInquiryMapper.xml @@ -1,11 +1,21 @@ - - - - + SELECT + LISTAGG(COM_CODE, ',') WITHIN GROUP ( + ORDER BY COM_CODE) AS COM_CODES + FROM + TBL_CONST_COMPANY + WHERE + REPLACE(COM_NAME, ' ', '') LIKE '%' || #{constCompanyName} || '%' + + + + + - - - - - - + { CALL SP_GET_MASTER_COMPANY_DISTRICT( + #{projectMasterCompanyName}, + #{v_gl, mode=OUT, jdbcType=VARCHAR}, + #{v_gm, mode=OUT, jdbcType=VARCHAR}, + #{v_gs, mode=OUT, jdbcType=VARCHAR}, + #{v_gf, mode=OUT, jdbcType=VARCHAR} ) } - - - - - - - - - - - + \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/jibanModel/jibanModel_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/jibanModel/jibanModel_SQL.xml deleted file mode 100644 index 914a6de..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/jibanModel/jibanModel_SQL.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/jihaanjeonMoel/jihaanjeonModel_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/jihaanjeonMoel/jihaanjeonModel_SQL.xml deleted file mode 100644 index a7d84cb..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/jihaanjeonMoel/jihaanjeonModel_SQL.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Community_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Community_SQL.xml deleted file mode 100644 index 35a4fd1..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Community_SQL.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Data_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Data_SQL.xml deleted file mode 100644 index 0d72a26..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Data_SQL.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Faq_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Faq_SQL.xml deleted file mode 100644 index d94b83a..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Faq_SQL.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/File2019_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/File2019_SQL.xml deleted file mode 100644 index 267f813..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/File2019_SQL.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - SELECT MAX(FILE_NO)+1 FROM WEB_COMM_FILE - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/File_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/File_SQL.xml deleted file mode 100644 index e9c10f4..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/File_SQL.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/GroundReport_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/GroundReport_SQL.xml deleted file mode 100644 index 35600f3..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/GroundReport_SQL.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Home_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Home_SQL.xml deleted file mode 100644 index e39df5e..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Home_SQL.xml +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INSERT INTO WEB_MEMBER_EXIT - (USERID, USERNAME, UPJONG_CODE, EXIT_CAUSE) - VALUES (#{userId}, #{userName}, #{upjong_code}, #{exit_cause}) - - - DELETE WEB_MEMBER_IN - WHERE TRIM(USERID) = #{userId} - AND TRIM(PASSWD) = #{pass} - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Join_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Join_SQL.xml deleted file mode 100644 index 5e33b93..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Join_SQL.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - INSERT INTO WEB_MEMBER_IN (USERID,PASSWD,USER_NAME,PHONE,EMAIL,COMPANY_NAME,PART_NAME,ZIP_CODE,ADDRESS,COMPANY_REGIST_NO,UPJONG_CODE,CLS, DUPINFO, VIRTUALNO, LAST_LOGIN_DATE, AGREEYN, LOGIN_COUNT, ENCRYPT_CHANGE, SEQ, LIQ_YN, FILENAME, SAVENAME, GOVEMENT_CODE, CERTIFICATION_YN, COMPANY_CEO, COMPANY_OPENING_DATE) - VALUES(#{userId, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR},#{userName, jdbcType=VARCHAR},#{phone, jdbcType=VARCHAR},#{email, jdbcType=VARCHAR},#{companyName3, jdbcType=VARCHAR},#{part, jdbcType=VARCHAR}, - - - - - - - #{address, jdbcType=VARCHAR},#{companyNo, jdbcType=VARCHAR},#{upjong, jdbcType=VARCHAR},#{cls},#{DUPINFO},#{VIRTUALNO},SYSDATE-1, - #{agreeyn},0,'Y', (select max(seq)+1 from web_member_in), #{liqYn}, #{fileName}, #{saveName}, #{companyName2}, 1, #{companyCeo}, #{companyOpeningDate}) - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Login_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Login_SQL.xml deleted file mode 100644 index 173bad6..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Login_SQL.xml +++ /dev/null @@ -1,590 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UPDATE ${table} SET ${values} WHERE ${where} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UPDATE WEB_DOWNLOAD_LOG - SET DOWNYN = 'R' - - , USE_CONTENTS = #{content} - - - , FILENAME = #{filename} - , SAVENAME = #{savename} - - - , FILENAME2 = #{filename2} - , SAVENAME2 = #{savename2} - - , PHONE = #{phone} - WHERE APPROVE = 'Y' - AND USERID = #{userId} - - AND DOWNYN = 'W' - - - AND IDX = #{idx} - - - AND DOWNYN = 'R' - - - - - - - - - - - - - - - - - - - - - - - '5' - ]]> - - - - - - INSERT INTO WEB_MEMBER_IN (USERID,PASSWD,USER_NAME,PHONE,EMAIL,COMPANY_NAME,PART_NAME,COMPANY_REGIST_NO,UPJONG_CODE,CLS,LAST_LOGIN_DATE,AGREEYN, LOGIN_COUNT, SEQ, LIQ_YN,GOVEMENT_CODE) - VALUES(#{userId},'528fe0ece2ee8afa2b26',#{userName},#{phone},#{email},#{companyName},#{part},#{companyNo},#{upjong},#{cls},SYSDATE,'Y','0',(select max(seq)+1 from web_member_in), 'N', '00') - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Notice_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Notice_SQL.xml deleted file mode 100644 index 516250c..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Notice_SQL.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/QnA_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/QnA_SQL.xml deleted file mode 100644 index 5ce0d32..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/QnA_SQL.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/main/Vote_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/main/Vote_SQL.xml deleted file mode 100644 index 2c95fca..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/main/Vote_SQL.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapCom_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapCom_SQL.xml deleted file mode 100644 index 7b63b55..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapCom_SQL.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapControl_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapControl_SQL.xml deleted file mode 100644 index 4f81a62..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapControl_SQL.xml +++ /dev/null @@ -1,787 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UPDATE WEB_CART SET DATETIME = SYSDATE, SELECT_CODE = #{selectCode} WHERE TRIM(USERID) = #{userId} - - - - INSERT INTO WEB_CART - ( - SELECT - NVL(MAX(IDX),0) + 1, #{userId}, #{mId}, SYSDATE, #{hcode}, #{cartType}, #{selectCode} - FROM WEB_CART - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapCoordSearch_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapCoordSearch_SQL.xml deleted file mode 100644 index 2f438dd..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapCoordSearch_SQL.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapInformation_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapInformation_SQL.xml deleted file mode 100644 index 17f447c..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapInformation_SQL.xml +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapLeft_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapLeft_SQL.xml deleted file mode 100644 index a62fde2..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapLeft_SQL.xml +++ /dev/null @@ -1,1436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SELECT NVL(MAX(IDX),0) + 1 FROM WEB_DOWNLOAD_LOG - - - - - - - SELECT 1 FROM DUAL - - - INSERT INTO WEB_DIST_SURVEY - ( - SELECT - - - FROM WEB_DIST_SURVEY - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapMain_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapMain_SQL.xml deleted file mode 100644 index 4adb37d..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapMain_SQL.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/map/MapProjectSearch_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/map/MapProjectSearch_SQL.xml deleted file mode 100644 index 2394a96..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/map/MapProjectSearch_SQL.xml +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/basic_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/basic_SQL.xml deleted file mode 100644 index 981b91c..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/basic_SQL.xml +++ /dev/null @@ -1,772 +0,0 @@ - - - - - - - - - - - DELETE FROM TEMP_SPT WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - DELETE FROM TEMP_SPT WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} AND (SEQ > #{seq}) - - - - INSERT INTO TEMP_SPT ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DEPTH_SPT - , SPT_N - , SPT_DEPTH - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_SPT WHERE PROJECT_CODE=#{projectCode} AND HOLE_CODE=#{holeCode}) - , #{depthSpt} - , #{sptN} - , #{sptDepth} - , #{userId} - , SYSDATE - ) - - - - INSERT - INTO TEMP_SPT ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DEPTH_SPT - , SPT_N - , SPT_DEPTH - , USERID - , DATETIME - ) - ${insertSet} - - - - - - - - - - - - DELETE FROM TEMP_SLICKENSIDE_INFO WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_SLICKENSIDE_INFO ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , SLICKENSIDE_DEPTH_FROM - , SLICKENSIDE_DEPTH_TO - , SLICKENSIDE_DIRECTION - , SLICKENSIDE_ANGLE - , SLICKENSIDE_MAX - , SLICKENSIDE_MIN - , SLICKENSIDE_AVG - , SLICKENSIDE_ROUGH - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_SLICKENSIDE_INFO WHERE - PROJECT_CODE=#{projectCode} AND HOLE_CODE=#{holeCode}) - , #{slickensideDepthFrom} - , #{slickensideDepthTo} - , #{slickensideDirection} - , #{slickensideAngle} - , #{slickensideMax} - , #{slickensideMin} - , #{slickensideAvg} - , #{slickensideRough} - , #{userId} - , SYSDATE - ) - - - - - - DELETE FROM TEMP_RQD WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_RQD ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , RT_DEPTH_FROM - , RT_DEPTH_TO - , RT_TCR - , RT_RQD - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_RQD WHERE PROJECT_CODE=#{projectCode} AND HOLE_CODE=#{holeCode}) - , #{rtDepthFrom} - , #{rtDepthTo} - , #{rtTcr} - , #{rtRqd} - , #{userId} - , SYSDATE - ) - - - - - - DELETE FROM TEMP_DSF WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_DSF ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DSF_DEPTH_FROM - , DSF_DEPTH_TO - , DSF_DECOMPOSITION - , DSF_STRENGTH - , DSF_FRACTURING - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_DSF WHERE PROJECT_CODE=#{projectCode} AND HOLE_CODE=#{holeCode}) - , #{dsfDepthFrom} - , #{dsfDepthTo} - , #{dsfDecomposition} - , #{dsfStrength} - , #{dsfFracturing} - , #{userId} - , SYSDATE - ) - - - - - - - - DELETE FROM TEMP_Q WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_Q ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DEPTH_FROM - , DEPTH_TO - , ROCK_TYPE - , RQD - , RQD_DESC - , JN - , JN_DESC - , JR - , JR_DESC - , JA - , JA_DESC - , JW - , JW_DESC - , SRF - , SRF_DESC - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_Q WHERE PROJECT_CODE=#{projectCode} AND HOLE_CODE=#{holeCode}) - , #{depthFrom} - , #{depthTo} - , #{rockType} - , #{rqd} - , #{rqdDesc} - , #{jn} - , #{jnDesc} - , #{jr} - , #{jrDesc} - , #{ja} - , #{jaDesc} - , #{jw} - , #{jwDesc} - , #{srf} - , #{srfDesc} - , #{userId} - , SYSDATE - ) - - - - - - DELETE FROM TEMP_RMR WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_RMR ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DEPTH_FROM - , DEPTH_TO - , ROCK_TYPE - , ROCK_STRENGTH - , ROCK_STRENGTH_POINT - , ROCK_STRENGTH_DESC - , RQD - , RQD_POINT - , RQD_DESC - , JOINTS_SPACING - , JOINTS_SPACING_POINT - , JOINTS_SPACING_DESC - , JOINT_CONDITION - , JOINT_CONDITION_POINT - , GROUNDWATER_CONDITION - , GROUNDWATER_CONDITION_POINT - , JOINT_ORIENTATION - , JOINT_ORIENTATION_POINT - , JOINT_ORIENTATION_DESC - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_RMR WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode}) - , #{depthFrom} - , #{depthTo} - , #{rockType} - , #{rockStrength} - , #{rockStrengthPoint} - , #{rockStrengthDesc} - , #{rqd} - , #{rqdPoint} - , #{rqdDesc} - , #{jointsSpacing} - , #{jointsSpacingPoint} - , #{jointsSpacingDesc} - , #{jointCondition} - , #{jointConditionPoint} - , #{groundwaterCondition} - , #{groundwaterConditionPoint} - , #{jointOrientation} - , #{jointOrientationPoint} - , #{jointOrientationDesc} - , #{userId} - , SYSDATE - ) - - - - - - DELETE FROM TEMP_FIELD_PRESSUREMETER WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_FIELD_PRESSUREMETER ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , FIELDPRES_CODE - , FIELDPRES_TUBE_TYPE - , FIELDPRES_INSPECTED_BY - , FIELDPRES_CHECKED_BY - , FIELDPRES_DEPTH - , FIELDPRES_KP - , FIELDPRES_EP - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_FIELD_PRESSUREMETER WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode}) - , #{fieldpresCode} - , #{fieldpresTubeType} - , #{fieldpresInspectedBy} - , #{fieldpresCheckedBy} - , #{fieldpresDepth} - , #{fieldpresKp} - , #{fieldpresEp} - , #{userId} - , SYSDATE - ) - - - - INSERT INTO TEMP_FIELD_PRESSUREMETER ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , FIELDPRES_CODE - , FIELDPRES_TUBE_TYPE - , FIELDPRES_INSPECTED_BY - , FIELDPRES_CHECKED_BY - , FIELDPRES_DEPTH - , FIELDPRES_KP - , FIELDPRES_EP - , USERID - , DATETIME - , GRAPH_IMAGE - , GRAPH_LOCAL - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_FIELD_PRESSUREMETER WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode}) - , #{fieldpresCode} - , #{fieldpresTubeType} - , #{fieldpresInspectedBy} - , #{fieldpresCheckedBy} - , #{fieldpresDepth} - , #{fieldpresKp} - , #{fieldpresEp} - , #{userId} - , SYSDATE - , #{graphImage} - , #{graphLocal} - ) - - - - - - - - - - - - - - - - - - - - - DELETE FROM TEMP_FIELD_CONE_PENETRATION WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_FIELD_CONE_PENETRATION ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , CP_CODE - , CP_DEPTH_FROM - , CP_DEPTH_TO - , CP_EDGE_RESISTENCE - , CP_CORRECTED_EDGE_RESISTENCE - , CP_SLEEVE_FRICTIONAL_FORCE - , CP_NEUTRALSTRESS - , CP_FRICTIONAL_RATIO - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , (SELECT NVL(MAX(SEQ),0)+1 FROM TEMP_FIELD_CONE_PENETRATION WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode}) - , #{cpCode} - , #{cpDepthFrom} - , #{cpDepthTo} - , #{cpEdgeResistence} - , #{cpCorrectedEdgeResistence} - , #{cpSleeveFrictionalForce} - , #{cpNeutralstress} - , #{cpFrictionalRatio} - , #{userId} - , SYSDATE - ) - - - - MERGE INTO TEMP_CONE_PENETRATION_IMAGES - USING DUAL - ON ( PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - ) - WHEN MATCHED THEN - UPDATE SET - GRAPH_IMAGE = #{graphImage} - , GRAPH_LOCAL = #{graphLocal} - , USERID = #{userId} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , HOLE_CODE - , GRAPH_IMAGE - , GRAPH_LOCAL - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{graphImage} - , #{graphLocal} - , #{userId} - , SYSDATE - ) - - - - DELETE FROM TEMP_CONE_PENETRATION_IMAGES WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - - - - - UPDATE TEMP_WP_TEST - SET WP_CODE = #{wpCode} - , USERID = #{userId} - , DATETIME = SYSDATE - WHERE PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - AND WP_CODE = #{oldWpCode} - - - - DELETE FROM TEMP_FIELD_WATERPRESSURE WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - DELETE FROM TEMP_WP_TEST WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} AND SEQ = #{seq} - - - - INSERT INTO TEMP_WP_TEST ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , WP_CODE - , WPTEST_ORDER - , WPTEST_WATER_PRESSURE - , WPTEST_TOTAL_HEAD - , WPTEST_QUANTITY - , WPTEST_PERMEABILITY - , WPLUGEON_ORDER - , WPLUGEON_PRESSURE - , WPLUGEON_INJECT_WATER - , WPLUGEON_LU - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{seq} - , #{newWpCode} - , #{wptestOrder} - , #{wptestWaterPressure} - , #{wptestTotalHead} - , #{wptestQuantity} - , #{wptestPermeability} - , #{wplugeonOrder} - , #{wplugeonPressure} - , #{wplugeonInjectWater} - , #{wplugeonLu} - , #{userId} - , SYSDATE - ) - - - - INSERT INTO TEMP_FIELD_WATERPRESSURE ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , WP_CODE - , FIELDWP_DEPTH_FROM - , FIELDWP_DEPTH_TO - , FIELDWP_PACKER_TYPE - , FIELDWP_TEST_SPACING - , FIELDWB_WATER_PRESSURE - , FIELDWP_AVG_PERMEABILITY - , FIELDWP_LU - , FIELDWP_INSPECTED_BY - , FIELDWP_CHECKED_BY - , FIELDWP_REMARK - , GRAPH_IMAGE - , GRAPH_LOCAL - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{seq} - , #{wpCode} - , #{fieldwpDepthFrom} - , #{fieldwpDepthTo} - , #{fieldwpPackerType} - , #{fieldwpTestSpacing} - , #{fieldwbWaterPressure} - , #{fieldwpAvgPermeability} - , #{fieldwpLu} - , #{fieldwpInspectedBy} - , #{fieldwpCheckedBy} - , #{fieldwpRemark} - , #{graphImage} - , #{graphLocal} - , #{userId} - , SYSDATE - ) - - - - - - - - UPDATE TEMP_FIELDPER_SUB - SET FIELDPER_CODE = #{fieldperCode} - , USERID = #{userId} - , DATETIME = SYSDATE - WHERE PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - AND FIELDPER_CODE = #{oldFieldperCode} - - - - DELETE FROM TEMP_FIELD_PERMEABILITY WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_FIELD_PERMEABILITY ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , FIELDPER_CODE - , FIELDPER_DEPTH_FROM - , FIELDPER_DEPTH_TO - , FIELDPER_CASING_DIA - , FIELDPER_CASING_HEIGHT - , FIELDPER_AVG_PERMEABILITY - , FIELDPER_INSPECTED_BY - , FIELDPER_CHECKED_BY - , FIELDPER_REMARK - , GRAPH_IMAGE - , GRAPH_LOCAL - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{seq} - , #{fieldperCode} - , #{fieldperDepthFrom} - , #{fieldperDepthTo} - , #{fieldperCasingDia} - , #{fieldperCasingHeight} - , #{fieldperAvgPermeability} - , #{fieldperInspectedBy} - , #{fieldperCheckedBy} - , #{fieldperRemark} - , #{graphImage} - , #{graphLocal} - , #{userId} - , SYSDATE - ) - - - - DELETE FROM TEMP_FIELDPER_SUB WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} AND SEQ = #{seq} - - - - INSERT INTO TEMP_FIELDPER_SUB ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , FIELDPER_CODE - , FIELDPER_ORDER - , FIELDPER_SUB_TIME - , FIELDPER_SUB_TOTAL_HEAD - , FIELDPER_SUB_FALLING_HEAD - , FIELDPER_SUB_WATER_LOOSE - , FIELDPER_SUB_QUANTITY - , FIELDPER_SUB_PERMEABILITY - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{seq} - , #{fieldperCode} - , #{fieldperOrder} - , #{fieldperSubTime} - , #{fieldperSubTotalHead} - , #{fieldperSubFallingHead} - , #{fieldperSubWaterLoose} - , #{fieldperSubQuantity} - , #{fieldperSubPermeability} - , #{userId} - , SYSDATE - ) - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/common.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/common.xml deleted file mode 100644 index dcd3bae..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/common.xml +++ /dev/null @@ -1,631 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/complete.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/complete.xml deleted file mode 100644 index 7ab02cd..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/complete.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/complete_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/complete_SQL.xml deleted file mode 100644 index 5df3b61..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/complete_SQL.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/geoLogging_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/geoLogging_SQL.xml deleted file mode 100644 index 70b4b17..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/geoLogging_SQL.xml +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - DELETE FROM TEMP_BOREHOLE_WAVE_PS WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_BOREHOLE_WAVE_PS ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , BH_DEPTH_FROM - , BH_DEPTH_TO - , BH_VP_VELOCITY - , BH_VS_VELOCITY - , BH_POISSONS_RATIO - , BH_SHEAR_MODULUS - , BH_YOUNGS_MODULUS - , BH_DENSITY - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{seq} - , #{bhDepthFrom} - , #{bhDepthTo} - , #{bhVpVelocity} - , #{bhVsVelocity} - , #{bhPoissonsRatio} - , #{bhShearModulus} - , #{bhYoungsModulus} - , #{bhDensity} - , #{userId} - , SYSDATE - ) - - - - MERGE INTO TEMP_BOREHOLE_WAVE - USING DUAL - ON ( PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - ) - WHEN MATCHED THEN - UPDATE SET BH_CHECKED_BY = #{bhCheckedBy} - , GRAPH_IMAGE = #{graphImage} - , GRAPH_LOCAL = #{graphLocal} - , USERID = #{userId} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , HOLE_CODE - , BH_CHECKED_BY - , GRAPH_IMAGE - , GRAPH_LOCAL - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{bhCheckedBy} - , #{graphImage} - , #{graphLocal} - , #{userId} - , SYSDATE - ) - - - - - - - - DELETE FROM TEMP_DOWNHOLE_PS WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_DOWNHOLE_PS ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DH_DEPTH_FROM - , DH_DEPTH_TO - , DH_VP_VELOCITY - , DH_VS_VELOCITY - , DH_POISSONS_RATIO - , DH_SHEAR_MODULUS - , DH_YOUNGS_MODULUS - , DH_DENSITY - , USERID - , DATETIME - ) VALUES ( - #{PROJECT_CODE} - , #{HOLE_CODE} - , #{SEQ} - , #{DH_DEPTH_FROM} - , #{DH_DEPTH_TO} - , #{DH_VP_VELOCITY} - , #{DH_VS_VELOCITY} - , #{DH_POISSONS_RATIO} - , #{DH_SHEAR_MODULUS} - , #{DH_YOUNGS_MODULUS} - , #{DH_DENSITY} - , #{userId} - , SYSDATE - ) - - - - MERGE INTO TEMP_DOWNHOLE - USING DUAL - ON ( PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - ) - WHEN MATCHED THEN - UPDATE SET DH_CHECKED_BY = #{DH_CHECKED_BY} - , GRAPH_IMAGE = #{GRAPH_IMAGE} - , GRAPH_LOCAL = #{GRAPH_LOCAL} - , USERID = #{userId} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , HOLE_CODE - , DH_CHECKED_BY - , GRAPH_IMAGE - , GRAPH_LOCAL - , USERID - , DATETIME - ) VALUES ( - #{PROJECT_CODE} - , #{HOLE_CODE} - , #{DH_CHECKED_BY} - , #{GRAPH_IMAGE} - , #{GRAPH_LOCAL} - , #{USERID} - , SYSDATE - ) - - - - - - - - DELETE FROM TEMP_DENSITY_SUB WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_DENSITY_SUB ( - PROJECT_CODE - , HOLE_CODE - , SEQ - , DEPTH_FROM - , DEPTH_TO - , LAYER - , DENSITY - , USERID - , DATETIME - ) VALUES ( - #{PROJECT_CODE} - , #{HOLE_CODE} - , #{SEQ} - , #{DEPTH_FROM} - , #{DEPTH_TO} - , #{LAYER} - , #{DENSITY} - , #{userId} - , SYSDATE - ) - - - - MERGE INTO TEMP_DENSITY - USING DUAL - ON ( PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - ) - WHEN MATCHED THEN - UPDATE SET RS_CHECKED_BY = #{RS_CHECKED_BY} - , RS_WATER_LEVEL= #{RS_WATER_LEVEL} - , GRAPH_IMAGE = #{GRAPH_IMAGE} - , GRAPH_LOCAL = #{GRAPH_LOCAL} - , USERID = #{USERID} - , DATETIME = SYSDATE - , JOSAID = #{JOSAID} - , JOSA_START_TIME = #{JOSA_START_TIME} - , JOSA_END_TIME = #{JOSA_END_TIME} - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , HOLE_CODE - , RS_CHECKED_BY - , RS_WATER_LEVEL - , GRAPH_IMAGE - , GRAPH_LOCAL - , USERID - , DATETIME - , JOSAID - , JOSA_START_TIME - , JOSA_END_TIME - ) VALUES ( - #{PROJECT_CODE} - , #{HOLE_CODE} - , #{RS_CHECKED_BY} - , #{RS_WATER_LEVEL} - , #{GRAPH_IMAGE} - , #{GRAPH_LOCAL} - , #{userId} - , SYSDATE - , #{JOSAID} - , #{JOSA_START_TIME} - , #{JOSA_END_TIME} - ) - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/header.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/header.xml deleted file mode 100644 index f0ea332..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/header.xml +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 'N' AND PROJECT_CODE =#{PROJECT_CODE} AND HOLE_CODE=#{HOLE_CODE} -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/holeCoord.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/holeCoord.xml deleted file mode 100644 index ff1bfce..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/holeCoord.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/info_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/info_SQL.xml deleted file mode 100644 index 5ebb10f..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/info_SQL.xml +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - - - - - - - - - - - - UPDATE TEMP_PROJECT_INFO SET - CLASS_CODE= #{CLASS_CODE} - ,CLASS_DETAIL_CODE= #{CLASS_DETAIL_CODE} - ,PROJECT_NAME= #{PROJECT_NAME} - ,PROJECT_CONSTRUCTION_CODE= #{PROJECT_CONSTRUCTION_CODE} - ,PROJECT_INSTRUCTION_CODE= #{PROJECT_INSTRUCTION_CODE} - ,PROJECT_INSTRUCTION_DESC= #{PROJECT_INSTRUCTION_DESC} - ,PROJECT_MASTER_COMPANY_O_CODE= #{PROJECT_MASTER_COMPANY_O_CODE} - ,PROJECT_MASTER_COMPANY_TW_CODE= #{PROJECT_MASTER_COMPANY_TW_CODE} - ,PROJECT_MASTER_COMPANY_TH_CODE= #{PROJECT_MASTER_COMPANY_TH_CODE} - ,PROJECT_MASTER_COMPANY_F_CODE= #{PROJECT_MASTER_COMPANY_F_CODE} - ,PROJECT_MASTER_COMPANY_NAME= #{PROJECT_MASTER_COMPANY_NAME} - ,PROJECT_CONST_COMPANY= #{PROJECT_CONST_COMPANY} - ,PROJECT_DESIGN_COMPANY= #{PROJECT_DESIGN_COMPANY} - ,PROJECT_ADMIN_COMPANY= #{PROJECT_ADMIN_COMPANY} - ,PROJECT_WORK_COMPANY= #{PROJECT_WORK_COMPANY} - ,PROJECT_START_DATE= #{PROJECT_START_DATE} - ,PROJECT_END_DATE= #{PROJECT_END_DATE} - ,PROJECT_START_SPOT_SD= #{PROJECT_START_SPOT_SD} - ,PROJECT_START_SPOT_SGG= #{PROJECT_START_SPOT_SGG} - ,PROJECT_START_SPOT_EMD= #{PROJECT_START_SPOT_EMD} - ,PROJECT_START_SPOT= #{PROJECT_START_SPOT} - ,PROJECT_END_SPOT_SD= #{PROJECT_END_SPOT_SD} - ,PROJECT_END_SPOT_SGG= #{PROJECT_END_SPOT_SGG} - ,PROJECT_END_SPOT_EMD= #{PROJECT_END_SPOT_EMD} - ,PROJECT_END_SPOT= #{PROJECT_END_SPOT} - ,PROJECT_LANGE= #{PROJECT_LANGE} - ,PROJECT_LANGE_UNIT= #{PROJECT_LANGE_UNIT} - ,HOLE_CB_NUMBER= #{HOLE_CB_NUMBER} - ,HOLE_SB_NUMBER= #{HOLE_SB_NUMBER} - ,HOLE_BB_NUMBER= #{HOLE_BB_NUMBER} - ,HOLE_TB_NUMBER= #{HOLE_TB_NUMBER} - ,HOLE_BH_NUMBER= #{HOLE_BH_NUMBER} - ,PROJECT_TESTPITT_NUMBER= #{PROJECT_TESTPITT_NUMBER} - ,PROJECT_ORGERBORING_NUMBER= #{PROJECT_ORGERBORING_NUMBER} - ,PROJECT_HOLE_NUMBER= #{PROJECT_HOLE_NUMBER} - ,PROJECT_DOCUMENT= #{PROJECT_DOCUMENT} - ,PROJECT_DESC= #{PROJECT_DESC} - ,PROJECT_GOAL= #{PROJECT_GOAL} - ,RESISTIVITY_LINES= #{RESISTIVITY_LINES} - ,REFRACTION_LINES= #{REFRACTION_LINES} - ,MODUSERID= #{MODUSERID} - ,REPORT_TYPE= #{REPORT_TYPE} - ,MODDATETIME= SYSDATE - WHERE PROJECT_CODE = #{PROJECT_CODE} - - - - DELETE FROM ${tableName} WHERE 1=1 - - AND PROJECT_CODE = #{projectCode} - - - AND HOLE_CODE = #{holeCode} - - - - - DELETE FROM ${tableName} WHERE 1=1 - - AND PROJECT_CODE = #{projectCode} - - - AND LINE_NUMBER = #{lineNumber} - - - - - - - - - DELETE FROM TEMP_TOPO_GEOLOGY WHERE PROJECT_CODE = #{projectCode} - - - - INSERT INTO TEMP_TOPO_GEOLOGY (PROJECT_CODE, TGEO_TOPOGRAPHY, TGEO_GEOLOGY, TGEO_REMARK, USERID, DATETIME) VALUES - (#{projectCode},#{tgeoTopography},#{tgeoGeology},#{tgeoRemark},#{userId},SYSDATE) - - - - - - MERGE INTO TEMP_EXPERT_OPINION - USING DUAL - ON ( PROJECT_CODE = #{projectCode}) - WHEN MATCHED THEN - UPDATE SET EO_OPINOIN = #{eoOpinoin} - , EO_REMARK = #{eoRemark} - , REPORT_FILE = #{reportFile} - , REPORT_LOCAL = #{reportLocal} - , USERID = #{userId} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , EO_OPINOIN - , EO_REMARK - , REPORT_FILE - , REPORT_LOCAL - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{eoOpinoin} - , #{eoRemark} - , #{reportFile} - , #{reportLocal} - , #{userId} - , SYSDATE - ) - - - - - - UPDATE - TEMP_META_INFO - SET - HOLE_NUMBER = #{HOLE_NUMBER} - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo2019_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo2019_SQL.xml deleted file mode 100644 index 0e1e2d1..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo2019_SQL.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - INSERT INTO TEMP_LAYER_INFO ( - PROJECT_CODE , - HOLE_CODE , - LAYER_CODE , - LAYER_DEPTH_FROM , - LAYER_DEPTH_TO , - LAYER_SOIL_COLOR , - LAYER_DESC , - LAYER_THICKNESS , - LAYER_ENG_NAME , - LAYER_SCIENCE_NAME , - USERID , - DATETIME - )VALUES( - #{projectCode}, - #{holeCode}, - #{layerCode}, - #{layerDepthFrom}, - #{layerDepthTo}, - #{layerSoilColor}, - #{layerDesc}, - #{layerThickness}, - #{layerEngName}, - #{layerScienceName}, - #{userId}, - SYSDATE - ) - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo_SQL.xml deleted file mode 100644 index 7da41ea..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/layerInfo_SQL.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - DELETE FROM TEMP_LAYER_INFO WHERE PROJECT_CODE=#{projectCode} AND HOLE_CODE=#{holeCode} AND LAYER_CODE=#{layerCode} - - - - INSERT INTO TEMP_LAYER_INFO ( - PROJECT_CODE , - HOLE_CODE , - LAYER_CODE , - LAYER_DEPTH_FROM , - LAYER_DEPTH_TO , - LAYER_SOIL_COLOR , - LAYER_DESC , - LAYER_THICKNESS , - LAYER_ENG_NAME , - LAYER_SCIENCE_NAME , - USERID , - DATETIME - )VALUES( - #{projectCode}, - #{holeCode}, - #{layerCode}, - #{layerDepthFrom}, - #{layerDepthTo}, - #{layerSoilColor}, - #{layerDesc}, - #{layerThickness}, - #{layerEngName}, - #{layerScienceName}, - #{userId}, - SYSDATE - ) - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/listReg.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/listReg.xml deleted file mode 100644 index 66d788e..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/listReg.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/manageAdd.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/manageAdd.xml deleted file mode 100644 index f7defbb..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/manageAdd.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - PASSWD = #{passwd}, - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/manageList.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/manageList.xml deleted file mode 100644 index 799f760..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/manageList.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/manageList2019.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/manageList2019.xml deleted file mode 100644 index 2e19d89..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/manageList2019.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/map.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/map.xml deleted file mode 100644 index f3c70af..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/map.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/projectList.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/projectList.xml deleted file mode 100644 index 9a130d7..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/projectList.xml +++ /dev/null @@ -1,1364 +0,0 @@ - - - - - - - - - - - - - - - - - UPDATE TEMP_META_INFO SET - INPUT_COMPANY = #{INPUT_COMPANY} , - DEPT = #{DEPT} , - ADMIN_NAME = #{ADMIN_NAME} , - EMAIL = #{EMAIL} , - TEL = #{TEL} , - PHONE = #{PHONE} , - SEARCHDATE = #{SEARCHDATE} , - INPUTDATE = #{INPUTDATE} , - PROJECT_NAME = #{PROJECT_NAME} , - HOLE_NUMBER = #{HOLE_NUMBER} , - HOLE_ADMIN_NAME = #{HOLE_ADMIN_NAME}, - HOLE_COMPANY = #{HOLE_COMPANY} , - HOLE_TYPE = #{HOLE_TYPE} , - HOLE_SPOT_SD = #{HOLE_SPOT_SD} , - HOLE_SPOT_SGG = #{HOLE_SPOT_SGG} , - HOLE_SPOT = #{HOLE_SPOT} , - REMARK = #{REMARK} , - MODUSERID = #{USERID} , - MODDATETIME= SYSDATE - - - UPDATE TEMP_PROJECT_INFO SET - STATE = #{STATE} - - - - - - - - - - - - - - - - ' ' AND PROJECT_CODE = #{PROJECT_CODE} -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 'N' AND PROJECT_CODE = #{PROJECT_CODE} ) - , #{STATE} - , #{FILENAME} - , #{PROJECT_CODE} - ) -]]> - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/regi.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/regi.xml deleted file mode 100644 index 28954ac..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/regi.xml +++ /dev/null @@ -1,1425 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/rock.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/rock.xml deleted file mode 100644 index 95f29fe..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/rock.xml +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INSERT INTO TEMP_ROCK_TRIAXIAL( - PROJECT_CODE, - HOLE_CODE, - RTRI_CODE, - TEST_ORDER , - GRAPH_LOCAL , - GRAPH_IMAGE , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RTRI_CODE}, - #{TEST_ORDER}, - #{GRAPH_LOCAL}, - #{GRAPH_IMAGE}, - #{USERID}, - SYSDATE - ) - - - - - - DELETE FROM TEMP_ROCK_TRIAXIAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RTRI_CODE IN (${sampleCode}) - - - - - - DELETE FROM TEMP_ROCK_TRIAXIAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RTRI_CODE =#{RTRI_CODE} - - - - - INSERT INTO TEMP_ROCK_TRIAXIAL( - PROJECT_CODE, - HOLE_CODE, - RTRI_CODE, - TEST_ORDER , - RTRI_DEPTH_FROM , - RTRI_DEPTH_TO , - RTRI_PHI , - RTRI_C , - RTRI_TENSILESTRENGTH , - RTRI_50_DIA , - RTRI_50_LENGTH , - RTRI_50_CONFPRES , - RTRI_50_MAXSTRENGTH , - RTRI_100_DIA , - RTRI_100_LENGTH , - RTRI_100_CONFPRES , - RTRI_100_MAXSTRENGTH , - RTRI_150_DIA , - RTRI_150_LENGTH , - RTRI_150_CONFPRES , - RTRI_150_MAXSTRENGTH , - RTRI_REMARK , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RTRI_CODE}, - #{TEST_ORDER}, - #{RTRI_DEPTH_FROM} , - #{RTRI_DEPTH_TO} , - #{RTRI_PHI} , - #{RTRI_C} , - #{RTRI_TENSILESTRENGTH} , - #{RTRI_50_DIA} , - #{RTRI_50_LENGTH} , - #{RTRI_50_CONFPRES} , - #{RTRI_50_MAXSTRENGTH} , - #{RTRI_100_DIA} , - #{RTRI_100_LENGTH} , - #{RTRI_100_CONFPRES} , - #{RTRI_100_MAXSTRENGTH} , - #{RTRI_150_DIA} , - #{RTRI_150_LENGTH} , - #{RTRI_150_CONFPRES} , - #{RTRI_150_MAXSTRENGTH} , - #{RTRI_REMARK} , - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - SYSDATE - ) - - - - - - - - - - - - - - - - - - - - - - - DELETE FROM TEMP_ROCK_REPEATED_TRIAXIAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RT_SEQ=#{RT_SEQ} - - - - DELETE FROM TEMP_ROCK_REPEATED_TRIAXIAL_U - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RT_SEQ=#{RT_SEQ} - - - - INSERT INTO TEMP_ROCK_REPEATED_TRIAXIAL_U ( - PROJECT_CODE, - HOLE_CODE, - RT_SEQ, - RT_DEPTH_FROM, - RT_DEPTH_TO, - RT_RELATIVE_DENSITY , - RT_DRY_UNIT_WEIGHT, - RT_EFFECTIVE_PRESSURE, - RT_CORRECTION_FACTOR , - RT_ARSPRT , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID, - DATETIME ) VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RT_SEQ}, - #{RT_DEPTH_FROM}, - #{RT_DEPTH_TO}, - #{RT_RELATIVE_DENSITY}, - #{RT_DRY_UNIT_WEIGHT}, - #{RT_EFFECTIVE_PRESSURE}, - #{RT_CORRECTION_FACTOR}, - #{RT_ARSPRT}, - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - SYSDATE) - - - - INSERT INTO TEMP_ROCK_REPEATED_TRIAXIAL ( - PROJECT_CODE , - HOLE_CODE , - RT_SEQ , - RT_DETAIL_SEQ , - RT_RSPR , - RT_ARSPR , - RT_LNUM, - USERID , - DATETIME ) VALUES( - #{PROJECT_CODE} , - #{HOLE_CODE} , - #{RT_SEQ} , - #{RT_DETAIL_SEQ} , - #{RT_RSPR} , - #{RT_ARSPR} , - #{RT_LNUM}, - #{USERID} , - SYSDATE ) - - - - - - - - - - DELETE FROM TEMP_ROCK_RESONANT - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RC_SEQ=#{RC_SEQ} - - - - DELETE FROM TEMP_ROCK_RESONANT_USUAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RC_SEQ=#{RC_SEQ} - - - - - INSERT INTO TEMP_ROCK_RESONANT_USUAL ( - PROJECT_CODE, - HOLE_CODE, - RC_SEQ, - RC_DEPTH_FROM, - RC_DEPTH_TO, - RC_DENSITY_IN_SITU , - RC_DRY_UNIT_WEIGHT, - RC_MOISTURE_CONTENT, - RC_REMARK , - RC_RESTRAINED_PRESSURE , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID, - DATETIME ) VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RC_SEQ}, - #{RC_DEPTH_FROM}, - #{RC_DEPTH_TO}, - #{RC_DENSITY_IN_SITU}, - #{RC_DRY_UNIT_WEIGHT}, - #{RC_MOISTURE_CONTENT}, - #{RC_REMARK}, - #{RC_RESTRAINED_PRESSURE}, - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - SYSDATE) - - - - - - INSERT INTO TEMP_ROCK_RESONANT ( - PROJECT_CODE , - HOLE_CODE , - RC_SEQ , - RC_DETAIL_SEQ , - RC_SHEAR_STRAIN , - RC_SHEAR_FACTOR , - RC_SHEAR_VELOCITY , - RC_REGULAR_SHEAR_MODULUS, - RC_DAMPED_RATIO , - USERID , - DATETIME ) VALUES( - #{PROJECT_CODE} , - #{HOLE_CODE} , - #{RC_SEQ} , - #{RC_DETAIL_SEQ} , - #{RC_SHEAR_STRAIN} , - #{RC_SHEAR_FACTOR} , - #{RC_SHEAR_VELOCITY} , - #{RC_REGULAR_SHEAR_MODULUS}, - #{RC_DAMPED_RATIO} , - #{USERID} , - SYSDATE ) - - - - - - - - - - - - - - - - INSERT INTO TEMP_ROCK_JOINTSHEAR( - PROJECT_CODE, - HOLE_CODE, - RJOINT_CODE, - TEST_ORDER , - GRAPH_LOCAL , - GRAPH_IMAGE , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RJOINT_CODE}, - #{TEST_ORDER}, - #{GRAPH_LOCAL}, - #{GRAPH_IMAGE}, - #{USERID}, - SYSDATE - ) - - - - - - DELETE FROM TEMP_ROCK_JOINTSHEAR - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RJOINT_CODE IN (${sampleCode}) - - - - DELETE FROM TEMP_ROCK_JOINTSHEAR - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RJOINT_CODE =#{RJOINT_CODE} - - - - INSERT INTO TEMP_ROCK_JOINTSHEAR( - PROJECT_CODE, - HOLE_CODE, - RJOINT_CODE, - TEST_ORDER , - RJOINT_DEPTH_FROM , - RJOINT_DEPTH_TO , - RJOINT_PHI , - RJOINT_C , - RJOINT_NORAML_STRESS , - RJOINT_SHEAR_STRESS , - RJOINT_JCS , - RJOINT_REMARK , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RJOINT_CODE}, - #{testOrder}, - #{rjointDepthFrom} , - #{rjointDepthTo} , - #{rjointPhi} , - #{rjointC} , - #{rjointNoramlStress} , - #{rjointShearStress} , - #{rjointJcs} , - #{rjointRemark} , - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - SYSDATE - ) - - - - - - - - - - - - INSERT INTO TEMP_ROCK_POINTLOAD( - PROJECT_CODE, - HOLE_CODE, - ROCK_POINT_CODE, - TEST_ORDER , - GRAPH_LOCAL , - GRAPH_IMAGE , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{ROCK_POINT_CODE}, - #{TEST_ORDER}, - #{GRAPH_LOCAL}, - #{GRAPH_IMAGE}, - #{USERID}, - SYSDATE - ) - - - - SELECT GRAPH_IMAGE FROM TEMP_ROCK_POINTLOAD - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND ROCK_POINT_CODE IN (${sampleCode}) - - - - DELETE FROM TEMP_ROCK_POINTLOAD - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND ROCK_POINT_CODE IN (${sampleCode}) - - - - DELETE FROM TEMP_ROCK_POINTLOAD - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND ROCK_POINT_CODE =#{ROCK_POINT_CODE} - - - - INSERT INTO TEMP_ROCK_POINTLOAD( - PROJECT_CODE, - HOLE_CODE, - ROCK_POINT_CODE, - TEST_ORDER , - DEPTH_FROM , - DEPTH_TO , - DIA , - LENGTH , - TESILESTRENGTH , - POINTSTRENGTH , - UNIAXIAL , - REMARK , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{ROCK_POINT_CODE}, - #{testOrder}, - #{depthFrom}, - #{depthTo}, - #{dia}, - #{length}, - #{tesilestrength}, - #{pointstrength}, - #{uniaxial}, - #{remark}, - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - SYSDATE - ) - - - - - - - - - - - - - - - - - DELETE FROM TEMP_ROCK_UNIAXIAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RUNI_CODE=#{RUNI_CODE} - - - - - - INSERT INTO TEMP_ROCK_UNIAXIAL( - PROJECT_CODE, - HOLE_CODE, - RUNI_CODE, - TEST_ORDER , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RUNI_CODE}, - #{TEST_ORDER}, - #{USERID}, - SYSDATE - ) - - - - - - - DELETE FROM TEMP_ROCK_UNIAXIAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RUNI_CODE IN (${sampleCode}) - - - - DELETE FROM TEMP_ROCK_UNIAXIAL - WHERE PROJECT_CODE = #{PROJECT_CODE} - AND HOLE_CODE = #{HOLE_CODE} - AND RUNI_CODE =#{RUNI_CODE} - - - - INSERT INTO TEMP_ROCK_UNIAXIAL( - PROJECT_CODE, - HOLE_CODE, - RUNI_CODE, - TEST_ORDER , - RUNI_DEPTH_FROM , - RUNI_DEPTH_TO , - RUNI_DIA , - RUNI_LENGTH , - RUNI_GS , - RUNI_WAVE_P , - RUNI_WAVE_S , - RUNI_ABS , - RUNI_UNI_STRENGTH , - RUNI_YOUNG , - RUNI_POISSON , - RUNI_REMARK , - GRAPH_IMAGE1 , - GRAPH_IMAGE2 , - GRAPH_LOCAL1 , - GRAPH_LOCAL2 , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RUNI_CODE}, - #{testOrder}, - #{runiDepthFrom} , - #{runiDepthTo} , - #{runiDia} , - #{runiLength} , - #{runiGs} , - #{runiWaveP} , - #{runiWaveS} , - #{runiAbs} , - #{runiUniStrength} , - #{runiYoung} , - #{runiPoisson} , - #{runiRemark} , - #{GRAPH_IMAGE1} , - #{GRAPH_IMAGE2} , - #{GRAPH_LOCAL1} , - #{GRAPH_LOCAL2} , - #{USERID} , - SYSDATE - ) - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/sampleInfo.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/sampleInfo.xml deleted file mode 100644 index 1e4c9f5..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/sampleInfo.xml +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/sand_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/sand_SQL.xml deleted file mode 100644 index 152683c..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/sand_SQL.xml +++ /dev/null @@ -1,905 +0,0 @@ - - - - - - - - - - - - - - DELETE FROM TEMP_CLASSIFICATION WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} - - - - INSERT INTO TEMP_CLASSIFICATION( - PROJECT_CODE, - HOLE_CODE, - SAMPLE_CODE, - CLASSI_D10, - CLASSI_D30, - CLASSI_D60, - CLASSI_CU, - CLASSI_CG, - CLASSI_NO4, - CLASSI_NO6, - CLASSI_NO8, - CLASSI_NO10, - CLASSI_NO12, - CLASSI_NO16, - CLASSI_NO20, - CLASSI_NO30, - CLASSI_NO40, - CLASSI_NO50, - CLASSI_NO60, - CLASSI_NO70, - CLASSI_NO100, - CLASSI_NO140, - CLASSI_NO200, - CLASSI_NO005, - CLASSI_REMARK, - GRAPH_LOCAL, - GRAPH_IMAGE, - USERID, - DATETIME) - VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{sampleCode}, - #{classiD10}, - #{classiD30}, - #{classiD60}, - #{classiCu}, - #{classiCg}, - #{classiNo4}, - #{classiNo6}, - #{classiNo8}, - #{classiNo10}, - #{classiNo12}, - #{classiNo16}, - #{classiNo20}, - #{classiNo30}, - #{classiNo40}, - #{classiNo50}, - #{classiNo60}, - #{classiNo70}, - #{classiNo100}, - #{classiNo140}, - #{classiNo200}, - #{classiNo005}, - #{classiRemark}, - #{GRAPH_LOCAL}, - #{GRAPH_IMAGE}, - #{USERID}, - SYSDATE - ) - - - - - - DELETE FROM TEMP_CBR_COMPAC WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} - - - - INSERT INTO TEMP_CBR_COMPAC( - PROJECT_CODE, - HOLE_CODE, - SAMPLE_CODE, - CBR_MOD_CBR, - CBR_D_RD, - CBR_D_GS, - CBR_D_COMPACTION, - CBR_D_CMC, - CBR_A_RD, - CBR_A_GS, - CBR_A_COMPACTION, - CBR_A_CMC, - CBR_55_SWELLING, - CBR_55_SOAKING, - CBR_55_MOULDING, - CBR_25_SWELLING, - CBR_25_SOAKING, - CBR_25_MOULDING, - CBR_10_SWELLING, - CBR_10_SOAKING, - CBR_10_MOULDING, - CBR_REMARK, - GRAPH_IMAGE1, - GRAPH_IMAGE2, - GRAPH_LOCAL1, - GRAPH_LOCAL2, - USERID, - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{sampleCode}, - #{cbrModCbr}, - #{cbrDRd}, - #{cbrDGs}, - #{cbrDCompaction}, - #{cbrDCmc}, - #{cbrARd}, - #{cbrAGs}, - #{cbrACompaction}, - #{cbrACmc}, - #{cbr55Swelling}, - #{cbr55Soaking}, - #{cbr55Moulding}, - #{cbr25Swelling}, - #{cbr25Soaking}, - #{cbr25Moulding}, - #{cbr10Swelling}, - #{cbr10Soaking}, - #{cbr10Moulding}, - #{cbrRemark}, - #{GRAPH_IMAGE1}, - #{GRAPH_IMAGE2}, - #{GRAPH_LOCAL1}, - #{GRAPH_LOCAL2}, - #{USERID}, - SYSDATE - ) - - - - - - - - - - DELETE FROM TEMP_CONSOLIDATION_USUAL WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE} - - - - INSERT INTO TEMP_CONSOLIDATION_USUAL ( - PROJECT_CODE, - HOLE_CODE, - SAMPLE_CODE, - CONSOL_SAMPLE_DIA, - CONSOL_SAMPLE_HEIGHT, - CONSOL_W0, - CONSOL_WF, - CONSOL_RF, - CONSOL_RD, - CONSOL_S0, - CONSOL_SF, - CONSOL_PC, - CONSOL_CC, - CONSOL_REMARK, - GRAPH_IMAGE, - GRAPH_LOCAL, - USERID, - DATETIME - ) VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{SAMPLE_CODE}, - #{CONSOL_SAMPLE_DIA}, - #{CONSOL_SAMPLE_HEIGHT}, - #{CONSOL_W0}, - #{CONSOL_WF}, - #{CONSOL_RF}, - #{CONSOL_RD}, - #{CONSOL_S0}, - #{CONSOL_SF}, - #{CONSOL_PC}, - #{CONSOL_CC}, - #{CONSOL_REMARK}, - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - SYSDATE) - - - - DELETE FROM TEMP_CONSOLIDATION WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE} AND SEQ =#{SEQ} - - - - UPDATE TEMP_CONSOLIDATION SET - CONSOL_P=#{CONSOL_P}, - CONSOL_SETTLEMENT=#{CONSOL_SETTLEMENT}, - CONSOL_T90=#{CONSOL_T90}, - CONSOL_E=#{CONSOL_E}, - CONSOL_TWOHA=#{CONSOL_TWOHA}, - CONSOL_AV=#{CONSOL_AV}, - CONSOL_CV=#{CONSOL_CV}, - CONSOL_MV=#{CONSOL_MV}, - CONSOL_K=#{CONSOL_K}, - CONSOL_RP=#{CONSOL_RP}, - USERID=#{USERID}, - DATETIME=SYSDATE - WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE} AND SEQ =#{SEQ} - - - - INSERT INTO TEMP_CONSOLIDATION ( - PROJECT_CODE , - HOLE_CODE , - SAMPLE_CODE , - SEQ , - CONSOL_P , - CONSOL_SETTLEMENT , - CONSOL_T90 , - CONSOL_E , - CONSOL_TWOHA , - CONSOL_AV , - CONSOL_CV , - CONSOL_MV , - CONSOL_K , - CONSOL_RP , - USERID , - DATETIME - ) VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{SAMPLE_CODE}, - (SELECT NVL(MAX(SEQ)+1,1) FROM TEMP_CONSOLIDATION WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE}), - #{CONSOL_P}, - #{CONSOL_SETTLEMENT}, - #{CONSOL_T90}, - #{CONSOL_E}, - #{CONSOL_TWOHA}, - #{CONSOL_AV}, - #{CONSOL_CV}, - #{CONSOL_MV}, - #{CONSOL_K}, - #{CONSOL_RP}, - #{USERID}, - SYSDATE - ) - - - - - - DELETE FROM TEMP_UNCONFINED_USUAL WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} - - - - INSERT INTO TEMP_UNCONFINED_USUAL( - PROJECT_CODE, - HOLE_CODE, - SAMPLE_CODE, - UNCONF_RINGFACTOR , - UNCONF_LOAD_SCALE , - UNCONF_UNDISTURB_HEIGHT , - UNCONF_UNDISTURB_DIA , - UNCONF_UNDISTURB_W , - UNCONF_UNDISTURB_RT , - UNCONF_UNDISTURB_E , - UNCONF_UNDISTURB_S , - UNCONF_UNDISTURB_COMPSTRENGTH , - UNCONF_REMOULD_HEIGHT , - UNCONF_REMOULD_DIA , - UNCONF_REMOULD_W , - UNCONF_REMOULD_RT , - UNCONF_REMOULD_E , - UNCONF_REMOULD_S , - UNCONF_REMOULD_COMPSTRENGTH , - UNCONF_SAMPLE_SHAPE , - UNCONF_REMARK , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID, - DATETIME)VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{SAMPLE_CODE}, - #{UNCONF_RINGFACTOR} , - #{UNCONF_LOAD_SCALE} , - #{UNCONF_UNDISTURB_HEIGHT} , - #{UNCONF_UNDISTURB_DIA} , - #{UNCONF_UNDISTURB_W} , - #{UNCONF_UNDISTURB_RT} , - #{UNCONF_UNDISTURB_E} , - #{UNCONF_UNDISTURB_S} , - #{UNCONF_UNDISTURB_COMPSTRENGTH} , - #{UNCONF_REMOULD_HEIGHT} , - #{UNCONF_REMOULD_DIA} , - #{UNCONF_REMOULD_W} , - #{UNCONF_REMOULD_RT} , - #{UNCONF_REMOULD_E} , - #{UNCONF_REMOULD_S} , - #{UNCONF_REMOULD_COMPSTRENGTH} , - #{UNCONF_SAMPLE_SHAPE} , - #{UNCONF_REMARK} , - #{GRAPH_IMAGE} , - #{GRAPH_LOCAL} , - #{USERID}, - SYSDATE ) - - - - - - - - - - DELETE FROM TEMP_TRIAXIAL_USUAL WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE} AND TRI_CODE=#{TRI_CODE} - - - - INSERT INTO TEMP_TRIAXIAL_USUAL( - PROJECT_CODE, - HOLE_CODE, - SAMPLE_CODE, - TRI_CODE, - TRI_TYPEOFSAMPLE, - TRI_TYPEOFTEST, - TRI_TYPEOFCONTROLLEDTEST, - TRI_NOSTRAIN, - TRI_PHI_U, - TRI_CU, - TRI_REMARK, - GRAPH_IMAGE1 , - GRAPH_IMAGE2 , - GRAPH_LOCAL1 , - GRAPH_LOCAL2 , - USERID, - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{SAMPLE_CODE}, - #{TRI_CODE}, - #{TRI_TYPEOFSAMPLE}, - #{TRI_TYPEOFTEST}, - #{TRI_TYPEOFCONTROLLEDTEST}, - #{TRI_NOSTRAIN}, - #{TRI_PHI_U}, - #{TRI_CU}, - #{TRI_REMARK}, - #{GRAPH_IMAGE1}, - #{GRAPH_IMAGE2}, - #{GRAPH_LOCAL1}, - #{GRAPH_LOCAL2}, - #{USERID}, - SYSDATE - ) - - - - DELETE FROM TEMP_TRIAXIAL_CU WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE} AND TRI_CODE=#{TRI_CODE} - - - - INSERT INTO TEMP_TRIAXIAL_CU ( - PROJECT_CODE , - HOLE_CODE , - SAMPLE_CODE , - TRI_CODE , - TRICU_TESTORDER , - TRICU_TESTCODE , - TRICU_W0 , - TRICU_RD0 , - TRICU_S0 , - TRICU_E0 , - TRICU_WF , - TRICU_RDF , - TRICU_SF , - TRICU_EF , - TRICU_U0 , - TRICU_SIGMA3 , - TRICU_MAXSIGMA , - TRICU_ULTSIGMA , - TRICU_D0 , - TRICU_H0 , - TRICU_UF , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{SAMPLE_CODE}, - #{TRI_CODE}, - #{TRICU_TESTORDER}, - #{TRICU_TESTCODE}, - #{TRICU_W0}, - #{TRICU_RD0}, - #{TRICU_S0}, - #{TRICU_E0}, - #{TRICU_WF}, - #{TRICU_RDF}, - #{TRICU_SF}, - #{TRICU_EF}, - #{TRICU_U0}, - #{TRICU_SIGMA3}, - #{TRICU_MAXSIGMA}, - #{TRICU_ULTSIGMA}, - #{TRICU_D0}, - #{TRICU_H0}, - #{TRICU_UF}, - #{USERID}, - SYSDATE - ) - - - - DELETE FROM TEMP_TRIAXIAL_UU WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE =#{SAMPLE_CODE} AND TRI_CODE=#{TRI_CODE} - - - - INSERT INTO TEMP_TRIAXIAL_UU ( - PROJECT_CODE , - HOLE_CODE , - SAMPLE_CODE , - TRI_CODE , - TRIUU_TESTORDER , - TRIUU_TESTCODE , - TRIUU_W0 , - TRIUU_RD0 , - TRIUU_S0 , - TRIUU_E0 , - TRIUU_U0 , - TRIUU_SIGMA3 , - TRIUU_MAXSIGMA , - TRIUU_ULTSIGMA , - TRIUU_D0 , - TRIUU_H0 , - USERID , - DATETIME - )VALUES( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{SAMPLE_CODE}, - #{TRI_CODE}, - #{TRIUU_TESTORDER}, - #{TRIUU_TESTCODE}, - #{TRIUU_W0}, - #{TRIUU_RD0}, - #{TRIUU_S0}, - #{TRIUU_E0}, - #{TRIUU_U0}, - #{TRIUU_SIGMA3}, - #{TRIUU_MAXSIGMA}, - #{TRIUU_ULTSIGMA}, - #{TRIUU_D0}, - #{TRIUU_H0}, - #{USERID}, - SYSDATE - ) - - - - - - - - - - DELETE FROM TEMP_RESONANT WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND RC_SEQ=#{RC_SEQ} - - AND SAMPLE_CODE = #{SAMPLE_CODE} - - - - - DELETE FROM TEMP_RESONANT_USUAL WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND RC_SEQ=#{RC_SEQ} - - AND SAMPLE_CODE = #{SAMPLE_CODE} - - - - - INSERT INTO TEMP_RESONANT_USUAL ( - PROJECT_CODE, - HOLE_CODE, - RC_SEQ, - RC_DEPTH_FROM, - RC_DEPTH_TO, - RC_DENSITY_IN_SITU , - RC_DRY_UNIT_WEIGHT, - RC_MOISTURE_CONTENT, - RC_REMARK , - RC_RESTRAINED_PRESSURE , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID, - SAMPLE_CODE, - DATETIME ) - VALUES ( - #{PROJECT_CODE}, - #{HOLE_CODE}, - #{RC_SEQ}, - #{RC_DEPTH_FROM}, - #{RC_DEPTH_TO}, - #{RC_DENSITY_IN_SITU}, - #{RC_DRY_UNIT_WEIGHT}, - #{RC_MOISTURE_CONTENT}, - #{RC_REMARK}, - #{RC_RESTRAINED_PRESSURE}, - #{GRAPH_IMAGE}, - #{GRAPH_LOCAL}, - #{USERID}, - #{SAMPLE_CODE}, - SYSDATE) - - - - INSERT INTO TEMP_RESONANT ( - PROJECT_CODE , - HOLE_CODE , - RC_SEQ , - RC_DETAIL_SEQ , - RC_SHEAR_STRAIN , - RC_SHEAR_FACTOR , - RC_SHEAR_VELOCITY , - RC_REGULAR_SHEAR_MODULUS, - RC_DAMPED_RATIO , - USERID , - SAMPLE_CODE, - DATETIME ) VALUES( - #{PROJECT_CODE} , - #{HOLE_CODE} , - #{RC_SEQ} , - #{RC_DETAIL_SEQ} , - #{RC_SHEAR_STRAIN} , - #{RC_SHEAR_FACTOR} , - #{RC_SHEAR_VELOCITY} , - #{RC_REGULAR_SHEAR_MODULUS}, - #{RC_DAMPED_RATIO} , - #{USERID} , - #{SAMPLE_CODE}, - SYSDATE ) - - - - - - DELETE FROM TEMP_REPEATED_TRIAXIAL WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE = #{SAMPLE_CODE} AND RT_SEQ=#{RT_SEQ} - - - - DELETE FROM TEMP_REPEATED_TRIAXIAL_USUAL WHERE PROJECT_CODE = #{PROJECT_CODE} AND HOLE_CODE = #{HOLE_CODE} AND SAMPLE_CODE = #{SAMPLE_CODE} AND RT_SEQ=#{RT_SEQ} - - - - INSERT INTO TEMP_REPEATED_TRIAXIAL_USUAL ( - PROJECT_CODE , - HOLE_CODE , - RT_SEQ , - RT_DEPTH_FROM , - RT_DEPTH_TO , - RT_RELATIVE_DENSITY , - RT_DRY_UNIT_WEIGHT , - RT_EFFECTIVE_PRESSURE , - RT_CORRECTION_FACTOR , - RT_ARSPRT , - GRAPH_IMAGE , - GRAPH_LOCAL , - USERID , - DATETIME , - SAMPLE_CODE - ) - VALUES ( - #{PROJECT_CODE} , - #{HOLE_CODE} , - #{RT_SEQ} , - #{RT_DEPTH_FROM} , - #{RT_DEPTH_TO} , - #{RT_RELATIVE_DENSITY} , - #{RT_DRY_UNIT_WEIGHT} , - #{RT_EFFECTIVE_PRESSURE} , - #{RT_CORRECTION_FACTOR} , - #{RT_ARSPRT} , - #{GRAPH_IMAGE} , - #{GRAPH_LOCAL} , - #{USERID} , - SYSDATE , - #{SAMPLE_CODE} - ) - - - - INSERT INTO TEMP_REPEATED_TRIAXIAL ( - PROJECT_CODE , - HOLE_CODE , - RT_SEQ , - RT_DETAIL_SEQ , - RT_RSPR , - RT_ARSPR , - RT_LNUM , - USERID , - DATETIME , - SAMPLE_CODE - ) VALUES( - #{PROJECT_CODE} , - #{HOLE_CODE} , - #{RT_SEQ} , - #{RT_DETAIL_SEQ} , - #{RT_RSPR} , - #{RT_ARSPR} , - #{RT_LNUM} , - #{USERID} , - SYSDATE , - #{SAMPLE_CODE} - ) - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/selectClass2019_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/selectClass2019_SQL.xml deleted file mode 100644 index 9c9f91d..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/selectClass2019_SQL.xml +++ /dev/null @@ -1,839 +0,0 @@ - - - - - - - - - - - - - 'N' AND TPI.PROJECT_CODE = #{projectCode} - ) - ]]> - - - - - - 0 - ) T1 - GROUP BY PROJECT_CODE - ]]> - - - - - - 0 - ) T1 - GROUP BY PROJECT_CODE - ) T2 - CONNECT BY LEVEL <= REGEXP_COUNT(HOLE_CODE_ARRAY, '[^,]+') - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/selectClass_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/selectClass_SQL.xml deleted file mode 100644 index 8151a3d..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/selectClass_SQL.xml +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - - - - - - DELETE FROM TEMP_SELECTCLASS_INFO - WHERE PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - - - - INSERT INTO TEMP_SELECTCLASS_INFO ( - PROJECT_CODE - , HOLE_CODE - , LAB_CHECK - , STAN_SPT - , STAN_SLICKENSIDE - , STAN_TCRRQD - , STAN_DSF - , STAN_RMR - , STAN_Q - , FIELD_WATERPRESSURE - , FIELD_PERMEABLITY - , FIELD_PRESSUREMETER - , FIELD_CONE_PENETRATION - , SAND_CLASSIFICATION - , SAND_CBR - , SAND_CONSOLIDATION - , SAND_UNCONFINED_USUAL - , SAND_TRIAXIAL - , SAND_RESONANT - , SAND_REPEATED_TRIAXIAL - , ROCK_UNIAXIAL - , ROCK_TRIAXIAL - , ROCK_POINTLOAD - , ROCK_JOINTSHEAR - , ROCK_RESONANT - , ROCK_REPEATED_TRIAXIAL - , USERID - , DATETIME - , RESISTIVITY - , REFRACTION - , BOREHOLE_WAVE - , DENSITY - , DOWNHOLE - ) - ( - SELECT - PROJECT_CODE - , #{holeCode} - , LAB_CHECK - , STAN_SPT - , STAN_SLICKENSIDE - , STAN_TCRRQD - , STAN_DSF - , STAN_RMR - , STAN_Q - , FIELD_WATERPRESSURE - , FIELD_PERMEABLITY - , FIELD_PRESSUREMETER - , FIELD_CONE_PENETRATION - , SAND_CLASSIFICATION - , SAND_CBR - , SAND_CONSOLIDATION - , SAND_UNCONFINED_USUAL - , SAND_TRIAXIAL - , SAND_RESONANT - , SAND_REPEATED_TRIAXIAL - , ROCK_UNIAXIAL - , ROCK_TRIAXIAL - , ROCK_POINTLOAD - , ROCK_JOINTSHEAR - , ROCK_RESONANT - , ROCK_REPEATED_TRIAXIAL - , #{userId} - , sysdate - , RESISTIVITY - , REFRACTION - , BOREHOLE_WAVE - , DENSITY - , DOWNHOLE - FROM TEMP_SELECTCLASS_INFO - WHERE PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{maxHoleCode} - ) - - - - DELETE FROM TEMP_REFERENCE - WHERE PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - - AND TEST_INFO_CODE = #{testInfoCode} - - - - - - INSERT INTO TEMP_REFERENCE - ( - PROJECT_CODE - , HOLE_CODE - , TEST_INFO_CODE - , ITEM_INFO_CODE - , REFERENCE_GUBUN - , REFERENCE_CODE - , USERID - , DATETIME - )( - SELECT - PROJECT_CODE - , #{holeCode} - , TEST_INFO_CODE - , ITEM_INFO_CODE - , REFERENCE_GUBUN - , REFERENCE_CODE - , #{userId} - , SYSDATE - FROM TEMP_REFERENCE - WHERE PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{maxHoleCode} - ) - - - - INSERT INTO TEMP_SELECTCLASS_INFO( - PROJECT_CODE, - HOLE_CODE, - STAN_SPT, - STAN_SLICKENSIDE, - STAN_TCRRQD, - STAN_DSF, - STAN_RMR, - STAN_Q, - FIELD_WATERPRESSURE, - FIELD_PERMEABLITY, - FIELD_PRESSUREMETER, - FIELD_CONE_PENETRATION, - SAND_CLASSIFICATION, - SAND_CBR, - SAND_CONSOLIDATION, - SAND_UNCONFINED_USUAL, - SAND_TRIAXIAL, - SAND_RESONANT, - SAND_REPEATED_TRIAXIAL, - ROCK_UNIAXIAL, - ROCK_TRIAXIAL, - ROCK_POINTLOAD, - ROCK_JOINTSHEAR, - ROCK_RESONANT, - ROCK_REPEATED_TRIAXIAL, - BOREHOLE_WAVE, - DOWNHOLE, - DENSITY, - USERID, - DATETIME - )VALUES ( - #{projectCode}, - #{holeCode}, - #{stanSpt}, - #{stanSlickenside}, - #{stanTcrrqd}, - #{stanDsf}, - #{stanRmr}, - #{stanQ}, - #{fieldWaterpressure}, - #{fieldPermeability}, - #{fieldPressuremeter}, - #{fieldConePenetration}, - #{sandClassification}, - #{sandCbr}, - #{sandConsolidation}, - #{sandUnconfinedUsual}, - #{sandTriaxial}, - #{sandResonant}, - #{sandRepeatedTriaxial}, - #{rockUniaxial}, - #{rockTriaxial}, - #{rockPointload}, - #{rockJointshear}, - #{rockResonant}, - #{rockRepeatedTriaxial}, - #{boreholeWave}, - #{downhole}, - #{density}, - #{userId}, - SYSDATE - ) - - - - - - - - DELETE FROM ${tableName} WHERE PROJECT_CODE = #{projectCode} AND HOLE_CODE=#{holeCode} - - - - MERGE INTO TEMP_REFERENCE - USING DUAL - ON ( PROJECT_CODE = #{projectCode} - AND HOLE_CODE = #{holeCode} - AND TEST_INFO_CODE = #{testInfoCode} - AND ITEM_INFO_CODE = #{itemInfoCode} - ) - WHEN MATCHED THEN - UPDATE SET REFERENCE_GUBUN = #{referenceGubun} - , REFERENCE_CODE = #{referenceCode} - , USERID = #{userId} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , HOLE_CODE - , TEST_INFO_CODE - , ITEM_INFO_CODE - , REFERENCE_GUBUN - , REFERENCE_CODE - , USERID - , DATETIME - ) VALUES ( - #{projectCode} - , #{holeCode} - , #{testInfoCode} - , #{itemInfoCode} - , #{referenceGubun} - , #{referenceCode} - , #{userId} - , SYSDATE - ) - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/regi/surface_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/regi/surface_SQL.xml deleted file mode 100644 index 2664628..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/regi/surface_SQL.xml +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - - - - - - - - - - - - DELETE FROM TEMP_RESISTIVITY_SURVEY WHERE PROJECT_CODE = #{PROJECT_CODE} - - - - INSERT INTO TEMP_RESISTIVITY_SURVEY ( - PROJECT_CODE - , RS_CHECKED_BY - , RS_COORDINATE - , USERID - , DATETIME - , JOSAID - , JOSA_START_TIME - , JOSA_END_TIME - ) VALUES ( - #{PROJECT_CODE} - , #{RS_CHECKED_BY} - , #{RS_COORDINATE} - , #{USERID} - , SYSDATE - , #{JOSAID} - , #{JOSA_START_TIME} - , #{JOSA_END_TIME} - ) - - - - DELETE FROM TEMP_RESISTIVITY_SURVEY_SUB WHERE PROJECT_CODE=#{PROJECT_CODE} AND LINE_NUMBER=#{LINE_NUMBER} AND SEQ=#{SEQ} - - - - UPDATE TEMP_RESISTIVITY_SURVEY_SUB SET - FROM_X = #{FROM_X}, - FROM_Y = #{FROM_Y}, - TO_X = #{TO_X}, - TO_Y = #{TO_Y}, - USERID = #{USERID}, - DATETIME = SYSDATE, - APPARENT_RESISTIVITY = #{APPARENT_RESISTIVITY}, - X_NORTH = #{X_NORTH}, - Y_EAST = #{Y_EAST} - - WHERE PROJECT_CODE=#{PROJECT_CODE} AND LINE_NUMBER=#{LINE_NUMBER} AND SEQ=#{SEQ} - - - - INSERT INTO TEMP_RESISTIVITY_SURVEY_SUB ( - PROJECT_CODE, - LINE_NUMBER, - SEQ, - FROM_X, - FROM_Y, - TO_X, - TO_Y, - USERID, - DATETIME, - APPARENT_RESISTIVITY, - X_NORTH, - Y_EAST - - ) VALUES ( - #{PROJECT_CODE}, - #{LINE_NUMBER}, - (SELECT NVL(MAX(SEQ) + 1,1) FROM TEMP_RESISTIVITY_SURVEY_SUB WHERE - PROJECT_CODE = #{PROJECT_CODE} AND LINE_NUMBER=#{LINE_NUMBER}), - #{FROM_X}, - #{FROM_Y}, - #{TO_X}, - #{TO_Y}, - #{USERID}, - SYSDATE, - #{APPARENT_RESISTIVITY}, - #{X_NORTH}, - #{Y_EAST} - - ) - - - - MERGE INTO TEMP_RESISTIVITY_SURVEY_FILE - USING DUAL ON ( PROJECT_CODE = #{PROJECT_CODE} AND LINE_NUMBER = - #{LINE_NUMBER} ) - WHEN MATCHED THEN - UPDATE SET GRAPH_IMAGE1 = #{GRAPH_IMAGE1} - , GRAPH_IMAGE2 = #{GRAPH_IMAGE2} - , GRAPH_LOCAL1 = #{GRAPH_LOCAL1} - , GRAPH_LOCAL2 = #{GRAPH_LOCAL2} - , FILE_SYS = #{FILE_SYS} - , FILE_ORG = #{FILE_ORG} - , USERID = #{USERID} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , LINE_NUMBER - , GRAPH_IMAGE1 - , GRAPH_IMAGE2 - , GRAPH_LOCAL1 - , GRAPH_LOCAL2 - , FILE_SYS - , FILE_ORG - , USERID - , DATETIME - ) VALUES ( - #{PROJECT_CODE} - , #{LINE_NUMBER} - , #{GRAPH_IMAGE1} - , #{GRAPH_IMAGE2} - , #{GRAPH_LOCAL1} - , #{GRAPH_LOCAL2} - , #{FILE_SYS} - , #{FILE_ORG} - , #{USERID} - , SYSDATE - ) - - - - - - - - - - DELETE FROM TEMP_REFRACTION_SURVEY WHERE PROJECT_CODE = #{PROJECT_CODE} - - - - INSERT INTO TEMP_REFRACTION_SURVEY ( - PROJECT_CODE - , RS_CHECKED_BY - , RS_COORDINATE - , USERID - , DATETIME - , JOSAID - , JOSA_START_TIME - , JOSA_END_TIME - ) VALUES ( - #{PROJECT_CODE} - , #{RS_CHECKED_BY} - , #{RS_COORDINATE} - , #{USERID} - , SYSDATE - , #{JOSAID} - , #{JOSA_START_TIME} - , #{JOSA_END_TIME} - ) - - - - DELETE FROM TEMP_REFRACTION_SURVEY_SUB WHERE PROJECT_CODE=#{PROJECT_CODE} AND LINE_NUMBER=#{LINE_NUMBER} AND SEQ=#{SEQ} - - - - UPDATE TEMP_REFRACTION_SURVEY_SUB SET - FROM_X = #{FROM_X}, - FROM_Y = #{FROM_Y}, - TO_X = #{TO_X}, - TO_Y = #{TO_Y}, - - X_NORTH = #{X_NORTH}, - Y_EAST = #{Y_EAST}, - VELOCITY = #{VELOCITY}, - USERID = #{USERID}, - DATETIME = SYSDATE - WHERE PROJECT_CODE=#{PROJECT_CODE} AND LINE_NUMBER=#{LINE_NUMBER} AND SEQ=#{SEQ} - - - - INSERT INTO TEMP_REFRACTION_SURVEY_SUB ( - PROJECT_CODE, - LINE_NUMBER, - SEQ, - FROM_X, - FROM_Y, - TO_X, - TO_Y, - USERID, - DATETIME, - - X_NORTH, - Y_EAST, - VELOCITY - ) VALUES ( - #{PROJECT_CODE}, - #{LINE_NUMBER}, - (SELECT NVL(MAX(SEQ) + 1,1) FROM TEMP_REFRACTION_SURVEY_SUB WHERE PROJECT_CODE - = #{PROJECT_CODE} AND LINE_NUMBER=#{LINE_NUMBER}), - #{FROM_X}, - #{FROM_Y}, - #{TO_X}, - #{TO_Y}, - #{USERID}, - SYSDATE, - - #{X_NORTH}, - #{Y_EAST}, - #{VELOCITY} - ) - - - - MERGE INTO TEMP_REFRACTION_SURVEY_FILE - USING DUAL ON ( PROJECT_CODE = #{PROJECT_CODE} AND LINE_NUMBER = - #{LINE_NUMBER} ) - WHEN MATCHED THEN - UPDATE SET GRAPH_IMAGE1 = #{GRAPH_IMAGE1} - , GRAPH_IMAGE2 = #{GRAPH_IMAGE2} - , GRAPH_LOCAL1 = #{GRAPH_LOCAL1} - , GRAPH_LOCAL2 = #{GRAPH_LOCAL2} - , FILE_SYS = #{FILE_SYS} - , FILE_ORG = #{FILE_ORG} - , USERID = #{USERID} - , DATETIME = SYSDATE - WHEN NOT MATCHED THEN - INSERT( - PROJECT_CODE - , LINE_NUMBER - , GRAPH_IMAGE1 - , GRAPH_IMAGE2 - , GRAPH_LOCAL1 - , GRAPH_LOCAL2 - , FILE_SYS - , FILE_ORG - , USERID - , DATETIME - ) VALUES ( - #{PROJECT_CODE} - , #{LINE_NUMBER} - , #{GRAPH_IMAGE1} - , #{GRAPH_IMAGE2} - , #{GRAPH_LOCAL1} - , #{GRAPH_LOCAL2} - , #{FILE_SYS} - , #{FILE_ORG} - , #{USERID} - , SYSDATE - ) - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/subsidence/subsidence_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/subsidence/subsidence_SQL.xml deleted file mode 100644 index e6ee959..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/subsidence/subsidence_SQL.xml +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - INTO - TBL_SUBSIDENCE_LIST - ( - SAGONO, - SIDO, - SIGUNGU, - SAGOREASON, - SAGODATE, - NO - ) VALUES - ( - #{item.sagoNo}, - #{item.sido}, - #{item.sigungu}, - #{item.sagoReason}, - #{item.sagoDate}, - #{item.no} - ) - - - - - - - - - - - - - - - - INTO - TBL_SUBSIDENCE_INFO - ( - SAGONO, - SIDO, - SIGUNGU, - DONG, - ADDR, - SAGOLAT, - SAGOLON, - SAGODATE, - SINKWIDTH, - SINKEXTEND, - SINKDEPTH, - GRDKIND, - SAGODETAIL, - DEATHCNT, - INJURYCNT, - VEHICLECNT, - TRSTATUS, - TRMETHOD, - TRAMOUNT, - TRFNDATE, - DASTDATE, - NO - ) VALUES - ( - #{item.sagoNo}, - #{item.sido}, - #{item.sigungu}, - #{item.dong}, - #{item.addr}, - #{item.sagoLat}, - #{item.sagoLon}, - #{item.sagoDate}, - #{item.sinkWidth}, - #{item.sinkExtend}, - #{item.sinkDepth}, - #{item.grdKind}, - #{item.sagoDetail}, - #{item.deathCnt}, - #{item.injuryCnt}, - #{item.vehicleCnt}, - #{item.trStatus}, - #{item.trMethod}, - #{item.trAmt}, - #{item.trFnDate}, - #{item.daStDate}, - #{item.no} - ) - - - - - - DELETE - FROM - TBL_SUBSIDENCE_LIST - - - - - DELETE - FROM - TBL_SUBSIDENCE_INFO - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/mapper/training/home/HomeTrainingMapper.xml b/src/main/resources/egovframework/sqlmap/mapper/training/home/HomeTrainingMapper.xml deleted file mode 100644 index 535127c..0000000 --- a/src/main/resources/egovframework/sqlmap/mapper/training/home/HomeTrainingMapper.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/config/springmvc/action-servlet.xml b/src/main/webapp/WEB-INF/config/springmvc/action-servlet.xml index 50b7640..a359e2f 100644 --- a/src/main/webapp/WEB-INF/config/springmvc/action-servlet.xml +++ b/src/main/webapp/WEB-INF/config/springmvc/action-servlet.xml @@ -11,7 +11,7 @@ xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:util="http://www.spr - + diff --git a/src/main/webapp/WEB-INF/lib/egovframework.jar b/src/main/webapp/WEB-INF/lib/egovframework.jar new file mode 100644 index 0000000000000000000000000000000000000000..27f72984f7ba08acd9f189a8e32ffec210caa6d3 GIT binary patch literal 326145 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�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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/WEB-INF/lib/egovframework.rte.psl.dataaccess-2.7.0.jar b/src/main/webapp/WEB-INF/lib/egovframework.rte.psl.dataaccess-2.7.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb492258a641114d5e842ca37f0fef751c378c2f GIT binary patch literal 12493 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 hf1C23NPdm>yX&GX2MzO;0q5aI{Go=`?LP - O2MapService - com.geotwo.webserver.core.service.Service - + O2MapService + kr.or.geoinfo.webserver.core.service.Service + O2MapService