From 82d51401dad0610ffe346f4d695ba2078df85670 Mon Sep 17 00:00:00 2001 From: latlon team <info@lat-lon.de> Date: Mon, 2 Sep 2024 05:25:46 +0000 Subject: [PATCH] Code drop - XPLANBOX-3279 - reactivated -werror (f9192ad1a) - XPLANBOX-3154 - Added assertions for PlanInfo and ValidationReport (6bae5c417) - XPLANBOX-3296 updated operations manual about usage of liquibase for DB initialisation (d8b61a9eb) - XPLANBOX-3264 - Set Profiles TestCase to failOnError false (8e049de11) - XPLANBOX-3264 - Implement Profiles TestCase in Workflow v2 TestSuite in xplan-validator-api SoapUI project (f56ca97be) - XPLANBOX-3264 - Implement Profiles TestCase in Workflow v2 TestSuite in xplan-manager-api SoapUI project (d95a9ea6f) - XPLANBOX-3282 - Add assertions for gemeinden and improve names (f0c22eb80) - XPLANBOX-3155 - added rulesMetadata to profiles in ValidationReport v2 (da14aee31) - XPLANBOX-3279 - added xplan-database-scripts.jat to xplan-distribution (7986d831d) - XPLANBOX-3307 - removed autowired, renamed TestS3Config to TestS3Context (2f40a9a36) - XPLANBOX-3279 - fixed export of gemeinden (224af085b) - XPLANBOX-3294 added deprecation notice to changelog for v7.2.2 (eaba7423a) - XPLANBOX-3260 updated operations manual about removed in-memory store XPlanValidatorWMS (d91889f5a) - XPLANBOX-3154 - renamed Link; enhanced description (3e2e51580) - XPLANBOX-3154 - export ValidationReport and PlanInfo schemas in v2 OpenAPI documents (212cc0cfb) - XPLANBOX-3279 - converted test planinfo.json to v2 to fix PlanApiTests (1fd18da45) - XPLANBOX-2804 - added missing test plan (8e018ba0f) - XPLANBOX-3156 - removed servlet-mapping removefromcache (33ab6ae73) - XPLANBOX-2804 - fixed typo (bb51afbd4) - XPLANBOX-3164 - Simplify names of workflow tests of xplan-manager-api-soapui-project (a1fe1bf59) - XPLANBOX-3164 - Create new test suites Workflow v1 TestSuite and Workflow v2 TestSuite in XPlanValidatorAPI project and implement raster evaluation TestCases (588395ec7) - XPLANBOX-3249 minor improvements to properties files, removed outdated properties and updated descriptions (9c20e2a76) - XPLANBOX-3249 improved comment in properties file about deprecated option (578410b39) - XPLANBOX-3249 added config option for raster data evaluation in operations manual and reworked section for raster data in user manual (f07ae317b) - XPLNABOX-3297 migrate to JUnit 5 allowing integration tests to run (3846161eb) - XPLANBOX-3164 - Update names and descriptions of xplan-manager-api-soapui-project and xplan-validator-api-soapui-project (9aaa38fd9) - XPLANBOX-3279 - fill xplanmgr.gemeinden with data during update to 8.0 (a0a4417f0) - XPLANBOX-3275 - enabled wait (234b7d708) - XPLANBOX-3245 - removed alternate link to application/zip from import reponse XPlanManagerAPI v2 (ab0a97418) - XPLANBOX-3265 - Remove alternate media types from /plan/{planId} (8e83a52b5) - XPLANBOX-3156 - removed outdated workspace configurations; renamed xplan-webservices-validator-wms-sql-workspace to xplan-webservices-validator-wms-workspace (e62c11ec8) - XPLANBOX-3279 - added table gemeinden; parse gemeinden from XML, store in database (77eb5f045) - XPLANBOX-3164 - Refactor TestCases of raster data validation (29f831853) - XPLANBOX-3164 - Fix tests for raster data validation (6ce12ec23) - XPLANBOX-3164 - Implement test to check not supported format in raster data (f23cae217) - XPLANBOX-3164 - Implement test to check wrong CRS in raster data (98cd12cd6) - XPLANBOX-3156 - removed unused deegree-tilestore-geotiff and RemoveFromRasterCacheServlet (9f60ef5fe) - XPLANBOX-3275 - replaced baseUrlValidatorWeb with XPLAN_VALIDATOR_WEB_BASE_URL; use testConfig in SeleniumTests (81271cf48) - XPLANBOX-3156 - removed xplanbox.s3.bucketName from xplan-validator-api (7726661b4) - XPLANBOX-3156 - fixed SpringBooTest; fixed TODO in PlanApi (af062b4ec) - XPLANBOX-3164 - Create multiple tests in Raster evaluation TestCases of API v2 and v1 (28eb65981) - XPLANBOX-3164 - Create Worflow v2 TestSuite and Raster evaluation TestCase (c7e02921d) - XPLANBOX-2804 - 400 if rasterdata are invalid (v1) (9376a840d) - XPLANBOX-3266 - Remove tests for GET /plan/{planId} with application/zip and GET /plan/name/{planName} (7c3d6aa12) - XPLANBOX-3156 - removed unused code (raster data handling in wms, workspace reload) and config option workspaceReloadAction (a204acc62) - XPLANBOX-3279 - added Gemeinden to PlanInfoXplanModelData v1 and v2; removed ags and gemeindeName from v1 (183854715) - XPLANBOX-3245 - Remove GET /plan/{planId} with application/zip and GET /plan/name/{planName} (a86f09b86) - XPLANBOX-3156 - fixed compiler tests, errors,formatting (90579b967) - XPLANBOX-3275 - added properties to run TracingITs, enabled basic auth (5117154f6) - XPLANBOX-2804 - fixed NPE (632586dc1) - XPLANBOX-2804 - skip import if raster crs or image format is not supported (67073179d) - XPLANBOX-2804 - moved crsStatus and imageFormatStatus to ExternalReferenceResult (v1 and v2), updated api versions (571a398f2) - XPLANBOX-2804 - fixed skipping of raster evaluation (c087dc8a9) - XPLANBOX-3155 - added v2 SystemConfig and ManagerSystemConfig (fb0355a43) - (wip) XPLANBOX-3259 remove unnecessary spring profiles (3bf951f0f) - XPLANBOX-2804 - fixed InvalidPlan (v1); removed unused method (1b476b7b4) - XPLANBOX-2804 - disable evaluation of rasterdata in XPlanValidatorAPI (c8cbca7d2) - XPLANBOX-2804 - updated documentation: XPLAN_SERVICES_DEFAULT_CRS (f768f2891) - XPLANBOX-2804 - evaluate raster files and write results in v2 ValidationReport, convert from v2 to v1 (955e788fd) - XPLANBOX-2804 - fomatted json (82095b688) - XPLANBOX-2804 - refactoring: moved rasterVonfigurationCrs from managerConfiguration.properties to property XPLAN_SERVICES_DEFAULT_CRS (4966e2919) - XPLANBOX-2804 - refactoring: moved XPlanRasterEvaluation to new module xplan-core-raster (b45e9f0d6) - XPLANBOX-2804/-2664 - use java.time.LocalDateTime (389b7e8ba) - XPLANBOX-2804 - added vv2.ValidationReport with rasterReferencesResult (12bfc90c8) Co-authored-by: Dirk Stenger <stenger@lat-lon.de> Co-authored-by: Julian Zilz <zilz@lat-lon.de> Co-authored-by: Lyn Elisa Goltz <goltz@lat-lon.de> Co-authored-by: Marc Guillemot <guillemot@lat-lon.de> Co-authored-by: Torsten Friebe <friebe@lat-lon.de> Dropped from commit: 0269017377bd05710e3f5ecf6cd184acc43291c2 --- CHANGELOG.md | 12 +- jenkinsfiles/test.Jenkinsfile | 8 +- pom.xml | 10 +- xplan-cli/pom.xml | 4 + .../cli/admin/config/CommonContext.java | 20 +- .../admin/config/SortdateUpdateContext.java | 39 +- .../cli/admin/sortdate/SortDateUpdater.java | 23 +- .../xplanbox/cli/manage/ListSubcommand.java | 18 +- .../cli/manage/ManagerSubcommand.java | 7 + .../manage/ServiceMetadataRecordCreator.java | 21 +- .../cli/manage/config/ManageContext.java | 73 +- .../validate/config/ValidateFileContext.java | 21 +- .../resources/managerConfiguration.properties | 8 +- xplan-core/pom.xml | 1 + .../api/commons/ValidationReportBuilder.java | 166 +- .../api/commons/ValidatorConverter.java | 27 +- .../api/commons/config/ApiConfiguration.java | 12 +- .../AbstractAsyncValidationWrapper.java | 15 + .../api/commons/openapi/OpenApiFilter.java | 23 +- .../v1/model/ExternalReferenceResult.java | 38 +- .../api/commons/v2/model/CrsStatusEnum.java | 72 + .../v2/model/ImageFormatStatusEnum.java | 70 + .../v2/model/{Link.java => ResponseLink.java} | 18 +- .../commons/v2/model/StatusNotification.java | 10 +- .../api/commons/v2/model/SystemConfig.java | 140 + .../commons/v2/model/ValidationReport.java | 325 + .../ValidationReportValidationResult.java | 155 + ...eportValidationResultSemantischProfil.java | 111 + .../api/commons/ValidatorConverterTest.java | 6 +- .../v2/model/ValidationReportTest.java | 56 + xplan-core/xplan-core-commons/pom.xml | 4 - .../commons/util/FeatureCollectionUtils.java | 66 +- .../xplan/manager/web/shared/Gemeinde.java | 94 + .../web/shared/RasterEvaluationResult.java | 26 + .../xplan/manager/web/shared/XPlan.java | 15 +- .../web/shared/ValidationSettings.java | 18 +- .../util/FeatureCollectionUtilsTest.java | 37 +- .../xplan52/BPlan001_5-2_Bereiche.zip | Bin 383291 -> 382578 bytes .../job/validator/config/JobContext.java | 2 - .../validator/config/MemoryJobContext.java | 106 - .../job/validator/config/SqlJobContext.java | 11 +- .../validator/config/SqlJobContextTest.java | 4 +- .../xplan/core/manager/db/model/Gemeinde.java | 98 + .../xplan/core/manager/db/model/Plan.java | 53 +- .../db/repository/PlanRepositoryTest.java | 42 +- xplan-core/xplan-core-manager/pom.xml | 8 +- .../de/latlon/xplan/manager/XPlanManager.java | 25 +- .../configuration/ManagerConfiguration.java | 36 +- .../xplan/manager/database/XPlanDao.java | 10 + .../manager/database/XPlanDbAdapter.java | 105 +- .../manager/database/XPlanManagerDao.java | 30 +- ...va => AmazonS3DocumentStorageContext.java} | 18 +- .../filesystem/DeegreeRasterCacheCleaner.java | 162 - .../FilesystemStorageCleanUpManager.java | 109 - .../FilesystemTransactionListener.java | 70 - ...text.java => AmazonS3ReadOnlyContext.java} | 21 +- .../config/AmazonS3TransactionalContext.java} | 26 +- .../s3/listener/S3TransactionListener.java | 21 +- .../transaction/XPlanDeleteManager.java | 12 +- .../manager/transaction/XPlanEditManager.java | 92 +- .../transaction/XPlanInsertManager.java | 22 +- .../transaction/XPlanTransactionManager.java | 22 +- .../manager/wmsconfig/WmsThemesConfig.java | 62 - .../wmsconfig/WmsWorkspaceWrapper.java | 189 - .../config/GeotiffRasterStorageContext.java | 78 - .../config/MapserverRasterStorageContext.java | 94 - .../wmsconfig/raster/XPlanRasterManager.java | 109 +- .../raster/config/ConfigWriterUtils.java | 78 - .../config/DeegreeRasterConfigManager.java | 166 - .../config/NoConfigRasterConfigManager.java | 64 - .../raster/config/RasterConfigManager.java | 56 - .../config/WorkspaceRasterLayerManager.java | 203 - .../config/WorkspaceRasterThemeManager.java | 366 - .../evaluation/GeotiffRasterEvaluation.java | 68 - .../raster/storage/FileSystemStorage.java | 102 - .../config/AmazonS3RasterStorageContext.java | 8 +- .../workspace/DeegreeWorkspaceWrapper.java | 99 - .../manager/workspace/WorkspaceReloader.java | 66 +- .../WorkspaceReloaderConfiguration.java | 25 +- .../managerConfiguration.properties | 16 +- .../xplan/manager/XPlanManagerTest.java | 44 +- .../xplan/manager/config/CoreTestContext.java | 65 - .../ManagerConfigurationTest.java | 27 +- .../document/s3/S3DocumentStorageIT.java | 26 +- .../storage/s3/S3StorageTestManual.java | 2 +- .../s3/config/AmazonS3TestContext.java | 1 - .../wmsconfig/ConfigWriterUtilsTest.java | 60 - ...WorkspaceRasterLayerManagerTestManual.java | 131 - .../storage/s3/S3RasterStorageTestManual.java | 2 +- .../DeegreeWorkspaceWrapperTest.java | 127 - .../workspace/WorkspaceReloaderTest.java | 15 +- xplan-core/xplan-core-raster/pom.xml | 40 + .../xplanbox/core}/raster/RasterType.java | 2 +- .../xplanbox/core}/raster/RasterUtils.java | 19 +- .../config/RasterEvaluationContext.java | 24 + .../evaluation/MapserverRasterEvaluation.java | 37 +- .../raster/evaluation/RasterEvaluation.java | 2 +- .../evaluation/XPlanRasterEvaluator.java | 12 +- .../evaluation/XPlanRasterEvaluatorTest.java | 101 +- .../core}/raster/evaluation/dem30.tiff | Bin .../core}/raster/evaluation/dem30.wld | 0 .../evaluation/dem30_geotiff_tiled.tiff | Bin .../dem30_geotiff_tiled_epsg4326.tiff | Bin .../core}/raster/evaluation/png_25833.png | Bin .../raster/evaluation/png_25833.png.aux.xml | 0 .../core}/raster/evaluation/png_nocrs.png | Bin .../xplanbox/core}/raster/evaluation/test.txt | 0 .../planimport/ImportRequestedEvent.java | 11 +- .../ImportValidationRequestedEvent.java | 9 +- .../planimport/ImportRequestedEventTest.java | 4 +- .../ImportValidationRequestedEventTest.java | 2 +- xplan-core/xplan-core-validator/pom.xml | 8 +- .../xplan/validator/XPlanValidator.java | 61 +- .../validator/report/ValidatorReport.java | 21 +- .../validator/wms/ValidatorWmsManager.java | 9 +- .../wms/config/ValidatorWmsContext.java | 2 +- .../wms/config/ValidatorWmsSqlContext.java | 2 +- .../config/ValidatorWmsWorkspaceContext.java | 63 - .../xplan/validator/XPlanValidatorTest.java | 55 +- .../wms/storage/SqlPlanStorageTest.java | 21 +- .../xplan-database-scripts/Dockerfile | 1 + .../docker-entrypoint.sh | 4 +- xplan-database/xplan-database-scripts/pom.xml | 1854 ++-- .../scripts/custom/v80/GemeindeParser.java | 120 + .../v80/UpdateGemeindenCustomChange.java | 84 + .../resources/8.0/changelog_xplanmgr.yaml | 36 + .../custom/v80/GemeindeParserTest.java | 35 + .../liquibase/LiquibaseConfigurationIT.java | 28 +- .../test/resources/BPlan001_5-2_Gemeinden.gml | 2977 ++++++ .../resources/BPlan001_5-2_NoGemeinden.gml | 2964 ++++++ xplan-distribution/pom.xml | 14 +- .../src/main/assembly/assembly.xml | 2 +- xplan-docker/xplan-docker-volume-init/pom.xml | 11 +- .../xplan-docker-volume-init/setupVolumes.sh | 26 +- .../src/assembly/xplan-docker-volumes.xml | 15 +- .../webapps.properties | 2 +- .../asciidoc/XPlanManager_Grundlagen.adoc | 18 +- .../src/main/asciidoc/aenderungsHistorie.adoc | 9 + .../main/asciidoc/installation/datenbank.adoc | 10 +- .../asciidoc/installation/installation.adoc | 4 +- .../asciidoc/installation/ueberblick.adoc | 12 +- .../manager/koordinatensystem.adoc | 10 +- .../asciidoc/konfiguration/rest-api/main.adoc | 2 + .../validator/kartenvorschau.adoc | 18 +- .../src/main/asciidoc/s3storage.adoc | 3 - xplan-dokumente/xplan-dokumente-api/pom.xml | 9 + .../config/DokumenteApiConfiguration.java | 3 +- .../dokumente/config/S3DocumentContext.java | 10 +- .../service/db/DBDocumentService.java | 95 - .../service/s3/S3DocumentService.java | 20 +- .../api/dokumente/config/TestContext.java | 17 +- .../api/dokumente/config/TestS3Context.java | 67 + .../handler/DocumentHandlerTest.java | 128 +- .../api/dokumente/v1/DefaultApiTest.java | 21 +- .../api/dokumente/v1/DokumentApiTest.java | 22 +- .../dokumente/v1/DokumenteApiJerseyTest.java | 42 + .../api/dokumente/v1/InfoApiTest.java | 21 +- .../src/test/resources/test.txt | 1 + xplan-manager/xplan-manager-api/pom.xml | 4 + .../xplanbox/api/manager/PlanInfoBuilder.java | 22 +- .../manager/config/ApplicationContext.java | 89 +- .../config/ManagerApiConfiguration.java | 9 +- .../api/manager/exception/InvalidPlan.java | 8 - .../manager/exception/InvalidRasterdata.java | 25 +- .../api/manager/executor/PlanImporter.java | 38 +- .../handler/AbstractAsyncImportWrapper.java | 16 + .../manager/handler/AsyncImportWrapper.java | 3 +- .../api/manager/handler/ConfigHandler.java | 16 +- .../api/manager/handler/PlanHandler.java | 40 +- .../manager/handler/v2/ConfigHandlerV2.java | 100 + .../manager/messagingrabbitmq/Receiver.java | 4 +- .../api/manager/openapi/v1/ApiV1Config.java | 2 +- .../api/manager/openapi/v2/ApiV2Filter.java | 16 + .../xplanbox/api/manager/v1/PlanApi.java | 44 +- .../xplanbox/api/manager/v1/PlansApi.java | 17 +- .../api/manager/v1/model/Gemeinde.java | 107 + .../manager/v1/model/ManagerSystemConfig.java | 31 +- .../v1/model/PlanInfoXplanModelData.java | 40 +- .../xplanbox/api/manager/v2/InfoApi2.java | 10 +- .../xplanbox/api/manager/v2/PlanApi2.java | 102 +- .../xplanbox/api/manager/v2/PlansApi2.java | 5 +- .../xplanbox/api/manager/v2/StatusApi.java | 12 +- .../api/manager/v2/model/ImportReceipt.java | 8 +- .../manager/v2/model/ManagerSystemConfig.java | 264 + .../v2/model/PlanInfoXplanModelData.java | 50 +- .../src/main/resources/application.properties | 2 + .../api/manager/ManagerApiJerseyTest.java | 44 + .../api/manager/PlanInfoBuilderTest.java | 13 +- .../config/FakeAsyncImportWrapper.java | 4 +- .../api/manager/config/TestContext.java | 87 +- .../api/manager/config/TestS3Context.java | 67 + .../manager/executor/PlanImporterTest.java | 4 +- .../handler/EditBasisdatenHandlerTest.java | 24 +- .../api/manager/handler/PlanHandlerTest.java | 27 +- .../api/manager/v1/DefaultApiTest.java | 24 +- .../xplanbox/api/manager/v1/InfoApiTest.java | 24 +- .../api/manager/v1/PlanAenderungApiTest.java | 26 +- .../xplanbox/api/manager/v1/PlanApiTest.java | 30 +- .../api/manager/v1/PlanBasisdatenApiTest.java | 28 +- .../api/manager/v1/PlanDokumentApiTest.java | 28 +- .../manager/v1/PlanGueltigkeitApiTest.java | 26 +- .../manager/v1/PlanRasterbasisApiTest.java | 32 +- .../api/manager/v1/PlanTextApiTest.java | 28 +- .../xplanbox/api/manager/v1/PlansApiTest.java | 24 +- .../api/manager/v2/DefaultApi2Test.java | 23 +- .../xplanbox/api/manager/v2/InfoApi2Test.java | 22 +- .../api/manager/v2/PlanAenderungApi2Test.java | 24 +- .../xplanbox/api/manager/v2/PlanApi2Test.java | 39 +- .../manager/v2/PlanBasisdatenApi2Test.java | 26 +- .../api/manager/v2/PlanDokumentApi2Test.java | 26 +- .../manager/v2/PlanRasterbasisApi2Test.java | 26 +- .../api/manager/v2/PlanTextApi2Test.java | 26 +- .../api/manager/v2/PlansApi2Test.java | 22 +- .../api/manager/v2/StatusApiTest.java | 24 +- .../xplanbox/api/manager/config/planinfo.json | 2 +- .../src/test/resources/s3Mock.properties | 25 + .../src/main/filter/filter-default.properties | 18 +- .../resources/managerConfiguration.properties | 6 +- .../web/spring/config/BasicSpringConfig.java | 62 +- .../spring/config/ManagerWebSpringConfig.java | 9 +- ...agerWebSpringConfigWithSimpleSecurity.java | 9 +- .../resources/xplan-manager-web.properties | 1 + xplan-tests/xplan-tests-selenium/README.md | 27 +- xplan-tests/xplan-tests-selenium/pom.xml | 8 - .../runAllSeleniumTests.sh | 2 +- .../latlon/xplanbox/tests/XPlanboxConfig.java | 16 +- .../tests/dokumenteapi/TracingIT.java | 13 +- .../xplanbox/tests/managerapi/TracingIT.java | 13 +- .../validatorweb/XPlanValidatorWebIT.java | 30 +- .../tests/validatorapi/TracingIT.java | 13 +- .../xplan-manager-api-soapui-project.xml | 8037 +++++++++++------ .../xplan-manager-api/plans/BPlan004_6-0.zip | Bin 0 -> 390327 bytes .../plans/BPlan004_6-0_MissingPNG.zip | Bin 0 -> 74486 bytes .../BPlan004_6-0_NotSupportedFormatJPEG.zip | Bin 0 -> 355610 bytes .../plans/BPlan006_6-0_WrongCRSInTIFF4326.zip | Bin 0 -> 289625 bytes .../xplan-validator-api-soapui-project.xml | 1634 +++- .../plans/BPlan004_6-0.zip | Bin 0 -> 389980 bytes xplan-validator/xplan-validator-api/pom.xml | 4 + .../api/validator/api/v1/ApiV1Config.java | 2 +- .../api/validator/api/v2/ApiV2Filter.java | 14 + .../validator/config/ApplicationContext.java | 30 +- .../config/ValidatorApiConfiguration.java | 21 +- .../handler/AsyncValidationWrapper.java | 4 +- .../validator/handler/v2/ConfigHandlerV2.java | 63 + .../api/validator/v1/ValidateApi.java | 26 +- .../xplanbox/api/validator/v2/InfoApi2.java | 14 +- .../xplanbox/api/validator/v2/StatusApi.java | 8 +- .../api/validator/v2/ValidateApi2.java | 11 +- .../validator/v2/model/ValidationReceipt.java | 8 +- .../src/main/resources/application.properties | 2 + .../api/validator/SpringBootAppTest.java | 13 +- .../api/validator/ValidatorApiJerseyTest.java | 63 + .../config/ApplicationContextTest.java | 16 +- .../config/FakeAsyncValidationWrapper.java | 4 +- .../api/validator/config/TestContext.java | 16 +- .../api/validator/config/TestS3Context.java | 68 + .../validator/handler/ConfigHandlerTest.java | 7 +- .../handler/v2/ConfigHandlerV2Test.java | 40 +- .../api/validator/v1/DefaultApiTest.java | 52 +- .../api/validator/v1/InfoApiTest.java | 43 +- .../validator/v1/ValidateApiJerseyTest.java | 56 +- .../api/validator/v1/ValidateApiTest.java | 21 +- .../api/validator/v2/DefaultApi2Test.java | 53 +- .../api/validator/v2/InfoApi2Test.java | 55 +- .../api/validator/v2/StatusApiTest.java | 42 +- .../api/validator/v2/ValidateApi2Test.java | 56 +- .../api/validator/v1/validation-report1.json | 2 +- .../validatorApiConfiguration.properties | 0 .../src/test/resources/s3Mock.properties | 25 + .../xplan-validator-executor/pom.xml | 9 + .../validator/executor/PlanValidator.java | 12 +- .../executor/config/ApplicationContext.java | 22 +- .../executor/handler/ValidationHandler.java | 35 +- .../executor/messagingrabbitmq/Receiver.java | 14 +- .../src/main/resources/application.properties | 2 + .../validator/executor/PlanValidatorTest.java | 24 +- .../executor/config/TestS3Context.java | 67 + .../handler/ValidationHandlerTest.java | 20 +- .../validator/executor/report1.expected.json | 1 - .../validator/executor/report6.expected.json | 1712 +++- .../validator/executor/report7.expected.json | 1725 +++- .../storage/config/AmazonS3Context.java | 3 +- .../s3/S3ValidationExecutionStorageIT.java | 2 +- xplan-validator/xplan-validator-web/pom.xml | 4 +- .../config/XPlanValidatorWebSpringConfig.java | 18 +- .../server/service/ReportControllerTest.java | 43 +- .../startupWithConfiguredMapserver.sh | 17 +- .../xplan-services-wms/pom.xml | 9 - .../raster/RemoveFromRasterCacheServlet.java | 88 - .../src/main/webapp/WEB-INF/web.xml | 11 - .../planwerkwms/PlanwerkMetadataTest.java | 51 +- .../wms/ApplicationContextInitializer.java | 12 +- .../xplan-webservices-workspaces/pom.xml | 21 +- .../assembly/xplan-services-wms-workspace.xml | 4 +- ...ervices-validator-wms-memory-workspace.xml | 91 - ...n-webservices-validator-wms-workspace.xml} | 2 +- .../src/main/workspace/data/dummy.png | Bin 1661 -> 0 bytes .../feature/validator-wms/memory/xplansyn.xml | 29 - .../{mapserver.ignore => mapserver.xml} | 0 .../{mapserver.ignore => mapserver.xml} | 0 .../workspace/themes/bplanarchiveraster.xml | 6 +- .../main/workspace/themes/bplanpreraster.xml | 6 +- .../src/main/workspace/themes/bplanraster.xml | 6 +- .../workspace/themes/fplanarchiveraster.xml | 6 +- .../main/workspace/themes/fplanpreraster.xml | 6 +- .../src/main/workspace/themes/fplanraster.xml | 6 +- .../workspace/themes/lplanarchiveraster.xml | 8 +- .../main/workspace/themes/lplanpreraster.xml | 8 +- .../src/main/workspace/themes/lplanraster.xml | 8 +- .../workspace/themes/rplanarchiveraster.xml | 8 +- .../main/workspace/themes/rplanpreraster.xml | 8 +- .../src/main/workspace/themes/rplanraster.xml | 8 +- .../workspace/themes/soplanarchiveraster.xml | 6 +- .../main/workspace/themes/soplanpreraster.xml | 6 +- .../main/workspace/themes/soplanraster.xml | 6 +- 315 files changed, 21986 insertions(+), 9253 deletions(-) create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/handler/AbstractAsyncValidationWrapper.java create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/CrsStatusEnum.java create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ImageFormatStatusEnum.java rename xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/{Link.java => ResponseLink.java} (90%) create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/SystemConfig.java create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReport.java create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResult.java create mode 100644 xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResultSemantischProfil.java create mode 100644 xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportTest.java create mode 100644 xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/Gemeinde.java delete mode 100644 xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/MemoryJobContext.java create mode 100644 xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Gemeinde.java rename xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/{DocumentStorageContext.java => AmazonS3DocumentStorageContext.java} (80%) delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/DeegreeRasterCacheCleaner.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/FilesystemStorageCleanUpManager.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/listener/FilesystemTransactionListener.java rename xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/{AmazonS3Context.java => AmazonS3ReadOnlyContext.java} (81%) rename xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/{document/s3/config/AmazonS3DocumentStorageContext.java => storage/s3/config/AmazonS3TransactionalContext.java} (64%) delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsThemesConfig.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsWorkspaceWrapper.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/GeotiffRasterStorageContext.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/MapserverRasterStorageContext.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/ConfigWriterUtils.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/DeegreeRasterConfigManager.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/NoConfigRasterConfigManager.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/RasterConfigManager.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManager.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterThemeManager.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GeotiffRasterEvaluation.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/FileSystemStorage.java delete mode 100644 xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapper.java delete mode 100644 xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/config/CoreTestContext.java delete mode 100644 xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/ConfigWriterUtilsTest.java delete mode 100644 xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManagerTestManual.java delete mode 100644 xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapperTest.java create mode 100644 xplan-core/xplan-core-raster/pom.xml rename xplan-core/{xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/main/java/de/latlon/xplanbox/core}/raster/RasterType.java (91%) rename xplan-core/{xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/main/java/de/latlon/xplanbox/core}/raster/RasterUtils.java (83%) create mode 100644 xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/config/RasterEvaluationContext.java rename xplan-core/{xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/main/java/de/latlon/xplanbox/core}/raster/evaluation/MapserverRasterEvaluation.java (93%) rename xplan-core/{xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/main/java/de/latlon/xplanbox/core}/raster/evaluation/RasterEvaluation.java (95%) rename xplan-core/{xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/main/java/de/latlon/xplanbox/core}/raster/evaluation/XPlanRasterEvaluator.java (95%) rename xplan-core/{xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/java/de/latlon/xplanbox/core}/raster/evaluation/XPlanRasterEvaluatorTest.java (74%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/dem30.tiff (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/dem30.wld (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/dem30_geotiff_tiled.tiff (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/dem30_geotiff_tiled_epsg4326.tiff (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/png_25833.png (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/png_25833.png.aux.xml (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/png_nocrs.png (100%) rename xplan-core/{xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig => xplan-core-raster/src/test/resources/de/latlon/xplanbox/core}/raster/evaluation/test.txt (100%) delete mode 100644 xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java create mode 100644 xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParser.java create mode 100644 xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGemeindenCustomChange.java create mode 100644 xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParserTest.java create mode 100644 xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_Gemeinden.gml create mode 100644 xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_NoGemeinden.gml delete mode 100644 xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/db/DBDocumentService.java create mode 100644 xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestS3Context.java create mode 100644 xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumenteApiJerseyTest.java create mode 100644 xplan-dokumente/xplan-dokumente-api/src/test/resources/test.txt rename xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloadAction.java => xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidRasterdata.java (55%) create mode 100644 xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AbstractAsyncImportWrapper.java create mode 100644 xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/v2/ConfigHandlerV2.java create mode 100644 xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/Gemeinde.java create mode 100644 xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ManagerSystemConfig.java create mode 100644 xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/ManagerApiJerseyTest.java create mode 100644 xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestS3Context.java create mode 100644 xplan-manager/xplan-manager-api/src/test/resources/s3Mock.properties create mode 100644 xplan-manager/xplan-manager-web/src/main/resources/xplan-manager-web.properties create mode 100644 xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0.zip create mode 100644 xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip create mode 100644 xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip create mode 100644 xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip create mode 100644 xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api/plans/BPlan004_6-0.zip create mode 100644 xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2.java create mode 100644 xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/ValidatorApiJerseyTest.java create mode 100644 xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestS3Context.java rename xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/MemoryJobContextTest.java => xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2Test.java (57%) rename xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/{v1 => }/validatorApiConfiguration.properties (100%) create mode 100644 xplan-validator/xplan-validator-api/src/test/resources/s3Mock.properties create mode 100644 xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/config/TestS3Context.java delete mode 100644 xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/java/de/latlon/xplan/raster/RemoveFromRasterCacheServlet.java delete mode 100644 xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-memory-workspace.xml rename xplan-webservices/xplan-webservices-workspaces/src/main/assembly/{xplan-webservices-validator-wms-sql-workspace.xml => xplan-webservices-validator-wms-workspace.xml} (98%) delete mode 100644 xplan-webservices/xplan-webservices-workspaces/src/main/workspace/data/dummy.png delete mode 100644 xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/feature/validator-wms/memory/xplansyn.xml rename xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/remoteows/{mapserver.ignore => mapserver.xml} (100%) rename xplan-webservices/xplan-webservices-workspaces/src/main/workspace/layers/{mapserver.ignore => mapserver.xml} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb373a517e..f97885b6c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -91,7 +91,17 @@ Im MapProxy wurden folgende Layer umbenannt: - Fehler durch Kürzen von Nachkommastellen in Geometrien beim Import und Editieren im XPlanManager behoben - Verwendung von CubicSplines wird in allen XPlanGML-Versionen als syntaktischer Fehler ausgegeben - Verwendung von CompositeCurve wird in allen XPlanGML-Versionen erlaubt -- Aktualisierung der Validierungsregeln auf v1.1.8 +- Fehler beim Import von Plänen mit externen Referenzen auf Rasterdaten über die XPlanManagerAPI behoben +- Aktualisierung der Validierungsregeln auf v1.1.9 + +### Veraltete Funktionen + +Die folgenden Funktionen sind veraltet und werden in einer zukünftigen Version der xPlanBox entfernt: + +- Nutzung von XPlanWMS mit GeoTiffTileStore ist veraltet (deprecated) +- Nutzung von XPlanWMS mit MapServer und lokalen Dateisystem ist veraltet (deprecated) +- Nutzung von XPlanValidatorWMS mit einem In-Memory-FeatureStore ist veraltet (deprecated). +- Die Workspace-Konfiguration xplan-webservices-validator-wms-memory-workspace ist veraltet (deprecated). ## Version 7.2.1 (2024-05-29) diff --git a/jenkinsfiles/test.Jenkinsfile b/jenkinsfiles/test.Jenkinsfile index 2d06afdbe0..d8502adfa1 100644 --- a/jenkinsfiles/test.Jenkinsfile +++ b/jenkinsfiles/test.Jenkinsfile @@ -80,7 +80,13 @@ pipeline { usernamePassword(credentialsId:"${CREDENTIALS_ID}", passwordVariable: 'Password', usernameVariable: 'Username') ]) { withEnv(['SKIP_RABBIT_TESTS=true']) { - sh 'mvn integration-test -pl :xplan-tests-selenium -Psystem-tests -DbaseUrlValidatorWeb=${BASE_URL_VALIDATOR_WEB} -Dusername=$Username -Dpassword=$Password' + sh 'mvn integration-test -pl :xplan-tests-selenium -Psystem-tests \ + -DXPLAN_VALIDATORAPI_URL_PUBLIC=${BASE_URL_VALIDATOR_API}/xplan-validator-api \ + -DXPLAN_MANAGERAPI_URL_PUBLIC=${BASE_URL_MANAGER_API}/xplan-manager-api \ + -DXPLAN_DOKUMENTEAPI_URL_PUBLIC=${BASE_URL_DOKUMENTE_API}/xplan-dokumente-api \ + -DXPLAN_API_USERNAME=$Username -DXPLAN_API_PASSWORD=$Password \ + -DXPLAN_VALIDATOR_WEB_BASE_URL=${BASE_URL_VALIDATOR_WEB} \ + -DXPLAN_VALIDATOR_WEB_USERNAME=$Username -DXPLAN_VALIDATOR_WEB_PASSWORD=$Password' } } } diff --git a/pom.xml b/pom.xml index e7e52fef6a..ed1f0615b5 100644 --- a/pom.xml +++ b/pom.xml @@ -829,11 +829,6 @@ <artifactId>deegree-core-theme</artifactId> <version>${deegree3.version}</version> </dependency> - <dependency> - <groupId>de.latlon</groupId> - <artifactId>deegree-tilestore-geotiff</artifactId> - <version>${deegree3.version}</version> - </dependency> <dependency> <groupId>de.latlon</groupId> <artifactId>deegree-layers-tile</artifactId> @@ -1100,6 +1095,11 @@ <artifactId>xplan-validator-storage</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>xplan-core-raster</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>xplan-core-schemas</artifactId> diff --git a/xplan-cli/pom.xml b/xplan-cli/pom.xml index 3b61b5bc5e..cf6db81fbd 100644 --- a/xplan-cli/pom.xml +++ b/xplan-cli/pom.xml @@ -136,6 +136,10 @@ <groupId>${project.groupId}</groupId> <artifactId>xplan-core-manager-db</artifactId> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>xplan-core-raster</artifactId> + </dependency> <dependency> <groupId>de.latlon</groupId> <artifactId>deegree-sqldialect-postgis</artifactId> diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java index b57a6fcc11..9fcac8abd6 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java @@ -20,6 +20,13 @@ */ package de.latlon.xplanbox.cli.admin.config; +import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLAN_MANAGER_WORKSPACE; +import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorkspace; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + import de.latlon.xplan.commons.configuration.ConfigurationDirectoryPropertiesLoader; import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; @@ -30,7 +37,6 @@ import de.latlon.xplan.core.manager.db.repository.PlanwerkWmsMetadataRepository; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; import de.latlon.xplan.manager.database.XPlanDbAdapter; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; import de.latlon.xplan.manager.web.shared.ConfigurationException; import de.latlon.xplan.manager.workspace.WorkspaceException; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -44,13 +50,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Lazy; -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; - -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLAN_MANAGER_WORKSPACE; -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorkspace; - /** * Spring Application Context for initialising xplan-update-data-cli components. * @@ -104,11 +103,6 @@ public class CommonContext { return new ManagerWorkspaceWrapper(managerWorkspace); } - @Bean - public DeegreeRasterCacheCleaner deegreeRasterCacheCleaner(ManagerConfiguration managerConfiguration) { - return new DeegreeRasterCacheCleaner(managerConfiguration.getWorkspaceReloaderConfiguration()); - } - @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN") private Path etcDirectory() { String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java index 9b4f6e2276..e0ec08629f 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/SortdateUpdateContext.java @@ -8,45 +8,31 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ package de.latlon.xplanbox.cli.admin.config; -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLANSYN_WMS_WORKSPACE; - -import java.io.File; - import de.latlon.xplan.commons.feature.SortPropertyReader; -import de.latlon.xplan.manager.configuration.ConfigurationException; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.database.XPlanDbAdapter; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import de.latlon.xplan.manager.wmsconfig.config.GeotiffRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3RasterStorageContext; -import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper; -import de.latlon.xplan.manager.workspace.WorkspaceException; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; /** * Spring Application Context for initialising xplan-update-data-cli components. @@ -55,8 +41,7 @@ import org.springframework.context.annotation.Profile; */ @Configuration @ComponentScan({ "de.latlon.xplanbox.cli.admin.db", "de.latlon.xplanbox.cli.admin.sortdate" }) -@Import({ CommonContext.class, GeotiffRasterStorageContext.class, MapserverRasterStorageContext.class, - AmazonS3RasterStorageContext.class, }) +@Import({ CommonContext.class, RasterEvaluationContext.class, AmazonS3RasterStorageContext.class, }) public class SortdateUpdateContext { @Autowired @@ -73,20 +58,4 @@ public class SortdateUpdateContext { } - @Bean - @Profile("!mapserver") - public WmsWorkspaceWrapper wmsWorkspaceWrapper( - @Value("${xplanbox.workspace:#{environment.DEEGREE_WORKSPACE_ROOT}}") File workspaceRoot, - ManagerConfiguration managerConfiguration) throws WorkspaceException, ConfigurationException { - DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE, - workspaceRoot); - return new WmsWorkspaceWrapper(managerConfiguration, wmsWorkspace.getWorkspaceInstance()); - } - - @Bean - public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage, RasterConfigManager rasterConfigManager) - throws WorkspaceException { - return new XPlanRasterManager(rasterStorage, rasterConfigManager, applicationEventPublisher); - } - } diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/sortdate/SortDateUpdater.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/sortdate/SortDateUpdater.java index 304f8e60a2..27e1d787e0 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/sortdate/SortDateUpdater.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/sortdate/SortDateUpdater.java @@ -20,13 +20,16 @@ */ package de.latlon.xplanbox.cli.admin.sortdate; +import java.util.Date; +import java.util.List; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.feature.SortPropertyReader; import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.web.shared.XPlan; -import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; import de.latlon.xplanbox.cli.admin.db.SortPropertyDbUpdater; +import jakarta.transaction.Transactional; import org.deegree.feature.FeatureCollection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,12 +37,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import jakarta.transaction.Transactional; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -60,20 +57,14 @@ public class SortDateUpdater { @Lazy private SortPropertyDbUpdater sortPropertyDbUpdater; - @Autowired - @Lazy - private XPlanRasterManager xPlanRasterManager; - @Transactional(rollbackOn = Exception.class) public void sortDates() throws Exception { - Map<String, Date> planId2sortDate = updateColumnsInDB(xPlanDao, sortPropertyReader, sortPropertyDbUpdater); - xPlanRasterManager.reorderWmsLayers(planId2sortDate); + updateColumnsInDB(xPlanDao, sortPropertyReader, sortPropertyDbUpdater); LOG.info("SortDateUpdateTool successfully executed!"); } - private Map<String, Date> updateColumnsInDB(XPlanDao xPlanDao, SortPropertyReader sortPropertyReader, + private void updateColumnsInDB(XPlanDao xPlanDao, SortPropertyReader sortPropertyReader, SortPropertyDbUpdater sortPropertyDbUpdater) throws Exception { - Map<String, Date> planId2sortDate = new HashMap<String, Date>(); List<XPlan> plans = xPlanDao.getXPlanList(); for (XPlan plan : plans) { LOG.debug("Update sort column value for plan with id {}", plan.getId()); @@ -81,10 +72,8 @@ public class SortDateUpdater { XPlanType planType = XPlanType.valueOf(plan.getType()); XPlanVersion version = XPlanVersion.valueOf(plan.getVersion()); Date sortDate = sortPropertyReader.readSortDate(planType, version, featureCollection); - planId2sortDate.put(plan.getId(), sortDate); sortPropertyDbUpdater.updateSortProperty(sortDate, plan); } - return planId2sortDate; } } diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ListSubcommand.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ListSubcommand.java index 3b9ce6b90b..8de9ee157e 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ListSubcommand.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ListSubcommand.java @@ -20,15 +20,17 @@ */ package de.latlon.xplanbox.cli.manage; +import java.util.List; + +import de.latlon.xplan.core.manager.db.model.Gemeinde; import de.latlon.xplan.manager.XPlanManager; +import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.web.shared.XPlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import picocli.CommandLine; -import java.util.List; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -43,8 +45,9 @@ public class ListSubcommand extends ManagerSubcommand { public Integer callSubcommand(XPlanManager xPlanManager) { System.out.println("---------------------------------------"); try { - List<XPlan> xPlanList = xPlanManager.list(); - printList(xPlanList); + XPlanDao xPlanDao = getBean(XPlanDao.class); + List<XPlan> xPlanList = xPlanDao.getXPlanList(); + printList(xPlanList, xPlanDao); return 0; } catch (Exception e) { @@ -54,16 +57,17 @@ public class ListSubcommand extends ManagerSubcommand { } } - private void printList(List<XPlan> xpList) { + private void printList(List<XPlan> xpList, XPlanDao xPlanDao) { System.out.println("Anzahl Plaene: " + xpList.size()); for (XPlan plan : xpList) { + List<Gemeinde> gemeinden = xPlanDao.retrieveGemeindeOfPlanWithId(plan.getId()); System.out.print("- Id: " + plan.getId()); System.out.print(", Version: " + plan.getVersion()); System.out.print(", Typ: " + plan.getType()); System.out.print(", Name: " + plan.getName()); System.out.print(", Nummer: " + plan.getNumber()); - if (plan.getGkz() != null) { - System.out.print(", GKZ: " + plan.getGkz()); + for (Gemeinde gemeinde : gemeinden) { + System.out.print(", AGS/RS: " + gemeinde.getAgs() + "/" + gemeinde.getRs()); } System.out.print(", Raster: " + (plan.isRaster() ? "ja" : "nein")); System.out.print(", Veroeffentlichungsdatum: " + plan.getReleaseDate()); diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java index e6c78d8e2c..a726781cff 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ManagerSubcommand.java @@ -31,15 +31,22 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext */ public abstract class ManagerSubcommand extends XPlanCliSubcommand { + private AnnotationConfigApplicationContext applicationContext; + public Integer callSubcommand(ApplicationContext applicationContext) { XPlanManager xPlanManager = applicationContext.getBean(XPlanManager.class); return callSubcommand(xPlanManager); } public void register(AnnotationConfigApplicationContext applicationContext) { + this.applicationContext = applicationContext; applicationContext.register(ManageContext.class); } abstract Integer callSubcommand(XPlanManager xPlanManager); + protected <T extends Object> T getBean(Class<T> _class) { + return applicationContext.getBean(_class); + } + } diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ServiceMetadataRecordCreator.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ServiceMetadataRecordCreator.java index 413de0bf83..b0291f2a3b 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ServiceMetadataRecordCreator.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/ServiceMetadataRecordCreator.java @@ -20,6 +20,12 @@ */ package de.latlon.xplanbox.cli.manage; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDescription; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrievePlanName; +import static org.deegree.cs.persistence.CRSManager.lookup; + +import java.util.List; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.commons.feature.XPlanFeatureCollectionBuilder; @@ -35,12 +41,6 @@ import org.deegree.geometry.Envelope; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; - -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDescription; -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrievePlanName; -import static org.deegree.cs.persistence.CRSManager.lookup; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -52,17 +52,21 @@ public class ServiceMetadataRecordCreator { private final ManagerConfiguration managerConfiguration; + private final String defaultCrs; + private final MetadataCouplingHandler metadataCouplingHandler; /** * @param xPlanDao used to access the database, never <code>null</code> * @param managerConfiguration configuration of the manager, never <code>null</code> * @param metadataCouplingHandler never <code>null</code> + * @param defaultCrs never <code>null</code> */ public ServiceMetadataRecordCreator(XPlanDao xPlanDao, ManagerConfiguration managerConfiguration, - MetadataCouplingHandler metadataCouplingHandler) { + MetadataCouplingHandler metadataCouplingHandler, String defaultCrs) { this.xPlanDao = xPlanDao; this.managerConfiguration = managerConfiguration; + this.defaultCrs = defaultCrs; if (managerConfiguration == null || managerConfiguration.getCoupledResourceConfiguration() == null) throw new IllegalArgumentException( "The configuration used to create service is invalid. Service metadata records could not be created."); @@ -117,8 +121,7 @@ public class ServiceMetadataRecordCreator { .getCoupledResourceConfiguration(); PlanwerkServiceMetadataBuilder builder = new PlanwerkServiceMetadataBuilder(type, planName, description, envelope, coupledResourceConfiguration); - PlanwerkServiceMetadata planwerkServiceMetadata = builder - .build(lookup(managerConfiguration.getRasterConfigurationCrs())); + PlanwerkServiceMetadata planwerkServiceMetadata = builder.build(lookup(defaultCrs)); metadataCouplingHandler.processMetadataCoupling(id, name, planwerkServiceMetadata); } diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java index ecab0630ba..4ac957898b 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java @@ -20,7 +20,6 @@ */ package de.latlon.xplanbox.cli.manage.config; -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLANSYN_WMS_WORKSPACE; import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLAN_MANAGER_WORKSPACE; import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorkspace; @@ -50,12 +49,11 @@ import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; import de.latlon.xplan.manager.database.XPlanDbAdapter; import de.latlon.xplan.manager.database.XPlanManagerDao; import de.latlon.xplan.manager.document.XPlanDocumentManager; -import de.latlon.xplan.manager.document.config.DocumentStorageContext; +import de.latlon.xplan.manager.document.config.AmazonS3DocumentStorageContext; import de.latlon.xplan.manager.export.XPlanExporter; import de.latlon.xplan.manager.metadata.DataServiceCouplingException; import de.latlon.xplan.manager.metadata.MetadataCouplingHandler; import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer; import de.latlon.xplan.manager.synthesizer.rules.SynRulesAccessor; import de.latlon.xplan.manager.transaction.AttachmentUrlHandler; @@ -66,16 +64,9 @@ import de.latlon.xplan.manager.transaction.service.XPlanDeleteService; import de.latlon.xplan.manager.transaction.service.XPlanEditService; import de.latlon.xplan.manager.transaction.service.XPlanInsertService; import de.latlon.xplan.manager.web.shared.ConfigurationException; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import de.latlon.xplan.manager.wmsconfig.config.GeotiffRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3RasterStorageContext; -import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper; import de.latlon.xplan.manager.workspace.WorkspaceException; import de.latlon.xplan.manager.workspace.WorkspaceReloader; import de.latlon.xplan.validator.XPlanValidator; @@ -96,8 +87,13 @@ import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplanbox.cli.XPlanCli; import de.latlon.xplanbox.cli.manage.ServiceMetadataRecordCreator; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.config.DeegreeWorkspace; +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.cs.exceptions.UnknownCRSException; +import org.deegree.cs.persistence.CRSManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -107,7 +103,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Profile; import org.springframework.core.io.ResourceLoader; /** @@ -117,14 +112,12 @@ import org.springframework.core.io.ResourceLoader; * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ @Configuration -@Import({ JpaContext.class, GeotiffRasterStorageContext.class, MapserverRasterStorageContext.class, - AmazonS3RasterStorageContext.class, DocumentStorageContext.class }) +@Import({ JpaContext.class, AmazonS3RasterStorageContext.class, AmazonS3DocumentStorageContext.class, + RasterEvaluationContext.class }) public class ManageContext { private static final Logger LOG = LoggerFactory.getLogger(ManageContext.class); - private static final String RULES_DIRECTORY = "/rules"; - @Autowired @Lazy private PlanRepository planRepository; @@ -206,25 +199,8 @@ public class ManageContext { } @Bean - @Profile("!mapserver") - public WmsWorkspaceWrapper wmsWorkspaceWrapper( - @Value("${xplanbox.workspace:#{environment.DEEGREE_WORKSPACE_ROOT}}") File workspaceRoot, - ManagerConfiguration managerConfiguration) - throws WorkspaceException, de.latlon.xplan.manager.configuration.ConfigurationException { - DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE, - workspaceRoot); - return new WmsWorkspaceWrapper(managerConfiguration, wmsWorkspace.getWorkspaceInstance()); - } - - @Bean - public XPlanRasterEvaluator xPlanRasterEvaluator(RasterEvaluation rasterEvaluation) { - return new XPlanRasterEvaluator(rasterEvaluation); - } - - @Bean - public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage, RasterConfigManager rasterConfigManager) - throws WorkspaceException { - return new XPlanRasterManager(rasterStorage, rasterConfigManager, applicationEventPublisher); + public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage) throws WorkspaceException { + return new XPlanRasterManager(rasterStorage, applicationEventPublisher); } @Bean @@ -234,8 +210,7 @@ public class ManageContext { SortPropertyReader sortPropertyReader, XPlanInsertManager xPlanInsertManager, XPlanEditManager xPlanEditManager, XPlanDeleteManager xPlanDeleteManager) throws Exception { return new XPlanManager(xPlanManagerDao, archiveCreator, managerConfiguration, xPlanExporter, - xPlanRasterEvaluator, xPlanRasterManager, sortPropertyReader, null, xPlanInsertManager, - xPlanEditManager, xPlanDeleteManager); + xPlanRasterEvaluator, null, xPlanInsertManager, xPlanEditManager, xPlanDeleteManager); } @Bean @@ -258,10 +233,15 @@ public class ManageContext { XPlanExporter xPlanExporter, ManagerConfiguration managerConfiguration, WorkspaceReloader workspaceReloader, XPlanRasterManager xPlanRasterManager, SortPropertyReader sortPropertyReader, XPlanEditService xPlanEditService, MetadataCouplingHandler metadataCouplingHandler, - Optional<AttachmentUrlHandler> attachmentUrlHandler) { + Optional<AttachmentUrlHandler> attachmentUrlHandler, ICRS defaultCrs) { return new XPlanEditManager(xPlanSynthesizer, xPlanManagerDao, xPlanExporter, xPlanRasterManager, workspaceReloader, managerConfiguration, sortPropertyReader, xPlanEditService, metadataCouplingHandler, - attachmentUrlHandler.orElse(null)); + attachmentUrlHandler.orElse(null), defaultCrs); + } + + @Bean + public ICRS defaultCrs(@Value("${xplanbox.services.crs}") String defaultCrs) throws UnknownCRSException { + return CRSManager.lookup(defaultCrs); } @Bean @@ -272,8 +252,8 @@ public class ManageContext { @Bean public XPlanDeleteManager xPlanDeleteManager(WorkspaceReloader workspaceReloader, - XPlanRasterManager xPlanRasterManager, XPlanDeleteService xPlanDeleteService) { - return new XPlanDeleteManager(xPlanRasterManager, workspaceReloader, xPlanDeleteService); + XPlanDeleteService xPlanDeleteService) { + return new XPlanDeleteManager(workspaceReloader, xPlanDeleteService); } @Bean @@ -319,7 +299,7 @@ public class ManageContext { SemanticValidator semanticValidator, SemanticProfiles semanticProfiles, ReportArchiveGenerator reportArchiveGenerator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, - semanticProfiles.getProfileValidators(), reportArchiveGenerator); + semanticProfiles.getProfileValidators(), reportArchiveGenerator, Optional.empty()); } @Bean @@ -344,11 +324,6 @@ public class ManageContext { return new WorkspaceReloader(managerConfiguration.getWorkspaceReloaderConfiguration()); } - @Bean - public DeegreeRasterCacheCleaner deegreeRasterCacheCleaner(ManagerConfiguration managerConfiguration) { - return new DeegreeRasterCacheCleaner(managerConfiguration.getWorkspaceReloaderConfiguration()); - } - @Bean public ValidatorConfiguration validatorConfiguration(PropertiesLoader validatorPropertiesLoader) throws IOException, ConfigurationException { @@ -386,9 +361,11 @@ public class ManageContext { @Bean public ServiceMetadataRecordCreator serviceMetadataRecordCreator(ManagerConfiguration managerConfiguration, - XPlanManagerDao xPlanManagerDao, MetadataCouplingHandler metadataCouplingHandler) { + XPlanManagerDao xPlanManagerDao, MetadataCouplingHandler metadataCouplingHandler, + @Value("${xplanbox.services.crs}") String defaultCrs) { try { - return new ServiceMetadataRecordCreator(xPlanManagerDao, managerConfiguration, metadataCouplingHandler); + return new ServiceMetadataRecordCreator(xPlanManagerDao, managerConfiguration, metadataCouplingHandler, + defaultCrs); } catch (Exception e) { LOG.warn("Could not initialize ServiceMetadataRecordCreator: {}", e.getMessage()); diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/validate/config/ValidateFileContext.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/validate/config/ValidateFileContext.java index 72572389ad..68f3e52b53 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/validate/config/ValidateFileContext.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/validate/config/ValidateFileContext.java @@ -20,6 +20,16 @@ */ package de.latlon.xplanbox.cli.validate.config; +import static java.nio.file.Paths.get; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Path; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + import de.latlon.xplan.commons.configuration.ConfigurationDirectoryPropertiesLoader; import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.manager.web.shared.ConfigurationException; @@ -44,15 +54,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Scope; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.Path; -import java.util.Collections; -import java.util.List; - -import static java.nio.file.Paths.get; - /** * Defines the application context for the validator CLI * @@ -92,7 +93,7 @@ public class ValidateFileContext { SemanticValidator semanticValidator, List<SemanticProfileValidator> profileValidators, ReportArchiveGenerator reportArchiveGenerator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, profileValidators, - reportArchiveGenerator); + reportArchiveGenerator, Optional.empty()); } @Bean diff --git a/xplan-cli/src/main/resources/managerConfiguration.properties b/xplan-cli/src/main/resources/managerConfiguration.properties index 1f3b8240cf..db50e0ba41 100644 --- a/xplan-cli/src/main/resources/managerConfiguration.properties +++ b/xplan-cli/src/main/resources/managerConfiguration.properties @@ -19,17 +19,17 @@ # #L% ### # raster configuration -rasterConfigurationCrs=EPSG:25832 +# The rasterConfigurationCrs config option is deprecated, use environment variable XPLAN_SERVICES_DEFAULT_CRS instead. rasterLayerMinScaleDenominator=0 rasterLayerMaxScaleDenominator=50000 -# workspace reloader configuration, workspaceReloadAction must be one of ALL (default), RELOAD, PLANWERKWMS +# workspace reloader configuration # workspaceReloadUser and workspaceReloadPassword are deprecated! Use workspaceReloadApiKey instead. workspaceReloadUrls= workspaceReloadApiKey= #workspaceReloadUser= #workspaceReloadPassword= -workspaceReloadAction=ALL +#workspaceReloadAction=ALL # unused since 8.0 - only PLANWERKWMS is supported and applied if workspace reloader configuration is available # links to detailed information about conformity of the semantic validation linkSemanticConformity_XPLAN_40=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%204.0.2/Konformit%C3%A4tsbedingungen%20Xplanung%204.0.2.pdf @@ -99,7 +99,7 @@ planWerkWmsGetMapLayers_LP_Plan= planWerkWmsGetMapStyles_LP_Plan= planWerkWmsGetMapLayers_SO_Plan= planWerkWmsGetMapStyles_SO_Plan= -# width and Height used in GetMap request (default: 750) +# width and height used in GetMap request (default: 750) planWerkWmsGetMapWidth= planWerkWmsGetMapHeight= # capabilities URL of the CSW the dataset metadata should be requested from, never null if feature is enabled diff --git a/xplan-core/pom.xml b/xplan-core/pom.xml index dd5d0674f8..2751f5e342 100644 --- a/xplan-core/pom.xml +++ b/xplan-core/pom.xml @@ -20,6 +20,7 @@ <module>xplan-core-manager</module> <module>xplan-core-manager-db</module> <module>xplan-core-manager-deegree</module> + <module>xplan-core-raster</module> <module>xplan-core-schemas</module> <module>xplan-core-security</module> <module>xplan-core-synthesizer</module> diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidationReportBuilder.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidationReportBuilder.java index a6eed0967a..0d802fccdf 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidationReportBuilder.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidationReportBuilder.java @@ -8,18 +8,33 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ package de.latlon.xplanbox.api.commons; +import static de.latlon.xplan.validator.semantic.report.ValidationResultType.ERROR; +import static de.latlon.xplan.validator.semantic.report.ValidationResultType.WARNING; +import static de.latlon.xplanbox.api.commons.v1.model.VersionEnum.fromXPlanVersion; + +import java.net.URI; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; import de.latlon.xplan.validator.geometric.report.GeometricValidatorResult; import de.latlon.xplan.validator.i18n.ValidationMessages; import de.latlon.xplan.validator.report.ValidatorReport; @@ -32,24 +47,16 @@ import de.latlon.xplanbox.api.commons.v1.model.PlanInfoBbox; import de.latlon.xplanbox.api.commons.v1.model.RulesMetadata; import de.latlon.xplanbox.api.commons.v1.model.SemanticInvalidRuleResult; import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; -import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResult; import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultGeometrisch; import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantisch; -import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantischProfil; import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantischRules; import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSyntaktisch; +import de.latlon.xplanbox.api.commons.v2.model.CrsStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ImageFormatStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReportValidationResult; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReportValidationResultSemantischProfil; import org.deegree.geometry.Envelope; -import java.net.URI; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import static de.latlon.xplan.validator.semantic.report.ValidationResultType.ERROR; -import static de.latlon.xplan.validator.semantic.report.ValidationResultType.WARNING; -import static de.latlon.xplanbox.api.commons.v1.model.VersionEnum.fromXPlanVersion; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -100,6 +107,78 @@ public class ValidationReportBuilder { return validationReport; } + public de.latlon.xplanbox.api.commons.v2.model.ValidationReport buildV2() { + de.latlon.xplanbox.api.commons.v2.model.ValidationReport validationReport = new de.latlon.xplanbox.api.commons.v2.model.ValidationReport(); + if (validatorReport != null) { + LocalDateTime date = validatorReport.getDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + validationReport.date(date) + .name(validatorReport.getValidationName()) + .documentSummary(buildDocumentSummary()) + .version(fromXPlanVersion(validatorReport.getXPlanVersion())) + .valid(validatorReport.isReportValid()) + .status(status()) + .bbox(asBBox(validatorReport.getBBoxIn4326())) + .filename(filename) + .externalReferencesResult(externalReferencesResult()) + .wmsUrl(wmsUrl) + .rulesMetadata(rulesMetadata()) + .validationResult(createValidationResultV2()); + } + return validationReport; + } + + public static ValidationReport convertToV1( + de.latlon.xplanbox.api.commons.v2.model.ValidationReport validationReportV2) { + ValidationReport validationReport = new ValidationReport(); + if (validationReportV2 != null) { + // TODO: use DateConverter + Date date = validationReportV2.getDate() != null + ? Date.from(validationReportV2.getDate().atZone(ZoneId.systemDefault()).toInstant()) : null; + de.latlon.xplanbox.api.commons.v2.model.ValidationReportValidationResult validationResult = validationReportV2 + .getValidationResult(); + validationReport.date(date) + .name(validationReportV2.getName()) + .documentSummary(validationReportV2.getDocumentSummary()) + .version(validationReportV2.getVersion()) + .valid(validationReportV2.getValid()) + .status(validationReportV2.getStatus()) + .bbox(validationReportV2.getBbox()) + .filename(validationReportV2.getFilename()) + .externalReferences(validationReportV2.getExternalReferencesResult() + .stream() + .map(ExternalReferenceResult::getName) + .toList()) + .externalReferencesResult(validationReportV2.getExternalReferencesResult()) + .wmsUrl(validationReportV2.getWmsUrl()) + .rulesMetadata(validationReportV2.getRulesMetadata()) + .validationResult(convertToV1(validationResult)); + } + return validationReport; + } + + private static de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResult convertToV1( + de.latlon.xplanbox.api.commons.v2.model.ValidationReportValidationResult validationResult) { + return new de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResult() + .syntaktisch(validationResult.getSyntaktisch()) + .semantisch(validationResult.getSemantisch()) + .geometrisch(validationResult.getGeometrisch()) + .profile(convertToV1(validationResult.getProfile())); + + } + + private static List<de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantischProfil> convertToV1( + List<ValidationReportValidationResultSemantischProfil> profiles) { + if (profiles != null) + return profiles.stream().map(profile -> { + RulesMetadata rulesMetadata = profile.getRulesMetadata(); + return new de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantischProfil() + .name(rulesMetadata != null ? rulesMetadata.getName() : null) + .description(rulesMetadata != null ? rulesMetadata.getDescription() : null) + .result(profile.getResult()); + }).toList(); + return null; + } + private List<DocumentSummary> buildDocumentSummary() { return validatorReport.getPlanNames() .stream() @@ -146,9 +225,24 @@ public class ValidationReportBuilder { externalReferenceAndStatus.add(new ExternalReferenceResult().name(name) .status(ExternalReferenceStatusEnum.fromExternalReferenceStatus(status))); }); + List<RasterEvaluationResult> rasterEvaluationResults = validatorReport.getRasterEvaluationResults(); + rasterEvaluationResults.forEach(rasterEvaluationResult -> { + Optional<ExternalReferenceResult> matchingExternalReference = externalReferenceAndStatus.stream() + .filter(externalReferenceResult -> externalReferenceResult.getName() + .equals(rasterEvaluationResult.getRasterName())) + .findFirst(); + if (matchingExternalReference.isPresent() && rasterEvaluationResult.isRasterFileAvailable()) { + CrsStatusEnum crsStatus = CrsStatusEnum.fromResult(rasterEvaluationResult.isConfiguredCrs(), + rasterEvaluationResult.isCrsSet()); + ImageFormatStatusEnum imageFormatStatus = ImageFormatStatusEnum + .fromResult(rasterEvaluationResult.isSupportedImageFormat()); + matchingExternalReference.get().crsStatus(crsStatus).imageFormatStatus(imageFormatStatus); + } + }); return externalReferenceAndStatus; } return null; + } private RulesMetadata rulesMetadata() { @@ -162,13 +256,21 @@ public class ValidationReportBuilder { return null; } - private ValidationReportValidationResult createValidationResult() { - return new ValidationReportValidationResult().syntaktisch(syntaktischResult()) + private de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResult createValidationResult() { + return new de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResult() + .syntaktisch(syntaktischResult()) .semantisch(semantischResult()) .geometrisch(geometrischResult()) .profile(profileResult()); } + private ValidationReportValidationResult createValidationResultV2() { + return new ValidationReportValidationResult().syntaktisch(syntaktischResult()) + .semantisch(semantischResult()) + .geometrisch(geometrischResult()) + .profile(profileResultV2()); + } + private ValidationReportValidationResultSyntaktisch syntaktischResult() { if (validatorReport != null && validatorReport.getSyntacticValidatorResult() != null) { SyntacticValidatorResult result = validatorReport.getSyntacticValidatorResult(); @@ -196,14 +298,15 @@ public class ValidationReportBuilder { return null; } - private List<ValidationReportValidationResultSemantischProfil> profileResult() { + private List<de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantischProfil> profileResult() { if (validatorReport != null && validatorReport.getSemanticProfileValidatorResults() != null) { List<SemanticValidatorResult> profileResults = validatorReport.getSemanticProfileValidatorResults(); return profileResults.stream().map(profileResult -> { de.latlon.xplan.validator.semantic.configuration.metadata.RulesMetadata rulesMetadata = profileResult .getRulesMetadata(); ValidationReportValidationResultSemantisch result = createSemanticValidatorResult(profileResult); - return new ValidationReportValidationResultSemantischProfil().name(rulesMetadata.getName()) + return new de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantischProfil() + .name(rulesMetadata.getName()) .description(rulesMetadata.getDescription()) .result(result); }).collect(Collectors.toList()); @@ -211,6 +314,33 @@ public class ValidationReportBuilder { return Collections.emptyList(); } + private List<ValidationReportValidationResultSemantischProfil> profileResultV2() { + if (validatorReport != null && validatorReport.getSemanticProfileValidatorResults() != null) { + List<SemanticValidatorResult> profileResults = validatorReport.getSemanticProfileValidatorResults(); + return profileResults.stream().map(profileResult -> { + de.latlon.xplan.validator.semantic.configuration.metadata.RulesMetadata rulesMetadata = profileResult + .getRulesMetadata(); + ValidationReportValidationResultSemantisch result = createSemanticValidatorResult(profileResult); + return new ValidationReportValidationResultSemantischProfil() + .rulesMetadata(createRulesMetadata(rulesMetadata)) + .result(result); + }).collect(Collectors.toList()); + } + return Collections.emptyList(); + } + + private static RulesMetadata createRulesMetadata( + de.latlon.xplan.validator.semantic.configuration.metadata.RulesMetadata rulesMetadata) { + if (rulesMetadata != null) { + return new RulesMetadata().id(rulesMetadata.getId()) + .name(rulesMetadata.getName()) + .version(rulesMetadata.getVersion()) + .description(rulesMetadata.getDescription()) + .source(rulesMetadata.getSource()); + } + return null; + } + private ValidationReportValidationResultSemantisch createSemanticValidatorResult(SemanticValidatorResult result) { List<ValidationReportValidationResultSemantischRules> rules = result.getRules() .stream() diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidatorConverter.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidatorConverter.java index 6e602a154a..02d86e58b2 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidatorConverter.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/ValidatorConverter.java @@ -20,18 +20,6 @@ */ package de.latlon.xplanbox.api.commons; -import de.latlon.xplan.validator.web.shared.ValidationOption; -import de.latlon.xplan.validator.web.shared.ValidationSettings; -import de.latlon.xplan.validator.web.shared.ValidationType; -import de.latlon.xplanbox.api.commons.exception.UnsupportedHeaderValue; -import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import static de.latlon.xplan.commons.util.TextPatternConstants.SIMPLE_NAME_PATTERN; import static de.latlon.xplan.validator.geometric.GeometricValidatorImpl.SKIP_FLAECHENSCHLUSS; import static de.latlon.xplan.validator.geometric.GeometricValidatorImpl.SKIP_GELTUNGSBEREICH; @@ -40,6 +28,18 @@ import static de.latlon.xplan.validator.web.shared.ValidationType.GEOMETRIC; import static de.latlon.xplan.validator.web.shared.ValidationType.SEMANTIC; import static de.latlon.xplan.validator.web.shared.ValidationType.SYNTACTIC; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import de.latlon.xplan.validator.web.shared.ValidationOption; +import de.latlon.xplan.validator.web.shared.ValidationSettings; +import de.latlon.xplan.validator.web.shared.ValidationType; +import de.latlon.xplanbox.api.commons.exception.UnsupportedHeaderValue; +import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; + /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -75,12 +75,13 @@ public final class ValidatorConverter { public static ValidationSettings createValidationSettings(String validationName, boolean skipGeometrisch, boolean skipSemantisch, boolean skipFlaechenschluss, boolean skipGeltungsbereich, boolean skipLaufrichtung, - List<String> profiles) { + List<String> profiles, boolean skipRasterEvaluation) { ValidationSettings settings = new ValidationSettings(); settings.setValidationName(validationName); settings.setValidationTypes(asValidationTypes(skipGeometrisch, skipSemantisch)); settings.setExtendedOptions(asValidationOptions(skipFlaechenschluss, skipGeltungsbereich, skipLaufrichtung)); settings.setProfiles(profiles); + settings.setSkipRasterEvaluation(skipRasterEvaluation); return settings; } diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/config/ApiConfiguration.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/config/ApiConfiguration.java index 2b0059ae50..985a1424dd 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/config/ApiConfiguration.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/config/ApiConfiguration.java @@ -20,13 +20,13 @@ */ package de.latlon.xplanbox.api.commons.config; -import de.latlon.xplan.commons.configuration.PropertiesLoader; -import de.latlon.xplan.manager.web.shared.ConfigurationException; - import java.net.URI; import java.net.URISyntaxException; import java.util.Properties; +import de.latlon.xplan.commons.configuration.PropertiesLoader; +import de.latlon.xplan.manager.web.shared.ConfigurationException; + /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -60,7 +60,6 @@ public abstract class ApiConfiguration { this.propertiesFileName = propertiesFileName; loadProperties(propertiesLoader); validateProperties(); - logProperties(); } /** @@ -131,11 +130,6 @@ public abstract class ApiConfiguration { protected void validateProperties() throws ConfigurationException { } - /** - * Logs the properties. - */ - protected abstract void logProperties(); - /** * Parse the property as URL. * @param properties never <code>null</code> diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/handler/AbstractAsyncValidationWrapper.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/handler/AbstractAsyncValidationWrapper.java new file mode 100644 index 0000000000..384eff1ad1 --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/handler/AbstractAsyncValidationWrapper.java @@ -0,0 +1,15 @@ +package de.latlon.xplanbox.api.commons.handler; + +import de.latlon.core.validator.events.EventSender; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public abstract class AbstractAsyncValidationWrapper extends AbstractAsyncWrapper { + + protected AbstractAsyncValidationWrapper(EventSender eventSender) { + super(eventSender); + } + +} diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/openapi/OpenApiFilter.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/openapi/OpenApiFilter.java index 1ca5b88e40..176f08626c 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/openapi/OpenApiFilter.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/openapi/OpenApiFilter.java @@ -20,8 +20,18 @@ */ package de.latlon.xplanbox.api.commons.openapi; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.filter.AbstractSpecFilter; import io.swagger.v3.core.model.ApiDescription; +import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; @@ -33,13 +43,6 @@ import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponses; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -61,6 +64,12 @@ public class OpenApiFilter extends AbstractSpecFilter { return super.filterParameter(parameter, operation, api, params, cookies, headers); } + protected void addSchemas(Components components, Class<?> type) { + ModelConverters instance = ModelConverters.getInstance(); + Map<String, Schema> validationReportSchema = instance.readAll(new AnnotatedType(type)); + validationReportSchema.forEach(components::addSchemas); + } + private void addOpenApiPath(OpenAPI openAPI) { ApiResponses apiResponses = new ApiResponses() .addApiResponse("200", diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v1/model/ExternalReferenceResult.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v1/model/ExternalReferenceResult.java index d77a78fa23..b9bb113ca6 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v1/model/ExternalReferenceResult.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v1/model/ExternalReferenceResult.java @@ -20,9 +20,11 @@ */ package de.latlon.xplanbox.api.commons.v1.model; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import de.latlon.xplanbox.api.commons.v2.model.CrsStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ImageFormatStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; - import jakarta.validation.Valid; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; @@ -40,6 +42,10 @@ public class ExternalReferenceResult { private @Valid ExternalReferenceStatusEnum status; + private @Valid @JsonInclude(JsonInclude.Include.NON_NULL) CrsStatusEnum crsStatus; + + private @Valid @JsonInclude(JsonInclude.Include.NON_NULL) ImageFormatStatusEnum imageFormatStatus; + public void setName(String name) { this.name = name; } @@ -70,4 +76,34 @@ public class ExternalReferenceResult { return status; } + public ExternalReferenceResult crsStatus(CrsStatusEnum crsStatus) { + this.crsStatus = crsStatus; + return this; + } + + public void setCrsStatus(@Valid CrsStatusEnum crsStatus) { + this.crsStatus = crsStatus; + } + + @Schema(example = "SUPPORTED") + @JsonProperty("crsStatus") + public @Valid CrsStatusEnum getCrsStatus() { + return crsStatus; + } + + public ExternalReferenceResult imageFormatStatus(ImageFormatStatusEnum imageFormatStatus) { + this.imageFormatStatus = imageFormatStatus; + return this; + } + + public void setImageFormatStatus(@Valid ImageFormatStatusEnum imageFormatStatus) { + this.imageFormatStatus = imageFormatStatus; + } + + @Schema(example = "SUPPORTED") + @JsonProperty("imageFormatStatus") + public @Valid ImageFormatStatusEnum getImageFormatStatus() { + return imageFormatStatus; + } + } diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/CrsStatusEnum.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/CrsStatusEnum.java new file mode 100644 index 0000000000..daf3f1b71c --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/CrsStatusEnum.java @@ -0,0 +1,72 @@ +/*- + * #%L + * xplan-core-api - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.commons.v2.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public enum CrsStatusEnum { + + // available in XPlanGML and same as configured crs + SUPPORTED("SUPPORTED"), + + // available in XPlanGML but not the same as configured crs + UNSUPPORTED("UNSUPPORTED"), MISSING("MISSING"); + + private String value; + + CrsStatusEnum(String v) { + value = v; + } + + public static CrsStatusEnum fromResult(boolean configuredCrs, boolean crsSet) { + if (crsSet && configuredCrs) + return SUPPORTED; + if (crsSet && !configuredCrs) + return UNSUPPORTED; + return MISSING; + } + + public String value() { + return value; + } + + @Override + @JsonValue + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static CrsStatusEnum fromValue(String value) { + for (CrsStatusEnum b : CrsStatusEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + +} diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ImageFormatStatusEnum.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ImageFormatStatusEnum.java new file mode 100644 index 0000000000..c25add2457 --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ImageFormatStatusEnum.java @@ -0,0 +1,70 @@ +/*- + * #%L + * xplan-core-api - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.commons.v2.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public enum ImageFormatStatusEnum { + + SUPPORTED("SUPPORTED"), + + UNSUPPORTED("UNSUPPORTED"), + + MISSING("MISSING"); + + private String value; + + ImageFormatStatusEnum(String v) { + value = v; + } + + public static ImageFormatStatusEnum fromResult(boolean supportedImageFormat) { + if (supportedImageFormat) + return SUPPORTED; + return UNSUPPORTED; + } + + public String value() { + return value; + } + + @Override + @JsonValue + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static ImageFormatStatusEnum fromValue(String value) { + for (ImageFormatStatusEnum b : ImageFormatStatusEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + +} diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/Link.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ResponseLink.java similarity index 90% rename from xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/Link.java rename to xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ResponseLink.java index 813e8c995b..d086270c4e 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/Link.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ResponseLink.java @@ -37,20 +37,20 @@ import jakarta.xml.bind.annotation.XmlRootElement; * Datatype for Link. A Link to a resource related to the resource such as XPlanWerkWMS or * the resource itself. * - * @since 4.0 + * @since 8.0 */ -@Schema(description = "Link to a resource related to the resource such as XPlanWerkWMS or the resource itself") -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen", - date = "2020-08-28T13:42:47.160+02:00[Europe/Berlin]") +@Schema(description = "Link to a resource related to the resource such as " + + "ValidationReport (as described ind #/components/schemas/ValidationReport) or " + + "PlanInfo (as described ind #/components/schemas/PlanInfo)") @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class Link extends AbstractLink { +public class ResponseLink extends AbstractLink { public enum RelEnum { STATUS("status"), REPORT("report"), PLANINFO("planinfo"); - private String value; + private final String value; RelEnum(String v) { value = v; @@ -82,7 +82,7 @@ public class Link extends AbstractLink { private Date expirationTime; - public Link rel(RelEnum rel) { + public ResponseLink rel(RelEnum rel) { this.rel = rel; return this; } @@ -105,7 +105,7 @@ public class Link extends AbstractLink { this.expirationTime = expirationTime; } - public Link expirationTime(Date expirationTime) { + public ResponseLink expirationTime(Date expirationTime) { this.expirationTime = expirationTime; return this; } @@ -118,7 +118,7 @@ public class Link extends AbstractLink { return false; if (!super.equals(o)) return false; - Link link = (Link) o; + ResponseLink link = (ResponseLink) o; return rel == link.rel; } diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/StatusNotification.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/StatusNotification.java index 7d41e46f92..69262f1552 100644 --- a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/StatusNotification.java +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/StatusNotification.java @@ -14,7 +14,7 @@ public class StatusNotification { private List<String> importedPlanIds; - private List<Link> links; + private List<ResponseLink> links; public StatusNotification() { } @@ -49,20 +49,20 @@ public class StatusNotification { return this; } - public List<Link> getLinks() { + public List<ResponseLink> getLinks() { return links; } - public void setLinks(List<Link> links) { + public void setLinks(List<ResponseLink> links) { this.links = links; } - public StatusNotification links(List<Link> links) { + public StatusNotification links(List<ResponseLink> links) { this.links = links; return this; } - public StatusNotification links(Link... links) { + public StatusNotification links(ResponseLink... links) { this.links = List.of(links); return this; } diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/SystemConfig.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/SystemConfig.java new file mode 100644 index 0000000000..4dd80d2180 --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/SystemConfig.java @@ -0,0 +1,140 @@ +/*- + * #%L + * xplan-core-api - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.commons.v2.model; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import de.latlon.xplanbox.api.commons.v1.model.VersionEnum; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class SystemConfig { + + private @Valid String version; + + @JsonInclude(NON_EMPTY) + private @Valid List<String> profiles = new ArrayList<>(); + + private @Valid List<VersionEnum> supportedXPlanGmlVersions = new ArrayList<VersionEnum>(); + + public SystemConfig version(String version) { + this.version = version; + return this; + } + + @Schema(example = "v3.4.0", description = "Version der xPlanBox") + @JsonProperty("version") + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public SystemConfig profiles(List<String> profiles) { + this.profiles = profiles; + return this; + } + + @ArraySchema(schema = @Schema(description = "Supported validation profiles")) + @JsonProperty("profiles") + public List<String> getProfiles() { + return profiles; + } + + public void setProfiles(List<String> profiles) { + this.profiles = profiles; + } + + /** + * + **/ + public SystemConfig supportedXPlanGmlVersions(List<VersionEnum> supportedXPlanGmlVersions) { + this.supportedXPlanGmlVersions = supportedXPlanGmlVersions; + return this; + } + + @ArraySchema(schema = @Schema(example = "XPLAN_51")) + @JsonProperty("supportedXPlanGmlVersions") + public List<VersionEnum> getSupportedXPlanGmlVersions() { + return supportedXPlanGmlVersions; + } + + public void setSupportedXPlanGmlVersions(List<VersionEnum> supportedXPlanGmlVersions) { + this.supportedXPlanGmlVersions = supportedXPlanGmlVersions; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SystemConfig systemConfig = (SystemConfig) o; + return Objects.equals(this.version, systemConfig.version) + && Objects.equals(this.profiles, systemConfig.profiles) + && Objects.equals(this.supportedXPlanGmlVersions, systemConfig.supportedXPlanGmlVersions); + } + + @Override + public int hashCode() { + return Objects.hash(version, profiles, supportedXPlanGmlVersions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class SystemConfig {\n"); + + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" profiles: ").append(toIndentedString(profiles)).append("\n"); + sb.append(" supportedXPlanGmlVersions: ").append(toIndentedString(supportedXPlanGmlVersions)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the + * first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReport.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReport.java new file mode 100644 index 0000000000..b872e66c74 --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReport.java @@ -0,0 +1,325 @@ +/*- + * #%L + * xplan-core-api - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.commons.v2.model; + +import java.net.URI; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import de.latlon.xplanbox.api.commons.v1.model.DocumentSummary; +import de.latlon.xplanbox.api.commons.v1.model.ExternalReferenceResult; +import de.latlon.xplanbox.api.commons.v1.model.PlanInfoBbox; +import de.latlon.xplanbox.api.commons.v1.model.RulesMetadata; +import de.latlon.xplanbox.api.commons.v1.model.VersionEnum; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class ValidationReport { + + private @Valid VersionEnum version; + + private @Valid String filename; + + private @Valid String name; + + private @Valid List<DocumentSummary> documentSummary; + + private @Valid PlanInfoBbox bbox; + + private @Valid LocalDateTime date; + + private @Valid Boolean valid; + + private @Valid String status; + + private @Valid List<ExternalReferenceResult> externalReferencesResult = new ArrayList<>(); + + private @Valid @JsonInclude(Include.NON_NULL) URI wmsUrl; + + private @Valid RulesMetadata rulesMetadata; + + private @Valid ValidationReportValidationResult validationResult; + + public ValidationReport filename(String filename) { + this.filename = filename; + return this; + } + + @Schema(example = "xplan52-test.gml") + @JsonProperty("filename") + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public ValidationReport name(String name) { + this.name = name; + return this; + } + + @Schema(example = "xplan52-test") + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ValidationReport documentSummary(List<DocumentSummary> documentSummary) { + this.documentSummary = documentSummary; + return this; + } + + public List<DocumentSummary> getDocumentSummary() { + return documentSummary; + } + + public void setDocumentSummary(List<DocumentSummary> documentSummary) { + this.documentSummary = documentSummary; + } + + public ValidationReport version(VersionEnum version) { + this.version = version; + return this; + } + + @Schema(example = "XPLAN_51") + @JsonProperty("version") + public VersionEnum getVersion() { + return version; + } + + public void setVersion(VersionEnum version) { + this.version = version; + } + + public ValidationReport bbox(PlanInfoBbox bbox) { + this.bbox = bbox; + return this; + } + + @Schema + @JsonProperty("bbox") + public PlanInfoBbox getBbox() { + return bbox; + } + + public void setBbox(PlanInfoBbox bbox) { + this.bbox = bbox; + } + + public ValidationReport date(LocalDateTime date) { + this.date = date; + return this; + } + + @Schema(example = "2020-08-24T15:06:36.662Z") + @JsonProperty("date") + public LocalDateTime getDate() { + return date; + } + + public void setDate(LocalDateTime date) { + this.date = date; + } + + public ValidationReport valid(Boolean valid) { + this.valid = valid; + return this; + } + + @Schema(example = "false") + @JsonProperty("valid") + public Boolean getValid() { + return valid; + } + + public void setValid(Boolean valid) { + this.valid = valid; + } + + public ValidationReport status(String status) { + this.status = status; + return this; + } + + @Schema(example = "Die Validierung wurde ausgef\u00fchrt.") + @JsonProperty("status") + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public ValidationReport externalReferencesResult(@Valid List<ExternalReferenceResult> externalReferencesResult) { + this.externalReferencesResult = externalReferencesResult; + return this; + } + + @ArraySchema(schema = @Schema(description = "since v1.1.0, replaces externalReferences")) + @JsonProperty("externalReferencesResult") + public List<ExternalReferenceResult> getExternalReferencesResult() { + return externalReferencesResult; + } + + public void setExternalReferencesResult(List<ExternalReferenceResult> externalReferencesResult) { + this.externalReferencesResult = externalReferencesResult; + } + + /** + * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version + */ + @Deprecated + public ValidationReport wmsUrl(URI wmsUrl) { + this.wmsUrl = wmsUrl; + return this; + } + + /** + * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version + */ + @Deprecated + @Schema(example = "https://xplanbox.lat-lon.de/xplan-validator-wms/services/wms?PLANWERK_MANAGERID=13", + description = "deprecated: XPlanValidatorWMS will be removed in a future version", deprecated = true) + @JsonProperty("wmsUrl") + public URI getWmsUrl() { + return wmsUrl; + } + + /** + * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version + */ + @Deprecated + public void setWmsUrl(URI wmsUrl) { + this.wmsUrl = wmsUrl; + } + + public ValidationReport rulesMetadata(RulesMetadata rulesMetadata) { + this.rulesMetadata = rulesMetadata; + return this; + } + + @Schema + @JsonProperty("rulesMetadata") + public RulesMetadata getRulesMetadata() { + return rulesMetadata; + } + + public void setRulesMetadata(RulesMetadata rulesMetadata) { + this.rulesMetadata = rulesMetadata; + } + + public ValidationReport validationResult(ValidationReportValidationResult validationResult) { + this.validationResult = validationResult; + return this; + } + + @Schema + @JsonProperty("validationResult") + public ValidationReportValidationResult getValidationResult() { + return validationResult; + } + + public void setValidationResult(ValidationReportValidationResult validationResult) { + this.validationResult = validationResult; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ValidationReport validationReport = (ValidationReport) o; + return Objects.equals(this.filename, validationReport.filename) + && Objects.equals(this.name, validationReport.name) + && Objects.equals(this.documentSummary, validationReport.documentSummary) + && Objects.equals(this.version, validationReport.version) + && Objects.equals(this.bbox, validationReport.bbox) && Objects.equals(this.date, validationReport.date) + && Objects.equals(this.valid, validationReport.valid) + && Objects.equals(this.externalReferencesResult, validationReport.externalReferencesResult) + && Objects.equals(this.wmsUrl, validationReport.wmsUrl) + && Objects.equals(this.rulesMetadata, validationReport.rulesMetadata) + && Objects.equals(this.validationResult, validationReport.validationResult); + } + + @Override + public int hashCode() { + return Objects.hash(filename, name, documentSummary, version, bbox, date, valid, externalReferencesResult, + wmsUrl, rulesMetadata, validationResult); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ValidationReport {\n"); + + sb.append(" filename: ").append(toIndentedString(filename)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" planInfos: ").append(toIndentedString(documentSummary)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" bbox: ").append(toIndentedString(bbox)).append("\n"); + sb.append(" date: ").append(toIndentedString(date)).append("\n"); + sb.append(" valid: ").append(toIndentedString(valid)).append("\n"); + sb.append(" externalReferencesResult: ").append(toIndentedString(externalReferencesResult)).append("\n"); + sb.append(" wmsUrl: ").append(toIndentedString(wmsUrl)).append("\n"); + sb.append(" rulesMetadata: ").append(toIndentedString(rulesMetadata)).append("\n"); + sb.append(" validationResult: ").append(toIndentedString(validationResult)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the + * first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResult.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResult.java new file mode 100644 index 0000000000..ecbd862fde --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResult.java @@ -0,0 +1,155 @@ +/*- + * #%L + * xplan-core-api - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.commons.v2.model; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY; + +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultGeometrisch; +import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantisch; +import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSyntaktisch; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class ValidationReportValidationResult { + + private @Valid ValidationReportValidationResultSemantisch semantisch; + + private @Valid ValidationReportValidationResultGeometrisch geometrisch; + + private @Valid ValidationReportValidationResultSyntaktisch syntaktisch; + + @JsonInclude(NON_EMPTY) + private @Valid List<ValidationReportValidationResultSemantischProfil> profile; + + public ValidationReportValidationResult semantisch(ValidationReportValidationResultSemantisch semantisch) { + this.semantisch = semantisch; + return this; + } + + @Schema + @JsonProperty("semantisch") + public ValidationReportValidationResultSemantisch getSemantisch() { + return semantisch; + } + + public void setSemantisch(ValidationReportValidationResultSemantisch semantisch) { + this.semantisch = semantisch; + } + + public ValidationReportValidationResult geometrisch(ValidationReportValidationResultGeometrisch geometrisch) { + this.geometrisch = geometrisch; + return this; + } + + @Schema + @JsonProperty("geometrisch") + public ValidationReportValidationResultGeometrisch getGeometrisch() { + return geometrisch; + } + + public void setGeometrisch(ValidationReportValidationResultGeometrisch geometrisch) { + this.geometrisch = geometrisch; + } + + public ValidationReportValidationResult syntaktisch(ValidationReportValidationResultSyntaktisch syntaktisch) { + this.syntaktisch = syntaktisch; + return this; + } + + @Schema + @JsonProperty("syntaktisch") + public ValidationReportValidationResultSyntaktisch getSyntaktisch() { + return syntaktisch; + } + + public void setSyntaktisch(ValidationReportValidationResultSyntaktisch syntaktisch) { + this.syntaktisch = syntaktisch; + } + + public ValidationReportValidationResult profile(List<ValidationReportValidationResultSemantischProfil> profile) { + this.profile = profile; + return this; + } + + @Schema + @JsonProperty("profile") + public List<ValidationReportValidationResultSemantischProfil> getProfile() { + return profile; + } + + public void setProfile(List<ValidationReportValidationResultSemantischProfil> profile) { + this.profile = profile; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ValidationReportValidationResult validationReportValidationResult = (ValidationReportValidationResult) o; + return Objects.equals(this.semantisch, validationReportValidationResult.semantisch) + && Objects.equals(this.geometrisch, validationReportValidationResult.geometrisch) + && Objects.equals(this.syntaktisch, validationReportValidationResult.syntaktisch) + && Objects.equals(this.profile, validationReportValidationResult.profile); + } + + @Override + public int hashCode() { + return Objects.hash(semantisch, geometrisch, syntaktisch, profile); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ValidationReportValidationResult {\n"); + + sb.append(" semantisch: ").append(toIndentedString(semantisch)).append("\n"); + sb.append(" geometrisch: ").append(toIndentedString(geometrisch)).append("\n"); + sb.append(" syntaktisch: ").append(toIndentedString(syntaktisch)).append("\n"); + sb.append(" profile: ").append(toIndentedString(profile)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the + * first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} diff --git a/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResultSemantischProfil.java b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResultSemantischProfil.java new file mode 100644 index 0000000000..ea19a838b3 --- /dev/null +++ b/xplan-core/xplan-core-api/src/main/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportValidationResultSemantischProfil.java @@ -0,0 +1,111 @@ +/*- + * #%L + * xplan-core-api - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.commons.v2.model; + +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import de.latlon.xplanbox.api.commons.v1.model.RulesMetadata; +import de.latlon.xplanbox.api.commons.v1.model.ValidationReportValidationResultSemantisch; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class ValidationReportValidationResultSemantischProfil { + + private @Valid RulesMetadata rulesMetadata; + + private @Valid ValidationReportValidationResultSemantisch result; + + public ValidationReportValidationResultSemantischProfil rulesMetadata(RulesMetadata name) { + this.rulesMetadata = name; + return this; + } + + @Schema + @JsonProperty("rulesMetadata") + public RulesMetadata getRulesMetadata() { + return rulesMetadata; + } + + public void setRulesMetadata(RulesMetadata rulesMetadata) { + this.rulesMetadata = rulesMetadata; + } + + public ValidationReportValidationResultSemantischProfil result(ValidationReportValidationResultSemantisch result) { + this.result = result; + return this; + } + + @Schema + @JsonProperty("ergebnis") + public ValidationReportValidationResultSemantisch getResult() { + return result; + } + + public void setResult(ValidationReportValidationResultSemantisch result) { + this.result = result; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ValidationReportValidationResultSemantischProfil validationReportValidationResultSemantisch = (ValidationReportValidationResultSemantischProfil) o; + return Objects.equals(this.rulesMetadata, validationReportValidationResultSemantisch.rulesMetadata) + && Objects.equals(this.result, validationReportValidationResultSemantisch.result); + } + + @Override + public int hashCode() { + return Objects.hash(rulesMetadata, result); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ValidationReportValidationResultSemantisch {\n"); + + sb.append(" name: ").append(toIndentedString(rulesMetadata)).append("\n"); + sb.append(" result: ").append(toIndentedString(result)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the + * first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} diff --git a/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/ValidatorConverterTest.java b/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/ValidatorConverterTest.java index 696a945ec5..f2735786ea 100644 --- a/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/ValidatorConverterTest.java +++ b/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/ValidatorConverterTest.java @@ -26,13 +26,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Collections; -import org.junit.jupiter.api.Test; - import de.latlon.xplan.validator.geometric.GeometricValidatorImpl; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplan.validator.web.shared.ValidationType; import de.latlon.xplanbox.api.commons.exception.UnsupportedHeaderValue; import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; +import org.junit.jupiter.api.Test; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> @@ -64,12 +63,13 @@ class ValidatorConverterTest { @Test void verifyThat_CreateValidationSettings_ReturnsCompleteSettings() { ValidationSettings validationSettings = ValidatorConverter.createValidationSettings("foo", false, true, true, - false, true, Collections.singletonList("10")); + false, true, Collections.singletonList("10"), true); assertThat(validationSettings.getValidationName()).contains("foo"); assertThat(validationSettings.getValidationTypes()).contains(ValidationType.GEOMETRIC); assertThat(validationSettings.getExtendedOptions()).contains(GeometricValidatorImpl.SKIP_FLAECHENSCHLUSS); assertThat(validationSettings.getExtendedOptions()).contains(GeometricValidatorImpl.SKIP_LAUFRICHTUNG); assertThat(validationSettings.getProfiles()).contains("10"); + assertThat(validationSettings.isSkipRasterEvaluation()).isTrue(); } @Test diff --git a/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportTest.java b/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportTest.java new file mode 100644 index 0000000000..b08381c606 --- /dev/null +++ b/xplan-core/xplan-core-api/src/test/java/de/latlon/xplanbox/api/commons/v2/model/ValidationReportTest.java @@ -0,0 +1,56 @@ +package de.latlon.xplanbox.api.commons.v2.model; + +import static de.latlon.xplanbox.api.commons.v1.model.ExternalReferenceStatusEnum.AVAILABLE; +import static de.latlon.xplanbox.api.commons.v1.model.VersionEnum.XPLAN_60; +import static de.latlon.xplanbox.api.commons.v2.model.CrsStatusEnum.MISSING; +import static de.latlon.xplanbox.api.commons.v2.model.ImageFormatStatusEnum.UNSUPPORTED; +import static java.time.Month.JULY; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.LocalDateTime; +import java.util.Collections; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import de.latlon.xplanbox.api.commons.ObjectMapperContextResolver; +import de.latlon.xplanbox.api.commons.v1.model.ExternalReferenceResult; +import org.junit.jupiter.api.Test; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + */ +public class ValidationReportTest { + + @Test + void verifyThat_ReportCanBeSerialized() throws URISyntaxException, IOException { + ExternalReferenceResult externalReferenceResult = new ExternalReferenceResult().name("test.png") + .status(AVAILABLE) + .crsStatus(MISSING) + .imageFormatStatus(UNSUPPORTED); + ValidationReport validationReport = new ValidationReport().date(LocalDateTime.of(2024, JULY, 31, 9, 55)) + .name("test") + .version(XPLAN_60) + .valid(true) + .status("valid") + .filename("text.xml") + .wmsUrl(new URI("file:///no/real/file/name")) + .externalReferencesResult(Collections.singletonList(externalReferenceResult)); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectMapper objectMapper = new ObjectMapperContextResolver().getContext(ValidationReport.class); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.writerWithDefaultPrettyPrinter().writeValue(bos, validationReport); + String serializedReport = bos.toString(); + assertThat(serializedReport).contains("externalReferencesResult"); + assertThat(serializedReport).contains("crsStatus"); + assertThat(serializedReport).contains("MISSING"); + assertThat(serializedReport).contains("imageFormatStatus"); + assertThat(serializedReport).contains("UNSUPPORTED"); + assertThat(serializedReport).contains("2024-07-31"); + } + +} diff --git a/xplan-core/xplan-core-commons/pom.xml b/xplan-core/xplan-core-commons/pom.xml index afda0793b6..5c3398cd8b 100644 --- a/xplan-core/xplan-core-commons/pom.xml +++ b/xplan-core/xplan-core-commons/pom.xml @@ -37,10 +37,6 @@ <groupId>de.latlon</groupId> <artifactId>deegree-core-theme</artifactId> </dependency> - <dependency> - <groupId>de.latlon</groupId> - <artifactId>deegree-tilestore-geotiff</artifactId> - </dependency> <dependency> <groupId>de.latlon</groupId> <artifactId>deegree-layers-tile</artifactId> diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java index 0a95c9613d..72c3f717ca 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java @@ -20,10 +20,7 @@ */ package de.latlon.xplan.commons.util; -import de.latlon.xplan.commons.XPlanType; -import de.latlon.xplan.manager.web.shared.Bereich; -import org.deegree.feature.Feature; -import org.deegree.feature.FeatureCollection; +import static de.latlon.xplan.commons.synthesizer.Features.getPropertyStringValue; import javax.xml.namespace.QName; import java.util.ArrayList; @@ -31,7 +28,15 @@ import java.util.List; import java.util.UUID; import java.util.stream.Collectors; -import static de.latlon.xplan.commons.synthesizer.Features.getPropertyStringValue; +import de.latlon.xplan.commons.XPlanType; +import de.latlon.xplan.manager.web.shared.Bereich; +import de.latlon.xplan.manager.web.shared.Gemeinde; +import org.deegree.commons.tom.TypedObjectNode; +import org.deegree.commons.tom.genericxml.GenericXMLElement; +import org.deegree.commons.tom.gml.property.Property; +import org.deegree.feature.Feature; +import org.deegree.feature.FeatureCollection; +import org.deegree.feature.property.GenericProperty; /** * Contains utilities for deegree {@link org.deegree.feature.FeatureCollection}s. @@ -167,7 +172,7 @@ public class FeatureCollectionUtils { } /** - * Retrieves the Bereiche of the passed {@link Feature}. + * Retrieves the Bereiche of the passed {@link FeatureCollection}. * @param fc XPlan-FeatureCollection, never <code>null</code> * @return list of the bereiche of the plan, may be empty but never <code>null</code> */ @@ -186,6 +191,55 @@ public class FeatureCollectionUtils { return bereiche; } + /** + * Retrieves the Gemeinden of the passed {@link FeatureCollection}. + * @param fc XPlan-FeatureCollection, never <code>null</code> + * @return list of the bereiche of the plan, may be empty but never <code>null</code> + */ + public static List<Gemeinde> retrieveGemeinden(FeatureCollection fc) { + List<Gemeinde> gemeinden = new ArrayList<>(); + for (Feature feature : fc) { + QName featureName = feature.getName(); + if (featureName.getLocalPart().matches("(BP|FP|LP|SO)_Plan")) { + String ns = feature.getName().getNamespaceURI(); + List<Property> gemeindeProperties = feature.getProperties(new QName(ns, "gemeinde")); + for (Property gemeindeProperty : gemeindeProperties) { + GenericXMLElement xpGemeinde = getXpGemeinde(gemeindeProperty); + if (xpGemeinde != null) { + Gemeinde gemeinde = new Gemeinde(); + gemeinde.setAgs(getProperty(xpGemeinde, new QName(ns, "ags"))); + gemeinde.setRs(getProperty(xpGemeinde, new QName(ns, "rs"))); + gemeinde.setGemeindeName(getProperty(xpGemeinde, new QName(ns, "gemeindeName"))); + gemeinde.setOrtsteilName(getProperty(xpGemeinde, new QName(ns, "ortsteilName"))); + gemeinden.add(gemeinde); + } + } + } + } + return gemeinden; + } + + public static GenericXMLElement getXpGemeinde(Property f) { + if (f instanceof GenericProperty) { + List<TypedObjectNode> children = f.getChildren(); + for (TypedObjectNode typedObjectNode : children) { + if (typedObjectNode instanceof GenericXMLElement + && "XP_Gemeinde".equals(((GenericXMLElement) typedObjectNode).getName().getLocalPart())) + return (GenericXMLElement) typedObjectNode; + } + } + return null; + } + + private static String getProperty(GenericXMLElement xpGemeinde, QName propName) { + List<TypedObjectNode> children = xpGemeinde.getChildren(); + for (TypedObjectNode child : children) { + if (child instanceof GenericXMLElement && propName.equals(((GenericXMLElement) child).getName())) + return ((GenericXMLElement) child).getValue().getAsText(); + } + return null; + } + private static String retrievePlanProperty(FeatureCollection fc, XPlanType type, String propertyName) { Feature planFeature = findPlanFeature(fc, type); String ns = planFeature.getName().getNamespaceURI(); diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/Gemeinde.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/Gemeinde.java new file mode 100644 index 0000000000..a261d72232 --- /dev/null +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/Gemeinde.java @@ -0,0 +1,94 @@ +package de.latlon.xplan.manager.web.shared; + +import java.util.Objects; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class Gemeinde { + + private String ags; + + private String rs; + + private String gemeindeName; + + private String ortsteilName; + + public String getAgs() { + return ags; + } + + public void setAgs(String ags) { + this.ags = ags; + } + + public Gemeinde ags(String ags) { + this.ags = ags; + return this; + } + + public String getRs() { + return rs; + } + + public void setRs(String rs) { + this.rs = rs; + } + + public Gemeinde rs(String rs) { + this.rs = rs; + return this; + } + + public String getGemeindeName() { + return gemeindeName; + } + + public void setGemeindeName(String gemeindeName) { + this.gemeindeName = gemeindeName; + } + + public Gemeinde gemeindeName(String gemeindeName) { + this.gemeindeName = gemeindeName; + return this; + } + + public String getOrtsteilName() { + return ortsteilName; + } + + public void setOrtsteilName(String ortsteilName) { + this.ortsteilName = ortsteilName; + } + + public Gemeinde ortsteilName(String ortsteilName) { + this.ortsteilName = ortsteilName; + return this; + } + + @Override + public int hashCode() { + return Objects.hash(ags, rs, gemeindeName, ortsteilName); + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Gemeinde gemeinde = (Gemeinde) o; + return Objects.equals(ags, gemeinde.ags) && Objects.equals(rs, gemeinde.rs) + && Objects.equals(gemeindeName, gemeinde.gemeindeName) + && Objects.equals(ortsteilName, gemeinde.ortsteilName); + } + + @Override + public String toString() { + return "Gemeinde{" + "ags='" + ags + '\'' + ", rs='" + rs + '\'' + ", gemeindeName='" + gemeindeName + '\'' + + ", ortsteilName='" + ortsteilName + '\'' + '}'; + } + +} diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/RasterEvaluationResult.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/RasterEvaluationResult.java index b991f861f6..a9e91c1ce6 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/RasterEvaluationResult.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/RasterEvaluationResult.java @@ -32,6 +32,8 @@ public class RasterEvaluationResult implements Serializable { private String rasterName; + private boolean isRasterFileAvailable; + private String rasterCrs; private String rasterConfigurationCrs; @@ -58,6 +60,7 @@ public class RasterEvaluationResult implements Serializable { public RasterEvaluationResult(String rasterName, String rasterCrs, String rasterConfigurationCrs, boolean isCrsSet, boolean isConfiguredCrs, boolean supportedImageFormat) { this.rasterName = rasterName; + this.isRasterFileAvailable = true; this.rasterCrs = rasterCrs; this.rasterConfigurationCrs = rasterConfigurationCrs; this.crsSet = isCrsSet; @@ -65,6 +68,21 @@ public class RasterEvaluationResult implements Serializable { this.supportedImageFormat = supportedImageFormat; } + /** + * @param rasterName name of the raster file, never <code>null</code> + * @param isRasterFileAvailable <code>true</code> if the raster file does not exist in + * the XPlanArchive + */ + public RasterEvaluationResult(String rasterName, String rasterConfigurationCrs, boolean isRasterFileAvailable) { + this.rasterName = rasterName; + this.isRasterFileAvailable = isRasterFileAvailable; + this.rasterCrs = null; + this.rasterConfigurationCrs = rasterConfigurationCrs; + this.crsSet = false; + this.configuredCrs = false; + this.supportedImageFormat = false; + } + /** * @return the name of the raster file, never <code>null</code> */ @@ -79,6 +97,14 @@ public class RasterEvaluationResult implements Serializable { this.rasterName = rasterName; } + public void setRasterFileAvailable(boolean isRasterFileAvailable) { + this.isRasterFileAvailable = isRasterFileAvailable; + } + + public boolean isRasterFileAvailable() { + return isRasterFileAvailable; + } + /** * @return crs of the raster file, may be <code>null</code> if none is set */ diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/XPlan.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/XPlan.java index 778f175ab8..21f90a18c4 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/XPlan.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/manager/web/shared/XPlan.java @@ -20,11 +20,10 @@ */ package de.latlon.xplan.manager.web.shared; -import de.latlon.xplan.validator.web.shared.XPlanEnvelope; - import java.io.Serializable; import java.util.Date; -import java.util.List; + +import de.latlon.xplan.validator.web.shared.XPlanEnvelope; /** * Main Web UI class. @@ -76,8 +75,6 @@ public class XPlan implements Serializable, Comparable<XPlan> { private boolean hasUnresolvedReferences; - private List<Bereich> bereiche; - public XPlan() { this("N/A", "-", "NO TYPE"); } @@ -137,14 +134,6 @@ public class XPlan implements Serializable, Comparable<XPlan> { this.number = number; } - public String getGkz() { - return gkz; - } - - public void setGkz(String gkz) { - this.gkz = gkz; - } - public boolean isRaster() { return raster; } diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/validator/web/shared/ValidationSettings.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/validator/web/shared/ValidationSettings.java index 6665e3172d..d287d2f0e4 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/validator/web/shared/ValidationSettings.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/validator/web/shared/ValidationSettings.java @@ -20,12 +20,13 @@ */ package de.latlon.xplan.validator.web.shared; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; import java.io.Serializable; import java.util.Collections; import java.util.List; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; + /** * Encapsulates all settings made for a validation run. * @@ -46,6 +47,8 @@ public class ValidationSettings implements Serializable { private List<String> profiles; + private boolean skipRasterEvaluation = false; + public ValidationSettings() { } @@ -96,10 +99,19 @@ public class ValidationSettings implements Serializable { return profiles; } + public boolean isSkipRasterEvaluation() { + return skipRasterEvaluation; + } + + public void setSkipRasterEvaluation(boolean skipRasterEvaluation) { + this.skipRasterEvaluation = skipRasterEvaluation; + } + @Override public String toString() { return "ValidationSettings{" + "validationName='" + validationName + '\'' + ", validationTypes=" - + validationTypes + ", extendedOptions=" + extendedOptions + ", profiles=" + profiles + '}'; + + validationTypes + ", extendedOptions=" + extendedOptions + ", profiles=" + profiles + + ", skipRasterEvaluation=" + skipRasterEvaluation + '}'; } } diff --git a/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/util/FeatureCollectionUtilsTest.java b/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/util/FeatureCollectionUtilsTest.java index b129b491ae..22aa6ff6e9 100644 --- a/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/util/FeatureCollectionUtilsTest.java +++ b/xplan-core/xplan-core-commons/src/test/java/de/latlon/xplan/commons/util/FeatureCollectionUtilsTest.java @@ -20,22 +20,24 @@ */ package de.latlon.xplan.commons.util; +import static de.latlon.xplan.commons.XPlanType.BP_Plan; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.findPlanFeature; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveBereiche; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveGemeinden; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveRechtsstand; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; import de.latlon.xplan.manager.web.shared.Bereich; +import de.latlon.xplan.manager.web.shared.Gemeinde; import org.deegree.feature.Feature; import org.deegree.feature.FeatureCollection; import org.junit.jupiter.api.Test; -import java.util.List; - -import static de.latlon.xplan.commons.XPlanType.BP_Plan; -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.findPlanFeature; -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveBereiche; -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveRechtsstand; -import static org.assertj.core.api.Assertions.assertThat; - /** * Tests for {@link FeatureCollectionUtils}. * @@ -89,7 +91,7 @@ class FeatureCollectionUtilsTest { } @Test - void testRetrieveBereicheWithXPlan41() throws Exception { + void testRetrieveBereicheWithXPlan52() throws Exception { FeatureCollection fc = getMainFileAsFeatureCollection("xplan52/BPlan001_5-2_Bereiche.zip"); List<Bereich> bereiche = retrieveBereiche(fc); assertThat(bereiche).hasSize(2); @@ -101,6 +103,23 @@ class FeatureCollectionUtilsTest { assertThat(bereiche.get(1).getName()).isNull(); } + @Test + void testRetrieveGemeindenWithXPlan52() throws Exception { + FeatureCollection fc = getMainFileAsFeatureCollection("xplan52/BPlan001_5-2_Bereiche.zip"); + List<Gemeinde> gemeindem = retrieveGemeinden(fc); + assertThat(gemeindem).hasSize(2); + + assertThat(gemeindem.get(0).getAgs()).isEqualTo("02000000"); + assertThat(gemeindem.get(0).getRs()).isNull(); + assertThat(gemeindem.get(0).getGemeindeName()).isEqualTo("Freie und Hansestadt Hamburg"); + assertThat(gemeindem.get(0).getOrtsteilName()).isEqualTo("526"); + + assertThat(gemeindem.get(1).getAgs()).isNull(); + assertThat(gemeindem.get(1).getRs()).isEqualTo("020000001111"); + assertThat(gemeindem.get(1).getGemeindeName()).isNull(); + assertThat(gemeindem.get(1).getOrtsteilName()).isEqualTo("999"); + } + private FeatureCollection getMainFileAsFeatureCollection(String name) throws Exception { XPlanArchiveCreator archiveCreator = new XPlanArchiveCreator(); XPlanArchive archive = archiveCreator.createXPlanArchiveFromZip(name, diff --git a/xplan-core/xplan-core-commons/src/test/resources/testdata/xplan52/BPlan001_5-2_Bereiche.zip b/xplan-core/xplan-core-commons/src/test/resources/testdata/xplan52/BPlan001_5-2_Bereiche.zip index 0459626ac08fed711dd93c6791624d31e0126c0e..bd9fdc405df0bcdd162e8af101f25a884f3bd488 100644 GIT binary patch delta 22243 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 CZa_u= delta 22953 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ℜ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 diff --git a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/JobContext.java b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/JobContext.java index 6f0dfddd9c..25b3844986 100644 --- a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/JobContext.java +++ b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/JobContext.java @@ -24,7 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; import org.springframework.core.io.ClassPathResource; import org.springframework.scheduling.quartz.SchedulerFactoryBean; @@ -35,7 +34,6 @@ import org.springframework.scheduling.quartz.SchedulerFactoryBean; * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version */ @Configuration -@Profile("validatorwmssql | validatorwmsmemory") @Deprecated public class JobContext { diff --git a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/MemoryJobContext.java b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/MemoryJobContext.java deleted file mode 100644 index 0e058ef0f4..0000000000 --- a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/MemoryJobContext.java +++ /dev/null @@ -1,106 +0,0 @@ -/*- - * #%L - * xplan-core-job - Modul zur Gruppierung der Kernmodule - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.job.validator.config; - -import static de.latlon.xplan.job.validator.config.JobContext.DELETE_AFTER_KEY; -import static de.latlon.xplan.job.validator.config.JobContext.DELETE_INTERVAL_IN_SECONDS; -import static de.latlon.xplan.job.validator.config.JobContext.IMPORT_INTERVAL_IN_SECONDS; -import static org.quartz.SimpleScheduleBuilder.simpleSchedule; - -import de.latlon.xplan.job.validator.memory.GmlDeleteJob; -import de.latlon.xplan.job.validator.memory.GmlImportJob; -import org.quartz.JobBuilder; -import org.quartz.JobDetail; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.Trigger; -import org.quartz.TriggerBuilder; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.scheduling.quartz.SchedulerFactoryBean; - -/** - * Spring configuration for Quartz scheduler and jobs. - * - * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> - * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version - */ -@Configuration -@Profile("validatorwmsmemory") -@Deprecated -public class MemoryJobContext { - - @Bean - public JobDetail importJob() { - return JobBuilder.newJob() - .ofType(GmlImportJob.class) - .withIdentity("gmlImportJob", "xplan-validator-wms") - .storeDurably() - .withDescription("Import GML files into MemoryFeatureStore ...") - .build(); - } - - @Bean - public JobDetail deleteJob(@Value("#{environment.DELETE_AFTER_MINUTES ?: 5}") int deleteAfterInMinutes) { - return JobBuilder.newJob() - .ofType(GmlDeleteJob.class) - .withIdentity("gmlDeleteJob", "xplan-validator-wms") - .storeDurably() - .withDescription("Delete GML files from MemoryFeatureStore ...") - .usingJobData(DELETE_AFTER_KEY, deleteAfterInMinutes) - .build(); - } - - @Bean - public Trigger importTrigger(JobDetail importJob) { - return TriggerBuilder.newTrigger() - .forJob(importJob) - .withIdentity("importTrigger", "xplan-validator-wms") - .withDescription("Import trigger") - .withSchedule(simpleSchedule().withIntervalInSeconds(IMPORT_INTERVAL_IN_SECONDS).repeatForever()) - .startNow() - .build(); - } - - @Bean - Trigger deleteTrigger(JobDetail deleteJob) { - return TriggerBuilder.newTrigger() - .forJob(deleteJob) - .withIdentity("deleteTrigger", "xplan-validator-wms") - .withDescription("Delete trigger") - .withSchedule(simpleSchedule().withIntervalInSeconds(DELETE_INTERVAL_IN_SECONDS).repeatForever()) - .startNow() - .build(); - } - - @Bean - public Scheduler scheduler(JobDetail importJob, Trigger importTrigger, JobDetail deleteJob, Trigger deleteTrigger, - SchedulerFactoryBean schedulerFactory) throws SchedulerException { - Scheduler scheduler = schedulerFactory.getScheduler(); - scheduler.scheduleJob(importJob, importTrigger); - scheduler.scheduleJob(deleteJob, deleteTrigger); - scheduler.start(); - return scheduler; - } - -} diff --git a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/SqlJobContext.java b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/SqlJobContext.java index b7eeec90f6..9f1e02ebf5 100644 --- a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/SqlJobContext.java +++ b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/config/SqlJobContext.java @@ -20,7 +20,10 @@ */ package de.latlon.xplan.job.validator.config; -import de.latlon.xplan.job.validator.sql.SqlDeleteJob; +import static de.latlon.xplan.job.validator.config.JobContext.DELETE_AFTER_KEY; +import static de.latlon.xplan.job.validator.config.JobContext.DELETE_INTERVAL_IN_SECONDS; +import static org.quartz.SimpleScheduleBuilder.simpleSchedule; + import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; @@ -32,12 +35,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; import org.springframework.scheduling.quartz.SchedulerFactoryBean; -import static de.latlon.xplan.job.validator.config.JobContext.DELETE_AFTER_KEY; -import static de.latlon.xplan.job.validator.config.JobContext.DELETE_INTERVAL_IN_SECONDS; -import static org.quartz.SimpleScheduleBuilder.simpleSchedule; +import de.latlon.xplan.job.validator.sql.SqlDeleteJob; /** * Spring configuration for Quartz scheduler and jobs for XPlanValidatorWMS based on @@ -47,7 +47,6 @@ import static org.quartz.SimpleScheduleBuilder.simpleSchedule; * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version */ @Configuration -@Profile("validatorwmssql") @Deprecated public class SqlJobContext { diff --git a/xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/SqlJobContextTest.java b/xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/SqlJobContextTest.java index 509ca449d3..1253f42a4a 100644 --- a/xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/SqlJobContextTest.java +++ b/xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/SqlJobContextTest.java @@ -29,7 +29,6 @@ import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -38,8 +37,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { JobContext.class, SqlJobContext.class, MemoryJobContext.class }) -@ActiveProfiles("validatorwmssql") +@ContextConfiguration(classes = { JobContext.class, SqlJobContext.class }) @Deprecated public class SqlJobContextTest { diff --git a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Gemeinde.java b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Gemeinde.java new file mode 100644 index 0000000000..8202c801fd --- /dev/null +++ b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Gemeinde.java @@ -0,0 +1,98 @@ +package de.latlon.xplan.core.manager.db.model; + +import java.util.Objects; + +import jakarta.persistence.Embeddable; +import jakarta.validation.Valid; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Embeddable +public class Gemeinde { + + private @Valid String ags; + + private @Valid String rs; + + private @Valid String gemeindeName; + + private @Valid String ortsteilName; + + public @Valid String getAgs() { + return ags; + } + + public void setAgs(String ags) { + this.ags = ags; + } + + public Gemeinde ags(String ags) { + this.ags = ags; + return this; + } + + public String getRs() { + return rs; + } + + public void setRs(String rs) { + this.rs = rs; + } + + public Gemeinde rs(String rs) { + this.rs = rs; + return this; + } + + public String getGemeindeName() { + return gemeindeName; + } + + public void setGemeindeName(String gemeindeName) { + this.gemeindeName = gemeindeName; + } + + public Gemeinde gemeindeName(String gemeindeName) { + this.gemeindeName = gemeindeName; + return this; + } + + public String getOrtsteilName() { + return ortsteilName; + } + + public void setOrtsteilName(String ortsteilName) { + this.ortsteilName = ortsteilName; + } + + public Gemeinde ortsteilName(String ortsteilName) { + this.ortsteilName = ortsteilName; + return this; + } + + @Override + public int hashCode() { + return Objects.hash(ags, rs, gemeindeName, ortsteilName); + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Gemeinde gemeinde = (Gemeinde) o; + return Objects.equals(ags, gemeinde.ags) && Objects.equals(rs, gemeinde.rs) + && Objects.equals(gemeindeName, gemeinde.gemeindeName) + && Objects.equals(ortsteilName, gemeinde.ortsteilName); + } + + @Override + public String toString() { + return "Gemeinde{" + "ags='" + ags + '\'' + ", rs='" + rs + '\'' + ", gemeindeName='" + gemeindeName + '\'' + + ", ortsteilName='" + ortsteilName + '\'' + '}'; + } + +} diff --git a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java index 07e2ea6b3d..0fc412ed3b 100644 --- a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java +++ b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java @@ -20,10 +20,13 @@ */ package de.latlon.xplan.core.manager.db.model; +import static jakarta.persistence.CascadeType.ALL; + +import java.util.Date; +import java.util.Set; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; -import org.locationtech.jts.geom.Geometry; - import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; @@ -41,10 +44,7 @@ import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; -import java.util.Date; -import java.util.Set; - -import static jakarta.persistence.CascadeType.ALL; +import org.locationtech.jts.geom.Geometry; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> @@ -79,8 +79,6 @@ public class Plan { private @Valid String internalid; - private @Valid String gkz; - @NotNull @Column(name = "has_raster") private @Valid Boolean hasRaster; @@ -101,6 +99,11 @@ public class Plan { private @Valid Geometry bbox; + @ElementCollection(fetch = FetchType.LAZY) + @CollectionTable(schema = "xplanmgr", name = "gemeinden", joinColumns = @JoinColumn(name = "plan"), + foreignKey = @ForeignKey(name = "gemeinden_plan_fkey")) + private @Valid Set<Gemeinde> gemeinden; + @ElementCollection(fetch = FetchType.LAZY) @CollectionTable(schema = "xplanmgr", name = "bereiche", joinColumns = @JoinColumn(name = "plan"), foreignKey = @ForeignKey(name = "bereiche_plan_fkey")) @@ -200,19 +203,6 @@ public class Plan { return this; } - public String getGkz() { - return gkz; - } - - public void setGkz(String gkz) { - this.gkz = gkz; - } - - public Plan gkz(String gkz) { - this.gkz = gkz; - return this; - } - public Boolean getHasRaster() { return hasRaster; } @@ -330,6 +320,19 @@ public class Plan { return this; } + public Set<Gemeinde> getGemeinden() { + return gemeinden; + } + + public void setGemeinden(Set<Gemeinde> gemeinden) { + this.gemeinden = gemeinden; + } + + public Plan gemeinden(Set<Gemeinde> gemeinden) { + this.gemeinden = gemeinden; + return this; + } + public Set<Artefact> getArtefacts() { return artefacts; } @@ -360,10 +363,10 @@ public class Plan { public String toString() { return "Plan{" + "id=" + id + ", importDate=" + importDate + ", version=" + version + ", type=" + type + ", name='" + name + '\'' + ", nummer='" + nummer + '\'' + ", internalid='" + internalid + '\'' - + ", gkz='" + gkz + '\'' + ", hasRaster=" + hasRaster + ", rechtsstand='" + rechtsstand + '\'' - + ", releaseDate=" + releaseDate + ", sonstPlanArt='" + sonstPlanArt + '\'' + ", planstatus='" - + planstatus + ", wmssortdate=" + wmssortdate + ", inspirepublished=" + inspirepublished + ", bereiche=" - + bereiche + ", artefacts=" + artefacts + ", features=" + features + '}'; + + ", hasRaster=" + hasRaster + ", rechtsstand='" + rechtsstand + '\'' + ", releaseDate=" + releaseDate + + ", sonstPlanArt='" + sonstPlanArt + '\'' + ", planstatus='" + planstatus + ", wmssortdate=" + + wmssortdate + ", inspirepublished=" + inspirepublished + ", bereiche=" + bereiche + ", artefacts=" + + artefacts + ", features=" + features + '}'; } } diff --git a/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/PlanRepositoryTest.java b/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/PlanRepositoryTest.java index 72bf1f7c59..645706ef05 100644 --- a/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/PlanRepositoryTest.java +++ b/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/PlanRepositoryTest.java @@ -20,6 +20,22 @@ */ package de.latlon.xplan.core.manager.db.repository; +import static de.latlon.xplan.commons.XPlanType.BP_Plan; +import static de.latlon.xplan.commons.XPlanVersion.XPLAN_51; +import static de.latlon.xplan.manager.web.shared.PlanStatus.IN_AUFSTELLUNG; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import javax.sql.DataSource; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; + import de.latlon.xplan.core.manager.db.config.HsqlJpaContext; import de.latlon.xplan.core.manager.db.config.JpaContext; import de.latlon.xplan.core.manager.db.config.PostgisJpaContext; @@ -28,9 +44,11 @@ import de.latlon.xplan.core.manager.db.model.ArtefactId; import de.latlon.xplan.core.manager.db.model.ArtefactType; import de.latlon.xplan.core.manager.db.model.Bereich; import de.latlon.xplan.core.manager.db.model.Feature; +import de.latlon.xplan.core.manager.db.model.Gemeinde; import de.latlon.xplan.core.manager.db.model.Plan; import de.latlon.xplan.manager.web.shared.PlanStatus; - +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.locationtech.jts.io.ParseException; @@ -42,23 +60,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.transaction.TestTransaction; import org.springframework.transaction.annotation.Transactional; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; -import javax.sql.DataSource; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Optional; - -import static de.latlon.xplan.commons.XPlanType.BP_Plan; -import static de.latlon.xplan.commons.XPlanVersion.XPLAN_51; -import static de.latlon.xplan.manager.web.shared.PlanStatus.IN_AUFSTELLUNG; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - @ExtendWith(SpringExtension.class) @ActiveProfiles("test-hsql") @ContextConfiguration(classes = { JpaContext.class, HsqlJpaContext.class, PostgisJpaContext.class }) @@ -86,6 +87,7 @@ class PlanRepositoryTest { void verify_saveAndFindById() throws ParseException { assertFalse(TestTransaction.isFlaggedForRollback()); Bereich bereich = new Bereich().nummer("0").name("test"); + Gemeinde gemeinde = new Gemeinde().ags("05465465").rs("856131321").gemeindeName("Test").ortsteilName("teil1"); Feature feature = new Feature().num(1).fid("123"); Plan plan = new Plan(); ArtefactId artefactId = new ArtefactId().plan(plan).filename("test.xml"); @@ -101,6 +103,7 @@ class PlanRepositoryTest { .type(BP_Plan) .hasRaster(false) .bereiche(Collections.singleton(bereich)) + .gemeinden(Collections.singleton(gemeinde)) .features(Collections.singleton(feature)) .artefacts(Collections.singleton(artefact)); // Not running with HSQL DB (@ActiveProfiles("test-hsql")) @@ -122,6 +125,7 @@ class PlanRepositoryTest { String name = "saveAndFindByName"; Bereich bereich = new Bereich().nummer("0").name("test"); + Gemeinde gemeinde = new Gemeinde().ags("05465465").rs("856131321").gemeindeName("Test").ortsteilName("teil1"); Feature feature = new Feature().num(1).fid("123"); Plan plan = new Plan().name(name) .importDate(new Date()) @@ -129,11 +133,13 @@ class PlanRepositoryTest { .type(BP_Plan) .hasRaster(false) .bereiche(Collections.singleton(bereich)) + .gemeinden(Collections.singleton(gemeinde)) .features(Collections.singleton(feature)); planRepository.save(plan); List<Plan> existingPlan = planRepository.findByName(name); assertFalse(existingPlan.isEmpty()); + assertEquals(existingPlan.get(0).getGemeinden().size(), 1); List<Plan> nonExistingPlan = planRepository.findByName("unknown"); assertTrue(nonExistingPlan.isEmpty()); diff --git a/xplan-core/xplan-core-manager/pom.xml b/xplan-core/xplan-core-manager/pom.xml index 2870fd8959..ce014be75d 100644 --- a/xplan-core/xplan-core-manager/pom.xml +++ b/xplan-core/xplan-core-manager/pom.xml @@ -31,10 +31,6 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>de.latlon</groupId> - <artifactId>deegree-tilestore-geotiff</artifactId> - </dependency> <dependency> <groupId>de.latlon</groupId> <artifactId>deegree-layers-tile</artifactId> @@ -71,6 +67,10 @@ <groupId>${project.groupId}</groupId> <artifactId>xplan-core-manager-db</artifactId> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>xplan-core-raster</artifactId> + </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/XPlanManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/XPlanManager.java index 8b65e1d505..908aa7e27a 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/XPlanManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/XPlanManager.java @@ -43,7 +43,10 @@ import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.archive.XPlanPartArchive; -import de.latlon.xplan.commons.feature.*; +import de.latlon.xplan.commons.feature.FeatureCollectionParseException; +import de.latlon.xplan.commons.feature.XPlanFeatureCollection; +import de.latlon.xplan.commons.feature.XPlanFeatureCollections; +import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; import de.latlon.xplan.commons.reference.ExternalReferenceInfo; import de.latlon.xplan.core.manager.db.model.Artefact; import de.latlon.xplan.manager.configuration.ManagerConfiguration; @@ -57,11 +60,15 @@ import de.latlon.xplan.manager.transaction.UnsupportPlanException; import de.latlon.xplan.manager.transaction.XPlanDeleteManager; import de.latlon.xplan.manager.transaction.XPlanEditManager; import de.latlon.xplan.manager.transaction.XPlanInsertManager; -import de.latlon.xplan.manager.web.shared.*; +import de.latlon.xplan.manager.web.shared.Bereich; +import de.latlon.xplan.manager.web.shared.PlanNameWithStatusResult; +import de.latlon.xplan.manager.web.shared.PlanStatus; +import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; +import de.latlon.xplan.manager.web.shared.Rechtsstand; +import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.manager.web.shared.edit.XPlanToEdit; -import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplan.manager.workspace.WorkspaceException; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.utils.Pair; import org.deegree.commons.xml.XMLParsingException; @@ -90,12 +97,8 @@ public class XPlanManager { private final XPlanToEditFactory planToEditFactory = new XPlanToEditFactory(); - private final XPlanRasterManager xPlanRasterManager; - private final XPlanRasterEvaluator xPlanRasterEvaluator; - private final SortPropertyReader sortPropertyReader; - private final InspirePluPublisher inspirePluPublisher; private final XPlanInsertManager xPlanInsertManager; @@ -109,7 +112,6 @@ public class XPlanManager { * @param archiveCreator mandatory archive creator * @param managerConfiguration mandatory manager configuration * @param xPlanExporter - * @param sortPropertyReader * @param inspirePluPublisher * @param xPlanInsertManager * @param xPlanEditManager @@ -118,15 +120,13 @@ public class XPlanManager { */ public XPlanManager(XPlanDao xPlanDao, XPlanArchiveCreator archiveCreator, ManagerConfiguration managerConfiguration, XPlanExporter xPlanExporter, - XPlanRasterEvaluator xPlanRasterEvaluator, XPlanRasterManager xPlanRasterManager, - SortPropertyReader sortPropertyReader, InspirePluPublisher inspirePluPublisher, + XPlanRasterEvaluator xPlanRasterEvaluator, InspirePluPublisher inspirePluPublisher, XPlanInsertManager xPlanInsertManager, XPlanEditManager xPlanEditManager, XPlanDeleteManager xPlanDeleteManager) throws Exception { if (xPlanDao == null || archiveCreator == null || managerConfiguration == null) { throw new IllegalArgumentException("Mandatory argument must not be null"); } this.xPlanExporter = xPlanExporter; - this.sortPropertyReader = sortPropertyReader; this.inspirePluPublisher = inspirePluPublisher; this.xPlanInsertManager = xPlanInsertManager; this.xPlanEditManager = xPlanEditManager; @@ -134,7 +134,6 @@ public class XPlanManager { this.xplanDao = xPlanDao; this.archiveCreator = archiveCreator; this.xPlanRasterEvaluator = xPlanRasterEvaluator; - this.xPlanRasterManager = xPlanRasterManager; } @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN") diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/configuration/ManagerConfiguration.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/configuration/ManagerConfiguration.java index ea0b2b37a7..fc0f14053c 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/configuration/ManagerConfiguration.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/configuration/ManagerConfiguration.java @@ -20,8 +20,6 @@ */ package de.latlon.xplan.manager.configuration; -import static de.latlon.xplan.manager.workspace.WorkspaceReloadAction.ALL; - import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; @@ -36,7 +34,6 @@ import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.commons.configuration.SemanticConformityLinkConfiguration; import de.latlon.xplan.commons.configuration.SortConfiguration; import de.latlon.xplan.manager.web.shared.ConfigurationException; -import de.latlon.xplan.manager.workspace.WorkspaceReloadAction; import de.latlon.xplan.manager.workspace.WorkspaceReloaderConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,8 +72,6 @@ public class ManagerConfiguration { private final Map<String, String> environmentVariables; - private String rasterConfigurationCrs; - private double rasterLayerMinScaleDenominator = Double.NaN; private double rasterLayerMaxScaleDenominator = Double.NaN; @@ -105,13 +100,6 @@ public class ManagerConfiguration { logConfiguration(); } - /** - * @return the crs to use in the raster configuration, may be <code>null</code> - */ - public String getRasterConfigurationCrs() { - return rasterConfigurationCrs; - } - /** * @return the max scale denominator the raster layer is visible (a value less than 0 * means the visibility is not limited) @@ -193,7 +181,6 @@ public class ManagerConfiguration { if (propertiesLoader != null) { Properties loadProperties = propertiesLoader.loadProperties(MANAGER_CONFIGURATION); if (loadProperties != null) { - rasterConfigurationCrs = parseRasterConfigurationCrs(loadProperties, RASTER_CONFIG_CRS); rasterLayerMinScaleDenominator = parseScaleDenominator(loadProperties, RASTER_LAYER_SCALE_DENOMINATOR_MIN); rasterLayerMaxScaleDenominator = parseScaleDenominator(loadProperties, @@ -231,7 +218,7 @@ public class ManagerConfiguration { ? synthesizerConfigDirectory : "not configured"); LOG.info("-------------------------------------------"); LOG.info(" raster configuration"); - LOG.info(" - crs: {}", rasterConfigurationCrs); + LOG.info(" - crs: XPLAN_SERVICES_DEFAULT_CRS is used since v8.0"); LOG.info(" - type: spring profile is used since v8.0"); LOG.info(" - min scale denominator: {}", rasterLayerMinScaleDenominator); LOG.info(" - max scale denominator: {}", rasterLayerMaxScaleDenominator); @@ -265,14 +252,6 @@ public class ManagerConfiguration { LOG.info("-------------------------------------------"); } - private String parseRasterConfigurationCrs(Properties loadProperties, String rasterConfigCrs) { - String rasterConfigurationCrsPropertyValue = loadProperties.getProperty(RASTER_CONFIG_CRS); - if (rasterConfigurationCrsPropertyValue != null && !rasterConfigurationCrsPropertyValue.trim().isEmpty()) { - return rasterConfigurationCrsPropertyValue; - } - return null; - } - private WorkspaceReloaderConfiguration parseWorkspaceReloaderConfiguration(Properties loadProperties) { String urls = loadProperties.getProperty(WORKSPACE_RELOAD_URLS); String apiKey = loadProperties.getProperty(WORKSPACE_RELOAD_API_KEY); @@ -280,19 +259,11 @@ public class ManagerConfiguration { String password = loadProperties.getProperty(WORKSPACE_RELOAD_PASSWORD); if (urls != null && !"".equals(urls) && (apiKey != null || (user != null && password != null))) { List<String> urlList = Arrays.asList(urls.split(",")); - WorkspaceReloadAction workspaceReloadAction = parseWorkspaceReloadAction(loadProperties); - return new WorkspaceReloaderConfiguration(urlList, apiKey, user, password, workspaceReloadAction); + return new WorkspaceReloaderConfiguration(urlList, apiKey, user, password); } return new WorkspaceReloaderConfiguration(); } - private static WorkspaceReloadAction parseWorkspaceReloadAction(Properties loadProperties) { - String workspaceReloadAction = loadProperties.getProperty(WORKSPACE_RELOAD_ACTION); - if (workspaceReloadAction == null) - return ALL; - return WorkspaceReloadAction.valueOf(workspaceReloadAction); - } - private void parseSortConfiguration(Properties properties) { for (XPlanType type : XPlanType.values()) { for (XPlanVersion version : XPlanVersion.values()) { @@ -302,7 +273,8 @@ public class ManagerConfiguration { String[] split = property.split(","); if (split.length != 2) { LOG.warn("Property with key {} cannot be parsed as wmsSortDate-Configuration. " - + "The property value must contain the FeatureType and PropertyName comma-seperated."); + + "The property value must contain the FeatureType and PropertyName comma-seperated.", + property); } else { sortConfiguration.addSortField(type, version, split[0], split[1]); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java index 05f178d820..973fa25736 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java @@ -23,6 +23,7 @@ package de.latlon.xplan.manager.database; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.core.manager.db.model.Artefact; +import de.latlon.xplan.core.manager.db.model.Gemeinde; import de.latlon.xplan.manager.web.shared.Bereich; import de.latlon.xplan.manager.web.shared.PlanStatus; import de.latlon.xplan.manager.web.shared.XPlan; @@ -256,6 +257,15 @@ public class XPlanDao { return xPlanDbAdapter.selectBereiche(planIdAsInt); } + /** + * @param planId of the plan to retrieve the bereiche + * @throws Exception + */ + public List<Gemeinde> retrieveGemeindeOfPlanWithId(String planId) { + int planIdAsInt = getXPlanIdAsInt(planId); + return xPlanDbAdapter.selectGemeinden(planIdAsInt); + } + /** * @param planId of the plan to set the status * @throws SQLException if the sql could not be executed diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java index f5ed641909..8c32f68ced 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java @@ -20,6 +20,37 @@ */ package de.latlon.xplan.manager.database; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveAdditionalTypeWert; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveRechtsstandWert; +import static de.latlon.xplan.commons.util.MimeTypeDetector.getArtefactMimeType; +import static de.latlon.xplan.core.manager.db.model.ArtefactType.RASTERBASIS; +import static de.latlon.xplan.core.manager.db.model.ArtefactType.XPLANGML; +import static de.latlon.xplan.manager.edit.ArtefactType.RASTER; +import static de.latlon.xplan.manager.edit.EditType.ADDED; +import static de.latlon.xplan.manager.edit.EditType.REMOVED; +import static de.latlon.xplan.manager.web.shared.PlanStatus.FESTGESTELLT; +import static org.apache.commons.io.IOUtils.copyLarge; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.archive.XPlanArchive; @@ -31,6 +62,7 @@ import de.latlon.xplan.core.manager.db.model.Artefact; import de.latlon.xplan.core.manager.db.model.ArtefactId; import de.latlon.xplan.core.manager.db.model.ArtefactType; import de.latlon.xplan.core.manager.db.model.Feature; +import de.latlon.xplan.core.manager.db.model.Gemeinde; import de.latlon.xplan.core.manager.db.model.Plan; import de.latlon.xplan.core.manager.db.model.PlanwerkWmsMetadata; import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; @@ -53,37 +85,6 @@ import org.slf4j.LoggerFactory; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveAdditionalTypeWert; -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveRechtsstandWert; -import static de.latlon.xplan.commons.util.MimeTypeDetector.getArtefactMimeType; -import static de.latlon.xplan.core.manager.db.model.ArtefactType.RASTERBASIS; -import static de.latlon.xplan.core.manager.db.model.ArtefactType.XPLANGML; -import static de.latlon.xplan.manager.edit.ArtefactType.RASTER; -import static de.latlon.xplan.manager.edit.EditType.ADDED; -import static de.latlon.xplan.manager.edit.EditType.REMOVED; -import static de.latlon.xplan.manager.web.shared.PlanStatus.FESTGESTELLT; -import static org.apache.commons.io.IOUtils.copyLarge; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 @@ -186,11 +187,12 @@ public class XPlanDbAdapter { } @Transactional(propagation = Propagation.MANDATORY) - public void update(int planId, XPlanType type, FeatureCollection synFc) throws Exception { + public void update(int planId, XPlanType type, FeatureCollection fc, FeatureCollection synFc) throws Exception { LOG.info("- Aktualisierung des Plans mit ID '{}'", planId); Plan plan = getRequiredPlanById(planId).rechtsstand(retrieveRechtsstandWert(synFc, type)) .sonstPlanArt(retrieveAdditionalTypeWert(synFc, type)) - .bereiche(createBereiche(synFc)); + .bereiche(createBereiche(synFc)) + .gemeinden(createGemeinden(fc)); planRepository.save(plan); } @@ -361,9 +363,9 @@ public class XPlanDbAdapter { } /** - * Retrieve sortDate by the manager id from xplanmgr.plans. + * Retrieve bereiche by the manager id from xplanmgr.bereiche. * @param planId the planId of the plan, never <code>null</code> - * @return the sortDate of a plan (if available), otherwise <code>null</code> + * @return the bereiche of a plan (if available), otherwise <code>null</code> */ @Transactional(readOnly = true) public List<Bereich> selectBereiche(int planId) { @@ -379,6 +381,27 @@ public class XPlanDbAdapter { return null; } + /** + * Retrieve gemeinden by the manager id from xplanmgr.gemeinden. + * @param planId the planId of the plan, never <code>null</code> + * @return the gemeinden of a plan (if available), otherwise <code>null</code> + */ + @Transactional(readOnly = true) + public List<Gemeinde> selectGemeinden(int planId) { + Optional<Plan> plan = planRepository.findById(planId); + if (plan.isPresent()) { + return plan.get() + .getGemeinden() + .stream() + .map(g -> new Gemeinde().ags(g.getAgs()) + .rs(g.getRs()) + .gemeindeName(g.getGemeindeName()) + .ortsteilName(g.getOrtsteilName())) + .collect(Collectors.toList()); + } + return null; + } + private File retrieveUploadedArtefact(String refFileName, List<File> uploadedArtefacts) { if (uploadedArtefacts != null) { for (File uploadedArtefact : uploadedArtefacts) { @@ -484,7 +507,6 @@ public class XPlanDbAdapter { .type(archive.getType()) .name(fc.getPlanName()) .nummer(fc.getPlanNummer()) - .gkz(fc.getPlanGkz()) .hasRaster(fc.getHasRaster()) .releaseDate(fc.getPlanReleaseDate()) .planstatus(retrievePlanStatusMessage(planStatus)) @@ -508,6 +530,16 @@ public class XPlanDbAdapter { .collect(Collectors.toSet()); } + private Set<de.latlon.xplan.core.manager.db.model.Gemeinde> createGemeinden(FeatureCollection synFc) { + List<de.latlon.xplan.manager.web.shared.Gemeinde> gemeinden = FeatureCollectionUtils.retrieveGemeinden(synFc); + return gemeinden.stream() + .map(gemeinde -> new de.latlon.xplan.core.manager.db.model.Gemeinde().ags(gemeinde.getAgs()) + .rs(gemeinde.getRs()) + .gemeindeName(gemeinde.getGemeindeName()) + .ortsteilName(gemeinde.getOrtsteilName())) + .collect(Collectors.toSet()); + } + private Set<Feature> createFeatures(List<String> featureIds) { AtomicInteger index = new AtomicInteger(); return featureIds.stream() @@ -601,7 +633,6 @@ public class XPlanDbAdapter { XPlan xPlan = new XPlan((name != null ? name : "-"), Integer.toString(plan.getId()), plan.getType().name()); xPlan.setVersion(plan.getVersion().name()); xPlan.setNumber(plan.getNummer() != null ? plan.getNummer() : "-"); - xPlan.setGkz(plan.getGkz()); xPlan.setRaster(plan.getHasRaster()); xPlan.setAdditionalType(plan.getSonstPlanArt()); xPlan.setLegislationStatus(plan.getRechtsstand()); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanManagerDao.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanManagerDao.java index 2db6be79d4..41c8e458d9 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanManagerDao.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanManagerDao.java @@ -20,6 +20,20 @@ */ package de.latlon.xplan.manager.database; +import static de.latlon.xplan.commons.XPlanVersion.XPLAN_SYN; +import static de.latlon.xplan.manager.synthesizer.FeatureTypeNameSynthesizer.SYN_FEATURETYPE_PREFIX; +import static de.latlon.xplan.manager.transaction.TransactionUtils.reassignFids; + +import javax.xml.namespace.QName; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + import de.latlon.xplan.commons.XPlanSchemas; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.archive.XPlanArchive; @@ -39,20 +53,6 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import javax.xml.namespace.QName; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - -import static de.latlon.xplan.commons.XPlanVersion.XPLAN_SYN; -import static de.latlon.xplan.manager.synthesizer.FeatureTypeNameSynthesizer.SYN_FEATURETYPE_PREFIX; -import static de.latlon.xplan.manager.transaction.TransactionUtils.reassignFids; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 @@ -110,7 +110,7 @@ public class XPlanManagerDao extends XPlanDao { FeatureCollection synFc = createSynFeatures(fc, archive.getVersion()); manipulateXPlanSynGml(synFc, planId, sortDate); List<String> fidsXPlanWfs = xPlanWfsAdapter.insert(fc, planStatus); - xPlanDbAdapter.update(planId, archive.getType(), synFc); + xPlanDbAdapter.update(planId, archive.getType(), fc.getFeatures(), synFc); xPlanDbAdapter.updateFids(planId, fidsXPlanWfs); xPlanSynWfsAdapter.insert(synFc, planStatus); xPlanDbAdapter.insertArtefacts(planId, fc, archive, xPlanGml); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/DocumentStorageContext.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/AmazonS3DocumentStorageContext.java similarity index 80% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/DocumentStorageContext.java rename to xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/AmazonS3DocumentStorageContext.java index 6a517deef4..b450a1f5be 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/DocumentStorageContext.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/config/AmazonS3DocumentStorageContext.java @@ -20,24 +20,24 @@ */ package de.latlon.xplan.manager.document.config; +import java.util.Optional; + +import com.amazonaws.services.s3.AmazonS3; import de.latlon.xplan.manager.document.DocumentStorage; import de.latlon.xplan.manager.document.XPlanDocumentManager; -import de.latlon.xplan.manager.document.s3.config.AmazonS3DocumentStorageContext; +import de.latlon.xplan.manager.document.s3.S3DocumentStorage; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -import java.util.Optional; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 */ @Configuration -@Import({ AmazonS3DocumentStorageContext.class }) -public class DocumentStorageContext { +public class AmazonS3DocumentStorageContext { @Autowired private ApplicationEventPublisher applicationEventPublisher; @@ -49,4 +49,10 @@ public class DocumentStorageContext { return null; } + @Bean + public S3DocumentStorage documentStorage(AmazonS3 s3Client, + @Value("${xplanbox.s3.bucketName:#{environment.XPLAN_S3_BUCKET_NAME}}") String bucketName) { + return new S3DocumentStorage(s3Client, bucketName); + } + } diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/DeegreeRasterCacheCleaner.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/DeegreeRasterCacheCleaner.java deleted file mode 100644 index e4555c69cf..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/DeegreeRasterCacheCleaner.java +++ /dev/null @@ -1,162 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.storage.filesystem; - -import de.latlon.xplan.manager.workspace.WorkspaceReloader; -import de.latlon.xplan.manager.workspace.WorkspaceReloaderConfiguration; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.apache.commons.codec.binary.Base64; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.List; - -/** - * Required to remove file locks on windows to ensure raster files can be removed. Invokes - * http://HOST:PORT/xplan-wms/removecache/TILESTOREID - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @since 7.1.2 - */ -public class DeegreeRasterCacheCleaner { - - private final Logger LOG = LoggerFactory.getLogger(DeegreeRasterCacheCleaner.class); - - private WorkspaceReloaderConfiguration configuration; - - /** - * @param configuration configuration for {@link WorkspaceReloader}, if - * {@link WorkspaceReloaderConfiguration} is invalid, reload is skipped, never - * <code>null</code> - */ - public DeegreeRasterCacheCleaner(WorkspaceReloaderConfiguration configuration) { - this.configuration = configuration; - } - - /** - * Clears the internal cache of the XPlanWMS - * @param tileStoreId the tileStoreId, never <code>null</code> - * @return true if clearing the cache was successful, false otherwise. - */ - public boolean clearCache(String tileStoreId) { - boolean isValid = checkIfConfigurationIsValid(); - if (isValid) { - LOG.info("Workspace reloader configuration is valid and used to clear cache."); - return executeClearCache(tileStoreId); - } - else { - LOG.info("Workspace reloader configuration is invalid. Reload of workspace is skipped!"); - LOG.info("Workspace reloader configuration is invalid. Cache cannot be cleared."); - return false; - } - } - - private boolean executeClearCache(String tileStoreId) { - List<String> urls = configuration.getUrls(); - boolean isSuccessfulForAll = true; - for (String url : urls) { - boolean clearCacheResult = clearCache(url, tileStoreId); - isSuccessfulForAll = isSuccessfulForAll && clearCacheResult; - } - return isSuccessfulForAll; - } - - @SuppressFBWarnings(value = "HTTP_PARAMETER_POLLUTION") - private boolean clearCache(String url, String tileStoreId) { - try { - String clearCacheUrl = retrieveDeletePlanwerkWmsUrl(url, tileStoreId); - LOG.info("Attempting to clear internal raster cache with URL {}", clearCacheUrl); - HttpGet httpGet = new HttpGet(clearCacheUrl); - addAuthentication(httpGet); - - CloseableHttpClient client = HttpClientBuilder.create().build(); - HttpResponse response = client.execute(httpGet); - if (isResponseCodeOk(response)) { - LOG.info("Clearing raster cache was successful."); - return true; - } - else { - LOG.info( - "Error while clearing the internal raster cache. Statuscode: {}, Reason: {}. Check your configuration if workspace reload is configured correctly.", - response.getStatusLine().getStatusCode(), - response.getStatusLine().getReasonPhrase() != null - && !response.getStatusLine().getReasonPhrase().isEmpty() - ? response.getStatusLine().getReasonPhrase() : "-"); - return false; - } - } - catch (IOException e) { - LOG.error("Clearing raster cache failed!", e); - LOG.trace(e.getMessage(), e); - return false; - } - } - - private String retrieveDeletePlanwerkWmsUrl(String url, String tileStoreId) { - if (!url.endsWith("/")) - url = url.concat("/"); - return url.concat("removecache/").concat(tileStoreId); - } - - private void addAuthentication(HttpRequestBase httpRequest) { - if (configuration.isApiKeyConfigured()) { - LOG.debug("apiKey is used for authentication"); - String apiKey = configuration.getApiKey(); - httpRequest.addHeader("X-API-Key", apiKey); - } - else { - LOG.debug("user/password is used for authentication"); - String user = configuration.getUser(); - String password = configuration.getPassword(); - byte[] basicAuth = (user + ":" + password).getBytes(); - String basicAuthEncoded = new String(Base64.encodeBase64(basicAuth)); - httpRequest.addHeader("Authorization", "Basic " + basicAuthEncoded); - } - } - - private boolean isResponseCodeOk(HttpResponse response) { - return response.getStatusLine().getStatusCode() == 200; - } - - private boolean checkIfConfigurationIsValid() { - List<String> url = configuration.getUrls(); - String apiKey = configuration.getApiKey(); - String user = configuration.getUser(); - String password = configuration.getPassword(); - return isNotNullOrEmpty(url) - && (isNotNullOrEmpty(apiKey) || (isNotNullOrEmpty(user) && isNotNullOrEmpty(password))); - } - - private boolean isNotNullOrEmpty(String configValue) { - return configValue != null && !configValue.isEmpty(); - } - - private boolean isNotNullOrEmpty(List<String> configValue) { - return configValue != null && !configValue.isEmpty(); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/FilesystemStorageCleanUpManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/FilesystemStorageCleanUpManager.java deleted file mode 100644 index 2898356c89..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/FilesystemStorageCleanUpManager.java +++ /dev/null @@ -1,109 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.storage.filesystem; - -import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.manager.storage.StorageEvent; -import de.latlon.xplan.manager.wmsconfig.raster.storage.FileSystemStorage; -import de.latlon.xplan.commons.s3.StorageException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.List; -import java.util.Set; -import java.util.function.BiPredicate; -import java.util.stream.Collectors; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @since 7.0 - */ -public class FilesystemStorageCleanUpManager implements StorageCleanUpManager { - - private static final Logger LOG = LoggerFactory.getLogger(FileSystemStorage.class); - - private final Path dataDirectory; - - private final DeegreeRasterCacheCleaner deegreeRasterCacheCleaner; - - public FilesystemStorageCleanUpManager(Path dataDirectory, DeegreeRasterCacheCleaner deegreeRasterCacheCleaner) { - this.dataDirectory = dataDirectory; - this.deegreeRasterCacheCleaner = deegreeRasterCacheCleaner; - } - - @Override - public void deleteAll(String id, StorageEvent storageEvent) throws StorageException { - String prefix = id + "_"; - deleteFilesWithPrefix((path, basicFileAttributes) -> extractTileStoreIdPrefix(path).startsWith(prefix), - storageEvent); - } - - private void deleteFilesWithPrefix(BiPredicate<Path, BasicFileAttributes> filenameFilter, StorageEvent storageEvent) - throws StorageException { - if (!Files.exists(dataDirectory) || !Files.isDirectory(dataDirectory)) { - return; - } - List<Path> filesToDelete = findFilesToDelete(filenameFilter); - clearCaches(filesToDelete); - for (Path file : filesToDelete) { - LOG.info("- Entferne Raster-Datei '" + file + "'..."); - try { - byte[] bytes = Files.readAllBytes(file); - Files.delete(file); - storageEvent.addDeletedPath(file, bytes); - LOG.info("OK"); - } - catch (Exception e) { - LOG.error("File {} could not be removed from filesystem: {}", file, e.getMessage()); - throw new StorageException("File could not be removed from filesystem.", e); - } - } - } - - private void clearCaches(List<Path> filesToDelete) { - Set<String> tilesStoreIdPrefixes = filesToDelete.stream() - .map(fileToDelete -> extractTileStoreIdPrefix(fileToDelete)) - .collect(Collectors.toSet()); - tilesStoreIdPrefixes.forEach(tilesStoreIdPrefix -> deegreeRasterCacheCleaner.clearCache(tilesStoreIdPrefix)); - } - - private static String extractTileStoreIdPrefix(Path file) { - String fileName = file.getFileName().toString(); - if (fileName.contains(".")) - return fileName.substring(0, fileName.lastIndexOf(".")); - return fileName; - } - - private List<Path> findFilesToDelete(BiPredicate<Path, BasicFileAttributes> filenameFilter) - throws StorageException { - try { - return Files.find(dataDirectory, Integer.MAX_VALUE, filenameFilter).collect(Collectors.toList()); - } - catch (IOException e) { - throw new StorageException("Files could not be removed from filesystem.", e); - } - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/listener/FilesystemTransactionListener.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/listener/FilesystemTransactionListener.java deleted file mode 100644 index 2b029c7fc8..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/filesystem/listener/FilesystemTransactionListener.java +++ /dev/null @@ -1,70 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.storage.filesystem.listener; - -import de.latlon.xplan.manager.storage.StorageEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import org.springframework.transaction.event.TransactionalEventListener; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; - -import static org.springframework.transaction.event.TransactionPhase.AFTER_ROLLBACK; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @since 7.0 - */ -@Component -public class FilesystemTransactionListener { - - private static final Logger LOG = LoggerFactory.getLogger(FilesystemTransactionListener.class); - - @TransactionalEventListener(phase = AFTER_ROLLBACK) - public void rollbackFilesystem(StorageEvent storageEvent) { - List<Path> insertedPaths = storageEvent.getInsertedPaths(); - insertedPaths.forEach(insertedPath -> { - try { - Files.delete(insertedPath); - } - catch (IOException e) { - LOG.warn("Could not rollback created file {}.", insertedPath); - } - }); - - Map<Path, byte[]> deletedPathsToObjects = storageEvent.getDeletedPathsToObjects(); - deletedPathsToObjects.entrySet().forEach(deletedPathAndObject -> { - Path path = deletedPathAndObject.getKey(); - try { - Files.write(path, deletedPathAndObject.getValue()); - } - catch (IOException e) { - LOG.warn("Could not rollback deleted file {}.", path); - } - }); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3Context.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3ReadOnlyContext.java similarity index 81% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3Context.java rename to xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3ReadOnlyContext.java index 8087bbe556..23d853490a 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3Context.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3ReadOnlyContext.java @@ -26,9 +26,6 @@ import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; -import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.commons.s3.S3Storage; -import de.latlon.xplan.manager.storage.s3.S3StorageCleanUpManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -40,12 +37,12 @@ import org.springframework.context.annotation.Profile; * * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> - * @since 7.0 + * @since 8.0 */ @Configuration -@Profile("s3img | s3doc") @ComponentScan("de.latlon.xplan.manager.storage.s3.listener") -public class AmazonS3Context { +@Profile("!test") +public class AmazonS3ReadOnlyContext { @Bean(destroyMethod = "shutdown") public AmazonS3 s3Client(AWSCredentials credentials, @@ -78,16 +75,4 @@ public class AmazonS3Context { return new BasicAWSCredentials(accessKeyId, secretKey); } - @Bean - public StorageCleanUpManager storageCleanUpManager(AmazonS3 s3Client, - @Value("${xplanbox.s3.bucketName:#{environment.XPLAN_S3_BUCKET_NAME}}") String bucketName) { - return new S3StorageCleanUpManager(s3Client, bucketName); - } - - @Bean - public S3Storage rollbackStorage(AmazonS3 s3Client, - @Value("${xplanbox.s3.bucketName:#{environment.XPLAN_S3_BUCKET_NAME}}") String bucketName) { - return new S3Storage(s3Client, bucketName); - } - } diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/s3/config/AmazonS3DocumentStorageContext.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TransactionalContext.java similarity index 64% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/s3/config/AmazonS3DocumentStorageContext.java rename to xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TransactionalContext.java index 313ac42727..18227e5405 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/document/s3/config/AmazonS3DocumentStorageContext.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TransactionalContext.java @@ -18,32 +18,38 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.document.s3.config; +package de.latlon.xplan.manager.storage.s3.config; import com.amazonaws.services.s3.AmazonS3; -import de.latlon.xplan.manager.document.s3.S3DocumentStorage; -import de.latlon.xplan.manager.storage.s3.config.AmazonS3Context; +import de.latlon.xplan.commons.s3.S3Storage; +import de.latlon.xplan.manager.storage.StorageCleanUpManager; +import de.latlon.xplan.manager.storage.s3.S3StorageCleanUpManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; /** - * Spring configuration for using AWS S3 as a storage for documents. + * Spring configuration for using AWS S3 as a storage. * * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> * @since 7.0 */ @Configuration -@Profile("s3doc") -@Import({ AmazonS3Context.class }) -public class AmazonS3DocumentStorageContext { +@Import(AmazonS3ReadOnlyContext.class) +public class AmazonS3TransactionalContext { @Bean - public S3DocumentStorage documentStorage(AmazonS3 s3Client, + public StorageCleanUpManager storageCleanUpManager(AmazonS3 s3Client, @Value("${xplanbox.s3.bucketName:#{environment.XPLAN_S3_BUCKET_NAME}}") String bucketName) { - return new S3DocumentStorage(s3Client, bucketName); + return new S3StorageCleanUpManager(s3Client, bucketName); + } + + @Bean + public S3Storage rollbackStorage(AmazonS3 s3Client, + @Value("${xplanbox.s3.bucketName:#{environment.XPLAN_S3_BUCKET_NAME}}") String bucketName) { + return new S3Storage(s3Client, bucketName); } } diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/listener/S3TransactionListener.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/listener/S3TransactionListener.java index c5b02d943d..23991e535b 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/listener/S3TransactionListener.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/storage/s3/listener/S3TransactionListener.java @@ -20,20 +20,19 @@ */ package de.latlon.xplan.manager.storage.s3.listener; -import de.latlon.xplan.manager.storage.StorageEvent; +import static org.springframework.transaction.event.TransactionPhase.AFTER_ROLLBACK; + +import java.util.List; + import de.latlon.xplan.commons.s3.S3Object; import de.latlon.xplan.commons.s3.S3Storage; import de.latlon.xplan.commons.s3.StorageException; +import de.latlon.xplan.manager.storage.StorageEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionalEventListener; -import java.util.List; - -import static org.springframework.transaction.event.TransactionPhase.AFTER_ROLLBACK; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 @@ -43,21 +42,21 @@ public class S3TransactionListener { private static final Logger LOG = LoggerFactory.getLogger(S3TransactionListener.class); - private final S3Storage s3Storage; + private final S3Storage rollbackStorage; - public S3TransactionListener(@Qualifier("rollbackStorage") S3Storage s3Storage) { - this.s3Storage = s3Storage; + public S3TransactionListener(S3Storage rollbackStorage) { + this.rollbackStorage = rollbackStorage; } @TransactionalEventListener(phase = AFTER_ROLLBACK) public void rollbackDocumentS3(StorageEvent storageEvent) { List<String> insertedKeys = storageEvent.getInsertedKeys(); - insertedKeys.forEach(insertedKey -> s3Storage.deleteObjects(insertedKey)); + insertedKeys.forEach(insertedKey -> rollbackStorage.deleteObjects(insertedKey)); List<S3Object> deletedKeysToObjects = storageEvent.getDeletedS3Objects(); deletedKeysToObjects.forEach(deletedObject -> { try { - s3Storage.insertObject(deletedObject); + rollbackStorage.insertObject(deletedObject); } catch (StorageException e) { LOG.warn("Could not rollback deleted document with id {} from S3 Storage.", diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanDeleteManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanDeleteManager.java index d3d4293c59..e88f2da24f 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanDeleteManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanDeleteManager.java @@ -20,14 +20,13 @@ */ package de.latlon.xplan.manager.transaction; +import static java.lang.Integer.parseInt; + import de.latlon.xplan.manager.transaction.service.XPlanDeleteService; -import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; import de.latlon.xplan.manager.workspace.WorkspaceReloader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static java.lang.Integer.parseInt; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -35,15 +34,11 @@ public class XPlanDeleteManager { private static final Logger LOG = LoggerFactory.getLogger(XPlanDeleteManager.class); - private final XPlanRasterManager xPlanRasterManager; - private final WorkspaceReloader workspaceReloader; private final XPlanDeleteService xPlanDeleteService; - public XPlanDeleteManager(XPlanRasterManager xPlanRasterManager, WorkspaceReloader workspaceReloader, - XPlanDeleteService xPlanDeleteService) { - this.xPlanRasterManager = xPlanRasterManager; + public XPlanDeleteManager(WorkspaceReloader workspaceReloader, XPlanDeleteService xPlanDeleteService) { this.workspaceReloader = workspaceReloader; this.xPlanDeleteService = xPlanDeleteService; } @@ -57,7 +52,6 @@ public class XPlanDeleteManager { public void delete(String planId) throws Exception { xPlanDeleteService.deletePlan(planId); reloadWorkspace(planId); - xPlanRasterManager.removeRasterLayers(parseInt(planId)); LOG.info("XPlanArchiv mit Id {} wurde gelöscht", planId); } diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java index 1e78980bc2..6320cb7d8d 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java @@ -20,6 +20,29 @@ */ package de.latlon.xplan.manager.transaction; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDescription; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrievePlanName; +import static de.latlon.xplan.manager.edit.ArtefactType.RASTER; +import static de.latlon.xplan.manager.edit.EditType.ADDED; +import static de.latlon.xplan.manager.edit.EditType.REMOVED; +import static de.latlon.xplan.manager.edit.ExternalReferenceUtils.collectEditedArtefacts; +import static de.latlon.xplan.manager.edit.ExternalReferenceUtils.createExternalRefAddedOrUpdated; +import static de.latlon.xplan.manager.transaction.TransactionUtils.reassignFids; +import static de.latlon.xplan.manager.web.shared.PlanStatus.findByLegislationStatusCode; +import static java.lang.Integer.parseInt; + +import javax.xml.stream.XMLStreamReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; +import java.util.stream.Collectors; + import de.latlon.xplan.commons.XPlanSchemas; import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; @@ -33,7 +56,6 @@ import de.latlon.xplan.commons.reference.ExternalReferenceInfo; import de.latlon.xplan.commons.reference.ExternalReferenceScanner; import de.latlon.xplan.commons.util.FeatureCollectionUtils; import de.latlon.xplan.commons.util.XmlUtils; -import de.latlon.xplan.manager.configuration.ConfigurationException; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.edit.EditedArtefacts; @@ -49,39 +71,12 @@ import de.latlon.xplan.manager.web.shared.edit.XPlanToEdit; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; import de.latlon.xplan.manager.workspace.WorkspaceReloader; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.deegree.cs.exceptions.UnknownCRSException; +import org.deegree.cs.coordinatesystems.ICRS; import org.deegree.feature.FeatureCollection; import org.deegree.feature.types.AppSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jakarta.xml.bind.JAXBException; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; -import java.util.stream.Collectors; - -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDescription; -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrievePlanName; -import static de.latlon.xplan.manager.edit.ArtefactType.RASTER; -import static de.latlon.xplan.manager.edit.EditType.ADDED; -import static de.latlon.xplan.manager.edit.EditType.REMOVED; -import static de.latlon.xplan.manager.edit.ExternalReferenceUtils.collectEditedArtefacts; -import static de.latlon.xplan.manager.edit.ExternalReferenceUtils.createExternalRefAddedOrUpdated; -import static de.latlon.xplan.manager.transaction.TransactionUtils.reassignFids; -import static de.latlon.xplan.manager.web.shared.PlanStatus.findByLegislationStatusCode; -import static java.lang.Integer.parseInt; -import static org.deegree.cs.persistence.CRSManager.lookup; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -95,6 +90,8 @@ public class XPlanEditManager extends XPlanTransactionManager { private final AttachmentUrlHandler attachmentUrlHandler; + private final ICRS defaultCrs; + protected final XPlanExporter xPlanExporter; private final XPlanManipulator planModifier = new XPlanManipulator(); @@ -103,12 +100,13 @@ public class XPlanEditManager extends XPlanTransactionManager { XPlanRasterManager xPlanRasterManager, WorkspaceReloader workspaceReloader, ManagerConfiguration managerConfiguration, SortPropertyReader sortPropertyReader, XPlanEditService xPlanEditService, MetadataCouplingHandler metadataCouplingHandler, - AttachmentUrlHandler attachmentUrlHandler) { + AttachmentUrlHandler attachmentUrlHandler, ICRS defaultCrs) { super(xPlanSynthesizer, xplanDao, xPlanRasterManager, workspaceReloader, managerConfiguration, sortPropertyReader, metadataCouplingHandler); this.xPlanExporter = xPlanExporter; this.xPlanEditService = xPlanEditService; this.attachmentUrlHandler = attachmentUrlHandler; + this.defaultCrs = defaultCrs; } public void editPlan(XPlan oldXplan, XPlanToEdit xPlanToEdit, boolean makeRasterConfig, @@ -135,9 +133,7 @@ public class XPlanEditManager extends XPlanTransactionManager { FeatureCollection modifiedFeatures = renewFeatureCollection(version, featuresToModify); ExternalReferenceInfo externalReferencesModified = new ExternalReferenceScanner().scan(modifiedFeatures); - List<String> uploadedFileNames = uploadedArtefacts.stream() - .map(file -> file.getName()) - .collect(Collectors.toList()); + List<String> uploadedFileNames = uploadedArtefacts.stream().map(File::getName).collect(Collectors.toList()); byte[] xPlanGml = createXPlanGml(version, modifiedFeatures); ExternalReferenceInfo externalReferenceInfoToUpdate = createExternalRefAddedOrUpdated( externalReferencesModified, uploadedArtefacts); @@ -151,7 +147,6 @@ public class XPlanEditManager extends XPlanTransactionManager { reassignFids(modifiedPlanFc); FeatureCollection synFc = createSynFeatures(modifiedPlanFc, version); String internalId = xplanDao.retrieveInternalId(planId); - Date oldSortDate = xplanDao.retrieveSortDate(planId); // TODO: Validation required? PlanStatus targetPlanStatus = detectNewPlanStatus(type, xPlanToEdit, oldLegislationStatus, oldPlanStatus); @@ -160,7 +155,7 @@ public class XPlanEditManager extends XPlanTransactionManager { synFc, targetPlanStatus, sortDate, internalId); startCreationIfPlanNameHasChanged(planId, type, modifiedPlanFc, oldPlanName, oldDescription); updateRasterConfiguration(planId, makeRasterConfig, uploadedArtefacts, type, oldPlanStatus, editedArtefacts, - targetPlanStatus, sortDate, oldSortDate); + targetPlanStatus, sortDate); LOG.info("XPlanGML wurde erfolgreich editiert. ID: {}", planId); } } @@ -173,7 +168,7 @@ public class XPlanEditManager extends XPlanTransactionManager { private void updateRasterConfiguration(int planId, boolean makeRasterConfig, List<File> uploadedArtefacts, XPlanType type, PlanStatus oldPlanStatus, EditedArtefacts editedArtefacts, PlanStatus newPlanStatus, - Date sortDate, Date oldSortDate) throws JAXBException, IOException, ConfigurationException { + Date sortDate) { List<String> removedRefFileNames = editedArtefacts.getFileNames(REMOVED, RASTER); xPlanRasterManager.removeRasterLayers(planId, removedRefFileNames); if (makeRasterConfig) { @@ -184,30 +179,12 @@ public class XPlanEditManager extends XPlanTransactionManager { .map(editedArtefact -> new RasterReference(editedArtefact.getFileName(), editedArtefact.getGeorefFileName())) .collect(Collectors.toList()); - createRasterConfiguration(archive, addedRasterReferences, planId, type, oldPlanStatus, newPlanStatus, - sortDate); - if (sortDateHasChanged(sortDate, oldSortDate)) { - int moreRecentPlanId = xplanDao.getPlanIdOfMoreRecentRasterPlan(sortDate); - xPlanRasterManager.updateSortOrderOfRasterLayers(planId, moreRecentPlanId, oldPlanStatus, newPlanStatus, - type); - } + createRasterConfiguration(archive, addedRasterReferences, planId, sortDate); reloadWorkspace(planId); } - else { - xPlanRasterManager.updateRasterLayers(planId, type, oldPlanStatus, newPlanStatus); - } LOG.info("Rasterkonfiguration für den Plan mit der ID {} wurde ausgetauscht (falls vorhanden).", planId); } - private boolean sortDateHasChanged(Date sortDate, Date oldSortDate) { - if (oldSortDate == null && sortDate == null) - return false; - if (oldSortDate != null && sortDate != null) { - return !sortDate.equals(oldSortDate); - } - return true; - } - private PlanStatus detectNewPlanStatus(XPlanType type, XPlanToEdit xPlanToEdit, String oldLegislationStatus, PlanStatus oldPlanStatus) { int newLegislationStatusCode = xPlanToEdit.getBaseData().getLegislationStatusCode(); @@ -225,12 +202,11 @@ public class XPlanEditManager extends XPlanTransactionManager { } private void startCreationIfPlanNameHasChanged(int planId, XPlanType type, XPlanFeatureCollection modifiedPlanFc, - String oldPlanName, String oldDescription) throws UnknownCRSException { + String oldPlanName, String oldDescription) { String newPlanName = retrievePlanName(modifiedPlanFc.getFeatures(), type); String newDescription = retrieveDescription(modifiedPlanFc.getFeatures(), type); if (hasChanged(oldPlanName, newPlanName) || hasChanged(oldDescription, newDescription)) { - startCreationOfDataServicesCoupling(planId, modifiedPlanFc, - lookup(managerConfiguration.getRasterConfigurationCrs())); + startCreationOfDataServicesCoupling(planId, modifiedPlanFc, defaultCrs); } else { LOG.info("Plan name does not change, creation of the service record is not required."); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanInsertManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanInsertManager.java index 98d7533efe..e86b15c0fe 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanInsertManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanInsertManager.java @@ -20,6 +20,15 @@ */ package de.latlon.xplan.manager.transaction; +import static de.latlon.xplan.manager.web.shared.PlanStatus.findByLegislationStatusCode; + +import javax.xml.stream.XMLStreamException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.feature.SortPropertyReader; @@ -44,15 +53,6 @@ import org.deegree.cs.exceptions.UnknownCRSException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.stream.XMLStreamException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -import static de.latlon.xplan.manager.web.shared.PlanStatus.findByLegislationStatusCode; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -178,8 +178,8 @@ public class XPlanInsertManager extends XPlanTransactionManager { .map(externalReference -> new RasterReference(externalReference.getReferenzUrl(), externalReference.getGeoRefUrl())) .collect(Collectors.toList()); - createRasterConfiguration(archive, rasterPlanBaseScans, importedPlanData.getPlanId(), archive.getType(), - importedPlanData.getPlanStatus(), null, importedPlanData.getSortDate()); + createRasterConfiguration(archive, rasterPlanBaseScans, importedPlanData.getPlanId(), + importedPlanData.getSortDate()); } } } diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanTransactionManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanTransactionManager.java index 7f5287782a..299e027147 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanTransactionManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanTransactionManager.java @@ -20,6 +20,12 @@ */ package de.latlon.xplan.manager.transaction; +import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDescription; + +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.util.List; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; @@ -34,7 +40,6 @@ import de.latlon.xplan.manager.metadata.MetadataCouplingHandler; import de.latlon.xplan.manager.planwerkwms.PlanwerkServiceMetadata; import de.latlon.xplan.manager.planwerkwms.PlanwerkServiceMetadataBuilder; import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer; -import de.latlon.xplan.manager.web.shared.PlanStatus; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; import de.latlon.xplan.manager.workspace.WorkspaceReloader; import org.deegree.cs.coordinatesystems.ICRS; @@ -43,12 +48,6 @@ import org.deegree.geometry.Envelope; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.util.List; - -import static de.latlon.xplan.commons.util.FeatureCollectionUtils.retrieveDescription; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -99,12 +98,9 @@ public abstract class XPlanTransactionManager { return synFc; } - protected List<String> createRasterConfiguration(XPlanArchiveContentAccess archive, - List<RasterReference> rasterRefsToAdd, int planId, XPlanType type, PlanStatus planStatus, - PlanStatus newPlanStatus, Date sortDate) { - int moreRecentPlanId = xplanDao.getPlanIdOfMoreRecentRasterPlan(sortDate); - return xPlanRasterManager.updateWmsWorkspaceWithRasterLayers(archive, rasterRefsToAdd, planId, moreRecentPlanId, - type, planStatus, newPlanStatus, sortDate); + protected void createRasterConfiguration(XPlanArchiveContentAccess archive, List<RasterReference> rasterRefsToAdd, + int planId, Date sortDate) { + xPlanRasterManager.updateWmsWorkspaceWithRasterLayers(archive, rasterRefsToAdd, planId, sortDate); } protected void startCreationOfDataServicesCoupling(int planId, XPlanFeatureCollection featureCollection, ICRS crs) { diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsThemesConfig.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsThemesConfig.java deleted file mode 100644 index 8bfd58cff5..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsThemesConfig.java +++ /dev/null @@ -1,62 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig; - -import java.io.File; - -import org.deegree.theme.persistence.standard.jaxb.Themes; - -/** - * Encapsulates the required configuration from the WMS workspace. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - * @version $Revision: $, $Date: $ - */ -public class WmsThemesConfig { - - private final File config; - - private final Themes themes; - - /** - * @param config the location of the themes configuration, never <code>null</code> - * @param themes the themes parsed from the configuration, never <code>null</code> - */ - public WmsThemesConfig(File config, Themes themes) { - this.config = config; - this.themes = themes; - } - - /** - * @return the location of the themes configuration, never <code>null</code> - */ - public File getConfig() { - return config; - } - - /** - * @return the themes parsed from the configuration, never <code>null</code> - */ - public Themes getThemes() { - return themes; - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsWorkspaceWrapper.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsWorkspaceWrapper.java deleted file mode 100644 index 27c1337706..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/WmsWorkspaceWrapper.java +++ /dev/null @@ -1,189 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig; - -import static java.lang.String.format; -import static java.util.Arrays.asList; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; - -import de.latlon.xplan.manager.configuration.ConfigurationException; -import de.latlon.xplan.manager.configuration.ManagerConfiguration; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import jakarta.xml.bind.JAXBException; -import org.apache.commons.io.FilenameUtils; -import org.deegree.commons.config.DeegreeWorkspace; -import org.deegree.commons.xml.jaxb.JAXBUtils; -import org.deegree.theme.persistence.standard.StandardThemeProvider; -import org.deegree.theme.persistence.standard.jaxb.ThemeType; -import org.deegree.theme.persistence.standard.jaxb.Themes; - -/** - * Wraps a wms workspace and provides some useful methods. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - * @version $Revision: $, $Date: $ - */ -public class WmsWorkspaceWrapper { - - private static final String DATA_DIRECTORY = "data"; - - public static final List<String> supportedTypes = asList("bplan", "fplan", "rplan", "lplan", "soplan", "bplanpre", - "fplanpre", "rplanpre", "lplanpre", "soplanpre", "bplanarchive", "fplanarchive", "rplanarchive", - "lplanarchive", "soplanarchive"); - - private final DeegreeWorkspace workspace; - - /** - * @param wmsWorkspace never <code>null</code> - */ - public WmsWorkspaceWrapper(ManagerConfiguration managerConfiguration, DeegreeWorkspace wmsWorkspace) - throws ConfigurationException { - this.workspace = wmsWorkspace; - try { - checkThemes(managerConfiguration); - } - catch (JAXBException | IOException e) { - throw new ConfigurationException(e); - } - } - - /** - * @return the workspace location (must not exist!), never <code>null</code> - */ - public File getLocation() { - return workspace.getLocation(); - } - - /** - * @return the workspace location (must not exist!), never <code>null</code> - */ - @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN") - public Path getDataDirectory() { - return Paths.get(getLocation().toURI()).resolve(DATA_DIRECTORY); - } - - /** - * Checks if all themes are configured as expected. - * @param managerConfiguration the @{link ManagerConfiguration}, never - * <code>null</code> - * @throws JAXBException - * @throws IOException - * @throws ConfigurationException - */ - public void checkThemes(ManagerConfiguration managerConfiguration) - throws JAXBException, IOException, ConfigurationException { - String configuredCrs = managerConfiguration != null ? managerConfiguration.getRasterConfigurationCrs() : null; - for (String supportedType : supportedTypes) { - retrieveThemesForType(supportedType, configuredCrs); - } - } - - /** - * @param type the type of the configuration to retrieve, never <code>null</code> - * @return the configuration of the passed type, never <code>null</code> - * @throws JAXBException - * @throws IOException - * @throws ConfigurationException - */ - public WmsThemesConfig retrieveThemesForType(String type) - throws JAXBException, IOException, ConfigurationException { - return retrieveThemesForType(type, null); - } - - /** - * @param type the type of the configuration to retrieve, never <code>null</code> - * @param configuredCrs the configured crs of the themes configuration, may be - * <code>null</code> (check of the themes crs is skipped) - * @return the configuration of the passed type, never <code>null</code> - * @throws JAXBException - * @throws IOException - * @throws ConfigurationException - */ - public WmsThemesConfig retrieveThemesForType(String type, String configuredCrs) - throws JAXBException, IOException, ConfigurationException { - File config = createConfig(type); - Themes themes = parseThemes(config); - - checkTheme(type, config, themes); - checkThemeCrs(config, themes, configuredCrs); - - return new WmsThemesConfig(config, themes); - } - - private File createConfig(String type) { - File configFile = new File(workspace.getLocation(), format("themes/%sraster.xml", FilenameUtils.getName(type))); - if (!configFile.isFile() || !configFile.canRead()) { - throw new RuntimeException("Datei '" + configFile + "' ist nicht vorhanden."); - } - return configFile; - } - - private void checkTheme(String type, File config, Themes themes) throws ConfigurationException { - ThemeType theme = themes.getTheme(); - if (theme == null) { - throw new ConfigurationException("Datei '" + config + "' enthält kein Theme-Element."); - } - if (theme.getTheme().isEmpty()) { - throw new ConfigurationException("Datei '" + config + "' enthält kein verschachteltes Theme-Element."); - } - ThemeType firstChildTheme = theme.getTheme().get(0); - String expected = checkAndRemovePreOrArchive(type) + "raster_sortiert"; - String firstChildIdentifier = firstChildTheme.getIdentifier().getValue(); - if (!expected.equals(firstChildIdentifier)) { - throw new ConfigurationException("Datei '" + config + "' hat eine nicht unterstützte Struktur. " - + " Das erste Sub-Theme hat den Identifier: " + firstChildIdentifier + ". Erwartet: " + expected); - } - } - - private Themes parseThemes(File config) throws JAXBException, IOException { - try (InputStream configFileStream = new FileInputStream(config)) { - return (Themes) JAXBUtils.unmarshall("org.deegree.theme.persistence.standard.jaxb", - new StandardThemeProvider().getSchema(), configFileStream, workspace.getNewWorkspace()); - } - } - - private void checkThemeCrs(File config, Themes themes, String configuredCrs) throws ConfigurationException { - if (configuredCrs == null) - return; - ThemeType theme = themes.getTheme(); - if (!configuredCrs.equalsIgnoreCase(theme.getCRS())) { - throw new ConfigurationException( - "In der Themes Konfiguration '" + config + "' ist ein anderes CRS konfiguriert (" + theme.getCRS() - + ") als in der Manager Konfiguration (" + configuredCrs + ")."); - } - } - - private String checkAndRemovePreOrArchive(String type) { - if (type.endsWith("pre")) - return type.substring(0, type.length() - 3); - if (type.endsWith("archive")) - return type.substring(0, type.length() - 7); - return type; - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/GeotiffRasterStorageContext.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/GeotiffRasterStorageContext.java deleted file mode 100644 index 307192caf2..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/GeotiffRasterStorageContext.java +++ /dev/null @@ -1,78 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.config; - -import java.nio.file.Path; - -import de.latlon.xplan.manager.configuration.ManagerConfiguration; -import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; -import de.latlon.xplan.manager.storage.filesystem.FilesystemStorageCleanUpManager; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import de.latlon.xplan.manager.wmsconfig.raster.config.DeegreeRasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.GeotiffRasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.storage.FileSystemStorage; -import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -/** - * Spring configuration for the storage type to be used for raster data. The - * GeotiffRasterStorage is selected when the profile 'mapserver' is absent. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> - * @since 7.0 - */ -@Configuration -@ComponentScan("de.latlon.xplan.manager.storage.filesystem.listener") -@Profile("!mapserver") -public class GeotiffRasterStorageContext { - - @Bean - public RasterStorage rasterStorage(WmsWorkspaceWrapper wmsWorkspaceWrapper, RasterEvaluation rasterEvaluation, - DeegreeRasterCacheCleaner deegreeRasterCacheCleaner) { - final Path dataDirectory = wmsWorkspaceWrapper.getDataDirectory(); - return new FileSystemStorage(dataDirectory, rasterEvaluation, deegreeRasterCacheCleaner); - } - - @Bean - public RasterEvaluation rasterEvaluation(ManagerConfiguration managerConfiguration) { - return new GeotiffRasterEvaluation(managerConfiguration.getRasterConfigurationCrs()); - } - - @Bean - public RasterConfigManager rasterConfigManager(WmsWorkspaceWrapper wmsWorkspaceWrapper, - ManagerConfiguration managerConfiguration) { - return new DeegreeRasterConfigManager(wmsWorkspaceWrapper, managerConfiguration); - } - - @Bean - public StorageCleanUpManager storageCleanUpManager(WmsWorkspaceWrapper wmsWorkspaceWrapper, - DeegreeRasterCacheCleaner deegreeRasterCacheCleaner) { - return new FilesystemStorageCleanUpManager(wmsWorkspaceWrapper.getDataDirectory(), deegreeRasterCacheCleaner); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/MapserverRasterStorageContext.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/MapserverRasterStorageContext.java deleted file mode 100644 index 7ed939d7ce..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/config/MapserverRasterStorageContext.java +++ /dev/null @@ -1,94 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.config; - -import java.nio.file.Path; -import java.nio.file.Paths; - -import de.latlon.xplan.manager.configuration.ConfigurationException; -import de.latlon.xplan.manager.configuration.ManagerConfiguration; -import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; -import de.latlon.xplan.manager.storage.filesystem.FilesystemStorageCleanUpManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.NoConfigRasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.MapserverRasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.storage.FileSystemStorage; -import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; -import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3RasterStorageContext; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -/** - * Spring configuration for the storage type to be used for raster data. The - * MapserverRasterStorage is selected with the profile 'mapserver'. To use an AWS S3 - * bucket as a storage backend with MapServer use the <code>AmazonS3Context</code> for - * configuration. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @since 8.0 - * @see AmazonS3RasterStorageContext - */ -@Configuration -@ComponentScan("de.latlon.xplan.manager.storage.filesystem.listener") -@Profile("mapserver") -public class MapserverRasterStorageContext { - - @Bean - @Profile("!s3img") - public RasterStorage rasterStorage(Path dataDirectory, RasterEvaluation rasterEvaluation) - throws ConfigurationException { - return new FileSystemStorage(dataDirectory, rasterEvaluation, null); - } - - @Bean - @Profile("!s3img") - public StorageCleanUpManager storageCleanUpManager(Path dataDirectory, - DeegreeRasterCacheCleaner deegreeRasterCacheCleaner) { - return new FilesystemStorageCleanUpManager(dataDirectory, deegreeRasterCacheCleaner); - } - - @Bean - @Profile("!s3img") - public static Path dataPath(@Value("#{environment.XPLAN_MAPSERVER_DATA_DIR}") String dataDir) - throws ConfigurationException { - if (dataDir == null || dataDir.isEmpty()) - throw new ConfigurationException( - "Profile mapserver is enabled, but not s3img. Environment variable XPLAN_MAPSERVER_DATA_DIR is required to store the raster images in filesystem."); - final Path dataDirectory = Paths.get(dataDir); - return dataDirectory; - } - - @Bean - public RasterEvaluation rasterEvaluation(ManagerConfiguration managerConfiguration) { - return new MapserverRasterEvaluation(managerConfiguration.getRasterConfigurationCrs()); - } - - @Bean - public RasterConfigManager rasterConfigManager() { - return new NoConfigRasterConfigManager(); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/XPlanRasterManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/XPlanRasterManager.java index 2683ed0906..b6c05db082 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/XPlanRasterManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/XPlanRasterManager.java @@ -20,30 +20,23 @@ */ package de.latlon.xplan.manager.wmsconfig.raster; -import de.latlon.xplan.commons.XPlanType; +import static de.latlon.xplanbox.core.raster.RasterUtils.findRasterplanZipEntry; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; -import de.latlon.xplan.manager.configuration.ConfigurationException; +import de.latlon.xplan.commons.s3.StorageException; import de.latlon.xplan.manager.edit.RasterReference; import de.latlon.xplan.manager.storage.StorageEvent; -import de.latlon.xplan.manager.web.shared.PlanStatus; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; -import de.latlon.xplan.commons.s3.StorageException; import de.latlon.xplan.manager.workspace.WorkspaceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEventPublisher; -import jakarta.xml.bind.JAXBException; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import static de.latlon.xplan.manager.wmsconfig.raster.RasterUtils.findRasterplanZipEntry; - /** * An instance of XPlanRasterManager provides the service methods to manage raster files * part of XPlan. @@ -57,34 +50,21 @@ public class XPlanRasterManager { private final RasterStorage rasterStorage; - private final RasterConfigManager rasterConfigManager; - private final ApplicationEventPublisher applicationEventPublisher; /** * Instantiates a {@link XPlanRasterManager} with workspace and manager configuration. * @param rasterStorage the RasterStorage used to write raster files, never * <code>null</code> - * @param rasterConfigManager the RasterConfigManager used to write config files, - * never <code>null</code> - * @param applicationEventPublisher + * @param applicationEventPublisher never <code>null</code> * @throws WorkspaceException */ - public XPlanRasterManager(RasterStorage rasterStorage, RasterConfigManager rasterConfigManager, - ApplicationEventPublisher applicationEventPublisher) throws WorkspaceException { + public XPlanRasterManager(RasterStorage rasterStorage, ApplicationEventPublisher applicationEventPublisher) + throws WorkspaceException { this.rasterStorage = rasterStorage; - this.rasterConfigManager = rasterConfigManager; this.applicationEventPublisher = applicationEventPublisher; } - /** - * Removes the configuration of the plan with the given id. - * @param planId the id of the plan to remove, should not be <code>null</code> - */ - public void removeRasterLayers(int planId) { - rasterConfigManager.removeRasterLayers(planId); - } - /** * Removes the configuration of the plan with the given id. * @param planId the id of the plan to remove, should not be <code>null</code> @@ -95,8 +75,6 @@ public class XPlanRasterManager { try { for (String fileName : referenzUrlToRemove) { if (fileName != null) { - String rasterId = createRasterId(fileName); - rasterConfigManager.removeRasterLayer(planId, rasterId); rasterStorage.deleteRasterFile(planId, fileName, storageEvent); } } @@ -116,20 +94,10 @@ public class XPlanRasterManager { * @param archive containing the rasterdata to evaluate, never <code>null</code> * @param rasterRefsToAdd list of refrences to add, never <code>null</code> * @param planId the id of the plan, never <code>null</code> - * @param moreRecentPlanId the id of the plan with release date immediate before the - * release date of the plan (if the plan has one), if <code>null</code> the plan will - * be inserted at last position - * @param type the type of the plan, never <code>null</code> - * @param planStatus the status of the plan, never <code>null</code> - * @param newPlanStatus status of the plan after update, may be <code>null</code> (if - * not updated) * @param sortDate - * @return a list of ids of the inserted raster layers, may be empty if no raster - * layer was created, but never <code>null</code> */ - public List<String> updateWmsWorkspaceWithRasterLayers(XPlanArchiveContentAccess archive, - List<RasterReference> rasterRefsToAdd, int planId, int moreRecentPlanId, XPlanType type, - PlanStatus planStatus, PlanStatus newPlanStatus, Date sortDate) { + public void updateWmsWorkspaceWithRasterLayers(XPlanArchiveContentAccess archive, + List<RasterReference> rasterRefsToAdd, int planId, Date sortDate) { long begin = System.currentTimeMillis(); String sortDateAsString = "unbekannt"; @@ -142,10 +110,7 @@ public class XPlanRasterManager { try { logScanFiles(begin, rasterRefsToAdd); - List<String> rasterIds = copyRasterfilesAndCreateConfig(archive, rasterRefsToAdd, planId, storageEvent); - rasterConfigManager.insertRasterLayers(planId, moreRecentPlanId, type, planStatus, newPlanStatus, rasterIds, - sortDate); - return rasterIds; + storeRasterfiles(archive, rasterRefsToAdd, planId, storageEvent); } catch (Exception e) { LOG.error("Rasterconfiguration could not be created: {} ", e.getMessage()); @@ -157,55 +122,15 @@ public class XPlanRasterManager { } } - public void updateSortOrderOfRasterLayers(int planId, int moreRecentPlan, PlanStatus oldPlanStatus, - PlanStatus newPlanStatus, XPlanType type) throws ConfigurationException, JAXBException, IOException { - if (newPlanStatus.equals(oldPlanStatus)) { - rasterConfigManager.reorderWmsLayers(planId, moreRecentPlan, newPlanStatus, type); - } - } - - /** - * Updates the existing raster layer configuration, if the planStatus and - * newPlanStatus differs, the configuration is moved from one theme to another. - * @param planId the id of the plan, never <code>null</code> - * @param type the type of the plan, never <code>null</code> - * @param planStatus the status of the plan, never <code>null</code> - * @param newPlanStatus status of the plan after update, may be <code>null</code> - * @throws JAXBException - * @throws IOException - * @throws ConfigurationException - */ - public void updateRasterLayers(int planId, XPlanType type, PlanStatus planStatus, PlanStatus newPlanStatus) - throws JAXBException, IOException, ConfigurationException { - rasterConfigManager.updateRasterLayers(planId, type, planStatus, newPlanStatus); - } - - /** - * Reorders the wms layer configuration by the passed sort dates. - * @param planId2sortDate plan ids mapped to the new sort date, never - * <code>null</code> - * @throws Exception - */ - public void reorderWmsLayers(Map<String, Date> planId2sortDate) throws Exception { - rasterConfigManager.reorderWmsLayers(planId2sortDate); - } - - private List<String> copyRasterfilesAndCreateConfig(XPlanArchiveContentAccess archive, - List<RasterReference> rasterRefsToAdd, int planId, StorageEvent storageEvent) - throws IOException, JAXBException, StorageException { - List<String> rasterIds = new ArrayList<>(); + private void storeRasterfiles(XPlanArchiveContentAccess archive, List<RasterReference> rasterRefsToAdd, int planId, + StorageEvent storageEvent) throws IOException, StorageException { for (RasterReference rasterRef : rasterRefsToAdd) { String entryName = findRasterplanZipEntry(archive, rasterRef.getReferenzUrl()).getName(); String entryNameGeoref = rasterRef.getGeoRefUrl() != null ? findRasterplanZipEntry(archive, rasterRef.getGeoRefUrl()).getName() : null; LOG.debug("Raster data entry {} ", entryName); - String rasterFileName = rasterStorage.addRasterFile(planId, entryName, entryNameGeoref, archive, - storageEvent); - String rasterId = createRasterId(rasterFileName); - rasterIds.add(rasterId); - rasterConfigManager.createConfiguration(rasterId, rasterFileName); + rasterStorage.addRasterFile(planId, entryName, entryNameGeoref, archive, storageEvent); } - return rasterIds; } private String createRasterId(String dataFileName) { diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/ConfigWriterUtils.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/ConfigWriterUtils.java deleted file mode 100644 index 20dac51770..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/ConfigWriterUtils.java +++ /dev/null @@ -1,78 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import de.latlon.xplan.commons.XPlanType; -import de.latlon.xplan.manager.web.shared.PlanStatus; - -import java.util.HashMap; -import java.util.Map; - -import static de.latlon.xplan.commons.XPlanType.BP_Plan; -import static de.latlon.xplan.commons.XPlanType.FP_Plan; -import static de.latlon.xplan.commons.XPlanType.LP_Plan; -import static de.latlon.xplan.commons.XPlanType.RP_Plan; -import static de.latlon.xplan.commons.XPlanType.SO_Plan; -import static de.latlon.xplan.manager.web.shared.PlanStatus.ARCHIVIERT; -import static de.latlon.xplan.manager.web.shared.PlanStatus.IN_AUFSTELLUNG; - -/** - * Contains convenience methods to write the wms configuration for a plan. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - * @version $Revision: $, $Date: $ - */ -public class ConfigWriterUtils { - - private static final Map<XPlanType, String> typeToExtension = new HashMap<XPlanType, String>(); - - static { - typeToExtension.put(BP_Plan, "bplan"); - typeToExtension.put(FP_Plan, "fplan"); - typeToExtension.put(LP_Plan, "lplan"); - typeToExtension.put(RP_Plan, "rplan"); - typeToExtension.put(SO_Plan, "soplan"); - } - - private ConfigWriterUtils() { - } - - /** - * Detects the type of the archive - * @param type never <code>null</code> - * @param planStatus may be <code>null</code> (same as FESTGESTELLT) - * @return the type, never <code>null</code> - * @throws IllegalArgumentException if the archive type is not supported - */ - public static String detectType(XPlanType type, PlanStatus planStatus) { - if (typeToExtension.containsKey(type)) { - String extension = typeToExtension.get(type); - if (IN_AUFSTELLUNG.equals(planStatus)) - return extension + "pre"; - if (ARCHIVIERT.equals(planStatus)) - return extension + "archive"; - return extension; - } - String msg = "Plan with type " + type + " is not supported for wms configuration creation!"; - throw new IllegalArgumentException(msg); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/DeegreeRasterConfigManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/DeegreeRasterConfigManager.java deleted file mode 100644 index 61e9d0f9e9..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/DeegreeRasterConfigManager.java +++ /dev/null @@ -1,166 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import static de.latlon.xplan.manager.wmsconfig.raster.config.ConfigWriterUtils.detectType; - -import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import de.latlon.xplan.commons.XPlanType; -import de.latlon.xplan.manager.configuration.ConfigurationException; -import de.latlon.xplan.manager.configuration.ManagerConfiguration; -import de.latlon.xplan.manager.web.shared.PlanStatus; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import jakarta.xml.bind.JAXBException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - */ -public class DeegreeRasterConfigManager implements RasterConfigManager { - - private static final Logger LOG = LoggerFactory.getLogger(DeegreeRasterConfigManager.class); - - private final ManagerConfiguration managerConfiguration; - - private final WorkspaceRasterThemeManager rasterThemeManager; - - private final WorkspaceRasterLayerManager rasterLayerManager; - - public DeegreeRasterConfigManager(WmsWorkspaceWrapper wmsWorkspaceWrapper, - ManagerConfiguration managerConfiguration) { - this.rasterThemeManager = new WorkspaceRasterThemeManager(wmsWorkspaceWrapper); - this.managerConfiguration = managerConfiguration; - this.rasterLayerManager = new WorkspaceRasterLayerManager(wmsWorkspaceWrapper.getLocation(), - managerConfiguration.getRasterConfigurationCrs()); - } - - @Override - public void insertRasterLayers(int planId, int moreRecentPlanId, XPlanType type, PlanStatus planStatus, - PlanStatus newPlanStatus, List<String> rasterIds, Date sortDate) - throws JAXBException, IOException, ConfigurationException { - String statusType = detectType(type, planStatus); - if (newPlanStatus != null) { - String newStatusType = detectType(type, newPlanStatus); - rasterThemeManager.moveLayers(statusType, newStatusType, planId); - statusType = newStatusType; - } - if (sortDate != null) { - rasterThemeManager.insertLayersRightBefore(statusType, managerConfiguration.getRasterConfigurationCrs(), - rasterIds, moreRecentPlanId); - } - else { - rasterThemeManager.insertLayersAtBeginning(statusType, managerConfiguration.getRasterConfigurationCrs(), - rasterIds); - } - } - - /** - * Removes the configuration of the plan with the given id. - * @param planId the id of the plan to remove, should not be <code>null</code> - */ - @Override - public void removeRasterLayers(int planId) { - try { - for (String type : WmsWorkspaceWrapper.supportedTypes) { - rasterThemeManager.removeLayersForPlan(type, planId); - } - rasterLayerManager.deleteDataFilesAndRasterConfigurations(planId); - } - catch (Exception e) { - LOG.trace("Configuration of the plan with id " + planId + " failed.!", e); - LOG.error("Modifizierung der Themes-Datei fehlgeschlagen: {}", e.getMessage()); - } - } - - /** - * Removes the configuration of the plan with the given id. - * @param planId the id of the plan to remove, should not be <code>null</code> - */ - @Override - public void removeRasterLayer(int planId, String rasterId) - throws ConfigurationException, JAXBException, IOException { - for (String type : WmsWorkspaceWrapper.supportedTypes) { - rasterThemeManager.removeLayersForPlan(type, planId, rasterId); - } - rasterLayerManager.deleteDataFilesAndRasterConfigurations(planId, rasterId); - } - - /** - * Updates the existing raster layer configuration, if the planStatus and - * newPlanStatus differs, the configuration is moved from one theme to another. - * @param planId the id of the plan, never <code>null</code> - * @param type the type of the plan, never <code>null</code> - * @param planStatus the status of the plan, never <code>null</code> - * @param newPlanStatus status of the plan after update, may be <code>null</code> - * @throws JAXBException - * @throws IOException - * @throws ConfigurationException - */ - @Override - public void updateRasterLayers(int planId, XPlanType type, PlanStatus planStatus, PlanStatus newPlanStatus) - throws JAXBException, IOException, ConfigurationException { - String statusType = detectType(type, planStatus); - if (newPlanStatus != null) { - String newStatusType = detectType(type, newPlanStatus); - rasterThemeManager.moveLayers(statusType, newStatusType, planId); - } - } - - /** - * Reorders the wms layer configuration by the passed sort dates. - * @param planId2sortDate plan ids mapped to the new sort date, never - * <code>null</code> - * @throws Exception - */ - @Override - public void reorderWmsLayers(Map<String, Date> planId2sortDate) throws Exception { - rasterThemeManager.reorderWmsLayers(planId2sortDate, managerConfiguration.getRasterConfigurationCrs()); - } - - /** - * Reorders the wms layer configuration of the raster configurations of plan with the - * passed id planId. - * @param planId of the plan to reorder - * @param moreRecentPlan the id of the more recent plan - * @param planStatus - * @param xPlanType - * @throws Exception - */ - @Override - public void reorderWmsLayers(int planId, int moreRecentPlan, PlanStatus planStatus, XPlanType xPlanType) - throws ConfigurationException, JAXBException, IOException { - String statusType = detectType(xPlanType, planStatus); - rasterThemeManager.reorderWmsLayers(planId, moreRecentPlan, statusType); - } - - @Override - public void createConfiguration(String rasterId, String rasterFileName) throws IOException, JAXBException { - rasterLayerManager.createRasterConfigurations(rasterId, rasterFileName, - managerConfiguration.getRasterLayerMinScaleDenominator(), - managerConfiguration.getRasterLayerMaxScaleDenominator()); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/NoConfigRasterConfigManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/NoConfigRasterConfigManager.java deleted file mode 100644 index d82a345941..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/NoConfigRasterConfigManager.java +++ /dev/null @@ -1,64 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import de.latlon.xplan.commons.XPlanType; -import de.latlon.xplan.manager.web.shared.PlanStatus; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - */ -public class NoConfigRasterConfigManager implements RasterConfigManager { - - @Override - public void insertRasterLayers(int planId, int moreRecentPlanId, XPlanType type, PlanStatus planStatus, - PlanStatus newPlanStatus, List<String> rasterIds, Date sortDate) { - } - - @Override - public void removeRasterLayers(int planId) { - } - - @Override - public void removeRasterLayer(int planId, String rasterId) { - } - - @Override - public void updateRasterLayers(int planId, XPlanType type, PlanStatus planStatus, PlanStatus newPlanStatus) { - } - - @Override - public void reorderWmsLayers(Map<String, Date> planId2sortDate) { - } - - @Override - public void reorderWmsLayers(int planId, int moreRecentPlan, PlanStatus planStatus, XPlanType xPlanType) { - } - - @Override - public void createConfiguration(String rasterId, String rasterFileName) { - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/RasterConfigManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/RasterConfigManager.java deleted file mode 100644 index ee8bc4aba7..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/RasterConfigManager.java +++ /dev/null @@ -1,56 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import de.latlon.xplan.commons.XPlanType; -import de.latlon.xplan.manager.configuration.ConfigurationException; -import de.latlon.xplan.manager.web.shared.PlanStatus; - -import jakarta.xml.bind.JAXBException; -import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - */ -public interface RasterConfigManager { - - void insertRasterLayers(int planId, int moreRecentPlanId, XPlanType type, PlanStatus planStatus, - PlanStatus newPlanStatus, List<String> rasterIds, Date sortDate) - throws JAXBException, IOException, ConfigurationException; - - void removeRasterLayers(int planId); - - void removeRasterLayer(int planId, String rasterId) throws ConfigurationException, JAXBException, IOException; - - void updateRasterLayers(int planId, XPlanType type, PlanStatus planStatus, PlanStatus newPlanStatus) - throws JAXBException, IOException, ConfigurationException; - - void reorderWmsLayers(Map<String, Date> planId2sortDate) throws Exception; - - void reorderWmsLayers(int planId, int moreRecentPlan, PlanStatus planStatus, XPlanType xPlanType) - throws ConfigurationException, JAXBException, IOException; - - void createConfiguration(String rasterId, String rasterFileName) throws IOException, JAXBException; - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManager.java deleted file mode 100644 index afe10b920d..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManager.java +++ /dev/null @@ -1,203 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import static jakarta.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT; -import static java.lang.Boolean.TRUE; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.function.BiPredicate; -import java.util.stream.Stream; - -import jakarta.xml.bind.JAXBContext; -import jakarta.xml.bind.JAXBException; -import jakarta.xml.bind.Marshaller; -import org.deegree.commons.metadata.description.jaxb.LanguageStringType; -import org.deegree.layer.persistence.base.jaxb.ScaleDenominatorsType; -import org.deegree.layer.persistence.tile.jaxb.TileLayerType; -import org.deegree.layer.persistence.tile.jaxb.TileLayers; -import org.deegree.tile.persistence.geotiff.jaxb.GeoTIFFTileStoreJAXB; -import org.deegree.tile.tilematrixset.geotiff.jaxb.GeoTIFFTileMatrixSetConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Creates/deletes configuration and data files for raster layers in the WMS workspace. - * - * @author <a href="mailto:schmitz@occamlabs.de">Andreas Schmitz</a> - * @since 1.0 - */ -public class WorkspaceRasterLayerManager { - - private static final Logger LOG = LoggerFactory.getLogger(WorkspaceRasterLayerManager.class); - - private final Path wmsWorkspace; - - private final String rasterConfigurationCrs; - - /** - * @param wmsWorkspace the location of the workspace the configuration should be - * stored, never <code>null</code> - * @param rasterConfigurationCrs the crs of the configuration, never <code>null</code> - */ - public WorkspaceRasterLayerManager(File wmsWorkspace, String rasterConfigurationCrs) { - this.wmsWorkspace = wmsWorkspace.toPath(); - this.rasterConfigurationCrs = rasterConfigurationCrs; - } - - public void createRasterConfigurations(String rasterId, String rasterFileName, double minScaleDenominator, - double maxScaleDenominator) throws JAXBException, IOException { - createGeotiffTileMatrixSetConfig(rasterId, rasterFileName); - createGeotiffTileStoreConfig(rasterId, rasterFileName); - createTileLayerConfig(rasterId, minScaleDenominator, maxScaleDenominator); - } - - /** - * Removes all configuration files for the specified plan: - * <ul> - * <li>datasources/tile/<planId>_<XXX></li> - * <li>datasources/tile/tilematrixset/<planId>_<XXX></li> - * <li>layers/<planId>_<XXX></li> - * </ul> - * @param planId the id of the plan to remove configuration for, never - * <code>null</code> - */ - public void deleteDataFilesAndRasterConfigurations(int planId) throws IOException { - final String prefix = planId + "_"; - deleteDataFilesAndRasterConfigurations( - (path, basicFileAttributes) -> path.getFileName().toString().startsWith(prefix)); - } - - /** - * Removes the configuration files of the specified rasterId for the specified plan: - * <ul> - * <li>datasources/tile/<planId>_<rasterId>.xml</li> - * <li>datasources/tile/tilematrixset/<planId>_<rasterId>.xml</li> - * <li>layers/<planId>_<rasterId>.xml</li> - * </ul> - * @param planId the id of the plan to remove configuration for, never - * <code>null</code> - * @param rasterId id of the raster to remove, never <code>null</code> - */ - public void deleteDataFilesAndRasterConfigurations(int planId, String rasterId) throws IOException { - final String rasterLayerFileName = planId + "_" + rasterId; - deleteDataFilesAndRasterConfigurations( - (path, basicFileAttributes) -> path.getFileName().toString().startsWith(rasterLayerFileName)); - } - - private void deleteDataFilesAndRasterConfigurations(BiPredicate<Path, BasicFileAttributes> xmlFilenameFilter) - throws IOException { - deleteFilesWithPrefix(wmsWorkspace.resolve("datasources/tile"), xmlFilenameFilter); - deleteFilesWithPrefix(wmsWorkspace.resolve("datasources/tile/tilematrixset"), xmlFilenameFilter); - deleteFilesWithPrefix(wmsWorkspace.resolve("layers"), xmlFilenameFilter); - } - - private void deleteFilesWithPrefix(Path dir, BiPredicate<Path, BasicFileAttributes> filenameFilter) - throws IOException { - if (!Files.exists(dir) || !Files.isDirectory(dir)) { - return; - } - Stream<Path> filesToDelete = Files.find(dir, Integer.MAX_VALUE, filenameFilter); - filesToDelete.forEach(file -> { - LOG.info("- Entferne Workspace-Datei '" + file + "'..."); - try { - Files.delete(file); - LOG.info("OK"); - } - catch (Exception e) { - LOG.error("Fehler: " + e.getMessage()); - LOG.debug("Fehler: ", e); - } - }); - } - - private void createTileLayerConfig(String rasterId, double minScaleDenominator, double maxScaleDenominator) - throws JAXBException, IOException { - TileLayers cfg = new TileLayers(); - TileLayerType lay = new TileLayerType(); - cfg.getTileLayer().add(lay); - lay.setName(rasterId); - lay.setCRS(rasterConfigurationCrs); - setScaleDenominator(lay, minScaleDenominator, maxScaleDenominator); - LanguageStringType title = new LanguageStringType(); - title.setValue(rasterId); - lay.getTitle().add(title); - org.deegree.layer.persistence.tile.jaxb.TileLayerType.TileDataSet tds; - tds = new org.deegree.layer.persistence.tile.jaxb.TileLayerType.TileDataSet(); - lay.getTileDataSet().add(tds); - tds.setTileStoreId(rasterId); - tds.setValue(rasterId); - Path layerDir = wmsWorkspace.resolve("layers"); - createDirectory(layerDir); - Path layerFile = layerDir.resolve(rasterId + ".xml"); - marshallConfig(cfg, "org.deegree.layer.persistence.tile.jaxb", layerFile); - } - - private void setScaleDenominator(TileLayerType lay, double minScaleDenominator, double maxScaleDenominator) { - if (Double.isNaN(minScaleDenominator) && Double.isNaN(maxScaleDenominator)) - return; - double minScaleDenominatorToSet = Double.isNaN(minScaleDenominator) ? 0 : minScaleDenominator; - double maxScaleDenominatorToSet = Double.isNaN(maxScaleDenominator) ? Double.MAX_VALUE : maxScaleDenominator; - ScaleDenominatorsType scaleDenominators = new ScaleDenominatorsType(); - scaleDenominators.setMin(minScaleDenominatorToSet); - scaleDenominators.setMax(maxScaleDenominatorToSet); - lay.setScaleDenominators(scaleDenominators); - } - - private void createGeotiffTileMatrixSetConfig(String rasterId, String rasterFileName) - throws JAXBException, IOException { - GeoTIFFTileMatrixSetConfig cfg = new GeoTIFFTileMatrixSetConfig(); - cfg.setStorageCRS(rasterConfigurationCrs); - cfg.setFile("../../../data/" + rasterFileName); - Path tilematrixsetDir = wmsWorkspace.resolve("datasources/tile/tilematrixset/"); - createDirectory(tilematrixsetDir); - Path tilematrixsetFile = tilematrixsetDir.resolve(rasterId + ".xml"); - marshallConfig(cfg, "org.deegree.tile.tilematrixset.geotiff.jaxb", tilematrixsetFile); - } - - private void createGeotiffTileStoreConfig(String rasterId, String rasterFileName) throws JAXBException { - GeoTIFFTileStoreJAXB cfg = new GeoTIFFTileStoreJAXB(); - GeoTIFFTileStoreJAXB.TileDataSet tds = new GeoTIFFTileStoreJAXB.TileDataSet(); - tds.setIdentifier(rasterId); - tds.setFile("../../data/" + rasterFileName); - tds.setTileMatrixSetId(rasterId); - cfg.getTileDataSet().add(tds); - Path file = wmsWorkspace.resolve("datasources/tile/" + rasterId + ".xml"); - marshallConfig(cfg, "org.deegree.tile.persistence.geotiff.jaxb", file); - } - - private void createDirectory(Path directoryToCreate) throws IOException { - if (!Files.exists(directoryToCreate)) - Files.createDirectories(directoryToCreate); - } - - private void marshallConfig(Object cfg, String contextPath, Path toWriteIn) throws JAXBException { - JAXBContext ctx = JAXBContext.newInstance(contextPath); - Marshaller marshaller = ctx.createMarshaller(); - marshaller.setProperty(JAXB_FORMATTED_OUTPUT, TRUE); - marshaller.marshal(cfg, toWriteIn.toFile()); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterThemeManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterThemeManager.java deleted file mode 100644 index c06c1b382f..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterThemeManager.java +++ /dev/null @@ -1,366 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import de.latlon.xplan.manager.configuration.ConfigurationException; -import de.latlon.xplan.manager.wmsconfig.WmsThemesConfig; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import de.latlon.xplan.manager.wmsconfig.raster.RasterConfigurationSorter; -import org.deegree.theme.persistence.standard.jaxb.ThemeType; -import org.deegree.theme.persistence.standard.jaxb.ThemeType.Layer; -import org.deegree.theme.persistence.standard.jaxb.Themes; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.xml.bind.JAXBContext; -import jakarta.xml.bind.JAXBException; -import jakarta.xml.bind.Marshaller; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper.supportedTypes; -import static java.lang.Boolean.TRUE; -import static jakarta.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT; - -/** - * Modifies raster theme configuration files in the WMS workspace. - * - * @author <a href="mailto:schmitz@occamlabs.de">Andreas Schmitz</a> - * @author <a href="mailto:schneider@occamlabs.de">Markus Schneider</a> - * @since 1.0 - */ -public class WorkspaceRasterThemeManager { - - private static final Logger LOG = LoggerFactory.getLogger(WorkspaceRasterThemeManager.class); - - private final RasterConfigurationSorter rasterConfigurationSorter = new RasterConfigurationSorter(); - - private final WmsWorkspaceWrapper wmsWorkspaceWrapper; - - /** - * @param wmsWorkspaceWrapper the wrapper of the workspace containing the wms - * configuration to manipulate, never <code>null</code> - * @throws IllegalArgumentException - if the wmsWorkspace is <code>null</code> - */ - public WorkspaceRasterThemeManager(WmsWorkspaceWrapper wmsWorkspaceWrapper) { - if (wmsWorkspaceWrapper == null) - throw new IllegalArgumentException(); - this.wmsWorkspaceWrapper = wmsWorkspaceWrapper; - } - - /** - * Inserts the specified raster layers at the correct position in the "sorted theme" - * (which is sorted by plan date). - * @param rasterLayerIds ids of the new raster layers, must not be <code>null</code> - * @param succeedingPlanId id of the raster plan that succeeds the new layers, can be - * <code>null</code> (new layers are most recent, inserted at the end) - * @throws JAXBException if the changes could not be persisted - * @throws IOException - * @throws ConfigurationException - */ - public synchronized void insertLayersRightBefore(String type, String crs, List<String> rasterLayerIds, - int succeedingPlanId) throws JAXBException, IOException, ConfigurationException { - checkIfTypeIsSupported(type); - WmsThemesConfig themesConfig = wmsWorkspaceWrapper.retrieveThemesForType(type, crs); - - Themes themes = themesConfig.getThemes(); - LOG.info("Succeeding plan id: {}", succeedingPlanId); - for (String rasterLayerId : rasterLayerIds) { - themes.getLayerStoreId().add(rasterLayerId); - } - ThemeType sortedTheme = themes.getTheme().getTheme().get(0); - List<Layer> layers = sortedTheme.getLayer(); - List<Layer> newRasterLayers = createNewRasterLayers(rasterLayerIds); - - int index = findIndex(layers, succeedingPlanId); - layers.addAll(index, newRasterLayers); - - for (Layer layer : layers) { - LOG.debug(layer.getLayerStore()); - } - persist(themes, themesConfig.getConfig()); - } - - /** - * Inserts the specified raster layers at the beginning. - * @param rasterLayerIds ids of the new raster layers, must not be <code>null</code> - * @throws JAXBException if the changes could not be persisted - * @throws IOException - */ - public synchronized void insertLayersAtBeginning(String type, String crs, List<String> rasterLayerIds) - throws JAXBException, IOException, ConfigurationException { - checkIfTypeIsSupported(type); - WmsThemesConfig themesConfig = wmsWorkspaceWrapper.retrieveThemesForType(type, crs); - - File config = themesConfig.getConfig(); - Themes themes = themesConfig.getThemes(); - - for (String rasterLayerId : rasterLayerIds) { - themes.getLayerStoreId().add(rasterLayerId); - } - ThemeType sortedTheme = themes.getTheme().getTheme().get(0); - List<Layer> layers = sortedTheme.getLayer(); - List<Layer> newRasterLayers = createNewRasterLayers(rasterLayerIds); - layers.addAll(0, newRasterLayers); - persist(themes, config); - } - - /** - * Removes all references to raster layers that belong to the specified plan. - * @param planId id of the plan, must not be <code>null</code> - * @throws JAXBException - * @throws IOException - */ - public synchronized void removeLayersForPlan(String type, int planId) - throws JAXBException, IOException, ConfigurationException { - final String prefix = planId + "_"; - removeLayers(type, toMatch -> toMatch.startsWith(prefix)); - } - - /** - * Removes all references to raster layers that belong to the specified plan with the - * specified rasterLayerId. - * @param type of the plan (bplan, rplan, fplan, lplan), never <code>null</code> - * @param planId id of the plan, must not be <code>null</code> - * @param rasterId the id of the raster (layer id without id suffix) to remove, never - * <code>null</code> - * @throws JAXBException - * @throws IOException - */ - public synchronized void removeLayersForPlan(String type, int planId, String rasterId) - throws JAXBException, IOException, ConfigurationException { - final String layerId = planId + "_" + rasterId; - removeLayers(type, toMatch -> toMatch.equals(layerId)); - } - - /** - * Moves all raster configurations from one config to another. If sourceType and - * targetType are equal, nothing is moved. - * @param sourceType the type of the plan to move from, never <code>null</code> - * @param targetType the type of the plan to move to, never <code>null</code> - * @param planId the id of the plan to move, never <code>null</code> - * @throws JAXBException - * @throws IOException - * @throws ConfigurationException - */ - public synchronized void moveLayers(String sourceType, String targetType, int planId) - throws JAXBException, IOException, ConfigurationException { - if (sourceType.equals(targetType)) - return; - checkIfTypeIsSupported(sourceType); - checkIfTypeIsSupported(targetType); - - WmsThemesConfig sourceThemesConfig = wmsWorkspaceWrapper.retrieveThemesForType(sourceType); - Themes sourceThemes = sourceThemesConfig.getThemes(); - - List<Layer> removedLayers = removeUserLayers(planId, sourceThemes.getTheme()); - - WmsThemesConfig targetThemesConfig = wmsWorkspaceWrapper.retrieveThemesForType(targetType); - Themes targetThemes = targetThemesConfig.getThemes(); - - ThemeType sortedTheme = targetThemes.getTheme().getTheme().get(0); - List<Layer> layers = sortedTheme.getLayer(); - layers.addAll(removedLayers); - for (Layer removedLayer : removedLayers) { - String layerStore = removedLayer.getLayerStore(); - sourceThemes.getLayerStoreId().remove(layerStore); - targetThemes.getLayerStoreId().add(layerStore); - } - persist(sourceThemes, sourceThemesConfig.getConfig()); - persist(targetThemes, targetThemesConfig.getConfig()); - } - - /** - * Reorders the wms layer configuraton by the passed sort dates. - * @param planId2sortDate plan ids mapped to the new sort date, never - * <code>null</code> - * @throws ConfigurationException - * @throws IOException - * @throws JAXBException - */ - public synchronized void reorderWmsLayers(Map<String, Date> planId2sortDate, String crs) - throws JAXBException, IOException, ConfigurationException { - List<String> sortedByDate = rasterConfigurationSorter.sortByDateInDeegreeOrder(planId2sortDate); - for (String supportedType : supportedTypes) { - reorderWmsLayers(sortedByDate, crs, supportedType); - } - } - - public void reorderWmsLayers(int planId, int moreRecentPlan, String statusType) - throws ConfigurationException, JAXBException, IOException { - WmsThemesConfig themesConfig = wmsWorkspaceWrapper.retrieveThemesForType(statusType); - Themes themes = themesConfig.getThemes(); - - ThemeType sortedTheme = themes.getTheme().getTheme().get(0); - List<Layer> layers = sortedTheme.getLayer(); - List<Layer> layersToChangeIndex = layers.stream() - .filter(layer -> layer.getValue().startsWith(planId + "_")) - .collect(Collectors.toList()); - layers.removeAll(layersToChangeIndex); - int index = findIndex(layers, moreRecentPlan); - layers.addAll(index, layersToChangeIndex); - persist(themes, themesConfig.getConfig()); - } - - private void reorderWmsLayers(List<String> sortedByDate, String crs, String supportedType) - throws JAXBException, IOException, ConfigurationException { - WmsThemesConfig themesConfig = wmsWorkspaceWrapper.retrieveThemesForType(supportedType, crs); - - File config = themesConfig.getConfig(); - Themes themes = themesConfig.getThemes(); - - ThemeType sortedTheme = themes.getTheme().getTheme().get(0); - List<Layer> layers = sortedTheme.getLayer(); - rasterConfigurationSorter.sortLayers(layers, sortedByDate); - persist(themes, config); - } - - private void persist(Themes themes, File config) throws JAXBException { - JAXBContext ctx = JAXBContext.newInstance("org.deegree.theme.persistence.standard.jaxb"); - Marshaller marshaller = ctx.createMarshaller(); - marshaller.setProperty(JAXB_FORMATTED_OUTPUT, TRUE); - marshaller.marshal(themes, config); - } - - private int findIndex(List<Layer> layers, int succedingPlanId) { - if (succedingPlanId > -1) { - String prefix = succedingPlanId + "_"; - for (int i = 0; i < layers.size(); i++) { - if (layers.get(i).getLayerStore().startsWith(prefix)) { - return i; - } - } - } - return layers.size(); - } - - private void checkIfTypeIsSupported(String type) { - if (!supportedTypes.contains(type)) { - throw new IllegalArgumentException("First parameter must be bplan, fplan, rplan, lplan or soplan."); - } - } - - private void removeLayers(String type, IdMatcher idMatcher) - throws JAXBException, IOException, ConfigurationException { - checkIfTypeIsSupported(type); - WmsThemesConfig themesConfig = wmsWorkspaceWrapper.retrieveThemesForType(type); - Themes themes = themesConfig.getThemes(); - - removeLayerStoresWithPrefix(themes, idMatcher); - removeLayersWithPrefixFromAutoTheme(themes, idMatcher); - removeUserLayersFromRootTheme(themes, idMatcher); - removeUserLayersFromUserCategories(themes, idMatcher); - persist(themes, themesConfig.getConfig()); - } - - private void removeLayerStoresWithPrefix(Themes themes, IdMatcher matcher) { - List<String> removeIds = new ArrayList<String>(); - for (String layerStoreId : themes.getLayerStoreId()) { - if (matcher.matches(layerStoreId)) { - removeIds.add(layerStoreId); - } - } - themes.getLayerStoreId().removeAll(removeIds); - } - - private void removeLayersWithPrefixFromAutoTheme(Themes themes, IdMatcher matcher) { - ThemeType theme = themes.getTheme().getTheme().get(0); - List<Layer> removeLayers = new ArrayList<Layer>(); - for (Layer layer : theme.getLayer()) { - if (matcher.matches(layer.getLayerStore())) { - removeLayers.add(layer); - } - } - theme.getLayer().removeAll(removeLayers); - } - - private void removeUserLayersFromRootTheme(Themes themes, IdMatcher matcher) { - List<ThemeType> removeThemes = new ArrayList<ThemeType>(); - for (int i = 1; i < themes.getTheme().getTheme().size(); i++) { - ThemeType theme = themes.getTheme().getTheme().get(i); - if (theme.getLayer().size() == 1) { - if (matcher.matches(theme.getLayer().get(0).getValue())) { - removeThemes.add(theme); - } - } - } - themes.getTheme().getTheme().removeAll(removeThemes); - } - - private void removeUserLayersFromUserCategories(Themes themes, IdMatcher matcher) { - for (int i = 1; i < themes.getTheme().getTheme().size(); i++) { - ThemeType theme = themes.getTheme().getTheme().get(i); - if (!theme.getTheme().isEmpty()) { - List<ThemeType> userLayers = new ArrayList<ThemeType>(); - for (ThemeType userLayer : theme.getTheme()) { - if (userLayer.getLayer().size() == 1) { - if (matcher.matches(userLayer.getLayer().get(0).getValue())) { - userLayers.add(userLayer); - } - } - } - theme.getTheme().removeAll(userLayers); - } - } - } - - private List<Layer> createNewRasterLayers(List<String> rasterLayerIds) { - List<Layer> newRasterLayers = new ArrayList<Layer>(); - for (String rasterLayerId : rasterLayerIds) { - Layer layer = new Layer(); - layer.setLayerStore(rasterLayerId); - layer.setValue(rasterLayerId); - newRasterLayers.add(layer); - } - return newRasterLayers; - } - - private List<Layer> removeUserLayers(int planId, ThemeType theme) { - String prefix = planId + "_"; - List<Layer> removedLayers = new ArrayList<>(); - for (ThemeType subTheme : theme.getTheme()) { - List<Layer> removedLayersFromSubtheme = new ArrayList<>(); - List<Layer> layers = subTheme.getLayer(); - for (Layer layer : layers) { - String value = layer.getValue(); - if (value.startsWith(prefix)) { - removedLayersFromSubtheme.add(layer); - } - } - subTheme.getLayer().removeAll(removedLayersFromSubtheme); - removedLayers.addAll(removedLayersFromSubtheme); - removedLayers.addAll(removeUserLayers(planId, subTheme)); - } - return removedLayers; - } - - private interface IdMatcher { - - boolean matches(String toMatch); - - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GeotiffRasterEvaluation.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GeotiffRasterEvaluation.java deleted file mode 100644 index c90938156d..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GeotiffRasterEvaluation.java +++ /dev/null @@ -1,68 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.evaluation; - -import de.latlon.xplan.commons.archive.ArchiveEntry; -import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; -import de.latlon.xplan.commons.reference.ExternalReference; -import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; -import de.latlon.xplan.manager.wmsconfig.raster.RasterUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - */ -public class GeotiffRasterEvaluation implements RasterEvaluation { - - private static final Logger LOG = LoggerFactory.getLogger(GeotiffRasterEvaluation.class); - - private final String configuredRasterCrs; - - public GeotiffRasterEvaluation(String configuredRasterCrs) { - this.configuredRasterCrs = configuredRasterCrs; - } - - @Override - public RasterEvaluationResult evaluate(XPlanArchiveContentAccess archive, ExternalReference rasterplanZipEntry) - throws IOException { - ArchiveEntry entry = RasterUtils.findRasterplanZipEntry(archive, rasterplanZipEntry.getReferenzUrl()); - String entryName = entry.getName(); - String lowerCaseEntryName = entryName.toLowerCase(); - boolean supportedImageFormat = false; - if (lowerCaseEntryName.endsWith("tif") || lowerCaseEntryName.endsWith("tiff")) - supportedImageFormat = true; - return new RasterEvaluationResult(entryName, null, configuredRasterCrs, false, true, supportedImageFormat); - } - - @Override - public boolean isSupportedFile(String fileName) { - String name = fileName.toLowerCase(); - if (!name.endsWith("tif") && !name.endsWith("tiff")) { - LOG.info("Ignoriere Datei '{}'. Keine TIFF-Datei.", fileName); - return false; - } - return true; - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/FileSystemStorage.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/FileSystemStorage.java deleted file mode 100644 index 9f10a66b00..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/FileSystemStorage.java +++ /dev/null @@ -1,102 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.storage; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; -import de.latlon.xplan.manager.storage.StorageEvent; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - */ -public class FileSystemStorage implements RasterStorage { - - private static final Logger LOG = LoggerFactory.getLogger(FileSystemStorage.class); - - private final Path dataDirectory; - - private final RasterEvaluation rasterEvaluation; - - private final DeegreeRasterCacheCleaner deegreeRasterCacheCleaner; - - public FileSystemStorage(Path dataDirectory, RasterEvaluation rasterEvaluation, - DeegreeRasterCacheCleaner deegreeRasterCacheCleaner) { - this.dataDirectory = dataDirectory; - this.rasterEvaluation = rasterEvaluation; - this.deegreeRasterCacheCleaner = deegreeRasterCacheCleaner; - } - - @Override - public String addRasterFile(int planId, String referenceEntryName, String georefEntryName, - XPlanArchiveContentAccess archive, StorageEvent storageEvent) throws IOException { - if (rasterEvaluation.isSupportedFile(referenceEntryName)) { - String rasterFileName = copyFile(planId, referenceEntryName, archive, storageEvent); - if (georefEntryName != null) - copyFile(planId, georefEntryName, archive, storageEvent); - return rasterFileName; - } - throw new IllegalArgumentException("Raster format of file " + referenceEntryName + " is not supported."); - } - - @Override - public void deleteRasterFile(int planId, String fileName, StorageEvent storageEvent) { - final String rasterLayerFileName = planId + "_" + fileName; - if (deegreeRasterCacheCleaner != null) - deegreeRasterCacheCleaner.clearCache(rasterLayerFileName); - Path file = dataDirectory.resolve(rasterLayerFileName); - LOG.info("- Entferne Raster-Datei '" + file + "'..."); - try { - byte[] bytes = Files.readAllBytes(file); - Files.delete(file); - storageEvent.addDeletedPath(file, bytes); - LOG.info("OK"); - } - catch (Exception e) { - LOG.error("Fehler: " + e.getMessage()); - LOG.debug("Fehler: ", e); - } - } - - private String copyFile(int planId, String refrenceEntryName, XPlanArchiveContentAccess archive, - StorageEvent storageEvent) throws IOException { - String rasterFileName = createFileName(planId, refrenceEntryName); - Path target = createTargetFile(rasterFileName); - Files.copy(archive.retrieveInputStreamFor(refrenceEntryName), target); - storageEvent.addStoredPath(target); - return rasterFileName; - } - - protected String createFileName(int planId, String fileName) { - return planId + "_" + fileName; - } - - protected Path createTargetFile(String newFileName) { - return dataDirectory.resolve(newFileName); - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/config/AmazonS3RasterStorageContext.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/config/AmazonS3RasterStorageContext.java index 0305d17b65..2d6a37e5bf 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/config/AmazonS3RasterStorageContext.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/config/AmazonS3RasterStorageContext.java @@ -21,14 +21,12 @@ package de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config; import com.amazonaws.services.s3.AmazonS3; -import de.latlon.xplan.manager.storage.s3.config.AmazonS3Context; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; +import de.latlon.xplan.manager.storage.s3.config.AmazonS3TransactionalContext; import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.S3RasterStorage; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; /** * Spring configuration for using AWS S3 as a storage for raster data. This requires @@ -38,11 +36,9 @@ import org.springframework.context.annotation.Profile; * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> * @since 7.0 - * @see MapserverRasterStorageContext */ @Configuration -@Profile("s3img") -@Import({ AmazonS3Context.class }) +@Import({ AmazonS3TransactionalContext.class }) public class AmazonS3RasterStorageContext { @Bean diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapper.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapper.java deleted file mode 100644 index e7c6d677ce..0000000000 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapper.java +++ /dev/null @@ -1,99 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.workspace; - -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorkspace; - -import java.io.File; - -import org.deegree.commons.config.DeegreeWorkspace; - -/** - * Encapsulates a {@link DeegreeWorkspace}. The workspace is instantiated at first access - * via {@link #getWorkspaceInstance()}. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - */ -public class DeegreeWorkspaceWrapper { - - private final String workspaceName; - - private final File workspaceDir; - - private DeegreeWorkspace deegreeWorkspace; - - /** - * Returns the workspace with the given name. - * @param workspaceName the name of the workspace located at deegree workspace root, - * never <code>null</code> - * @throws IllegalArgumentException - if workspaceName is <code>null</code> - */ - public DeegreeWorkspaceWrapper(String workspaceName) { - if (workspaceName == null) - throw new IllegalArgumentException("workspaceName must not be null!"); - this.workspaceName = workspaceName; - this.workspaceDir = null; - } - - /** - * - * Returns the workspace for the given directory. - * @param workspaceDir the directory of the workspace, never <code>null</code> - * @throws IllegalArgumentException - if workspaceDir is <code>null</code> - */ - public DeegreeWorkspaceWrapper(File workspaceDir) { - if (workspaceDir == null) - throw new IllegalArgumentException("workspaceDir must not be null!"); - this.workspaceName = null; - this.workspaceDir = workspaceDir; - } - - /** - * Returns the workspace with the given name or the workspace for the given directory - * if the former does not exist if both parameters (workspaceName and workspaceDir) - * are not null. - * @param workspaceName the name of the workspace located at deegree workspace root, - * can be <code>null</code> (implies default workspace) - * @param workspaceDir the directory to use as workspace if the named workspace does - * not exist, can be null <code>null</code> - * @throws IllegalArgumentException - if both, workspaceName and workspaceDir are - * <code>null</code> - */ - public DeegreeWorkspaceWrapper(String workspaceName, File workspaceDir) { - if (workspaceName == null && workspaceDir == null) - throw new IllegalArgumentException("workspaceName or workspaceName must not be null!"); - this.workspaceName = workspaceName; - this.workspaceDir = workspaceDir; - } - - /** - * Returns the instantiated workspace. - * @return the instantiated workspace, never <code>null</code> - * @throws WorkspaceException - if the workspace does not exists or the instantiation - * failed - */ - public synchronized DeegreeWorkspace getWorkspaceInstance() throws WorkspaceException { - if (deegreeWorkspace == null) - deegreeWorkspace = instantiateWorkspace(workspaceName, workspaceDir); - return deegreeWorkspace; - } - -} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloader.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloader.java index 06012a244b..e324f6d40b 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloader.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloader.java @@ -20,19 +20,18 @@ */ package de.latlon.xplan.manager.workspace; +import java.io.IOException; +import java.util.List; + import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.List; - /** * Reloads a workspace via HTTP. * @@ -64,7 +63,7 @@ public class WorkspaceReloader { boolean isValid = checkIfConfigurationIsValid(); if (isValid) { LOG.info("Workspace reloader configuration is valid."); - return executeReload(planId); + return deletePlanwerkWms(planId); } else { LOG.info("Workspace reloader configuration is invalid. Reload of workspace is skipped!"); @@ -72,18 +71,6 @@ public class WorkspaceReloader { } } - private boolean executeReload(int planId) { - switch (configuration.getWorkspaceReloadAction()) { - case RELOAD: - return reload(); - case PLANWERKWMS: - return deletePlanwerkWms(planId); - default: - boolean reload = reload(); - return deletePlanwerkWms(planId) && reload; - } - } - private boolean deletePlanwerkWms(int planId) { List<String> urls = configuration.getUrls(); boolean isSuccessfulForAll = true; @@ -124,51 +111,6 @@ public class WorkspaceReloader { } } - private boolean reload() { - List<String> urls = configuration.getUrls(); - boolean isReloadSuccessfulForAllWorkspaces = true; - for (String url : urls) { - boolean reloadResult = reloadWorkspace(url); - isReloadSuccessfulForAllWorkspaces = isReloadSuccessfulForAllWorkspaces && reloadResult; - } - return isReloadSuccessfulForAllWorkspaces; - } - - private boolean reloadWorkspace(String url) { - try { - String reloadUrl = retrieveWorkspaceReloadUrl(url); - LOG.info("Attempting to reload workspace with URL {}", reloadUrl); - HttpGet httpGet = new HttpGet(reloadUrl); - addAuthentication(httpGet); - CloseableHttpClient client = HttpClientBuilder.create().build(); - HttpResponse response = client.execute(httpGet); - if (isResponseCodeOk(response)) { - LOG.info("Reload completed successfully."); - return true; - } - else { - LOG.info( - "Error while reloading workspace. Statuscode: {}, Reason: {}. Check your configuration if workspace reload is configured correctly.", - response.getStatusLine().getStatusCode(), - response.getStatusLine().getReasonPhrase() != null - && !response.getStatusLine().getReasonPhrase().isEmpty() - ? response.getStatusLine().getReasonPhrase() : "-"); - return false; - } - } - catch (IOException e) { - LOG.info("Reload of workspace failed: {}", e.getMessage()); - LOG.trace("Reload of workspace failed!", e); - return false; - } - } - - private String retrieveWorkspaceReloadUrl(String url) { - if (!url.endsWith("/")) - url = url.concat("/"); - return url.concat("config/update"); - } - private String retrieveDeletePlanwerkWmsUrl(String url, int planId) { if (!url.endsWith("/")) url = url.concat("/"); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderConfiguration.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderConfiguration.java index 58c51b437f..45fc8d17bd 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderConfiguration.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderConfiguration.java @@ -20,11 +20,10 @@ */ package de.latlon.xplan.manager.workspace; -import java.util.List; - -import static de.latlon.xplan.manager.workspace.WorkspaceReloadAction.ALL; import static java.util.Collections.emptyList; +import java.util.List; + /** * Container object for {@link WorkspaceReloader} configuration. * @@ -41,13 +40,11 @@ public class WorkspaceReloaderConfiguration { private final String password; - private final WorkspaceReloadAction workspaceReloadAction; - /** * Invalid workspace reloader configuration. */ public WorkspaceReloaderConfiguration() { - this(emptyList(), "", "", "", ALL); + this(emptyList(), "", "", ""); } /** @@ -59,19 +56,12 @@ public class WorkspaceReloaderConfiguration { * <code>null</code> if apiKey is not <code>null</code> * @param password password used for authentication instead of apiKey, may be * <code>null</code> if apiKey is not <code>null</code> - * @param workspaceReloadAction the operation to execute for workspace reload, may be - * <code>null</code> (defaults to ALL) */ - public WorkspaceReloaderConfiguration(List<String> urls, String apiKey, String user, String password, - WorkspaceReloadAction workspaceReloadAction) { + public WorkspaceReloaderConfiguration(List<String> urls, String apiKey, String user, String password) { this.urls = urls; this.apiKey = apiKey; this.user = user; this.password = password; - if (workspaceReloadAction == null) - this.workspaceReloadAction = ALL; - else - this.workspaceReloadAction = workspaceReloadAction; } /** @@ -105,13 +95,6 @@ public class WorkspaceReloaderConfiguration { return password; } - /** - * @return operation to execute for workspace reload, never <code>null</code> - */ - public WorkspaceReloadAction getWorkspaceReloadAction() { - return workspaceReloadAction; - } - /** * @return <code>true</code> ith the apiKey is configured for authentication, * <code>false</code> otherwise diff --git a/xplan-core/xplan-core-manager/src/main/resources/de/latlon/xplan/manager/configuration/managerConfiguration.properties b/xplan-core/xplan-core-manager/src/main/resources/de/latlon/xplan/manager/configuration/managerConfiguration.properties index afa5c3dc10..c8fec63602 100644 --- a/xplan-core/xplan-core-manager/src/main/resources/de/latlon/xplan/manager/configuration/managerConfiguration.properties +++ b/xplan-core/xplan-core-manager/src/main/resources/de/latlon/xplan/manager/configuration/managerConfiguration.properties @@ -19,25 +19,17 @@ # #L% ### # raster configuration -rasterConfigurationCrs=EPSG:25832 +# The rasterConfigurationCrs config option is deprecated, use environment variable XPLAN_SERVICES_DEFAULT_CRS instead. rasterLayerMinScaleDenominator=0 rasterLayerMaxScaleDenominator=50000 -# workspace reloader configuration, workspaceReloadAction must be one of ALL (default), RELOAD, PLANWERKWMS +# workspace reloader configuration # workspaceReloadUser and workspaceReloadPassword are deprecated! Use workspaceReloadApiKey instead. workspaceReloadUrls= workspaceReloadApiKey= #workspaceReloadUser= #workspaceReloadPassword= -workspaceReloadAction=ALL - -# internal id retriever (deprecated) -workspaceName=xplan-manager-workspace -jdbcConnectionId=vfdb -internalIdLabel=id -internalNameLabel=verfahrensname -selectMatchingIdsSql=SELECT id, verfahrensname FROM verfahren.planverfahren WHERE planaktiv = true AND lower(verfahrensname) LIKE lower(?) ORDER BY verfahrensname ASC -selectAllIdsSql=SELECT id, verfahrensname FROM verfahren.planverfahren WHERE planaktiv = true ORDER BY verfahrensname ASC +#workspaceReloadAction=ALL # unused since 8.0 - only PLANWERKWMS is supported and applied if workspace reloader configuration is available # links to detailed information about conformity of the semantic validation linkSemanticConformity_XPLAN_40=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%204.0.2/Konformit%C3%A4tsbedingungen%20Xplanung%204.0.2.pdf @@ -107,7 +99,7 @@ planWerkWmsGetMapLayers_LP_Plan= planWerkWmsGetMapStyles_LP_Plan= planWerkWmsGetMapLayers_SO_Plan= planWerkWmsGetMapStyles_SO_Plan= -# width and Height used in GetMap request (default: 750) +# width and height used in GetMap request (default: 750) planWerkWmsGetMapWidth= planWerkWmsGetMapHeight= # capabilities URL of the CSW the dataset metadata should be requested from, never null if feature is enabled diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/XPlanManagerTest.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/XPlanManagerTest.java index c76242f261..a3911781f5 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/XPlanManagerTest.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/XPlanManagerTest.java @@ -32,30 +32,24 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; -import java.nio.file.Path; import java.util.List; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.configuration.SortConfiguration; -import de.latlon.xplan.manager.configuration.ConfigurationException; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.web.shared.PlanStatus; import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; import de.latlon.xplan.manager.web.shared.Rechtsstand; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.XPlanRasterEvaluator; -import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; +import de.latlon.xplanbox.core.raster.evaluation.MapserverRasterEvaluation; +import de.latlon.xplanbox.core.raster.evaluation.RasterEvaluation; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import org.deegree.commons.utils.Pair; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import org.springframework.context.ApplicationEventPublisher; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> @@ -124,40 +118,14 @@ public class XPlanManagerTest { XPlanDao xPlanDao = mock(XPlanDao.class); XPlanArchiveCreator archiveCreator = new XPlanArchiveCreator(); ManagerConfiguration managerConfiguration = mockManagerConfig(); - RasterEvaluation rasterEvaluation = createRasterEvaluation(managerConfiguration); + RasterEvaluation rasterEvaluation = new MapserverRasterEvaluation("EPSG:25832"); XPlanRasterEvaluator xPlanRasterEvaluator = new XPlanRasterEvaluator(rasterEvaluation); - RasterStorage rasterStorage = createRasterStorage(dataDirectory.toPath(), rasterEvaluation); - RasterConfigManager rasterConfigManager = createRasterConfigManager(); - ApplicationEventPublisher applicationEventPublisher = createApplicationEventPublisher(); - XPlanRasterManager xPlanRasterManager = new XPlanRasterManager(rasterStorage, rasterConfigManager, - applicationEventPublisher); - return new XPlanManager(xPlanDao, archiveCreator, managerConfiguration, null, xPlanRasterEvaluator, - xPlanRasterManager, null, null, null, null, null); - } - - private ApplicationEventPublisher createApplicationEventPublisher() { - return mock(ApplicationEventPublisher.class); - } - - private RasterConfigManager createRasterConfigManager() { - // TODO turn into autowired field - return new MapserverRasterStorageContext().rasterConfigManager(); - } - - private RasterStorage createRasterStorage(Path dataDir, RasterEvaluation rasterEvaluation) - throws ConfigurationException { - // TODO turn into autowired field - return new MapserverRasterStorageContext().rasterStorage(dataDir, rasterEvaluation); - } - - private RasterEvaluation createRasterEvaluation(ManagerConfiguration managerConfiguration) { - // TODO turn into autowired field - return new MapserverRasterStorageContext().rasterEvaluation(managerConfiguration); + return new XPlanManager(xPlanDao, archiveCreator, managerConfiguration, null, xPlanRasterEvaluator, null, null, + null, null); } private ManagerConfiguration mockManagerConfig() { ManagerConfiguration mockedConfiguration = mock(ManagerConfiguration.class); - when(mockedConfiguration.getRasterConfigurationCrs()).thenReturn(CONFIGURED_CRS); when(mockedConfiguration.getSortConfiguration()).thenReturn(new SortConfiguration()); return mockedConfiguration; } diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/config/CoreTestContext.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/config/CoreTestContext.java deleted file mode 100644 index 4b4f0b9a5e..0000000000 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/config/CoreTestContext.java +++ /dev/null @@ -1,65 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.config; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import de.latlon.xplan.commons.configuration.SortConfiguration; -import de.latlon.xplan.manager.configuration.ConfigurationException; -import de.latlon.xplan.manager.configuration.ManagerConfiguration; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper; -import de.latlon.xplan.manager.workspace.WorkspaceException; -import org.deegree.commons.config.DeegreeWorkspace; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - -@Configuration -public class CoreTestContext { - - @Bean - @Primary - public ManagerConfiguration managerConfiguration() { - ManagerConfiguration mockedConfiguration = mock(ManagerConfiguration.class); - when(mockedConfiguration.getRasterConfigurationCrs()).thenReturn("EPSG:25832"); - when(mockedConfiguration.getSortConfiguration()).thenReturn(new SortConfiguration()); - return mockedConfiguration; - } - - @Bean - @Primary - public WmsWorkspaceWrapper wmsWorkspaceWrapper(ManagerConfiguration managerConfiguration) - throws WorkspaceException, IOException, ConfigurationException { - DeegreeWorkspace deegreeWorkspace = mock(DeegreeWorkspace.class); - DeegreeWorkspaceWrapper wmsWorkspace = mock(DeegreeWorkspaceWrapper.class); - when(wmsWorkspace.getWorkspaceInstance()).thenReturn(deegreeWorkspace); - Path tempWorkspaceDir = Files.createTempDirectory("xplan-manager-core"); - when(deegreeWorkspace.getLocation()).thenReturn(tempWorkspaceDir.toFile()); - return new WmsWorkspaceWrapper(managerConfiguration, wmsWorkspace.getWorkspaceInstance()); - } - -} diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/configuration/ManagerConfigurationTest.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/configuration/ManagerConfigurationTest.java index d2b0233777..cc8ba4e22a 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/configuration/ManagerConfigurationTest.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/configuration/ManagerConfigurationTest.java @@ -20,15 +20,6 @@ */ package de.latlon.xplan.manager.configuration; -import de.latlon.xplan.commons.configuration.PropertiesLoader; -import de.latlon.xplan.commons.configuration.SemanticConformityLinkConfiguration; -import de.latlon.xplan.commons.configuration.SortConfiguration; -import de.latlon.xplan.manager.web.shared.ConfigurationException; -import de.latlon.xplan.manager.workspace.WorkspaceReloaderConfiguration; -import org.junit.Test; - -import java.util.Properties; - import static de.latlon.xplan.commons.XPlanType.BP_Plan; import static de.latlon.xplan.commons.XPlanVersion.XPLAN_50; import static de.latlon.xplan.commons.XPlanVersion.XPLAN_51; @@ -45,21 +36,21 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.Properties; + +import de.latlon.xplan.commons.configuration.PropertiesLoader; +import de.latlon.xplan.commons.configuration.SemanticConformityLinkConfiguration; +import de.latlon.xplan.commons.configuration.SortConfiguration; +import de.latlon.xplan.manager.web.shared.ConfigurationException; +import de.latlon.xplan.manager.workspace.WorkspaceReloaderConfiguration; +import org.junit.Test; + /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @version $Revision: $, $Date: $ */ public class ManagerConfigurationTest { - @Test - public void testGetRasterConfigurationCrs() throws Exception { - ManagerConfiguration managerConfiguration = new ManagerConfiguration(mockPropertiesLoader()); - - String rasterConfigurationCrs = managerConfiguration.getRasterConfigurationCrs(); - - assertThat(rasterConfigurationCrs, is("epsg:4326")); - } - @Test public void testGetSortConfiguration() throws Exception { ManagerConfiguration managerConfiguration = new ManagerConfiguration(mockPropertiesLoader()); diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/document/s3/S3DocumentStorageIT.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/document/s3/S3DocumentStorageIT.java index 498a1d7f98..46cc08216a 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/document/s3/S3DocumentStorageIT.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/document/s3/S3DocumentStorageIT.java @@ -20,12 +20,22 @@ */ package de.latlon.xplan.manager.document.s3; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.List; + import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; -import de.latlon.xplan.manager.document.s3.config.AmazonS3DocumentStorageContext; +import de.latlon.xplan.commons.s3.StorageException; +import de.latlon.xplan.manager.document.config.AmazonS3DocumentStorageContext; import de.latlon.xplan.manager.storage.StorageEvent; import de.latlon.xplan.manager.storage.s3.config.AmazonS3TestContext; -import de.latlon.xplan.commons.s3.StorageException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,16 +44,6 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collections; -import java.util.List; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - /** * ATTENTION: Executing this test class can run up the bill for the AWS account * configured! Ensure that the S3 client is using a free account or is substituted by a @@ -57,7 +57,7 @@ import static org.mockito.Mockito.verify; */ @RunWith(SpringRunner.class) @ContextConfiguration(classes = { AmazonS3DocumentStorageContext.class, AmazonS3TestContext.class }) -@ActiveProfiles({ "s3doc", "mock" }) +@ActiveProfiles({ "mock" }) @TestPropertySource("classpath:s3Mock.properties") public class S3DocumentStorageIT { diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/S3StorageTestManual.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/S3StorageTestManual.java index 453f98b547..ccb5ce3abc 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/S3StorageTestManual.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/S3StorageTestManual.java @@ -54,7 +54,7 @@ import static org.hamcrest.MatcherAssert.assertThat; */ @RunWith(SpringRunner.class) @ContextConfiguration(classes = { AmazonS3TestContext.class, S3StorageTestContext.class }) -@ActiveProfiles({ "s3img", "mock" }) +@ActiveProfiles({ "mock" }) @TestPropertySource("classpath:s3Mock.properties") public class S3StorageTestManual { diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TestContext.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TestContext.java index e989e049de..e475b0a31f 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TestContext.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/storage/s3/config/AmazonS3TestContext.java @@ -69,7 +69,6 @@ public class AmazonS3TestContext { public AmazonS3 s3TestClient(@Value("${xplanbox.s3.region}") String signingRegion, @Value("${xplanbox.s3.bucketName}") String bucketName, @Value("${xplanbox.s3.endpoint.url}") String url) { - System.out.println("region: " + signingRegion + ", bucket: " + bucketName + ", url: " + url); AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration(url + ":" + port, signingRegion); AmazonS3 client = AmazonS3ClientBuilder.standard() diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/ConfigWriterUtilsTest.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/ConfigWriterUtilsTest.java deleted file mode 100644 index 055be34d83..0000000000 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/ConfigWriterUtilsTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig; - -import static de.latlon.xplan.commons.XPlanType.BP_Plan; -import static de.latlon.xplan.manager.web.shared.PlanStatus.FESTGESTELLT; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -import de.latlon.xplan.manager.wmsconfig.raster.config.ConfigWriterUtils; -import org.junit.Test; - -import de.latlon.xplan.manager.web.shared.PlanStatus; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - * @version $Revision: $, $Date: $ - */ -public class ConfigWriterUtilsTest { - - @Test - public void testDetectType() throws Exception { - String type = ConfigWriterUtils.detectType(BP_Plan, null); - - assertThat(type, is("bplan")); - } - - @Test - public void testDetectTypeWithPlanStatusFestgestellt() throws Exception { - String type = ConfigWriterUtils.detectType(BP_Plan, FESTGESTELLT); - - assertThat(type, is("bplan")); - } - - @Test - public void testDetectTypeWithPlanStatusInAufstellung() throws Exception { - String type = ConfigWriterUtils.detectType(BP_Plan, PlanStatus.IN_AUFSTELLUNG); - - assertThat(type, is("bplanpre")); - } - -} diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManagerTestManual.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManagerTestManual.java deleted file mode 100644 index 7234eecb83..0000000000 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/config/WorkspaceRasterLayerManagerTestManual.java +++ /dev/null @@ -1,131 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.wmsconfig.raster.config; - -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorkspace; -import static java.nio.file.Files.copy; -import static java.nio.file.Files.createDirectory; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; - -import org.deegree.commons.config.DeegreeWorkspace; -import org.deegree.commons.utils.DoublePair; -import org.deegree.layer.persistence.LayerStore; -import org.deegree.layer.persistence.LayerStoreProvider; -import org.deegree.layer.persistence.tile.TileLayer; -import org.deegree.workspace.Workspace; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - * @version $Revision: $, $Date: $ - */ -public class WorkspaceRasterLayerManagerTestManual { - - private static final String SERVICES = "services"; - - private static final String LAYERS = "layers"; - - private static final String THEMES = "themes"; - - private static final String DATA = "data"; - - public static final String TIFF_FILE = "dem30_geotiff_tiled_epsg4326.tiff"; - - public static final String RASTER_ID = "rasterId"; - - @ClassRule - public final static TemporaryFolder tempFolder = new TemporaryFolder(); - - private static File workspaceDirectory; - - @BeforeClass - public static void setupFakedWorkspace() throws IOException { - workspaceDirectory = tempFolder.newFolder("xplan-wms-workspace"); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspaceDirectory.getParentFile().toString()); - } - - @Test - public void testCreateRasterConfigurationsWithGeotiffTilestore() throws Exception { - WorkspaceRasterLayerManager workspaceRasterLayerManager = new WorkspaceRasterLayerManager(workspaceDirectory, - "EPSG:4326"); - double minScaleDenominator = 10; - double maxScaleDenominator = 1500; - workspaceRasterLayerManager.createRasterConfigurations(RASTER_ID, TIFF_FILE, minScaleDenominator, - maxScaleDenominator); - - DeegreeWorkspace workspace = instantiateWorkspace(workspaceDirectory.getName()); - Workspace newWorkspace = workspace.getNewWorkspace(); - newWorkspace.initAll(); - LayerStore layerStoreMap = newWorkspace.getResource(LayerStoreProvider.class, RASTER_ID); - - assertThat(layerStoreMap, is(notNullValue())); - TileLayer tileLayer = (TileLayer) layerStoreMap.get(RASTER_ID); - DoublePair scaleDenominators = tileLayer.getMetadata().getScaleDenominators(); - assertThat(scaleDenominators.first, is(minScaleDenominator)); - assertThat(scaleDenominators.second, is(maxScaleDenominator)); - } - - @Test - public void testCreateRasterConfigurations_LayerWithDefaultScaleDenominators() throws Exception { - WorkspaceRasterLayerManager workspaceRasterLayerManager = new WorkspaceRasterLayerManager(workspaceDirectory, - "EPSG:4326"); - workspaceRasterLayerManager.createRasterConfigurations(RASTER_ID, TIFF_FILE, Double.NaN, Double.NaN); - - DeegreeWorkspace workspace = instantiateWorkspace(workspaceDirectory.getName()); - Workspace newWorkspace = workspace.getNewWorkspace(); - newWorkspace.initAll(); - LayerStore layerStoreMap = newWorkspace.getResource(LayerStoreProvider.class, RASTER_ID); - - assertThat(layerStoreMap, is(notNullValue())); - TileLayer tileLayer = (TileLayer) layerStoreMap.get(RASTER_ID); - DoublePair scaleDenominators = tileLayer.getMetadata().getScaleDenominators(); - assertThat(scaleDenominators.first, is(Double.NEGATIVE_INFINITY)); - assertThat(scaleDenominators.second, is(Double.POSITIVE_INFINITY)); - } - - private Path createTmpWorkspace() throws IOException { - Path workspaceDirectory = Files.createTempDirectory("WorkspaceRasterLayerManagerIT_"); - createDirectory(workspaceDirectory.resolve(THEMES)); - createDirectory(workspaceDirectory.resolve(LAYERS)); - createDirectory(workspaceDirectory.resolve(SERVICES)); - Path dataPath = createDirectory(workspaceDirectory.resolve(DATA)); - copyFile(TIFF_FILE, dataPath); - return workspaceDirectory; - } - - private void copyFile(String resourceName, Path dataPath) throws IOException { - InputStream resourceAsStream = getClass().getResourceAsStream("../evaluation/" + resourceName); - Path targetFile = dataPath.resolve(resourceName); - copy(resourceAsStream, targetFile); - } - -} diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorageTestManual.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorageTestManual.java index fb0fb651cb..09d679f862 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorageTestManual.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorageTestManual.java @@ -58,7 +58,7 @@ import static org.mockito.Mockito.verify; */ @RunWith(SpringRunner.class) @ContextConfiguration(classes = { AmazonS3RasterStorageContext.class, AmazonS3TestContext.class }) -@ActiveProfiles({ "s3img", "mock" }) +@ActiveProfiles({ "mock" }) @TestPropertySource("classpath:s3Mock.properties") public class S3RasterStorageTestManual { diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapperTest.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapperTest.java deleted file mode 100644 index 0a148d0b26..0000000000 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/DeegreeWorkspaceWrapperTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/*- - * #%L - * xplan-core-manager - XPlan Manager Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.manager.workspace; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import org.deegree.commons.config.DeegreeWorkspace; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> - */ -public class DeegreeWorkspaceWrapperTest { - - private static final String VAR_WORKSPACE_ROOT = "DEEGREE_WORKSPACE_ROOT"; - - private static String oldWorkspaceRoot; - - private File workspaceDirectory; - - private String workspaceName; - - @BeforeClass - public static void storeWorkspaceProperty() throws IOException { - oldWorkspaceRoot = System.getProperty(VAR_WORKSPACE_ROOT); - } - - @AfterClass - public static void resetWorkspaceRoot() { - if (oldWorkspaceRoot != null) - System.setProperty(VAR_WORKSPACE_ROOT, oldWorkspaceRoot); - else - System.getProperties().remove(VAR_WORKSPACE_ROOT); - } - - @Before - public void createTestWorkspaceFrame() throws IOException { - Path workspaceRoot = createWorkspaceRoot(); - Path workspaceDir = createTmpWorkspace(workspaceRoot); - - workspaceName = workspaceDir.getFileName().toString(); - workspaceDirectory = workspaceDir.toFile(); - - System.setProperty(VAR_WORKSPACE_ROOT, workspaceRoot.toFile().getAbsolutePath()); - } - - @Test - public void testGetWorkspaceInstanceByDirectory() throws Exception { - DeegreeWorkspace workspace = new DeegreeWorkspaceWrapper(workspaceDirectory).getWorkspaceInstance(); - - assertThat(workspace, is(notNullValue())); - } - - @Test - public void testGetWorkspaceInstanceByName() throws Exception { - DeegreeWorkspace workspace = new DeegreeWorkspaceWrapper(workspaceName).getWorkspaceInstance(); - - assertThat(workspace, is(notNullValue())); - } - - @Test - public void testGetWorkspaceInstanceByNameAndDirectory() throws Exception { - DeegreeWorkspace workspace = new DeegreeWorkspaceWrapper(workspaceName, workspaceDirectory) - .getWorkspaceInstance(); - - assertThat(workspace, is(notNullValue())); - } - - @Test(expected = IllegalArgumentException.class) - public void testDeegreeWorkspaceWrapperStringWithNullWorkspaceName() throws Exception { - String workspaceName = null; - new DeegreeWorkspaceWrapper(workspaceName); - } - - @Test(expected = IllegalArgumentException.class) - public void testDeegreeWorkspaceWrapperStringWithNullWorkspaceDir() throws Exception { - File workspaceDir = null; - new DeegreeWorkspaceWrapper(workspaceDir); - } - - @Test(expected = IllegalArgumentException.class) - public void testDeegreeWorkspaceWrapperStringWithNullWorkspaceNameAndDir() throws Exception { - new DeegreeWorkspaceWrapper(null, null); - } - - private Path createWorkspaceRoot() throws IOException { - return Files.createTempDirectory("deegreeWorkspace-ROOT-WMS-WorkspaceManager-IT"); - } - - private Path createTmpWorkspace(Path workspaceRootDirectory) throws IOException { - Path tmpWorkspaceDirectory = Files.createTempDirectory(workspaceRootDirectory, - "deegreeWorkspace-WMS-WorkspaceManager-IT"); - Files.createDirectory(tmpWorkspaceDirectory.resolve("themes")); - Files.createDirectory(tmpWorkspaceDirectory.resolve("layers")); - Files.createDirectory(tmpWorkspaceDirectory.resolve("services")); - return tmpWorkspaceDirectory; - } - -} diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderTest.java b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderTest.java index dc8e2d26b7..610ffb01a0 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderTest.java +++ b/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/workspace/WorkspaceReloaderTest.java @@ -20,16 +20,15 @@ */ package de.latlon.xplan.manager.workspace; -import org.junit.Test; - -import java.util.List; - -import static de.latlon.xplan.manager.workspace.WorkspaceReloadAction.ALL; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import java.util.List; + +import org.junit.Test; + /** * Tests for {@link WorkspaceReloader}. * @@ -51,7 +50,7 @@ public class WorkspaceReloaderTest { public void testReloadWorkspaceWithInvalidUrlShouldFail() { List<String> urlList = singletonList("http://invalid-url"); WorkspaceReloaderConfiguration configuration = new WorkspaceReloaderConfiguration(urlList, null, "user", - "password", ALL); + "password"); WorkspaceReloader workspaceReloader = new WorkspaceReloader(configuration); boolean isReloadSuccessful = workspaceReloader.reloadWorkspace(1); @@ -62,7 +61,7 @@ public class WorkspaceReloaderTest { public void testReloadWorkspaceWithTwoInvalidUrlsShouldFail() { List<String> urlList = asList("http://invalid-url1", "http://invalid-url2"); WorkspaceReloaderConfiguration configuration = new WorkspaceReloaderConfiguration(urlList, null, "user", - "password", ALL); + "password"); WorkspaceReloader workspaceReloader = new WorkspaceReloader(configuration); boolean isReloadSuccessful = workspaceReloader.reloadWorkspace(1); @@ -73,7 +72,7 @@ public class WorkspaceReloaderTest { public void testReloadWorkspaceWithThreeInvalidUrlsShouldFail() { List<String> urlList = asList("http://invalid-url1", "http://invalid-url2", "http://invalid-url3"); WorkspaceReloaderConfiguration configuration = new WorkspaceReloaderConfiguration(urlList, "apiKey", "user", - "password", ALL); + "password"); WorkspaceReloader workspaceReloader = new WorkspaceReloader(configuration); boolean isReloadSuccessful = workspaceReloader.reloadWorkspace(1); diff --git a/xplan-core/xplan-core-raster/pom.xml b/xplan-core/xplan-core-raster/pom.xml new file mode 100644 index 0000000000..f6350102b1 --- /dev/null +++ b/xplan-core/xplan-core-raster/pom.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>xplan-core-raster</artifactId> + + <parent> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-core</artifactId> + <version>8.0-SNAPSHOT</version> + </parent> + + <dependencies> + <dependency> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-core-commons</artifactId> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + </dependencies> + +</project> \ No newline at end of file diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/RasterType.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/RasterType.java similarity index 91% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/RasterType.java rename to xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/RasterType.java index e96e01d36f..bbd5424c14 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/RasterType.java +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/RasterType.java @@ -1,4 +1,4 @@ -package de.latlon.xplan.manager.wmsconfig.raster; +package de.latlon.xplanbox.core.raster; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/RasterUtils.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/RasterUtils.java similarity index 83% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/RasterUtils.java rename to xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/RasterUtils.java index f81fca7a16..6af0ae0561 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/RasterUtils.java +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/RasterUtils.java @@ -18,15 +18,15 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.wmsconfig.raster; +package de.latlon.xplanbox.core.raster; + +import java.io.IOException; +import java.io.InputStream; import de.latlon.xplan.commons.archive.ArchiveEntry; import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; import org.apache.tika.Tika; -import java.io.IOException; -import java.io.InputStream; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -35,6 +35,17 @@ public class RasterUtils { private RasterUtils() { } + /** + * @param archive to search for the entry + * @param scanFile name of the entry, never <code>null</code> + * @return <code>true</code> if the XPlanArchive contains the entry, + * <code>false</code> otherwise + */ + public static boolean hasRasterplanZipEntry(XPlanArchiveContentAccess archive, String scanFile) { + ArchiveEntry entry = archive.getEntry(scanFile); + return entry != null; + } + /** * @param archive to search for the entry * @param scanFile name of the entry, never <code>null</code> diff --git a/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/config/RasterEvaluationContext.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/config/RasterEvaluationContext.java new file mode 100644 index 0000000000..e6de3c9b32 --- /dev/null +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/config/RasterEvaluationContext.java @@ -0,0 +1,24 @@ +package de.latlon.xplanbox.core.raster.config; + +import de.latlon.xplanbox.core.raster.evaluation.MapserverRasterEvaluation; +import de.latlon.xplanbox.core.raster.evaluation.RasterEvaluation; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + */ +public class RasterEvaluationContext { + + @Bean + public XPlanRasterEvaluator xPlanRasterEvaluator(RasterEvaluation rasterEvaluation) { + return new XPlanRasterEvaluator(rasterEvaluation); + } + + @Bean + public RasterEvaluation mapserverRasterEvaluation(@Value("${xplanbox.services.crs}") String defaultCrs) { + return new MapserverRasterEvaluation(defaultCrs); + } + +} diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/MapserverRasterEvaluation.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/MapserverRasterEvaluation.java similarity index 93% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/MapserverRasterEvaluation.java rename to xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/MapserverRasterEvaluation.java index 1e820ea504..32a4d7201e 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/MapserverRasterEvaluation.java +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/MapserverRasterEvaluation.java @@ -18,20 +18,9 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.wmsconfig.raster.evaluation; +package de.latlon.xplanbox.core.raster.evaluation; -import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; -import de.latlon.xplan.commons.reference.ExternalReference; -import de.latlon.xplan.commons.util.XmlUtils; -import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; -import de.latlon.xplan.manager.wmsconfig.raster.RasterType; -import it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader; -import org.deegree.commons.xml.stax.XMLStreamUtils; -import org.deegree.coverage.raster.io.imageio.geotiff.GeoTiffIIOMetadataAdapter; -import org.deegree.cs.configuration.wkt.WKTParser; -import org.deegree.cs.coordinatesystems.CRS; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static javax.imageio.ImageIO.getImageReadersBySuffix; import javax.imageio.ImageIO; import javax.imageio.ImageReader; @@ -44,8 +33,19 @@ import java.io.IOException; import java.io.InputStream; import java.util.Iterator; -import static de.latlon.xplan.manager.wmsconfig.raster.RasterUtils.detectRasterType; -import static javax.imageio.ImageIO.getImageReadersBySuffix; +import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; +import de.latlon.xplan.commons.reference.ExternalReference; +import de.latlon.xplan.commons.util.XmlUtils; +import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; +import de.latlon.xplanbox.core.raster.RasterType; +import de.latlon.xplanbox.core.raster.RasterUtils; +import it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader; +import org.deegree.commons.xml.stax.XMLStreamUtils; +import org.deegree.coverage.raster.io.imageio.geotiff.GeoTiffIIOMetadataAdapter; +import org.deegree.cs.configuration.wkt.WKTParser; +import org.deegree.cs.coordinatesystems.CRS; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Evaluates rasterfiles to be stored in mapserver rastersource. @@ -66,11 +66,12 @@ public class MapserverRasterEvaluation implements RasterEvaluation { } @Override - public RasterEvaluationResult evaluate(XPlanArchiveContentAccess archive, ExternalReference rasterplanZipEntry) - throws IOException { + public RasterEvaluationResult evaluate(XPlanArchiveContentAccess archive, ExternalReference rasterplanZipEntry) { String referenzEntryName = rasterplanZipEntry.getReferenzUrl(); + if (!RasterUtils.hasRasterplanZipEntry(archive, referenzEntryName)) + return new RasterEvaluationResult(referenzEntryName, configuredRasterCrs, false); - RasterType rasterType = detectRasterType(archive, referenzEntryName); + RasterType rasterType = RasterUtils.detectRasterType(archive, referenzEntryName); LOG.info("Rasterdatei mit Namen {} und Typ {} gefunden.", referenzEntryName, rasterType); switch (rasterType) { case TIFF: diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/RasterEvaluation.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/RasterEvaluation.java similarity index 95% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/RasterEvaluation.java rename to xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/RasterEvaluation.java index 69bfacf3c2..13b3757f41 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/RasterEvaluation.java +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/RasterEvaluation.java @@ -18,7 +18,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.wmsconfig.raster.evaluation; +package de.latlon.xplanbox.core.raster.evaluation; import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; import de.latlon.xplan.commons.reference.ExternalReference; diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/XPlanRasterEvaluator.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluator.java similarity index 95% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/XPlanRasterEvaluator.java rename to xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluator.java index dd97c3dc26..ea16cf4c3c 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/XPlanRasterEvaluator.java +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluator.java @@ -18,18 +18,17 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.wmsconfig.raster.evaluation; +package de.latlon.xplanbox.core.raster.evaluation; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.commons.reference.ExternalReference; import de.latlon.xplan.commons.reference.ExternalReferenceInfo; import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; -import de.latlon.xplan.manager.workspace.WorkspaceException; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> @@ -40,7 +39,6 @@ public class XPlanRasterEvaluator { /** * @param rasterEvaluation used to evaluate the raster, never <code>null</code> - * @throws WorkspaceException */ public XPlanRasterEvaluator(RasterEvaluation rasterEvaluation) { this.rasterEvaluation = rasterEvaluation; diff --git a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/XPlanRasterEvaluatorTest.java b/xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java similarity index 74% rename from xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/XPlanRasterEvaluatorTest.java rename to xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java index c938ea4a4d..9463252535 100644 --- a/xplan-core/xplan-core-manager/src/test/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/XPlanRasterEvaluatorTest.java +++ b/xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java @@ -18,7 +18,17 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.wmsconfig.raster.evaluation; +package de.latlon.xplanbox.core.raster.evaluation; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import de.latlon.xplan.commons.archive.ArchiveEntry; import de.latlon.xplan.commons.archive.XPlanArchive; @@ -27,19 +37,8 @@ import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.commons.reference.ExternalReference; import de.latlon.xplan.commons.reference.ExternalReferenceInfo; import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; -import org.junit.Ignore; -import org.junit.Test; - -import java.io.InputStream; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> @@ -63,7 +62,7 @@ public class XPlanRasterEvaluatorTest { private static final String TXT_NAME = "XPlanRasterManagerTest.txt"; - @Ignore("media type detected for dem30_geotiff_tiled.tiff by Apache Tika is application/octet-stream, which is not supported in XPlanArchives") + @Disabled("media type detected for dem30_geotiff_tiled.tiff by Apache Tika is application/octet-stream, which is not supported in XPlanArchives") @Test public void testEvaluateRasterdataMapserverWithTiffEpsg4269() throws Exception { XPlanRasterEvaluator xPlanRasterManager = new XPlanRasterEvaluator( @@ -74,10 +73,10 @@ public class XPlanRasterEvaluatorTest { planFeatureCollection); RasterEvaluationResult result = results.get(0); - assertThat(result.getRasterName(), is(TIFF_EPSG4269_NAME)); - assertThat(result.isCrsSet(), is(true)); - assertThat(result.isConfiguredCrs(), is(false)); - assertThat(result.isSupportedImageFormat(), is(true)); + assertThat(result.getRasterName()).isEqualTo(TIFF_EPSG4269_NAME); + assertThat(result.isCrsSet()).isTrue(); + assertThat(result.isConfiguredCrs()).isFalse(); + assertThat(result.isSupportedImageFormat()).isTrue(); } @Test @@ -90,10 +89,10 @@ public class XPlanRasterEvaluatorTest { planFeatureCollection); RasterEvaluationResult result = results.get(0); - assertThat(result.getRasterName(), is(TIFF_EPSG4326_NAME)); - assertThat(result.isCrsSet(), is(true)); - assertThat(result.isConfiguredCrs(), is(true)); - assertThat(result.isSupportedImageFormat(), is(true)); + assertThat(result.getRasterName()).isEqualTo(TIFF_EPSG4326_NAME); + assertThat(result.isCrsSet()).isTrue(); + assertThat(result.isConfiguredCrs()).isTrue(); + assertThat(result.isSupportedImageFormat()).isTrue(); } @Test @@ -106,10 +105,10 @@ public class XPlanRasterEvaluatorTest { planFeatureCollection); RasterEvaluationResult result = results.get(0); - assertThat(result.getRasterName(), is(TIFF_NO_CRS_NAME)); - assertThat(result.isCrsSet(), is(false)); - assertThat(result.isConfiguredCrs(), is(false)); - assertThat(result.isSupportedImageFormat(), is(true)); + assertThat(result.getRasterName()).isEqualTo(TIFF_NO_CRS_NAME); + assertThat(result.isCrsSet()).isFalse(); + assertThat(result.isConfiguredCrs()).isFalse(); + assertThat(result.isSupportedImageFormat()).isTrue(); } @Test @@ -121,10 +120,10 @@ public class XPlanRasterEvaluatorTest { planFeatureCollection); RasterEvaluationResult result = results.get(0); - assertThat(result.getRasterName(), is(TXT_NAME)); - assertThat(result.isCrsSet(), is(false)); - assertThat(result.isConfiguredCrs(), is(false)); - assertThat(result.isSupportedImageFormat(), is(false)); + assertThat(result.getRasterName()).isEqualTo(TXT_NAME); + assertThat(result.isCrsSet()).isFalse(); + assertThat(result.isConfiguredCrs()).isFalse(); + assertThat(result.isSupportedImageFormat()).isFalse(); } @Test @@ -137,42 +136,10 @@ public class XPlanRasterEvaluatorTest { List<RasterEvaluationResult> results = xPlanRasterManager.evaluateRasterdata(archive, planFeatureCollection); RasterEvaluationResult result = results.get(0); - assertThat(result.getRasterName(), is(PNG_EPSG25833_NAME)); - assertThat(result.isCrsSet(), is(true)); - assertThat(result.isConfiguredCrs(), is(false)); - assertThat(result.isSupportedImageFormat(), is(true)); - } - - @Test - public void testEvaluateRasterdataGeotiffWithTiff() throws Exception { - XPlanRasterEvaluator xPlanRasterManager = new XPlanRasterEvaluator(new GeotiffRasterEvaluation(CONFIGURED_CRS)); - XPlanArchive xPlanArchive = mockArchive(TIFF_NO_CRS_NAME, "dem30.tiff"); - XPlanFeatureCollection planFeatureCollection = mockFeatureCollection(TIFF_NO_CRS_NAME); - List<RasterEvaluationResult> results = xPlanRasterManager.evaluateRasterdata(xPlanArchive, - planFeatureCollection); - - RasterEvaluationResult result = results.get(0); - - assertThat(result.getRasterName(), is(TIFF_NO_CRS_NAME)); - assertThat(result.isCrsSet(), is(false)); - assertThat(result.isConfiguredCrs(), is(true)); - assertThat(result.isSupportedImageFormat(), is(true)); - } - - @Test - public void testEvaluateRasterdataGeotiffWithPng() throws Exception { - XPlanRasterEvaluator xPlanRasterManager = new XPlanRasterEvaluator(new GeotiffRasterEvaluation(CONFIGURED_CRS)); - XPlanArchive xPlanArchive = mockArchive(PNG_NO_CRS_NAME, "png_nocrs.png"); - XPlanFeatureCollection planFeatureCollection = mockFeatureCollection(PNG_NO_CRS_NAME); - List<RasterEvaluationResult> results = xPlanRasterManager.evaluateRasterdata(xPlanArchive, - planFeatureCollection); - - RasterEvaluationResult result = results.get(0); - - assertThat(result.getRasterName(), is(PNG_NO_CRS_NAME)); - assertThat(result.isCrsSet(), is(false)); - assertThat(result.isConfiguredCrs(), is(true)); - assertThat(result.isSupportedImageFormat(), is(false)); + assertThat(result.getRasterName()).isEqualTo(PNG_EPSG25833_NAME); + assertThat(result.isCrsSet()).isTrue(); + assertThat(result.isConfiguredCrs()).isFalse(); + assertThat(result.isSupportedImageFormat()).isTrue(); } private XPlanArchive mockArchive(String entryName, String resourceName) { diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30.tiff b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30.tiff similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30.tiff rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30.tiff diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30.wld b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30.wld similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30.wld rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30.wld diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30_geotiff_tiled.tiff b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30_geotiff_tiled.tiff similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30_geotiff_tiled.tiff rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30_geotiff_tiled.tiff diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30_geotiff_tiled_epsg4326.tiff b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30_geotiff_tiled_epsg4326.tiff similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/dem30_geotiff_tiled_epsg4326.tiff rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/dem30_geotiff_tiled_epsg4326.tiff diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/png_25833.png b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/png_25833.png similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/png_25833.png rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/png_25833.png diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/png_25833.png.aux.xml b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/png_25833.png.aux.xml similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/png_25833.png.aux.xml rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/png_25833.png.aux.xml diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/png_nocrs.png b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/png_nocrs.png similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/png_nocrs.png rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/png_nocrs.png diff --git a/xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/test.txt b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/test.txt similarity index 100% rename from xplan-core/xplan-core-manager/src/test/resources/de/latlon/xplan/manager/wmsconfig/raster/evaluation/test.txt rename to xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/test.txt diff --git a/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportRequestedEvent.java b/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportRequestedEvent.java index 637d48b013..276e21ce1a 100644 --- a/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportRequestedEvent.java +++ b/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportRequestedEvent.java @@ -37,7 +37,7 @@ public class ImportRequestedEvent extends XPlanboxInternalTaskEvent { public enum EXTERNAL_REFERENCES_RESULT { - AVAILABLE, MISSING + AVAILABLE_AND_VALID, MISSING_OR_INVALID } @@ -55,12 +55,14 @@ public class ImportRequestedEvent extends XPlanboxInternalTaskEvent { private EXTERNAL_REFERENCES_RESULT externalReferencesResult; + private boolean supportsGetPlanByIdAsZip; + public ImportRequestedEvent() { } public ImportRequestedEvent(String uuid, String validationName, String internalId, String planStatus, ValidationRequestedEvent.OriginFile originFile, VALIDATION_RESULT isValid, - EXTERNAL_REFERENCES_RESULT externalReferencesResult) { + EXTERNAL_REFERENCES_RESULT externalReferencesResult, boolean supportsGetPlanByIdAsZip) { this.uuid = uuid; this.validationName = validationName; this.internalId = internalId; @@ -68,6 +70,7 @@ public class ImportRequestedEvent extends XPlanboxInternalTaskEvent { this.originFile = originFile; this.validationResult = isValid; this.externalReferencesResult = externalReferencesResult; + this.supportsGetPlanByIdAsZip = supportsGetPlanByIdAsZip; } public String getUuid() { @@ -98,4 +101,8 @@ public class ImportRequestedEvent extends XPlanboxInternalTaskEvent { return externalReferencesResult; } + public boolean isSupportsGetPlanByIdAsZip() { + return supportsGetPlanByIdAsZip; + } + } diff --git a/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEvent.java b/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEvent.java index 49a7cdbec0..922c5b3bb2 100644 --- a/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEvent.java +++ b/xplan-core/xplan-core-validator-events/src/main/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEvent.java @@ -33,14 +33,17 @@ public class ImportValidationRequestedEvent extends ValidationRequestedEvent { private String planStatus; + private boolean supportsGetPlanByIdAsZip; + public ImportValidationRequestedEvent() { } public ImportValidationRequestedEvent(String uuid, ValidationSettings settings, String xFileName, String internalId, - String planStatus, MediaType requestedMediaType, OriginFile originFile) { + String planStatus, MediaType requestedMediaType, OriginFile originFile, boolean supportsGetPlanByIdAsZip) { super(uuid, settings, xFileName, requestedMediaType, originFile); this.internalId = internalId; this.planStatus = planStatus; + this.supportsGetPlanByIdAsZip = supportsGetPlanByIdAsZip; } public String getPlanStatus() { @@ -51,4 +54,8 @@ public class ImportValidationRequestedEvent extends ValidationRequestedEvent { return internalId; } + public boolean isSupportsGetPlanByIdAsZip() { + return supportsGetPlanByIdAsZip; + } + } diff --git a/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportRequestedEventTest.java b/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportRequestedEventTest.java index 4242dee6cc..a306754357 100644 --- a/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportRequestedEventTest.java +++ b/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportRequestedEventTest.java @@ -21,7 +21,7 @@ package de.latlon.core.validator.events.planimport; import static de.latlon.core.validator.events.ValidationRequestedEvent.OriginFile.GML; -import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE; +import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE_AND_VALID; import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.VALIDATION_RESULT.VALID; import static org.assertj.core.api.Assertions.assertThat; @@ -37,7 +37,7 @@ class ImportRequestedEventTest { @Test void jsonSerializeAndDeserialize() throws Exception { ImportRequestedEvent event = new ImportRequestedEvent("my-uuid", "validationName", "internalId", "planStatus", - GML, VALID, AVAILABLE); + GML, VALID, AVAILABLE_AND_VALID, true); ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(event); diff --git a/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEventTest.java b/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEventTest.java index 6c457a041d..af456eacb2 100644 --- a/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEventTest.java +++ b/xplan-core/xplan-core-validator-events/src/test/java/de/latlon/core/validator/events/planimport/ImportValidationRequestedEventTest.java @@ -48,7 +48,7 @@ class ImportValidationRequestedEventTest { ValidationType.SEMANTIC); ValidationSettings settings = new ValidationSettings("validationName", validationTypes, extendedOptions); ImportValidationRequestedEvent event = new ImportValidationRequestedEvent(UUID.randomUUID().toString(), - settings, "xFileName", "internalId", "FESTGESTELLT", PDF, GML); + settings, "xFileName", "internalId", "FESTGESTELLT", PDF, GML, true); ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(event); diff --git a/xplan-core/xplan-core-validator/pom.xml b/xplan-core/xplan-core-validator/pom.xml index be320f268c..deae6cf53b 100644 --- a/xplan-core/xplan-core-validator/pom.xml +++ b/xplan-core/xplan-core-validator/pom.xml @@ -49,10 +49,6 @@ <groupId>de.latlon</groupId> <artifactId>deegree-featurestore-memory</artifactId> </dependency> - <dependency> - <groupId>de.latlon</groupId> - <artifactId>deegree-tilestore-geotiff</artifactId> - </dependency> <dependency> <groupId>de.latlon</groupId> <artifactId>deegree-layers-tile</artifactId> @@ -170,6 +166,10 @@ <artifactId>regeln</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-core-raster</artifactId> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/XPlanValidator.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/XPlanValidator.java index 607cbeaa69..10837f8c73 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/XPlanValidator.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/XPlanValidator.java @@ -20,6 +20,22 @@ */ package de.latlon.xplan.validator; +import static de.latlon.xplan.validator.report.ReportUtils.SkipCode.SYNTAX_ERRORS; +import static de.latlon.xplan.validator.web.shared.ValidationType.GEOMETRIC; +import static de.latlon.xplan.validator.web.shared.ValidationType.SEMANTIC; + +import javax.xml.stream.XMLStreamException; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + import de.latlon.xplan.commons.XPlanSchemas; import de.latlon.xplan.commons.archive.SemanticValidableXPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchive; @@ -27,6 +43,7 @@ import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; import de.latlon.xplan.commons.util.FeatureCollectionUtils; +import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; import de.latlon.xplan.validator.geometric.GeometricValidator; import de.latlon.xplan.validator.geometric.report.GeometricValidatorResult; import de.latlon.xplan.validator.reference.ExternalReferenceEvaluator; @@ -47,27 +64,12 @@ import de.latlon.xplan.validator.syntactic.report.SyntacticValidatorResult; import de.latlon.xplan.validator.web.shared.ValidationOption; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplan.validator.web.shared.ValidationType; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import org.deegree.cs.exceptions.UnknownCRSException; import org.deegree.feature.types.AppSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.stream.XMLStreamException; -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static de.latlon.xplan.validator.report.ReportUtils.SkipCode.SYNTAX_ERRORS; -import static de.latlon.xplan.validator.web.shared.ValidationType.GEOMETRIC; -import static de.latlon.xplan.validator.web.shared.ValidationType.SEMANTIC; - /** * Performs semantic, geometric and syntactic validation for the CLI * @@ -89,16 +91,19 @@ public class XPlanValidator { private final XPlanArchiveCreator archiveCreator = new XPlanArchiveCreator(); + private Optional<XPlanRasterEvaluator> xPlanRasterEvaluator; + private XPlanSchemas schemas; public XPlanValidator(GeometricValidator geometricValidator, SyntacticValidator syntacticValidator, SemanticValidator semanticValidator, List<SemanticProfileValidator> semanticProfileValidators, - ReportArchiveGenerator reportArchiveGenerator) { + ReportArchiveGenerator reportArchiveGenerator, Optional<XPlanRasterEvaluator> xPlanRasterEvaluator) { this.geometricValidator = geometricValidator; this.syntacticValidator = syntacticValidator; this.semanticValidator = semanticValidator; this.semanticProfileValidators = semanticProfileValidators; this.reportArchiveGenerator = reportArchiveGenerator; + this.xPlanRasterEvaluator = xPlanRasterEvaluator; this.schemas = XPlanSchemas.getInstance(); } @@ -185,7 +190,7 @@ public class XPlanValidator { report.setXPlanType(archive.getType()); List<ValidationType> validationType = getValidationType(validationSettings); - validateSyntactic(archive, report); + validateSyntactic(archive, report, validationSettings); if (validationType.contains(GEOMETRIC)) validateGeometric(archive, voOptions, report); if (validationType.contains(SEMANTIC)) @@ -195,14 +200,15 @@ public class XPlanValidator { return report; } - private void validateSyntactic(XPlanArchive archive, ValidatorReport report) { + private void validateSyntactic(XPlanArchive archive, ValidatorReport report, + ValidationSettings validationSettings) { SyntacticValidatorResult syntacticallyResult = validateSyntacticallyAndWriteResult(archive); report.setSyntacticValidatorResult(syntacticallyResult); if (!syntacticallyResult.isValid()) { report.setExternalReferenceReport(new ExternalReferenceReport(SYNTAX_ERRORS)); } else { - parseReferencesAndPlanNames(archive, report); + parseReferencesAndPlanNames(archive, report, validationSettings); } } @@ -303,7 +309,8 @@ public class XPlanValidator { return validatorResult; } - private void parseReferencesAndPlanNames(XPlanArchive archive, ValidatorReport report) { + private void parseReferencesAndPlanNames(XPlanArchive archive, ValidatorReport report, + ValidationSettings validationSettings) { try { XPlanFeatureCollection featureCollection = XPlanGmlParserBuilder.newBuilder() .withSkipResolveReferences(true) @@ -312,8 +319,9 @@ public class XPlanValidator { report.setBBoxIn4326(featureCollection.getBboxIn4326()); parseAndAddExternalReferences(report, featureCollection, archive); parseAndAddPlanNames(report, featureCollection); + parseAndAddRasterEvaluation(report, featureCollection, archive, validationSettings); } - catch (XMLStreamException | UnknownCRSException e) { + catch (XMLStreamException | UnknownCRSException | IOException e) { LOG.error("Plan could not be parsed. Reason {}", e.getMessage(), e); } } @@ -332,6 +340,15 @@ public class XPlanValidator { report.setPlanNames(planNames); } + private void parseAndAddRasterEvaluation(ValidatorReport report, XPlanFeatureCollection featureCollection, + XPlanArchive archive, ValidationSettings validationSettings) throws IOException { + if (xPlanRasterEvaluator.isPresent() && !validationSettings.isSkipRasterEvaluation()) { + List<RasterEvaluationResult> rasterEvaluationResults = xPlanRasterEvaluator.get() + .evaluateRasterdata(archive, featureCollection); + report.setRasterEvaluationResults(rasterEvaluationResults); + } + } + private void log(GeometricValidatorResult validatorResult) { LOG.info("Ergebnisse der geometrischen Validierung:"); diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/ValidatorReport.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/ValidatorReport.java index 0464620ba2..8d95d2e1bd 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/ValidatorReport.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/ValidatorReport.java @@ -20,19 +20,20 @@ */ package de.latlon.xplan.validator.report; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; +import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; import de.latlon.xplan.validator.geometric.report.GeometricValidatorResult; import de.latlon.xplan.validator.report.reference.ExternalReferenceReport; import de.latlon.xplan.validator.semantic.report.SemanticValidatorResult; import de.latlon.xplan.validator.syntactic.report.SyntacticValidatorResult; import org.deegree.geometry.Envelope; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; - /** * A validation report contains all ValidationResults of one Validation * @@ -65,6 +66,8 @@ public class ValidatorReport { private Envelope bboxIn4326; + private List<RasterEvaluationResult> rasterEvaluationResults = new ArrayList<>(); + public ValidatorReport() { } @@ -299,4 +302,12 @@ public class ValidatorReport { return this.hasMultipleXPlanElements; } + public void setRasterEvaluationResults(List<RasterEvaluationResult> rasterEvaluationResults) { + this.rasterEvaluationResults = rasterEvaluationResults; + } + + public List<RasterEvaluationResult> getRasterEvaluationResults() { + return rasterEvaluationResults; + } + } diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/ValidatorWmsManager.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/ValidatorWmsManager.java index 47b8bd51b4..a820535132 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/ValidatorWmsManager.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/ValidatorWmsManager.java @@ -20,6 +20,8 @@ */ package de.latlon.xplan.validator.wms; +import static de.latlon.xplan.commons.XPlanVersion.XPLAN_SYN; + import de.latlon.xplan.commons.XPlanSchemas; import de.latlon.xplan.commons.feature.FeatureCollectionManipulator; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; @@ -30,8 +32,6 @@ import org.deegree.feature.types.AppSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static de.latlon.xplan.commons.XPlanVersion.XPLAN_SYN; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version @@ -49,9 +49,8 @@ public class ValidatorWmsManager { /** * @param synthesizer used to synthesize the XPlan GML - * @param planStorage path to the workspace - * xplan-webservices-validator-wms-memory-workspace, the directory data is created if - * required + * @param planStorage path to the workspace xplan-webservices-validator-wms-workspace, + * the directory data is created if required */ public ValidatorWmsManager(XPlanSynthesizer synthesizer, PlanStorage planStorage) { this.synthesizer = synthesizer; diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsContext.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsContext.java index f82978dab8..32c0534405 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsContext.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsContext.java @@ -37,7 +37,7 @@ import org.springframework.context.annotation.Import; * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version */ @Configuration -@Import({ ValidatorWmsWorkspaceContext.class, ValidatorWmsSqlContext.class }) +@Import({ ValidatorWmsSqlContext.class }) @Deprecated public class ValidatorWmsContext { diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsSqlContext.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsSqlContext.java index 521b4f8979..91b8b84371 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsSqlContext.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsSqlContext.java @@ -38,9 +38,9 @@ import org.springframework.context.annotation.Profile; * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version */ @Configuration -@Profile("validatorwmssql") @Import({ JobContext.class, SqlJobContext.class }) @Deprecated +@Profile("!test") public class ValidatorWmsSqlContext { private static final Logger LOG = LoggerFactory.getLogger(ValidatorWmsSqlContext.class); diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java deleted file mode 100644 index 25660c6467..0000000000 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java +++ /dev/null @@ -1,63 +0,0 @@ -/*- - * #%L - * xplan-core-validator - XPlan Validator Core Komponente - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplan.validator.wms.config; - -import de.latlon.xplan.validator.wms.storage.PlanStorage; -import de.latlon.xplan.validator.wms.storage.WorkspacePlanStorage; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.deegree.commons.config.DeegreeWorkspace; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version - */ -@Configuration -@Profile("validatorwmsmemory") -@Deprecated -public class ValidatorWmsWorkspaceContext { - - private static final Logger LOG = LoggerFactory.getLogger(ValidatorWmsWorkspaceContext.class); - - private static final String XPLAN_GML_WMS_WORKSPACE = "xplan-webservices-validator-wms-memory-workspace"; - - @Bean - @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN") - public PlanStorage planStorage() { - try { - Path workspaceLocation = Paths.get(DeegreeWorkspace.getWorkspaceRoot()).resolve(XPLAN_GML_WMS_WORKSPACE); - return new WorkspacePlanStorage(workspaceLocation); - } - catch (Exception e) { - LOG.error("Could not initialise WorkspacePlanStorage. Reason: {}. MapPreview will not be available.", - e.getMessage(), e); - } - return null; - } - -} diff --git a/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/XPlanValidatorTest.java b/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/XPlanValidatorTest.java index 7d9e35eccc..54c06c2c32 100644 --- a/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/XPlanValidatorTest.java +++ b/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/XPlanValidatorTest.java @@ -20,6 +20,33 @@ */ package de.latlon.xplan.validator; +import static de.latlon.xplan.validator.web.shared.ValidationType.GEOMETRIC; +import static de.latlon.xplan.validator.web.shared.ValidationType.SEMANTIC; +import static de.latlon.xplan.validator.web.shared.ValidationType.SYNTACTIC; +import static java.util.Collections.singletonList; +import static org.deegree.cs.persistence.CRSManager.lookup; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.feature.XPlanGmlParser; import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; @@ -47,32 +74,6 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static de.latlon.xplan.validator.web.shared.ValidationType.GEOMETRIC; -import static de.latlon.xplan.validator.web.shared.ValidationType.SEMANTIC; -import static de.latlon.xplan.validator.web.shared.ValidationType.SYNTACTIC; -import static java.util.Collections.singletonList; -import static org.deegree.cs.persistence.CRSManager.lookup; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; - /** * Tests for <link>XPlanValidator</link> * @@ -311,7 +312,7 @@ public class XPlanValidatorTest { SyntacticValidator synVal, List<SemanticProfileValidator> profileValidators, ValidationSettings settings) throws IOException, ValidatorException, ReportGenerationException { XPlanValidator validator = new XPlanValidator(geomVal, synVal, semVal, profileValidators, - mock(ReportArchiveGenerator.class)); + mock(ReportArchiveGenerator.class), Optional.empty()); return validator.validate(settings, planToValidate, "archiveName"); } diff --git a/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/wms/storage/SqlPlanStorageTest.java b/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/wms/storage/SqlPlanStorageTest.java index 2423063da0..3cc26ed794 100644 --- a/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/wms/storage/SqlPlanStorageTest.java +++ b/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/wms/storage/SqlPlanStorageTest.java @@ -20,6 +20,16 @@ */ package de.latlon.xplan.validator.wms.storage; +import static de.latlon.xplan.commons.XPlanVersion.XPLAN_SYN; + +import org.deegree.feature.FeatureCollection; +import org.deegree.feature.types.AppSchema; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + import de.latlon.xplan.commons.XPlanSchemas; import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; @@ -30,23 +40,12 @@ import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer; import de.latlon.xplan.manager.synthesizer.rules.SynRulesAccessor; import de.latlon.xplan.validator.wms.config.TestContext; import de.latlon.xplan.validator.wms.config.ValidatorWmsSqlContext; -import org.deegree.feature.FeatureCollection; -import org.deegree.feature.types.AppSchema; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; - -import static de.latlon.xplan.commons.XPlanVersion.XPLAN_SYN; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @RunWith(SpringRunner.class) @ContextConfiguration(classes = { ValidatorWmsSqlContext.class, TestContext.class }) -@ActiveProfiles("validatorwmssql") public class SqlPlanStorageTest { @Autowired diff --git a/xplan-database/xplan-database-scripts/Dockerfile b/xplan-database/xplan-database-scripts/Dockerfile index 65dd5fda65..6de9173b32 100644 --- a/xplan-database/xplan-database-scripts/Dockerfile +++ b/xplan-database/xplan-database-scripts/Dockerfile @@ -38,6 +38,7 @@ RUN apt-get update -y \ USER liquibase COPY target/classes /liquibase/changelog +COPY target/xplan-database-scripts-*.jar /liquibase/classpath/xplan-database-scripts.jar ADD docker-entrypoint.sh checkDbUpToDate.sh /xplanbox/ ENTRYPOINT [ "/xplanbox/docker-entrypoint.sh" ] \ No newline at end of file diff --git a/xplan-database/xplan-database-scripts/docker-entrypoint.sh b/xplan-database/xplan-database-scripts/docker-entrypoint.sh index 5386847213..c5f89d6f88 100755 --- a/xplan-database/xplan-database-scripts/docker-entrypoint.sh +++ b/xplan-database/xplan-database-scripts/docker-entrypoint.sh @@ -2,5 +2,5 @@ set -e exec /liquibase/docker-entrypoint.sh --search-path=changelog --changelog-file=changelog_xplandb.yaml --url=$XPLAN_JDBC_URL --username=$XPLAN_DB_INIT_USER --password=$XPLAN_DB_INIT_PASSWORD \ - update -Dxplan.db.user=$XPLAN_DB_USER -Dxplan.srid=$XPLAN_SERVICES_DEFAULT_CRS_SRID - + --classpath=changelog:/liquibase/classpath/xplan-database-scripts.jar \ + update -Dxplan.db.user=$XPLAN_DB_USER -Dxplan.srid=$XPLAN_SERVICES_DEFAULT_CRS_SRID \ No newline at end of file diff --git a/xplan-database/xplan-database-scripts/pom.xml b/xplan-database/xplan-database-scripts/pom.xml index 7a2f1fbb20..333edf8fb6 100644 --- a/xplan-database/xplan-database-scripts/pom.xml +++ b/xplan-database/xplan-database-scripts/pom.xml @@ -1,934 +1,934 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <artifactId>xplan-database-scripts</artifactId> - <packaging>jar</packaging> - <description>Liquibase Changelogs zum Aufsetzen/Aktualisieren der Datenhaltung.</description> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>xplan-database-scripts</artifactId> + <packaging>jar</packaging> + <description>Liquibase Changelogs zum Aufsetzen/Aktualisieren der Datenhaltung.</description> - <parent> - <groupId>de.latlon.product.xplanbox</groupId> - <artifactId>xplan-database</artifactId> - <version>8.0-SNAPSHOT</version> - </parent> + <parent> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-database</artifactId> + <version>8.0-SNAPSHOT</version> + </parent> - <build> - <resources> - <resource> - <directory>src/main/resources</directory> - <filtering>false</filtering> - <excludes> - <exclude>changelog_xplandb.yaml</exclude> - </excludes> - </resource> - <resource> - <directory>src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>changelog_xplandb.yaml</include> - </includes> - </resource> - </resources> - <pluginManagement> - <plugins> - <plugin> - <groupId>org.liquibase</groupId> - <artifactId>liquibase-maven-plugin</artifactId> - <version>${liquibase.version}</version> - <dependencies> - <dependency> - <groupId>org.liquibase.ext</groupId> - <artifactId>liquibase-postgresql</artifactId> - <version>${liquibase.version}</version> - </dependency> - <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <version>${postgresql.version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </pluginManagement> + <build> + <resources> + <resource> + <directory>src/main/resources</directory> + <filtering>false</filtering> + <excludes> + <exclude>changelog_xplandb.yaml</exclude> + </excludes> + </resource> + <resource> + <directory>src/main/resources</directory> + <filtering>true</filtering> + <includes> + <include>changelog_xplandb.yaml</include> + </includes> + </resource> + </resources> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.liquibase</groupId> + <artifactId>liquibase-maven-plugin</artifactId> + <version>${liquibase.version}</version> + <dependencies> + <dependency> + <groupId>org.liquibase.ext</groupId> + <artifactId>liquibase-postgresql</artifactId> + <version>${liquibase.version}</version> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <version>${postgresql.version}</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <id>sql-update-scripts</id> + <goals> + <goal>single</goal> + </goals> + <phase>package</phase> + <configuration> + <descriptors> + <descriptor>${project.basedir}/src/main/assembly/assembly.xml</descriptor> + </descriptors> + <appendAssemblyId>false</appendAssemblyId> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <phase>initialize</phase> + <configuration> + <target> + <mkdir dir="${project.build.directory}/generated-resources/"/> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + <dependencies> + <dependency> + <groupId>org.liquibase</groupId> + <artifactId>liquibase-core</artifactId> + </dependency> + <dependency> + <groupId>org.liquibase.ext</groupId> + <artifactId>liquibase-postgresql</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + <profiles> + <profile> + <id>generate-changelog</id> + <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-assembly-plugin</artifactId> - <executions> - <execution> - <id>sql-update-scripts</id> - <goals> - <goal>single</goal> - </goals> - <configuration> - <descriptors> - <descriptor>${project.basedir}/src/main/assembly/assembly.xml</descriptor> - </descriptors> - <appendAssemblyId>false</appendAssemblyId> - </configuration> - <phase>package</phase> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-antrun-plugin</artifactId> - <executions> - <execution> - <phase>initialize</phase> - <configuration> - <target> - <mkdir dir="${project.build.directory}/generated-resources/" /> - </target> - </configuration> - <goals> - <goal>run</goal> - </goals> - </execution> - </executions> - </plugin> + <plugin> + <groupId>org.liquibase</groupId> + <artifactId>liquibase-maven-plugin</artifactId> + <configuration> + <propertyFile>${project.basedir}/src/main/resources/liquibase.properties</propertyFile> + <outputDefaultSchema>true</outputDefaultSchema> + <diffTypes>tables,views,columns,indexes,primarykeys,foreignkeys,uniqueconstraints,data</diffTypes> + <verbose>true</verbose> + </configuration> + <executions> + <execution> + <id>xplanmgr</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplanmgr</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplanmgr.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplansyn</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplansyn</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansyn.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplansynpre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplansynpre</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynpre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplansynarchive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplansynarchive</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynarchive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan60</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan60</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan60.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan60pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan60pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan60pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan60archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan60archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan60archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan54</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan54</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan54.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan54pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan54pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan54pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan54archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan54archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan54archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan53</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan53</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan53.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan53pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan53pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan53pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan53archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan53archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan53archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan52</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan52</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan52.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan52pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan52pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan52pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan52archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan52archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan52archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan51</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan51</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan51.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan51pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan51pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan51pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan51archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan51archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan51archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan50</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan50</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan50.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan50pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan50pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan50pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan50archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan50archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan50archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan41</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan41</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan41.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan41pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan41pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan41pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan41archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan41archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan41archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan40</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan40</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan40.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan40pre</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan40pre</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan40pre.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan40archive</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>xplan40archive</defaultSchemaName> + <outputChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan40archive.yaml + </outputChangeLogFile> + </configuration> + </execution> + <execution> + <id>inspireplu</id> + <phase>generate-resources</phase> + <goals> + <goal>generateChangeLog</goal> + </goals> + <configuration> + <defaultSchemaName>inspireplu</defaultSchemaName> + <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_inspireplu.yaml + </outputChangeLogFile> + </configuration> + </execution> + </executions> + </plugin> </plugins> - </build> - <dependencies> - <dependency> - <groupId>org.liquibase.ext</groupId> - <artifactId>liquibase-postgresql</artifactId> - <scope>test</scope> - </dependency> - <dependency> + </build> + </profile> + <profile> + <id>diff</id> + <build> + <plugins> + <plugin> <groupId>org.liquibase</groupId> - <artifactId>liquibase-core</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> - </dependencies> - <profiles> - <profile> - <id>generate-changelog</id> - <build> - <plugins> - <plugin> - <groupId>org.liquibase</groupId> - <artifactId>liquibase-maven-plugin</artifactId> - <configuration> - <propertyFile>${project.basedir}/src/main/resources/liquibase.properties</propertyFile> - <outputDefaultSchema>true</outputDefaultSchema> - <diffTypes>tables,views,columns,indexes,primarykeys,foreignkeys,uniqueconstraints,data</diffTypes> - <verbose>true</verbose> - </configuration> - <executions> - <execution> - <id>xplanmgr</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplanmgr</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplanmgr.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplansyn</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplansyn</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansyn.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplansynpre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplansynpre</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynpre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplansynarchive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplansynarchive</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynarchive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan60</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan60</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan60.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan60pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan60pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan60pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan60archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan60archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan60archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan54</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan54</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan54.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan54pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan54pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan54pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan54archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan54archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan54archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan53</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan53</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan53.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan53pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan53pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan53pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan53archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan53archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan53archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan52</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan52</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan52.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan52pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan52pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan52pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan52archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan52archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan52archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan51</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan51</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan51.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan51pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan51pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan51pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan51archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan51archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan51archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan50</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan50</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan50.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan50pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan50pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan50pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan50archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan50archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan50archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan41</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan41</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan41.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan41pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan41pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan41pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan41archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan41archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan41archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan40</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan40</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan40.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan40pre</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan40pre</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan40pre.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan40archive</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>xplan40archive</defaultSchemaName> - <outputChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan40archive.yaml - </outputChangeLogFile> - </configuration> - </execution> - <execution> - <id>inspireplu</id> - <phase>generate-resources</phase> - <goals> - <goal>generateChangeLog</goal> - </goals> - <configuration> - <defaultSchemaName>inspireplu</defaultSchemaName> - <outputChangeLogFile>${project.basedir}/target/generated-resources/changelog_inspireplu.yaml - </outputChangeLogFile> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - <profile> - <id>diff</id> - <build> - <plugins> - <plugin> - <groupId>org.liquibase</groupId> - <artifactId>liquibase-maven-plugin</artifactId> - <configuration> - <searchPath>${project.basedir}/src/main/resources</searchPath> - <propertyFile>liquibase-diff.properties</propertyFile> - <diffTypes>tables,views,columns,indexes,primarykeys,foreignkeys,uniqueconstraints,data</diffTypes> - <verbose>true</verbose> - <changeLogFile>${project.basedir}/src/main/resources/changelog_xplandb.yaml</changeLogFile> - <diffIncludeSchema>true</diffIncludeSchema> - </configuration> - <executions> - <execution> - <id>xplanmgr</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplanmgr</defaultSchemaName> - <referenceDefaultSchemaName>xplanmgr</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplanmgr.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplanvalidator</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplanvalidator</defaultSchemaName> - <referenceDefaultSchemaName>xplanvalidator</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplanvalidator.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplansyn</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplansyn</defaultSchemaName> - <referenceDefaultSchemaName>xplansyn</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansyn.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplansynpre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplansynpre</defaultSchemaName> - <referenceDefaultSchemaName>xplansynpre</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynpre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplansynarchive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplansynarchive</defaultSchemaName> - <referenceDefaultSchemaName>xplansynarchive</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynarchive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan60</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan60</defaultSchemaName> - <referenceDefaultSchemaName>xplan60</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan60.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan60pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan60pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan60pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan60pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan60archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan60archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan60archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan60archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan54</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan54</defaultSchemaName> - <referenceDefaultSchemaName>xplan54</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan54.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan54pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan54pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan54pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan54pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan54archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan54archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan54archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan54archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan53</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan53</defaultSchemaName> - <referenceDefaultSchemaName>xplan53</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan53.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan53pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan53pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan53pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan53pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan53archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan53archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan53archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan53archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan52</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan52</defaultSchemaName> - <referenceDefaultSchemaName>xplan52</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan52.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan52pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan52pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan52pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan52pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan52archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan52archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan52archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan52archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan51</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan51</defaultSchemaName> - <referenceDefaultSchemaName>xplan51</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan51.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan51pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan51pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan51pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan51pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan51archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan51archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan51archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan51archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan50</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan50</defaultSchemaName> - <referenceDefaultSchemaName>xplan50</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan50.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan50pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan50pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan50pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan50pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan50archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan50archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan50archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan50archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan41</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan41</defaultSchemaName> - <referenceDefaultSchemaName>xplan41</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan41.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan41pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan41pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan41pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan41pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan41archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan41archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan41archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan41archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan40</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan40</defaultSchemaName> - <referenceDefaultSchemaName>xplan40</referenceDefaultSchemaName> - <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan40.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan40pre</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan40pre</defaultSchemaName> - <referenceDefaultSchemaName>xplan40pre</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan40pre.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>xplan40archive</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>xplan40archive</defaultSchemaName> - <referenceDefaultSchemaName>xplan40archive</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_xplan40archive.yaml - </diffChangeLogFile> - </configuration> - </execution> - <execution> - <id>inspireplu</id> - <phase>generate-resources</phase> - <goals> - <goal>diff</goal> - </goals> - <configuration> - <defaultSchemaName>inspireplu</defaultSchemaName> - <referenceDefaultSchemaName>inspireplu</referenceDefaultSchemaName> - <diffChangeLogFile> - ${project.basedir}/target/generated-resources/changelog_inspireplu.yaml - </diffChangeLogFile> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - <profile> - <id>docker</id> - <properties> - <docker-image.skip>false</docker-image.skip> - <docker-image.name>xplan-db-updater</docker-image.name> - <docker-contextTarFile.expectedSizeInMat10pct>17</docker-contextTarFile.expectedSizeInMat10pct> - </properties> - </profile> - </profiles> + <artifactId>liquibase-maven-plugin</artifactId> + <configuration> + <searchPath>${project.basedir}/src/main/resources</searchPath> + <propertyFile>liquibase-diff.properties</propertyFile> + <diffTypes>tables,views,columns,indexes,primarykeys,foreignkeys,uniqueconstraints,data</diffTypes> + <verbose>true</verbose> + <changeLogFile>${project.basedir}/src/main/resources/changelog_xplandb.yaml</changeLogFile> + <diffIncludeSchema>true</diffIncludeSchema> + </configuration> + <executions> + <execution> + <id>xplanmgr</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplanmgr</defaultSchemaName> + <referenceDefaultSchemaName>xplanmgr</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplanmgr.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplanvalidator</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplanvalidator</defaultSchemaName> + <referenceDefaultSchemaName>xplanvalidator</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplanvalidator.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplansyn</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplansyn</defaultSchemaName> + <referenceDefaultSchemaName>xplansyn</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansyn.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplansynpre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplansynpre</defaultSchemaName> + <referenceDefaultSchemaName>xplansynpre</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynpre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplansynarchive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplansynarchive</defaultSchemaName> + <referenceDefaultSchemaName>xplansynarchive</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplansynarchive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan60</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan60</defaultSchemaName> + <referenceDefaultSchemaName>xplan60</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan60.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan60pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan60pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan60pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan60pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan60archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan60archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan60archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan60archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan54</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan54</defaultSchemaName> + <referenceDefaultSchemaName>xplan54</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan54.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan54pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan54pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan54pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan54pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan54archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan54archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan54archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan54archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan53</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan53</defaultSchemaName> + <referenceDefaultSchemaName>xplan53</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan53.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan53pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan53pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan53pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan53pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan53archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan53archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan53archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan53archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan52</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan52</defaultSchemaName> + <referenceDefaultSchemaName>xplan52</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan52.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan52pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan52pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan52pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan52pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan52archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan52archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan52archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan52archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan51</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan51</defaultSchemaName> + <referenceDefaultSchemaName>xplan51</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan51.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan51pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan51pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan51pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan51pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan51archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan51archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan51archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan51archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan50</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan50</defaultSchemaName> + <referenceDefaultSchemaName>xplan50</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan50.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan50pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan50pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan50pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan50pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan50archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan50archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan50archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan50archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan41</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan41</defaultSchemaName> + <referenceDefaultSchemaName>xplan41</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan41.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan41pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan41pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan41pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan41pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan41archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan41archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan41archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan41archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan40</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan40</defaultSchemaName> + <referenceDefaultSchemaName>xplan40</referenceDefaultSchemaName> + <diffChangeLogFile>${project.basedir}/target/generated-resources/changelog_xplan40.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan40pre</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan40pre</defaultSchemaName> + <referenceDefaultSchemaName>xplan40pre</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan40pre.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>xplan40archive</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>xplan40archive</defaultSchemaName> + <referenceDefaultSchemaName>xplan40archive</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_xplan40archive.yaml + </diffChangeLogFile> + </configuration> + </execution> + <execution> + <id>inspireplu</id> + <phase>generate-resources</phase> + <goals> + <goal>diff</goal> + </goals> + <configuration> + <defaultSchemaName>inspireplu</defaultSchemaName> + <referenceDefaultSchemaName>inspireplu</referenceDefaultSchemaName> + <diffChangeLogFile> + ${project.basedir}/target/generated-resources/changelog_inspireplu.yaml + </diffChangeLogFile> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>docker</id> + <properties> + <docker-image.skip>false</docker-image.skip> + <docker-image.name>xplan-db-updater</docker-image.name> + <docker-contextTarFile.expectedSizeInMat10pct>17</docker-contextTarFile.expectedSizeInMat10pct> + </properties> + </profile> + </profiles> </project> \ No newline at end of file diff --git a/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParser.java b/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParser.java new file mode 100644 index 0000000000..edc76ca2ca --- /dev/null +++ b/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParser.java @@ -0,0 +1,120 @@ +package de.latlon.xplanbox.database.scripts.custom.v80; + +import static javax.xml.stream.XMLStreamConstants.END_DOCUMENT; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.NoSuchElementException; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + */ +public class GemeindeParser { + + public record Gemeinde(String ags, String rs, String gemeindeName, String ortsteilName) { + } + + public static List<Gemeinde> parseGemeinden(InputStream is) throws IOException, XMLStreamException { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + XMLStreamReader reader = null; + try { + reader = inputFactory.createXMLStreamReader(is); + return readDocument(reader); + } + finally { + if (reader != null) { + reader.close(); + } + } + } + + private static List<Gemeinde> readDocument(XMLStreamReader reader) throws XMLStreamException { + List<Gemeinde> gemeinden = new ArrayList<>(); + boolean foundPlan = moveReaderToFirstMatch(reader, "(BP|FP|LP|SO)_Plan"); + if (foundPlan) { + while (moveReaderToFirstMatch(reader, "gemeinde")) { + gemeinden.add(readGemeinde(reader)); + } + } + return gemeinden; + } + + private static Gemeinde readGemeinde(XMLStreamReader reader) throws XMLStreamException { + moveReaderToFirstMatch(reader, "XP_Gemeinde"); + String ags = null; + String rs = null; + String gemeindeName = null; + String ortsteilName = null; + while (reader.hasNext()) { + int eventType = reader.next(); + switch (eventType) { + case XMLStreamReader.START_ELEMENT: + String elementName = reader.getLocalName(); + if (elementName.equals("ags")) + ags = readCharacters(reader); + else if (elementName.equals("rs")) + rs = readCharacters(reader); + else if (elementName.equals("gemeindeName")) + gemeindeName = readCharacters(reader); + else if (elementName.equals("ortsteilName")) + ortsteilName = readCharacters(reader); + break; + case XMLStreamReader.END_ELEMENT: + // end of XP_Gemeinde, return parsed gemeinde + return new Gemeinde(ags, rs, gemeindeName, ortsteilName); + } + } + return null; + } + + private static String readCharacters(XMLStreamReader reader) throws XMLStreamException { + StringBuilder result = new StringBuilder(); + while (reader.hasNext()) { + int eventType = reader.next(); + switch (eventType) { + case XMLStreamReader.CHARACTERS: + case XMLStreamReader.CDATA: + result.append(reader.getText()); + break; + case XMLStreamReader.END_ELEMENT: + return result.toString(); + } + } + return null; + } + + private static boolean moveReaderToFirstMatch(XMLStreamReader reader, String name) throws XMLStreamException { + boolean hasMoreElements = true; + do { + if (reader.isStartElement() && reader.getName().getLocalPart().matches(name)) { + return true; + } + try { + nextElement(reader); + } + catch (NoSuchElementException e) { + // end of file + hasMoreElements = false; + } + + } + while (hasMoreElements); + return false; + } + + private static void nextElement(XMLStreamReader xmlReader) throws XMLStreamException, NoSuchElementException { + xmlReader.next(); + while (xmlReader.getEventType() != END_DOCUMENT && !xmlReader.isStartElement() && !xmlReader.isEndElement()) { + xmlReader.next(); + } + if (xmlReader.getEventType() == END_DOCUMENT) { + throw new NoSuchElementException(); + } + } + +} diff --git a/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGemeindenCustomChange.java b/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGemeindenCustomChange.java new file mode 100644 index 0000000000..987d9117ef --- /dev/null +++ b/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGemeindenCustomChange.java @@ -0,0 +1,84 @@ +package de.latlon.xplanbox.database.scripts.custom.v80; + +import static de.latlon.xplanbox.database.scripts.custom.v80.GemeindeParser.parseGemeinden; + +import javax.xml.stream.XMLStreamException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +import java.util.zip.GZIPInputStream; + +import liquibase.Scope; +import liquibase.change.custom.CustomTaskChange; +import liquibase.database.Database; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.CustomChangeException; +import liquibase.exception.DatabaseException; +import liquibase.exception.SetupException; +import liquibase.exception.ValidationErrors; +import liquibase.resource.ResourceAccessor; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class UpdateGemeindenCustomChange implements CustomTaskChange { + + @Override + public void execute(Database database) throws CustomChangeException { + JdbcConnection dbConn = (JdbcConnection) database.getConnection(); + String sql = "SELECT plan, data FROM xplanmgr.artefacts WHERE artefacttype = 'XPLANGML'"; + try { + PreparedStatement psSelect = dbConn.prepareStatement(sql); + ResultSet rs = psSelect.executeQuery(); + while (rs.next()) { + int planId = rs.getInt("plan"); + byte[] data = rs.getBytes("data"); + + Scope.getCurrentScope().getLog(getClass()).info("Update plan with id " + planId); + try (ByteArrayInputStream bis = new ByteArrayInputStream(data); + GZIPInputStream is = new GZIPInputStream(bis)) { + List<GemeindeParser.Gemeinde> gemeinden = parseGemeinden(is); + for (GemeindeParser.Gemeinde gemeinde : gemeinden) { + String insertSql = "INSERT INTO xplanmgr.gemeinden (plan,ags,rs,gemeindename,ortsteilname) VALUES (?,?,?,?,?)"; + PreparedStatement psInsert = dbConn.prepareStatement(insertSql); + psInsert.setInt(1, planId); + psInsert.setString(2, gemeinde.ags()); + psInsert.setString(3, gemeinde.rs()); + psInsert.setString(4, gemeinde.gemeindeName()); + psInsert.setString(5, gemeinde.ortsteilName()); + psInsert.executeUpdate(); + } + } + } + + } + catch (SQLException | DatabaseException | IOException | XMLStreamException e) { + throw new CustomChangeException(e); + } + } + + @Override + public String getConfirmationMessage() { + return "Updated gemeinden"; + } + + @Override + public void setUp() throws SetupException { + + } + + @Override + public void setFileOpener(ResourceAccessor resourceAccessor) { + + } + + @Override + public ValidationErrors validate(Database database) { + return new ValidationErrors(); + } + +} diff --git a/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml b/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml index 73c58d3118..6be3e4bc40 100644 --- a/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml +++ b/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml @@ -44,3 +44,39 @@ databaseChangeLog: newDataType: TIMESTAMP WITH TIME ZONE schemaName: xplanmgr tableName: plans + - changeSet: + id: xplanmgr80-003 + author: latlon + changes: + - dropColumn: + columnName: gkz + schemaName: xplanmgr + tableName: plans + - createTable: + columns: + - column: + name: plan + type: INTEGER + - column: + name: ags + type: TEXT + - column: + name: rs + type: TEXT + - column: + name: gemeindename + type: TEXT + - column: + name: ortsteilname + type: TEXT + remarks: Plan gemeinden + schemaName: xplanmgr + tableName: gemeinden + - sql: + sql: GRANT SELECT, INSERT, UPDATE, DELETE ON xplanmgr.gemeinden TO "${xplan.db.user}"; + - changeSet: + id: xplanmgr80-004 + author: latlon + changes: + - customChange: { + "class": "de.latlon.xplanbox.database.scripts.custom.v80.UpdateGemeindenCustomChange" } diff --git a/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParserTest.java b/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParserTest.java new file mode 100644 index 0000000000..30dc8b03f6 --- /dev/null +++ b/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/database/scripts/custom/v80/GemeindeParserTest.java @@ -0,0 +1,35 @@ +package de.latlon.xplanbox.database.scripts.custom.v80; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import javax.xml.stream.XMLStreamException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import org.junit.jupiter.api.Test; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + */ +public class GemeindeParserTest { + + @Test + void verify_parseGemeinde() throws XMLStreamException, IOException { + InputStream is = getClass().getResourceAsStream("/BPlan001_5-2_Gemeinden.gml"); + List<GemeindeParser.Gemeinde> gemeinden = GemeindeParser.parseGemeinden(is); + + assertEquals(2, gemeinden.size()); + + } + + @Test + void verify_parseGemeinden_noGemeindenAvailable() throws XMLStreamException, IOException { + InputStream is = getClass().getResourceAsStream("/BPlan001_5-2_NoGemeinden.gml"); + List<GemeindeParser.Gemeinde> gemeinden = GemeindeParser.parseGemeinden(is); + + assertEquals(0, gemeinden.size()); + + } + +} diff --git a/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/liquibase/LiquibaseConfigurationIT.java b/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/liquibase/LiquibaseConfigurationIT.java index 3586d3df00..0c66ddc01a 100644 --- a/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/liquibase/LiquibaseConfigurationIT.java +++ b/xplan-database/xplan-database-scripts/src/test/java/de/latlon/xplanbox/liquibase/LiquibaseConfigurationIT.java @@ -20,16 +20,9 @@ */ package de.latlon.xplanbox.liquibase; -import liquibase.Liquibase; -import liquibase.Scope; -import liquibase.changelog.RanChangeSet; -import liquibase.database.Database; -import liquibase.database.DatabaseFactory; -import liquibase.database.jvm.JdbcConnection; -import liquibase.exception.ValidationErrors; -import liquibase.resource.ClassLoaderResourceAccessor; -import org.junit.Ignore; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.io.InputStream; @@ -40,14 +33,21 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import liquibase.Liquibase; +import liquibase.Scope; +import liquibase.changelog.RanChangeSet; +import liquibase.database.Database; +import liquibase.database.DatabaseFactory; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.ValidationErrors; +import liquibase.resource.ClassLoaderResourceAccessor; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -@Ignore +@Disabled public class LiquibaseConfigurationIT { /** diff --git a/xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_Gemeinden.gml b/xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_Gemeinden.gml new file mode 100644 index 0000000000..eb7d131162 --- /dev/null +++ b/xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_Gemeinden.gml @@ -0,0 +1,2977 @@ +<?xml version="1.0" encoding="utf-8"?> +<xplan:XPlanAuszug xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" gml:id="Gml_1EE271CF-56BA-4C7B-82BC-C26862404C1A" xsi:schemaLocation="http://www.xplanung.de/xplangml/5/2 http://www.xplanungwiki.de/upload/XPlanGML/5.2/Schema/XPlanung-Operationen.xsd" xmlns:xplan="http://www.xplanung.de/xplangml/5/2"> + <!-- Testplan mit zwei BP_Bereich Objekten und Rasterdaten --> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942410.13</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <gml:featureMember> + <xplan:BP_Plan gml:id="GML_1c23cbae-b6e9-4f21-b9c2-f3fc6df46545"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942410.13</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:name>BPlan001_5-2 Bereiche</xplan:name> + <xplan:beschreibung>Der vorhabenbezogene Bebauungsplan BPlan001_5-2 für das Gebiet südlich Schierenberg, westlich Saseler Straße (Bezirk Wandsbek, Ortsteil 526) wird festgestellt. Das Plangebiet wird wie folgt begrenzt: Schierenberg – Saseler Straße – Südostgrenze des Flurstücks 129, über das Flur-stück 5687, Südgrenzen der Flurstücke 5687 und 5684, Ostgrenzen der Flurstücke 4402 und 4403, über die Flurstücke 4403 und 4401 und Westgrenzen der Flurstücke 4401 und 4400 der Gemarkung Meiendorf.</xplan:beschreibung> + <xplan:technHerstellDatum>2016-07-21</xplan:technHerstellDatum> + <xplan:erstellungsMassstab>1000</xplan:erstellungsMassstab> + <xplan:raeumlicherGeltungsbereich> + <gml:Polygon gml:id="Gml_B44A56A5-756B-4732-A2F4-57356F2A7CD9" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576599.891 5942440.018 576598.756 5942468.151 576611.81 5942468.677 + 576626.513 5942487.073 576625.447 5942487.931 576652.088 5942522.116 + 576656.335 5942527.565 576655.825 5942531.79 576662.68 5942540.274 + 576601.22 5942588.473 576588.349 5942584.209 576416.125 5942527.154 + 576416.434 5942514.7 576419.617 5942443.127 576419.938 5942435.927 + 576421.087 5942410.13 576423.587 5942410.205 576480.297 5942411.883 + 576480.165 5942424.848 576485.589 5942430.139 576505.565 5942430.669 + 576512.841 5942426.038 576516.148 5942426.171 576516.545 5942413.603 + 576593.045 5942416.37 576600.834 5942416.652 576599.891 5942440.018 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:raeumlicherGeltungsbereich> + <xplan:texte xlink:href="#GML_b4003c7b-9bc5-4d29-8de8-ddc80de9f251" /> + <xplan:texte xlink:href="#GML_51a21b00-c38b-4ff7-bc86-766994a242f1" /> + <xplan:texte xlink:href="#GML_c61d212b-e6b2-45c8-8d13-640d1550668e" /> + <xplan:texte xlink:href="#GML_ad4a57ec-d094-4fb7-bf50-96dd5537d474" /> + <xplan:texte xlink:href="#GML_8d149ef7-4b94-40d9-b994-6b222dd4734e" /> + <xplan:texte xlink:href="#GML_abd5458e-92a4-4620-b6ec-944a997c3fcf" /> + <xplan:texte xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:texte xlink:href="#GML_28cf5e05-9279-4205-946b-aad02be217dd" /> + <xplan:texte xlink:href="#GML_78445473-8bfb-4234-bcfa-9675e3c39fe7" /> + <xplan:texte xlink:href="#GML_e54b2640-a9f8-4b60-be2b-11345fb076b4" /> + <xplan:texte xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:texte xlink:href="#GML_0b4c3abf-323c-4369-bba0-fdaf90a05e18" /> + <xplan:texte xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:texte xlink:href="#GML_1ed1108a-2204-47f8-822f-08e3ddc697e2" /> + <xplan:texte xlink:href="#GML_854a644c-3f65-4596-8362-c6eb77cb747d" /> + <xplan:texte xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:texte xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:texte xlink:href="#GML_7c360c93-0ccf-44bd-85cd-3c9c54647cc8" /> + <xplan:texte xlink:href="#GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a" /> + <xplan:texte xlink:href="#GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e" /> + <xplan:texte xlink:href="#GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9" /> + <xplan:texte xlink:href="#GML_b63ca453-1e1e-4f09-b99f-bc4dec515188" /> + <xplan:texte xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:texte xlink:href="#GML_a3c27752-304e-4220-8eed-a2d91f2531d7" /> + <xplan:gemeinde> + <xplan:XP_Gemeinde> + <xplan:ags>02000000</xplan:ags> + <xplan:gemeindeName>Freie und Hansestadt Hamburg</xplan:gemeindeName> + <xplan:ortsteilName>526</xplan:ortsteilName> + </xplan:XP_Gemeinde> + </xplan:gemeinde> + <xplan:gemeinde> + <xplan:XP_Gemeinde> + <xplan:rs>020000001111</xplan:rs> + <xplan:ortsteilName>999</xplan:ortsteilName> + </xplan:XP_Gemeinde> + </xplan:gemeinde> + <xplan:planArt>3000</xplan:planArt> + <xplan:verfahren>1000</xplan:verfahren> + <xplan:rechtsstand>3000</xplan:rechtsstand> + <xplan:rechtsverordnungsDatum>2016-06-21</xplan:rechtsverordnungsDatum> + <xplan:durchfuehrungsVertrag>true</xplan:durchfuehrungsVertrag> + <xplan:versionBauNVOText>Version vom 11.06.2013</xplan:versionBauNVOText> + <xplan:bereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:bereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + </xplan:BP_Plan> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_b4003c7b-9bc5-4d29-8de8-ddc80de9f251"> + <xplan:schluessel>§2 Nr.15</xplan:schluessel> + <xplan:text>Für festgesetzte Einzelbäume sowie auf den Flächen für + die Erhaltung und zum Anpflanzen von Bäumen und + Sträuchern sind bei Abgang gleichwertige Ersatzpflanzungen + vorzunehmen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_51a21b00-c38b-4ff7-bc86-766994a242f1"> + <xplan:schluessel>§2 Nr.14</xplan:schluessel> + <xplan:text>Auf der mit „(E)“ bezeichneten Fläche für die Erhaltung + und zum Anpflanzen von Bäumen und Sträuchern sind + Lücken mit Bäumen und Sträuchern so zu schließen sowie + Wall-Aufsetzarbeiten so durchzuführen, dass der Charakter + und Aufbau eines Knicks erhalten bleibt.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_c61d212b-e6b2-45c8-8d13-640d1550668e"> + <xplan:schluessel>§2 Nr.23</xplan:schluessel> + <xplan:text>Auf der mit „(F)“ bezeichneten Fläche für Maßnahmen + zum Schutz, zur Pflege und zur Entwicklung von Boden, + Natur und Landschaft ist eine mindestens 250 m² große + Hochstaudenflur herzustellen. Die Fläche ist allseitig einzuzäunen + und zu dem mit „MI 1“ bezeichneten Mischgebiet zusätzlich mit einer vorgelagerten, dichtwachsenden + zweireihigen Strauchhecke abzupflanzen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_ad4a57ec-d094-4fb7-bf50-96dd5537d474"> + <xplan:schluessel>§2 Nr.10</xplan:schluessel> + <xplan:text>Einseitig zu den mit „(B)“ gekennzeichneten Gebäudeseiten + ausgerichtete Wohnungen sind unzulässig. Zu den mit + „(C)“ gekennzeichneten Gebäudeseiten ausgerichtete + offene Außenwohnbereiche (zum Beispiel Balkone, Loggien, + Terrassen) sind unzulässig. An den mit „(C)“ gekennzeichneten + Gebäudeseiten sind entweder vor den Aufenthaltsräumen + verglaste Vorbauten wie zum Beispiel Doppelfassaden, + verglaste Loggien, Wintergärten, verglaste + Laubengänge oder in ihrer Wirkung vergleichbare Maßnahmen + vorzusehen oder in den Aufenthaltsräumen durch + geeignete bauliche Schallschutzmaßnahmen wie zum Beispiel + Doppelfassaden, verglaste Vorbauten, besondere + Fensterkonstruktionen oder in ihrer Wirkung vergleichbare + Maßnahmen sicherzustellen, dass durch diese baulichen + Maßnahmen insgesamt eine Schallpegeldifferenz + erreicht wird, die es ermöglicht, dass in Aufenthaltsräumen + ein lnnenraumpegel von 40 dB(A) während der Tagzeit + und 30 dB(A) während der Nachtzeit bei teilgeöffneten + Fenstern nicht überschritten wird.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_8d149ef7-4b94-40d9-b994-6b222dd4734e"> + <xplan:schluessel>§2 Nr.24</xplan:schluessel> + <xplan:text>Auf den mit „(G)“ bezeichneten Flächen für Maßnahmen + zum Schutz, zur Pflege und zur Entwicklung von Boden, + Natur und Landschaft ist jeweils eine dichtwachsende + zweireihige Strauchhecke aus dornenbewehrten Arten + anzupflanzen und auf der Südseite einzuzäunen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_abd5458e-92a4-4620-b6ec-944a997c3fcf"> + <xplan:schluessel>§2 Nr.18</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in dem mit „MI 1“ + bezeichneten Mischgebiet sind Standplätze für Abfallbehälter + außerhalb von Gebäuden mit Sträuchern oder + Hecken einzugrünen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_6c87c405-f456-4a52-ae02-d345333bc7c2"> + <xplan:schluessel>§2 Nr.19</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in dem mit „MI 1“ + bezeichneten Mischgebiet sind die Dachflächen von + Gebäuden und Carports mit einem mindestens 8 cm starken + durchwurzelbaren Substrataufbau zu versehen und + mindestens extensiv zu begrünen. Ausnahmen für erforderliche + befestigte Flächen und anderweitige Nutzungen + können zugelassen werden.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_28cf5e05-9279-4205-946b-aad02be217dd"> + <xplan:schluessel>§2 Nr.20</xplan:schluessel> + <xplan:text>Nicht überbaute Tiefgaragen sind mit einem mindestens + 50 cm starken durchwurzelbaren Substrataufbau zu versehen + und dauerhaft zu begrünen. Ausnahmen für erforderliche + befestigte Flächen können zugelassen werden. + Für anzupflanzende Bäume auf Tiefgaragen muss auf einer + Fläche von mindestens 12 m² je Baum die Schichtstärke + des durchwurzelbaren Substrataufbaus mindestens 1 m + betragen. Tiefgaragenzufahrten sind baulich einzufassen + oder mit Rankgerüsten oder Pergolen zu überstellen und + mit Schling- oder Kletterpflanzen zu begrünen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_78445473-8bfb-4234-bcfa-9675e3c39fe7"> + <xplan:schluessel>§2 Nr.3</xplan:schluessel> + <xplan:text>In den Mischgebieten sind Gartenbaubetriebe und Tankstellen + unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_e54b2640-a9f8-4b60-be2b-11345fb076b4"> + <xplan:schluessel>§2 Nr.9</xplan:schluessel> + <xplan:text>Das festgesetzte Gehrecht auf dem Flurstück 4402 der + Gemarkung Meiendorf umfasst die Befugnis der Freien + und Hansestadt Hamburg zu verlangen, dass die bezeichnete + Fläche dem allgemeinen Fußgängerverkehr als Gehweg + zur Verfügung gestellt wird.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_da22f094-ff79-47c3-905d-57125ad15bbe"> + <xplan:schluessel>§2 Nr.8</xplan:schluessel> + <xplan:text>Eine Ãœberschreitung der Baugrenzen durch Balkone um + bis zu 1,5 m, durch Wintergärten um bis zu 1,75 m sowie + durch ebenerdige Terrassen um bis zu 3 m, kann zugelassen + werden.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_0b4c3abf-323c-4369-bba0-fdaf90a05e18"> + <xplan:schluessel>§2 Nr.13</xplan:schluessel> + <xplan:text>Auf der mit „(D)“ bezeichneten Fläche für die Erhaltung + und zum Anpflanzen von Bäumen und Sträuchern sind + Lücken mit Bäumen und Sträuchern so zu schließen, dass + der Charakter und Aufbau des dichtwachsenden, gestuften + Schutzgrüns wieder hergestellt und dauerhaft erhalten + wird.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_ba86d815-a484-4530-83fe-ad2003191bdf"> + <xplan:schluessel>§2 Nr.21</xplan:schluessel> + <xplan:text>Auf den privaten Grundstücksflächen sind ebenerdige, + nicht überdachte Stellplätze in wasser- und luftdurchlässigem + Aufbau herzustellen. Feuerwehrumfahrten und -aufstellflächen + auf zu begrünenden Flächen sind in vegetationsfähigem + Aufbau (Schotterrasen) herzustellen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_1ed1108a-2204-47f8-822f-08e3ddc697e2"> + <xplan:schluessel>§2 Nr.22</xplan:schluessel> + <xplan:text>Drainagen oder sonstige bauliche oder technische Maßnahmen, + die zu einer dauerhaften Absenkung des vegetationsverfügbaren + Grundwasserspiegels beziehungsweise + von Staunässe führen, sind unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_854a644c-3f65-4596-8362-c6eb77cb747d"> + <xplan:schluessel>§2 Nr.7</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten sind Stellplätze nur in + Tiefgaragen zulässig. Tiefgaragen sind auch außerhalb der + Baugrenzen zulässig. Für Tiefgaragen und deren Zufahrten + kann die festgesetzte Grundflächenzahl bis zu einer + Grundflächenzahl von 0,8 in dem mit „WA 1“ und bis zu + einer Grundflächenzahl von 0,7 in dem mit „WA 2“ + bezeichneten Wohngebiet überschritten werden.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1"> + <xplan:schluessel>§2 Nr.6</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in dem mit „MI 1“ + bezeichneten Mischgebiet sind Staffelgeschosse unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_5060fe64-2557-4954-af7c-0f79ca0811dd"> + <xplan:schluessel>§2 Nr.17</xplan:schluessel> + <xplan:text>In den Baugebieten sind an Straßenverkehrsflächen + angrenzende Einfriedigungen nur in Form von Hecken + oder durchbrochenen Zäunen in Verbindung mit Hecken + zulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_7c360c93-0ccf-44bd-85cd-3c9c54647cc8"> + <xplan:schluessel>§2 Nr.1</xplan:schluessel> + <xplan:text>Im Rahmen der festgesetzten Nutzungen sind innerhalb + des Vorhabengebiets nur solche Vorhaben zulässig, zu + deren Durchführung sich der Vorhabenträger im Durchführungsvertrag + verpflichtet.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a"> + <xplan:schluessel>§2 Nr.2</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten werden Ausnahmen für + Gartenbaubetriebe und Tankstellen ausgeschlossen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e"> + <xplan:schluessel>§2 Nr.5</xplan:schluessel> + <xplan:text>Auf der mit „(A)“ bezeichneten Fläche des Mischgebiets + ist der dort vorhandene Tischlereibetrieb zulässig. Änderungen + und Erneuerungen der betrieblichen Anlagen können + ausnahmsweise zugelassen werden, wenn durch geeignete + Maßnahmen und bauliche Vorkehrungen, wie zum + Beispiel Einhausungen, sichergestellt wird, dass sich die + vom Betrieb ausgehenden Emissionen nicht erhöhen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9"> + <xplan:schluessel>§2 Nr.4</xplan:schluessel> + <xplan:text>In den gewerblich geprägten Teilen der Mischgebiete sind + Vergnügungsstätten, insbesondere Spielhallen, Wettbüros + und ähnliche Unternehmen im Sinne von § 1 Absatz 2 des + Hamburgischen Spielhallengesetzes vom 4. Dezember + 2012 (HmbGVBl. S. 505), die der Aufstellung von Spielgeräten + mit oder ohne Gewinnmöglichkeiten dienen und + Vorführ- und Geschäftsräume, deren Zweck auf Darstellungen + oder auf Handlungen mit sexuellem Charakter ausgerichtet + ist, unzulässig. In den übrigen Teilen der Mischgebiete + werden Ausnahmen für Vergnügungsstätten ausgeschlossen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_b63ca453-1e1e-4f09-b99f-bc4dec515188"> + <xplan:schluessel>§2 Nr.11</xplan:schluessel> + <xplan:text>Außerhalb von öffentlichen Straßenverkehrsflächen sind + Geländeaufhöhungen und Abgrabungen sowie Ablagerungen + im Kronenbereich zu erhaltender Bäume unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6"> + <xplan:schluessel>§2 Nr.16</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in den Mischgebieten + ist für je angefangene 250 m² der nicht überbaubaren + Grundstücksfläche, einschließlich der zu begrünenden + unterbauten Flächen, ein kleinkroniger Baum oder für je + angefangene 500 m² mindestens ein großkroniger Baum zu + pflanzen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_a3c27752-304e-4220-8eed-a2d91f2531d7"> + <xplan:schluessel>§2 Nr.12</xplan:schluessel> + <xplan:text>Für festgesetzte Anpflanzungen und für Ersatzpflanzungen + von Bäumen, Sträuchern und Hecken sind standortgerechte, + einheimische Laubgehölzarten zu verwenden + und dauerhaft zu erhalten. Ausnahmen können zugelassen + werden. Bäume müssen einen Stammumfang von mindestens + 18 cm, in 1 m Höhe über dem Erdboden gemessen, + aufweisen. Im Kronenbereich jedes Baumes ist eine offene + Vegetationsfläche von mindestens 12 m² anzulegen und zu + begrünen. Sträucher und Heckenpflanzen müssen mindestens + folgende Qualität aufweisen: Zweimal verpflanzt, + Höhe mindestens 60 cm.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Bereich gml:id="GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942410.13</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:nummer>0</xplan:nummer> + <xplan:bedeutung>1600</xplan:bedeutung> + <xplan:geltungsbereich> + <gml:Polygon gml:id="Gml_42F0B741-8812-464A-B458-486949C7E924" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576655.825 5942531.79 576662.68 5942540.274 576601.22 5942588.473 + 576588.349 5942584.209 576416.125 5942527.154 576416.434 5942514.7 + 576419.617 5942443.127 576419.938 5942435.927 576421.087 5942410.13 + 576423.587 5942410.205 576480.297 5942411.883 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.545 5942413.603 576593.045 5942416.37 + 576600.834 5942416.652 576599.891 5942440.018 576598.756 5942468.151 + 576597.1439 5942508.047 576594.615 5942570.631 576609.257 5942567.967 + 576639.6672 5942544.3423 576655.825 5942531.79 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:geltungsbereich> + <xplan:refScan> + <xplan:XP_ExterneReferenz> + <xplan:georefURL>BPlan001_5-2_Bereich0.pgw</xplan:georefURL> + <xplan:referenzURL>BPlan001_5-2_Bereich0.png</xplan:referenzURL> + </xplan:XP_ExterneReferenz> + </xplan:refScan> + <xplan:planinhalt xlink:href="#GML_0a7293a1-8897-42a2-8f7d-8e652a2f3a04" /> + <xplan:planinhalt xlink:href="#GML_f58a0678-d7ea-409c-94ba-a3c3c199f8e3" /> + <xplan:planinhalt xlink:href="#GML_4a804a8a-3125-455e-a89a-bf3783b92da1" /> + <xplan:planinhalt xlink:href="#GML_2aa72a5e-4e29-4258-9969-aca657c6774e" /> + <xplan:planinhalt xlink:href="#GML_8f0e7555-075d-4dd0-957a-bc93c5a42c1e" /> + <xplan:planinhalt xlink:href="#GML_3981919b-339d-47be-8361-fa38881dcb29" /> + <xplan:planinhalt xlink:href="#GML_49ddaa03-f4e7-4847-a4b6-275295694227" /> + <xplan:planinhalt xlink:href="#GML_7f7168b3-920f-4672-85de-df3b8a712c6f" /> + <xplan:planinhalt xlink:href="#GML_c662dafa-b6fc-4115-a0a0-3e53c1094a99" /> + <xplan:planinhalt xlink:href="#GML_59d9124b-f014-4c8b-a9d1-d11638a73bca" /> + <xplan:planinhalt xlink:href="#GML_7a1a96af-d38b-4325-a0bd-f1e1e4ce9680" /> + <xplan:planinhalt xlink:href="#GML_85090559-3c6e-4f29-bb6e-418f2f7bff9c" /> + <xplan:planinhalt xlink:href="#GML_627b957f-ad28-472d-a7c8-5aeb75e823a1" /> + <xplan:planinhalt xlink:href="#GML_6faad647-0a64-405e-a0be-515184414780" /> + <xplan:planinhalt xlink:href="#GML_4c252228-adbf-4027-83ef-4a7373cf8ad9" /> + <xplan:planinhalt xlink:href="#GML_2f681dc9-7be4-43bd-8542-e801008aab39" /> + <xplan:planinhalt xlink:href="#GML_4edc6426-2d9d-4408-bbf6-0865c0271e08" /> + <xplan:planinhalt xlink:href="#GML_508ca656-eafb-48ff-9ee4-8cef746898ee" /> + <xplan:planinhalt xlink:href="#GML_df45a20e-be9e-4cb6-8053-21df2169c36b" /> + <xplan:planinhalt xlink:href="#GML_3951a89c-a3f9-4065-aa6d-767e9549235a" /> + <xplan:planinhalt xlink:href="#GML_842bad69-eb2b-43f4-bd1b-45dba4c33ef7" /> + <xplan:planinhalt xlink:href="#GML_038d8a87-7958-4bc0-b9a5-93f725ee77c9" /> + <xplan:planinhalt xlink:href="#GML_432bd289-8860-4325-88de-64896e887095" /> + <xplan:planinhalt xlink:href="#GML_c07fcf83-6309-40dd-86d0-b9ebc8f44055" /> + <xplan:planinhalt xlink:href="#GML_1e89c3a6-8e10-4354-abd2-a518e932c6fb" /> + <xplan:planinhalt xlink:href="#GML_3647946c-2a30-4078-909d-35f765227756" /> + <xplan:planinhalt xlink:href="#GML_ac8bcc7c-996b-403c-beda-0c44e62e5526" /> + <xplan:planinhalt xlink:href="#GML_1d7081c1-9315-478a-b33a-bba36110dd12" /> + <xplan:planinhalt xlink:href="#GML_3bbebe5a-71f8-4d11-b1e9-b8802aa0a2ec" /> + <xplan:planinhalt xlink:href="#GML_dad385e7-637b-40c7-8d96-ca50c85d4c6d" /> + <xplan:planinhalt xlink:href="#GML_631c2328-7244-4952-9fcd-9f7c993901b5" /> + <xplan:planinhalt xlink:href="#GML_f9aebab9-62a1-45e0-bcca-7998ec7156c2" /> + <xplan:planinhalt xlink:href="#GML_1f6bab62-0bb3-4fec-881e-b0cd25c51168" /> + <xplan:planinhalt xlink:href="#GML_47fb016d-dab5-4213-a4c1-deed9fb7dd94" /> + <xplan:planinhalt xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:planinhalt xlink:href="#GML_3b8a6af5-457e-4e0f-9e12-60b936cadfdf" /> + <xplan:planinhalt xlink:href="#GML_8047a192-d634-4414-b38a-950438ea177c" /> + <xplan:planinhalt xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:planinhalt xlink:href="#GML_0e8dfd5a-603d-4c56-b846-5f5c1573c528" /> + <xplan:planinhalt xlink:href="#GML_b1826698-ecc5-4cb0-9c88-d5afe1f31b5d" /> + <xplan:planinhalt xlink:href="#GML_60fb20fd-8cd3-4173-ac56-880f4451e4d8" /> + <xplan:planinhalt xlink:href="#GML_11901099-8d74-4850-8177-6541547ab30b" /> + <xplan:planinhalt xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:planinhalt xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:planinhalt xlink:href="#GML_ba300100-99e7-4741-8fc0-323cbfe283f3" /> + <xplan:planinhalt xlink:href="#GML_269bef7b-7d34-40e6-b48d-611a5001ab73" /> + <xplan:planinhalt xlink:href="#GML_e3d2f053-c8ae-498f-aab5-b497490ec636" /> + <xplan:planinhalt xlink:href="#GML_f352bbb5-f0e0-4059-8c86-61f393a9c732" /> + <xplan:planinhalt xlink:href="#GML_6bd85817-ed09-4b54-8ffa-d1faa982d616" /> + <xplan:planinhalt xlink:href="#GML_1ce434d3-ca84-4476-8cb2-18cd42647531" /> + <xplan:planinhalt xlink:href="#GML_c94e422a-b3ed-4d92-95d5-8dc4c189650e" /> + <xplan:planinhalt xlink:href="#GML_96a7bd77-f199-4cea-84d3-fdbabfe3f643" /> + <xplan:planinhalt xlink:href="#GML_a95a1007-a70f-474c-b791-ffb675af4015" /> + <xplan:planinhalt xlink:href="#GML_bff9a682-a559-4db3-a3b5-4fabc70907a6" /> + <xplan:planinhalt xlink:href="#GML_b021ad8f-e4d0-498b-896a-2db5e334ff4d" /> + <xplan:planinhalt xlink:href="#GML_3264fd82-1958-4a67-8673-42cb63036f17" /> + <xplan:planinhalt xlink:href="#GML_109fb3fb-2e1f-45a1-86af-2bb1dcc6d8ed" /> + <xplan:planinhalt xlink:href="#GML_1a6c9d6a-6e93-4854-9229-bd579e4d0df6" /> + <xplan:planinhalt xlink:href="#GML_a8fcb5cd-7364-46b6-8ad9-beb227979325" /> + <xplan:praesentationsobjekt xlink:href="#GML_8ded082b-f799-4b8c-ba49-a1aa23a63d8f" /> + <xplan:praesentationsobjekt xlink:href="#GML_4ebd4bb6-0bf4-460b-a23a-bdd149ebef6f" /> + <xplan:praesentationsobjekt xlink:href="#GML_00f7eff9-1faf-4448-8ec7-1f0ef6c16d6d" /> + <xplan:praesentationsobjekt xlink:href="#GML_5ba9de57-cd5c-4658-a2af-afd65f5b25bf" /> + <xplan:praesentationsobjekt xlink:href="#GML_1f29d226-6c44-4dd2-ac8e-d109edb17354" /> + <xplan:praesentationsobjekt xlink:href="#GML_05afd08d-622c-4587-829b-6e25b25c7e97" /> + <xplan:praesentationsobjekt xlink:href="#GML_71de5645-d06c-4eb8-82f7-97b8bf8a00e9" /> + <xplan:praesentationsobjekt xlink:href="#GML_c50c09c9-84d0-48ad-8c29-0a823b223514" /> + <xplan:praesentationsobjekt xlink:href="#GML_05d2bf60-cc10-4a38-ab83-d3af0057d8f7" /> + <xplan:praesentationsobjekt xlink:href="#GML_77b72a48-372d-482a-8355-c966829968ba" /> + <xplan:praesentationsobjekt xlink:href="#GML_b651ba20-7173-4b57-a0f7-cd61928b563b" /> + <xplan:praesentationsobjekt xlink:href="#GML_bc8efcd2-efba-4a41-bd7f-6d3b26f272de" /> + <xplan:praesentationsobjekt xlink:href="#GML_c233cc65-4339-4252-934c-24fb7eb2ad14" /> + <xplan:praesentationsobjekt xlink:href="#GML_5e9681f5-4c33-46f4-8113-b287cbe57b3a" /> + <xplan:praesentationsobjekt xlink:href="#GML_6a527b3a-3287-42fe-8705-d1e28dcbb3d7" /> + <xplan:praesentationsobjekt xlink:href="#GML_b4c0ed8b-3299-4bc4-bfd6-72a53a6957b8" /> + <xplan:praesentationsobjekt xlink:href="#GML_6bfad91a-e310-49d9-93ac-2677f9578e6d" /> + <xplan:praesentationsobjekt xlink:href="#GML_150032b9-df25-4c7a-abf2-b05693dcccba" /> + <xplan:praesentationsobjekt xlink:href="#GML_83094468-6c4d-4e1a-ad90-8a86710d3363" /> + <xplan:praesentationsobjekt xlink:href="#GML_33707095-3440-490b-9d83-c362569a0ef4" /> + <xplan:praesentationsobjekt xlink:href="#GML_0ab64645-e5c3-4661-b57e-ae29122cf610" /> + <xplan:praesentationsobjekt xlink:href="#GML_7796ee9b-c35f-4e4d-9309-269006f6ccf8" /> + <xplan:praesentationsobjekt xlink:href="#GML_ac19c4a5-51ea-4718-b2e3-98cff0c05273" /> + <xplan:praesentationsobjekt xlink:href="#GML_5c143714-4150-4f49-8d5a-d2b826e7958d" /> + <xplan:praesentationsobjekt xlink:href="#GML_cf666f15-e87c-4193-b484-68ccd5e72343" /> + <xplan:praesentationsobjekt xlink:href="#GML_94de2016-50e2-4e56-9819-3e80454a2a36" /> + <xplan:praesentationsobjekt xlink:href="#GML_c2a44c83-eb3f-46df-ba27-96f0ad9ab3c8" /> + <xplan:praesentationsobjekt xlink:href="#GML_cf3fbe32-bf2e-4dc1-8386-7ec5c0532f1b" /> + <xplan:praesentationsobjekt xlink:href="#GML_916188a0-f5b0-4f17-942f-c25a0d915bd9" /> + <xplan:praesentationsobjekt xlink:href="#GML_0bdc76ef-35d5-4c75-9d5b-fa3ea30ba4d1" /> + <xplan:praesentationsobjekt xlink:href="#GML_a5d113d2-aae0-4d37-be0d-86c438e4381f" /> + <xplan:praesentationsobjekt xlink:href="#GML_d0723b30-7904-45b2-9b6a-8b55bf18b911" /> + <xplan:praesentationsobjekt xlink:href="#GML_15890cb4-3da8-43fc-ab37-2c9ecc3cd74c" /> + <xplan:praesentationsobjekt xlink:href="#GML_231f5f5d-30e9-4114-a1ce-e88cd7e3d2b2" /> + <xplan:versionBauNVOText>Version vom 11.06.2013</xplan:versionBauNVOText> + <xplan:gehoertZuPlan xlink:href="#GML_1c23cbae-b6e9-4f21-b9c2-f3fc6df46545" /> + </xplan:BP_Bereich> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_SchutzPflegeEntwicklungsFlaeche gml:id="GML_0a7293a1-8897-42a2-8f7d-8e652a2f3a04"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576419.618 5942410.13</gml:lowerCorner> + <gml:upperCorner>576480.297 5942443.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_8FC74F80-50EF-486D-8307-D490AF0ACE15" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576429.724 5942428.829 576436.04 5942429.111 576436.179 5942434.919 + 576431.773 5942443.668 576419.618 5942443.127 576419.938 5942435.927 + 576421.087 5942410.13 576423.587 5942410.205 576480.297 5942411.883 + 576480.266 5942414.884 576430.41 5942413.408 576429.724 5942428.829 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:massnahme> + <xplan:XP_SPEMassnahmenDaten> + <xplan:klassifizMassnahme>9999</xplan:klassifizMassnahme> + </xplan:XP_SPEMassnahmenDaten> + </xplan:massnahme> + </xplan:BP_SchutzPflegeEntwicklungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_f58a0678-d7ea-409c-94ba-a3c3c199f8e3"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.409 5942439.738</gml:lowerCorner> + <gml:upperCorner>576456.937 5942513.277</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_94de2016-50e2-4e56-9819-3e80454a2a36" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_8B032B00-5C41-4665-AEBB-D70CD93CF481" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576456.937 5942440.135 576455.999 5942471.816 576442.12 5942513.277 + 576429.409 5942509.053 576442.564 5942469.424 576443.446 5942439.738 + 576456.937 5942440.135 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_94de2016-50e2-4e56-9819-3e80454a2a36"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576448.798 5942469.435</gml:lowerCorner> + <gml:upperCorner>576448.798 5942469.435</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_f58a0678-d7ea-409c-94ba-a3c3c199f8e3" /> + <xplan:position> + <gml:Point gml:id="Gml_0EFFA883-ADA4-47E1-BC24-0D01C2CA1E3A" srsName="EPSG:25832"> + <gml:pos>576448.798 5942469.435</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_4a804a8a-3125-455e-a89a-bf3783b92da1"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576572.789 5942443.581</gml:lowerCorner> + <gml:upperCorner>576586.817 5942462.063</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_59E6236F-03B6-42C7-823D-500C0FB971AF" srsName="EPSG:25832"> + <gml:posList>576572.789 5942461.663 576573.324 5942443.581 576586.817 5942443.98 + 576586.283 5942462.063 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_2aa72a5e-4e29-4258-9969-aca657c6774e"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576591.66 5942440.947</gml:lowerCorner> + <gml:upperCorner>576591.66 5942440.947</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">41.07</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_4A08737B-AB65-4E71-870D-CCF9770964B7" srsName="EPSG:25832"> + <gml:pos>576591.66 5942440.947</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_8f0e7555-075d-4dd0-957a-bc93c5a42c1e"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576492.223 5942512.76</gml:lowerCorner> + <gml:upperCorner>576510.74 5942534.189</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_C7C8333A-6BFA-4EA5-90D8-201E4A9BC1C1" srsName="EPSG:25832"> + <gml:posList>576510.74 5942517.017 576505.034 5942534.189 576492.223 5942529.932 + 576497.929 5942512.76 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_3981919b-339d-47be-8361-fa38881dcb29"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576527.157 5942509.662</gml:lowerCorner> + <gml:upperCorner>576577.155 5942537.673</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_7262C208-27C2-40E5-825A-2B6F908C00CB" srsName="EPSG:25832"> + <gml:posList>576531.415 5942509.662 576577.155 5942524.862 576572.897 5942537.673 + 576527.157 5942522.473 576531.415 5942509.662 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_StrassenbegrenzungsLinie gml:id="GML_49ddaa03-f4e7-4847-a4b6-275295694227"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.434 5942474.449</gml:lowerCorner> + <gml:upperCorner>576655.825 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_05FE9CA9-8375-4C41-9A09-82CF68E49E69" srsName="EPSG:25832"> + <gml:posList>576655.825 5942531.79 576609.257 5942567.967 576594.615 5942570.631 + 576588.214 5942571.795 576585.605 5942570.928 576580.138 5942569.112 + 576578.266 5942565.328 576584.585 5942546.633 576586.698 5942540.648 + 576584.613 5942538.256 576585.286 5942536.147 576587.281 5942530.022 + 576590.82 5942519.15 576591.61 5942515.589 576592.25 5942494.172 + 576591.693 5942485.065 576590.737 5942484.009 576589.163 5942482.269 + 576586.072 5942480.109 576582.576 5942478.696 576578.853 5942478.1 + 576461.588 5942474.628 576455.548 5942474.449 576442.293 5942514.335 + 576446.184 5942515.628 576444.447 5942520.855 576440.666 5942522.762 + 576416.434 5942514.7 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_StrassenbegrenzungsLinie> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_SchutzPflegeEntwicklungsFlaeche gml:id="GML_7f7168b3-920f-4672-85de-df3b8a712c6f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576516.45 5942413.603</gml:lowerCorner> + <gml:upperCorner>576593.045 5942419.368</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_84050227-8FC6-4370-931D-9671FAA1B42E" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576593.045 5942416.37 576592.923 5942419.368 576516.45 5942416.602 + 576516.545 5942413.603 576593.045 5942416.37 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + </xplan:BP_SchutzPflegeEntwicklungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_NebenanlagenFlaeche gml:id="GML_c662dafa-b6fc-4115-a0a0-3e53c1094a99"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576418.023 5942507.169</gml:lowerCorner> + <gml:upperCorner>576446.184 5942522.771</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_cf3fbe32-bf2e-4dc1-8386-7ec5c0532f1b" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_48BA4436-BD00-446D-9B35-C3F613165F85" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576442.293 5942514.335 576446.184 5942515.628 576444.447 5942520.855 + 576440.649 5942522.771 576418.023 5942515.238 576420.704 5942507.169 + 576442.293 5942514.335 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:zweckbestimmung>1000</xplan:zweckbestimmung> + </xplan:BP_NebenanlagenFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_cf3fbe32-bf2e-4dc1-8386-7ec5c0532f1b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576435.799 5942516.668</gml:lowerCorner> + <gml:upperCorner>576435.799 5942516.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>zweckbestimmung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_c662dafa-b6fc-4115-a0a0-3e53c1094a99" /> + <xplan:position> + <gml:Point gml:id="Gml_10F8E369-D6F9-43BF-A2CF-D948919422D5" srsName="EPSG:25832"> + <gml:pos>576435.799 5942516.668</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_KennzeichnungsFlaeche gml:id="GML_59d9124b-f014-4c8b-a9d1-d11638a73bca"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.434 5942410.13</gml:lowerCorner> + <gml:upperCorner>576600.834 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_D54DDA9F-AF71-431C-8205-1779FB76F6D5" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576599.891 5942440.018 576598.756 5942468.151 576594.615 5942570.631 + 576588.214 5942571.795 576585.605 5942570.928 576580.138 5942569.112 + 576566.153 5942564.472 576456.312 5942527.947 576440.649 5942522.771 + 576416.434 5942514.7 576419.618 5942443.127 576419.938 5942435.927 + 576421.087 5942410.13 576423.587 5942410.205 576480.297 5942411.883 + 576480.266 5942414.884 576480.165 5942424.848 576485.589 5942430.139 + 576505.565 5942430.669 576512.841 5942426.038 576516.148 5942426.171 + 576516.45 5942416.602 576516.545 5942413.603 576593.045 5942416.37 + 576600.834 5942416.652 576599.891 5942440.018 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:zweckbestimmung>8000</xplan:zweckbestimmung> + </xplan:BP_KennzeichnungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_7a1a96af-d38b-4325-a0bd-f1e1e4ce9680"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576501.302 5942537.538</gml:lowerCorner> + <gml:upperCorner>576501.302 5942537.538</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_77E2EAA8-5C2E-49C5-9583-3CC7E59C3435" srsName="EPSG:25832"> + <gml:pos>576501.302 5942537.538</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>1000</xplan:massnahme> + <xplan:gegenstand>1000</xplan:gegenstand> + <xplan:kronendurchmesser uom="m">1</xplan:kronendurchmesser> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Wegerecht gml:id="GML_85090559-3c6e-4f29-bb6e-418f2f7bff9c"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576569.222 5942517.447</gml:lowerCorner> + <gml:upperCorner>576584.731 5942558.997</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_e54b2640-a9f8-4b60-be2b-11345fb076b4" /> + <xplan:position> + <gml:Polygon gml:id="Gml_CF65598F-B8B1-4084-A0B3-278D15BEF5AA" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576584.731 5942518.078 576571.12 5942558.997 576569.222 5942558.366 + 576582.833 5942517.447 576584.731 5942518.078 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:typ>1000</xplan:typ> + </xplan:BP_Wegerecht> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_627b957f-ad28-472d-a7c8-5aeb75e823a1"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.724 5942413.408</gml:lowerCorner> + <gml:upperCorner>576592.923 5942439.776</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(E)</xplan:gliederung1> + <xplan:gliederung2>(D)</xplan:gliederung2> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_1f29d226-6c44-4dd2-ac8e-d109edb17354" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_231f5f5d-30e9-4114-a1ce-e88cd7e3d2b2" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_51a21b00-c38b-4ff7-bc86-766994a242f1" /> + <xplan:refTextInhalt xlink:href="#GML_0b4c3abf-323c-4369-bba0-fdaf90a05e18" /> + <xplan:position> + <gml:Polygon gml:id="Gml_2FF2D69E-EC33-4A9A-90DF-FAC9BDC31189" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.094 5942439.776 576462.797 5942435.779 576462.798 5942435.749 + 576436.179 5942434.919 576436.04 5942429.111 576429.724 5942428.829 + 576430.41 5942413.408 576480.266 5942414.884 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.45 5942416.602 576592.923 5942419.368 + 576592.094 5942439.776 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_1f29d226-6c44-4dd2-ac8e-d109edb17354"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576568.679 5942428.219</gml:lowerCorner> + <gml:upperCorner>576568.679 5942428.219</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung2</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_627b957f-ad28-472d-a7c8-5aeb75e823a1" /> + <xplan:position> + <gml:Point gml:id="Gml_E52F6BF7-2108-4AF5-A631-56D9347EF0EF" srsName="EPSG:25832"> + <gml:pos>576568.679 5942428.219</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_231f5f5d-30e9-4114-a1ce-e88cd7e3d2b2"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576469.912 5942419.198</gml:lowerCorner> + <gml:upperCorner>576469.912 5942419.198</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_627b957f-ad28-472d-a7c8-5aeb75e823a1" /> + <xplan:schriftinhalt>(E)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_1BA42B7E-4759-46A6-9C81-77DAD3858EA6" srsName="EPSG:25832"> + <gml:pos>576469.912 5942419.198</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_6faad647-0a64-405e-a0be-515184414780"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576521.453 5942522.473</gml:lowerCorner> + <gml:upperCorner>576539.969 5942543.897</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_F74A371C-2259-48CC-9B2E-26F408477805" srsName="EPSG:25832"> + <gml:posList>576539.969 5942526.73 576534.264 5942543.897 576521.453 5942539.64 + 576527.157 5942522.473 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_4c252228-adbf-4027-83ef-4a7373cf8ad9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576572.789 5942443.581</gml:lowerCorner> + <gml:upperCorner>576586.817 5942462.063</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_7796ee9b-c35f-4e4d-9309-269006f6ccf8" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_FD35F040-8775-4DC1-9250-378758802639" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576586.817 5942443.98 576586.283 5942462.063 576572.789 5942461.663 + 576573.324 5942443.581 576586.817 5942443.98 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_7796ee9b-c35f-4e4d-9309-269006f6ccf8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576579.803 5942452.822</gml:lowerCorner> + <gml:upperCorner>576579.803 5942452.822</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_4c252228-adbf-4027-83ef-4a7373cf8ad9" /> + <xplan:position> + <gml:Point gml:id="Gml_48C89054-C333-4A7D-AF36-555D000321D0" srsName="EPSG:25832"> + <gml:pos>576579.803 5942452.822</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_2f681dc9-7be4-43bd-8542-e801008aab39"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576537.705 5942460.636</gml:lowerCorner> + <gml:upperCorner>576586.283 5942475.557</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_E8B43C28-CCEA-409A-B4C4-41BC69BB5FE2" srsName="EPSG:25832"> + <gml:posList>576586.283 5942462.063 576585.884 5942475.557 576537.705 5942474.13 + 576538.104 5942460.636 576586.283 5942462.063 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_StrassenbegrenzungsLinie gml:id="GML_4edc6426-2d9d-4408-bbf6-0865c0271e08"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576454.397 5942483.772</gml:lowerCorner> + <gml:upperCorner>576585.945 5942564.472</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_88E0D2BE-19B0-4819-ACE4-91EDCC4574F2" srsName="EPSG:25832"> + <gml:posList>576454.397 5942524.162 576465.108 5942491.997 576466.066 5942489.137 + 576467.009 5942487.194 576468.029 5942485.955 576468.991 5942485.155 + 576470.103 5942484.509 576471.162 5942484.101 576472.593 5942483.814 + 576473.672 5942483.772 576476.148 5942483.813 576574.305 5942486.719 + 576577.618 5942487.564 576580.728 5942489.289 576582.388 5942490.772 + 576583.807 5942492.573 576585.186 5942495.361 576585.945 5942499.069 + 576585.446 5942515.928 576569.937 5942562.554 576566.153 5942564.472 + 576456.312 5942527.947 576454.397 5942524.162 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_StrassenbegrenzungsLinie> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_508ca656-eafb-48ff-9ee4-8cef746898ee"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576526.139 5942547.483</gml:lowerCorner> + <gml:upperCorner>576526.139 5942547.483</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_A77464E8-3EEA-4563-89AA-E2F6C5AE9CDC" srsName="EPSG:25832"> + <gml:pos>576526.139 5942547.483</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>1000</xplan:massnahme> + <xplan:gegenstand>1000</xplan:gegenstand> + <xplan:kronendurchmesser uom="m">1</xplan:kronendurchmesser> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_df45a20e-be9e-4cb6-8053-21df2169c36b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576432.12 5942433.33</gml:lowerCorner> + <gml:upperCorner>576432.12 5942433.33</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">41</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_538055B4-EC7C-44D1-AA88-29EC09D6278C" srsName="EPSG:25832"> + <gml:pos>576432.12 5942433.33</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_3951a89c-a3f9-4065-aa6d-767e9549235a"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576496.67 5942438.659</gml:lowerCorner> + <gml:upperCorner>576496.67 5942438.659</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">41.3</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_BD3ED782-9557-4BFF-A568-E292BDE2BA89" srsName="EPSG:25832"> + <gml:pos>576496.67 5942438.659</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_842bad69-eb2b-43f4-bd1b-45dba4c33ef7"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576459.295 5942501.817</gml:lowerCorner> + <gml:upperCorner>576477.811 5942523.238</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_372990D9-6C48-43BC-8C3F-06B2F1BFC3A8" srsName="EPSG:25832"> + <gml:posList>576477.811 5942506.074 576472.107 5942523.238 576459.295 5942518.984 + 576465 5942501.817 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_038d8a87-7958-4bc0-b9a5-93f725ee77c9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.633 5942440.616</gml:lowerCorner> + <gml:upperCorner>576486.662 5942459.097</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_4E0FB011-5E3E-475A-8808-2E858BC8591A" srsName="EPSG:25832"> + <gml:posList>576472.633 5942458.698 576473.168 5942440.616 576486.662 5942441.015 + 576486.123 5942459.097 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_432bd289-8860-4325-88de-64896e887095"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.724 5942413.408</gml:lowerCorner> + <gml:upperCorner>576592.924 5942439.776</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_AB7517F1-F72F-4904-BB4C-DEB195F3FF14" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.094 5942439.776 576462.797 5942435.779 576462.798 5942435.749 + 576436.179 5942434.919 576436.04 5942429.111 576429.724 5942428.829 + 576430.41 5942413.408 576480.266 5942414.884 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.45 5942416.602 576592.924 5942419.348 + 576592.094 5942439.776 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>3000</xplan:massnahme> + <xplan:gegenstand>2000</xplan:gegenstand> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_c07fcf83-6309-40dd-86d0-b9ebc8f44055"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576465 5942489.005</gml:lowerCorner> + <gml:upperCorner>576514.998 5942517.017</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_05d2bf60-cc10-4a38-ab83-d3af0057d8f7" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_FB6D84EF-CB63-49B8-BE50-BBE94261D7F0" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576514.998 5942504.206 576510.74 5942517.017 576465 5942501.817 + 576469.253 5942489.005 576514.998 5942504.206 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_05d2bf60-cc10-4a38-ab83-d3af0057d8f7"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576489.998 5942503.011</gml:lowerCorner> + <gml:upperCorner>576489.998 5942503.011</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_c07fcf83-6309-40dd-86d0-b9ebc8f44055" /> + <xplan:position> + <gml:Point gml:id="Gml_D2B10062-54FC-49BE-A1AD-3ECACA066190" srsName="EPSG:25832"> + <gml:pos>576489.998 5942503.011</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_1e89c3a6-8e10-4354-abd2-a518e932c6fb"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576465 5942489.005</gml:lowerCorner> + <gml:upperCorner>576514.998 5942517.017</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_36546E5E-F74F-4EA3-B4EC-2188D0F68F08" srsName="EPSG:25832"> + <gml:posList>576469.253 5942489.005 576514.998 5942504.206 576510.74 5942517.017 + 576465 5942501.817 576469.253 5942489.005 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_3647946c-2a30-4078-909d-35f765227756"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576527.157 5942509.662</gml:lowerCorner> + <gml:upperCorner>576577.155 5942537.673</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_b4c0ed8b-3299-4bc4-bfd6-72a53a6957b8" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_1E33130F-1378-41A7-BA51-66631721DF2F" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576577.155 5942524.862 576572.897 5942537.673 576527.157 5942522.473 + 576531.415 5942509.662 576577.155 5942524.862 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_b4c0ed8b-3299-4bc4-bfd6-72a53a6957b8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576552.156 5942523.668</gml:lowerCorner> + <gml:upperCorner>576552.156 5942523.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3647946c-2a30-4078-909d-35f765227756" /> + <xplan:position> + <gml:Point gml:id="Gml_7AD69712-5ECA-428D-8D9A-FADAC7315A2C" srsName="EPSG:25832"> + <gml:pos>576552.156 5942523.668</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_ac8bcc7c-996b-403c-beda-0c44e62e5526"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576420.864 5942475.609</gml:lowerCorner> + <gml:upperCorner>576439.57 5942509.053</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_150032b9-df25-4c7a-abf2-b05693dcccba" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_C62C38AA-BD20-4007-A00B-861AFD857AD1" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576439.57 5942478.445 576429.409 5942509.053 576420.864 5942506.213 + 576431.033 5942475.609 576439.57 5942478.445 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>1</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_150032b9-df25-4c7a-abf2-b05693dcccba"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576430.217 5942492.331</gml:lowerCorner> + <gml:upperCorner>576430.217 5942492.331</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_ac8bcc7c-996b-403c-beda-0c44e62e5526" /> + <xplan:position> + <gml:Point gml:id="Gml_A399277E-1234-4438-8C33-41806021341A" srsName="EPSG:25832"> + <gml:pos>576430.217 5942492.331</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_1d7081c1-9315-478a-b33a-bba36110dd12"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576516.45 5942413.603</gml:lowerCorner> + <gml:upperCorner>576593.045 5942419.348</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(G)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_8d149ef7-4b94-40d9-b994-6b222dd4734e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_3B8A8F35-90FD-4683-8E92-35C39857C37A" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576593.045 5942416.37 576592.924 5942419.348 576516.45 5942416.602 + 576516.545 5942413.603 576593.045 5942416.37 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_StrassenVerkehrsFlaeche gml:id="GML_3bbebe5a-71f8-4d11-b1e9-b8802aa0a2ec"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942474.449</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_251385C4-5861-48CD-9839-0E2E85DB1397" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576601.22 5942588.473 576588.349 5942584.209 576416.125 5942527.154 + 576416.434 5942514.7 576440.649 5942522.771 576444.447 5942520.855 + 576446.184 5942515.628 576442.293 5942514.335 576455.548 5942474.449 + 576461.588 5942474.628 576578.853 5942478.1 576582.576 5942478.696 + 576586.072 5942480.109 576589.163 5942482.269 576590.737 5942484.009 + 576591.693 5942485.065 576592.25 5942494.172 576591.61 5942515.589 + 576590.82 5942519.15 576587.281 5942530.022 576585.286 5942536.147 + 576584.613 5942538.256 576586.701 5942540.649 576585.643 5942543.641 + 576584.585 5942546.633 576578.266 5942565.328 576580.138 5942569.112 + 576585.605 5942570.928 576588.214 5942571.795 576594.615 5942570.631 + 576609.257 5942567.967 576655.825 5942531.79 576662.68 5942540.274 + 576601.22 5942588.473 </gml:posList> + </gml:LinearRing> + </gml:exterior> + <gml:interior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576454.397 5942524.162 576456.312 5942527.947 576566.153 5942564.472 + 576569.937 5942562.554 576585.446 5942515.928 576585.945 5942499.069 + 576585.186 5942495.361 576583.807 5942492.573 576582.388 5942490.772 + 576580.728 5942489.289 576577.618 5942487.564 576574.305 5942486.719 + 576476.148 5942483.813 576473.672 5942483.772 576472.593 5942483.814 + 576471.162 5942484.101 576470.103 5942484.509 576468.991 5942485.155 + 576468.029 5942485.955 576467.009 5942487.194 576466.066 5942489.137 + 576465.108 5942491.997 576454.397 5942524.162 </gml:posList> + </gml:LinearRing> + </gml:interior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:nutzungsform>2000</xplan:nutzungsform> + </xplan:BP_StrassenVerkehrsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_dad385e7-637b-40c7-8d96-ca50c85d4c6d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576419.618 5942410.13</gml:lowerCorner> + <gml:upperCorner>576436.179 5942443.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(F)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_ac19c4a5-51ea-4718-b2e3-98cff0c05273" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_c61d212b-e6b2-45c8-8d13-640d1550668e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_F9FBEDA1-0783-4D6F-9FDB-28C621E759F0" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576423.587 5942410.205 576430.543 5942410.41 576430.41 5942413.408 + 576429.724 5942428.829 576436.04 5942429.111 576436.179 5942434.919 + 576431.773 5942443.668 576419.618 5942443.127 576421.087 5942410.13 + 576423.587 5942410.205 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_ac19c4a5-51ea-4718-b2e3-98cff0c05273"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576422.832 5942424.648</gml:lowerCorner> + <gml:upperCorner>576422.832 5942424.648</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_dad385e7-637b-40c7-8d96-ca50c85d4c6d" /> + <xplan:schriftinhalt>(F)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_7F489B65-AC1C-43A2-8D8E-8524501D75F7" srsName="EPSG:25832"> + <gml:pos>576422.832 5942424.648</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Wegerecht gml:id="GML_631c2328-7244-4952-9fcd-9f7c993901b5"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576569.937 5942517.281</gml:lowerCorner> + <gml:upperCorner>576584.996 5942562.554</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_00809F0C-E950-4223-81B5-49FD42F623CD" srsName="EPSG:25832"> + <gml:posList>576584.996 5942517.281 576569.937 5942562.554 </gml:posList> + </gml:LineString> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:typ>1000</xplan:typ> + </xplan:BP_Wegerecht> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_f9aebab9-62a1-45e0-bcca-7998ec7156c2"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576571.627 5942441.909</gml:lowerCorner> + <gml:upperCorner>576588.92 5942477.592</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(C)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ad4a57ec-d094-4fb7-bf50-96dd5537d474" /> + <xplan:position> + <gml:Polygon gml:id="Gml_916222ED-7F34-4594-85A5-CFCAA77E28C5" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576588.92 5942477.592 576579.633 5942476.632 576579.633 5942472.712 + 576583.156 5942472.712 576583.756 5942465.671 576571.867 5942465.511 + 576572.107 5942459.351 576584.056 5942459.191 576584.357 5942445.989 + 576571.627 5942445.989 576571.627 5942441.909 576587.719 5942441.909 + 576588.92 5942441.909 576588.92 5942477.592 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_1f6bab62-0bb3-4fec-881e-b0cd25c51168"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576492.223 5942512.76</gml:lowerCorner> + <gml:upperCorner>576510.74 5942534.189</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_0bdc76ef-35d5-4c75-9d5b-fa3ea30ba4d1" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_EFDA03AE-47DE-427C-9BF8-ECFD3AD38986" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576510.74 5942517.017 576505.034 5942534.189 576492.223 5942529.932 + 576497.929 5942512.76 576510.74 5942517.017 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_0bdc76ef-35d5-4c75-9d5b-fa3ea30ba4d1"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576501.481 5942523.475</gml:lowerCorner> + <gml:upperCorner>576501.481 5942523.475</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1f6bab62-0bb3-4fec-881e-b0cd25c51168" /> + <xplan:position> + <gml:Point gml:id="Gml_37C69BB2-B214-4D97-B0CF-8296141053D3" srsName="EPSG:25832"> + <gml:pos>576501.481 5942523.475</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_47fb016d-dab5-4213-a4c1-deed9fb7dd94"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.234 5942458.698</gml:lowerCorner> + <gml:upperCorner>576520.812 5942473.618</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_b651ba20-7173-4b57-a0f7-cd61928b563b" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_EAF51293-F93B-478F-9894-8EA3DFFAB36E" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576520.812 5942460.124 576520.412 5942473.618 576472.234 5942472.192 + 576472.633 5942458.698 576520.812 5942460.124 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_b651ba20-7173-4b57-a0f7-cd61928b563b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576496.523 5942466.158</gml:lowerCorner> + <gml:upperCorner>576496.523 5942466.158</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_47fb016d-dab5-4213-a4c1-deed9fb7dd94" /> + <xplan:position> + <gml:Point gml:id="Gml_8690DCEF-EF7D-4B22-A4F8-B0455989EFB8" srsName="EPSG:25832"> + <gml:pos>576496.523 5942466.158</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_1a82a070-de61-4fbe-ac33-6891f7702b34"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576454.397 5942483.772</gml:lowerCorner> + <gml:upperCorner>576585.945 5942564.472</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>1</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_0ab64645-e5c3-4661-b57e-ae29122cf610" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_c2a44c83-eb3f-46df-ba27-96f0ad9ab3c8" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_d0723b30-7904-45b2-9b6a-8b55bf18b911" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_abd5458e-92a4-4620-b6ec-944a997c3fcf" /> + <xplan:refTextInhalt xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:refTextInhalt xlink:href="#GML_854a644c-3f65-4596-8362-c6eb77cb747d" /> + <xplan:refTextInhalt xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:position> + <gml:Polygon gml:id="Gml_CFCD78E6-138F-460F-AA2C-7C2A61BAF851" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576476.148 5942483.813 576574.305 5942486.719 576577.618 5942487.564 + 576580.728 5942489.289 576582.388 5942490.772 576583.807 5942492.573 + 576585.186 5942495.361 576585.945 5942499.069 576585.446 5942515.928 + 576569.937 5942562.554 576566.153 5942564.472 576456.312 5942527.947 + 576454.397 5942524.162 576465.108 5942491.997 576466.066 5942489.137 + 576467.009 5942487.194 576468.029 5942485.955 576468.991 5942485.155 + 576470.103 5942484.509 576471.162 5942484.101 576472.593 5942483.814 + 576473.672 5942483.772 576476.148 5942483.813 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:dachgestaltung> + <xplan:BP_Dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + </xplan:BP_Dachgestaltung> + </xplan:dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + <xplan:GRZ>0.35</xplan:GRZ> + <xplan:besondereArtDerBaulNutzung>1200</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_0ab64645-e5c3-4661-b57e-ae29122cf610"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576537.524 5942497.207</gml:lowerCorner> + <gml:upperCorner>576537.524 5942497.207</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:position> + <gml:Point gml:id="Gml_C01C0BCC-5AFC-480F-8780-764C4BB8FD7E" srsName="EPSG:25832"> + <gml:pos>576537.524 5942497.207</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_c2a44c83-eb3f-46df-ba27-96f0ad9ab3c8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576540.684 5942503.522</gml:lowerCorner> + <gml:upperCorner>576540.684 5942503.522</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:position> + <gml:Point gml:id="Gml_083851FF-8E62-494E-A7A7-29CCC8915CC6" srsName="EPSG:25832"> + <gml:pos>576540.684 5942503.522</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_d0723b30-7904-45b2-9b6a-8b55bf18b911"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576536.662 5942492.615</gml:lowerCorner> + <gml:upperCorner>576536.662 5942492.615</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>dachgestaltung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:position> + <gml:Point gml:id="Gml_78955109-C799-4576-9EF9-7B3CB67ACF7D" srsName="EPSG:25832"> + <gml:pos>576536.662 5942492.615</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_3b8a6af5-457e-4e0f-9e12-60b936cadfdf"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.409 5942439.738</gml:lowerCorner> + <gml:upperCorner>576456.937 5942513.277</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_55B65877-EA96-4C99-AAC8-C31598279E48" srsName="EPSG:25832"> + <gml:posList>576443.446 5942439.738 576456.937 5942440.135 576455.999 5942471.816 + 576442.12 5942513.277 576429.409 5942509.053 576442.564 5942469.424 + 576443.446 5942439.738 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_8047a192-d634-4414-b38a-950438ea177c"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576538.104 5942442.549</gml:lowerCorner> + <gml:upperCorner>576552.134 5942461.036</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_83094468-6c4d-4e1a-ad90-8a86710d3363" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_3ED3D0A4-3AE8-4568-937B-E008681823E1" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576552.134 5942442.955 576551.598 5942461.036 576538.104 5942460.636 + 576538.64 5942442.549 576552.134 5942442.955 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_83094468-6c4d-4e1a-ad90-8a86710d3363"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576545.119 5942451.794</gml:lowerCorner> + <gml:upperCorner>576545.119 5942451.794</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_8047a192-d634-4414-b38a-950438ea177c" /> + <xplan:position> + <gml:Point gml:id="Gml_8659C23D-57CF-4268-9D72-0550868F655E" srsName="EPSG:25832"> + <gml:pos>576545.119 5942451.794</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576461.588 5942435.749</gml:lowerCorner> + <gml:upperCorner>576599.891 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>2</xplan:gliederung1> + <xplan:gliederung2>(C)</xplan:gliederung2> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_5e9681f5-4c33-46f4-8113-b287cbe57b3a" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_6bfad91a-e310-49d9-93ac-2677f9578e6d" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_cf666f15-e87c-4193-b484-68ccd5e72343" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_abd5458e-92a4-4620-b6ec-944a997c3fcf" /> + <xplan:refTextInhalt xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_854a644c-3f65-4596-8362-c6eb77cb747d" /> + <xplan:refTextInhalt xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:position> + <gml:Polygon gml:id="Gml_448471AF-0B82-4D7D-B51D-1E95579AC5D7" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.043 5942439.774 576599.891 5942440.018 576598.756 5942468.151 + 576594.615 5942570.631 576588.214 5942571.795 576585.605 5942570.928 + 576580.138 5942569.112 576578.266 5942565.328 576584.585 5942546.633 + 576585.643 5942543.641 576586.701 5942540.649 576584.613 5942538.256 + 576585.286 5942536.147 576587.281 5942530.022 576590.82 5942519.15 + 576591.61 5942515.589 576592.25 5942494.172 576591.693 5942485.065 + 576590.737 5942484.009 576589.163 5942482.269 576586.072 5942480.109 + 576582.576 5942478.696 576578.853 5942478.1 576461.588 5942474.628 + 576462.798 5942435.749 576592.043 5942439.774 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:dachgestaltung> + <xplan:BP_Dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + </xplan:BP_Dachgestaltung> + </xplan:dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + <xplan:GRZ>0.4</xplan:GRZ> + <xplan:besondereArtDerBaulNutzung>1200</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_5e9681f5-4c33-46f4-8113-b287cbe57b3a"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576524.665 5942454.124</gml:lowerCorner> + <gml:upperCorner>576524.665 5942454.124</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>dachgestaltung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:position> + <gml:Point gml:id="Gml_E0A2C857-23D9-4F3D-99F7-9CFB8A853B5F" srsName="EPSG:25832"> + <gml:pos>576524.665 5942454.124</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_6bfad91a-e310-49d9-93ac-2677f9578e6d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576526.983 5942464.84</gml:lowerCorner> + <gml:upperCorner>576526.983 5942464.84</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:position> + <gml:Point gml:id="Gml_4BDECC78-9255-4034-AF3B-3233AD6A8704" srsName="EPSG:25832"> + <gml:pos>576526.983 5942464.84</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_cf666f15-e87c-4193-b484-68ccd5e72343"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576525.824 5942459.048</gml:lowerCorner> + <gml:upperCorner>576525.824 5942459.048</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:position> + <gml:Point gml:id="Gml_4526C7BB-45F1-43D3-875E-24D436872EA9" srsName="EPSG:25832"> + <gml:pos>576525.824 5942459.048</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_GruenFlaeche gml:id="GML_0e8dfd5a-603d-4c56-b846-5f5c1573c528"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.724 5942413.408</gml:lowerCorner> + <gml:upperCorner>576600.834 5942440.018</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:text>Schutzgrün</xplan:text> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_916188a0-f5b0-4f17-942f-c25a0d915bd9" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:position> + <gml:Polygon gml:id="Gml_83A4903D-3A87-4548-843E-766827D3CE61" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576599.891 5942440.018 576592.043 5942439.774 576462.798 5942435.749 + 576436.179 5942434.919 576436.04 5942429.111 576429.724 5942428.829 + 576430.41 5942413.408 576480.266 5942414.884 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.45 5942416.602 576592.923 5942419.368 + 576593.045 5942416.37 576600.834 5942416.652 576599.891 5942440.018 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:zweckbestimmung>9999</xplan:zweckbestimmung> + <xplan:nutzungsform>1000</xplan:nutzungsform> + </xplan:BP_GruenFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_916188a0-f5b0-4f17-942f-c25a0d915bd9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576444.052 5942422.671</gml:lowerCorner> + <gml:upperCorner>576444.052 5942422.671</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>text</xplan:art> + <xplan:art>nutzungsform</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_0e8dfd5a-603d-4c56-b846-5f5c1573c528" /> + <xplan:position> + <gml:Point gml:id="Gml_423526DF-A419-4FB5-A137-415F016AF445" srsName="EPSG:25832"> + <gml:pos>576444.052 5942422.671</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_b1826698-ecc5-4cb0-9c88-d5afe1f31b5d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576538.104 5942442.549</gml:lowerCorner> + <gml:upperCorner>576552.134 5942461.036</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_45BA466C-BAEF-4B9F-88AC-FA52A0B79002" srsName="EPSG:25832"> + <gml:posList>576538.104 5942460.636 576538.64 5942442.549 576552.134 5942442.955 + 576551.598 5942461.036 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_60fb20fd-8cd3-4173-ac56-880f4451e4d8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576543.221 5942428.491</gml:lowerCorner> + <gml:upperCorner>576543.221 5942428.491</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">48.4</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_A50B9AF6-B9E6-43E7-9822-B2A5C0B4575E" srsName="EPSG:25832"> + <gml:pos>576543.221 5942428.491</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_11901099-8d74-4850-8177-6541547ab30b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576585.605 5942419.368</gml:lowerCorner> + <gml:upperCorner>576600.713 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_E9B5ABE5-D758-43B5-8F6F-B67DE8D0FE97" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576600.713 5942419.649 576599.891 5942440.018 576598.756 5942468.151 + 576594.615 5942570.631 576588.214 5942571.795 576585.605 5942570.928 + 576587.244 5942530.136 576590.82 5942519.15 576591.61 5942515.589 + 576592.25 5942494.172 576591.693 5942485.065 576590.737 5942484.009 + 576590.328 5942483.557 576592.094 5942439.776 576592.923 5942419.368 + 576600.713 5942419.649 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>3000</xplan:massnahme> + <xplan:gegenstand>2000</xplan:gegenstand> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_42c7fef5-324b-4253-ada5-725c99cb27cf"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.434 5942434.919</gml:lowerCorner> + <gml:upperCorner>576462.798 5942522.771</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>1</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_00f7eff9-1faf-4448-8ec7-1f0ef6c16d6d" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_05afd08d-622c-4587-829b-6e25b25c7e97" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_c233cc65-4339-4252-934c-24fb7eb2ad14" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_b4003c7b-9bc5-4d29-8de8-ddc80de9f251" /> + <xplan:refTextInhalt xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:refTextInhalt xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:refTextInhalt xlink:href="#GML_78445473-8bfb-4234-bcfa-9675e3c39fe7" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:position> + <gml:Polygon gml:id="Gml_C2C76A25-90BC-4E17-988F-5E559A540A58" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576442.293 5942514.335 576446.184 5942515.628 576444.447 5942520.855 + 576440.649 5942522.771 576416.434 5942514.7 576419.618 5942443.127 + 576431.773 5942443.668 576436.179 5942434.919 576462.798 5942435.749 + 576461.588 5942474.628 576455.548 5942474.449 576442.293 5942514.335 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:dachgestaltung> + <xplan:BP_Dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + </xplan:BP_Dachgestaltung> + </xplan:dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + <xplan:GRZ>0.5</xplan:GRZ> + <xplan:besondereArtDerBaulNutzung>1500</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_00f7eff9-1faf-4448-8ec7-1f0ef6c16d6d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576427.154 5942469.442</gml:lowerCorner> + <gml:upperCorner>576427.154 5942469.442</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:position> + <gml:Point gml:id="Gml_09CD11D1-86C9-40C5-BB5C-E6477518ED4A" srsName="EPSG:25832"> + <gml:pos>576427.154 5942469.442</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_05afd08d-622c-4587-829b-6e25b25c7e97"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576427.882 5942462.534</gml:lowerCorner> + <gml:upperCorner>576427.882 5942462.534</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:position> + <gml:Point gml:id="Gml_CD229C09-23ED-4116-AD4C-17EC5C8613D0" srsName="EPSG:25832"> + <gml:pos>576427.882 5942462.534</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_c233cc65-4339-4252-934c-24fb7eb2ad14"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576426.972 5942457.081</gml:lowerCorner> + <gml:upperCorner>576426.972 5942457.081</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>dachgestaltung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:position> + <gml:Point gml:id="Gml_B525CF40-F0EC-4618-A4B5-D90F7294B62A" srsName="EPSG:25832"> + <gml:pos>576426.972 5942457.081</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Immissionsschutz gml:id="GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576422.504 5942410.205</gml:lowerCorner> + <gml:upperCorner>576593.045 5942439.776</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>2000</xplan:hoehenbezug> + <xplan:bezugspunkt>3000</xplan:bezugspunkt> + <xplan:h uom="m">9</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_71de5645-d06c-4eb8-82f7-97b8bf8a00e9" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_6a527b3a-3287-42fe-8705-d1e28dcbb3d7" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_15890cb4-3da8-43fc-ab37-2c9ecc3cd74c" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_F5AFE5F1-1B38-44C5-AD1B-FCC51BF90F23" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.094 5942439.776 576422.504 5942434.534 576423.587 5942410.205 + 576430.543 5942410.41 576480.297 5942411.883 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.545 5942413.603 576593.045 5942416.37 + 576592.923 5942419.368 576592.094 5942439.776 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:nutzung>Fläche für besondere Anlagen</xplan:nutzung> + <xplan:typ>2000</xplan:typ> + <xplan:technVorkehrung>10002</xplan:technVorkehrung> + <xplan:detaillierteTechnVorkehrung>Schutzwall mit Schutzwand</xplan:detaillierteTechnVorkehrung> + </xplan:BP_Immissionsschutz> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_71de5645-d06c-4eb8-82f7-97b8bf8a00e9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576532.471 5942420.745</gml:lowerCorner> + <gml:upperCorner>576532.471 5942420.745</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:position> + <gml:Point gml:id="Gml_B1B165EE-577A-4C64-95D1-4BDBE2982187" srsName="EPSG:25832"> + <gml:pos>576532.471 5942420.745</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">1.73</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_6a527b3a-3287-42fe-8705-d1e28dcbb3d7"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576526.885 5942431.723</gml:lowerCorner> + <gml:upperCorner>576526.885 5942431.723</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:schriftinhalt>Schutzwall mit Schutzwand</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_986BFC9C-9F25-4AE6-ABFF-55D439D66163" srsName="EPSG:25832"> + <gml:pos>576526.885 5942431.723</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">1.36</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_15890cb4-3da8-43fc-ab37-2c9ecc3cd74c"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576523.225 5942422.286</gml:lowerCorner> + <gml:upperCorner>576523.225 5942422.286</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>hoehenangabe</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:position> + <gml:Point gml:id="Gml_1544F56F-5AFF-403C-870B-423DF4BCE2F1" srsName="EPSG:25832"> + <gml:pos>576523.225 5942422.286</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_ba300100-99e7-4741-8fc0-323cbfe283f3"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576554.382 5942533.416</gml:lowerCorner> + <gml:upperCorner>576572.897 5942554.84</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_A2BFA3B1-2597-414F-BB16-42BF09149D59" srsName="EPSG:25832"> + <gml:posList>576572.897 5942537.673 576567.193 5942554.84 576554.382 5942550.583 + 576560.087 5942533.416 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_269bef7b-7d34-40e6-b48d-611a5001ab73"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576521.453 5942522.473</gml:lowerCorner> + <gml:upperCorner>576539.969 5942543.897</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_a5d113d2-aae0-4d37-be0d-86c438e4381f" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_86CA0A7F-1439-43B9-B28B-332C6D6BF23E" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576539.969 5942526.73 576534.264 5942543.897 576521.453 5942539.64 + 576527.157 5942522.473 576539.969 5942526.73 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_a5d113d2-aae0-4d37-be0d-86c438e4381f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576530.711 5942533.185</gml:lowerCorner> + <gml:upperCorner>576530.711 5942533.185</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_269bef7b-7d34-40e6-b48d-611a5001ab73" /> + <xplan:position> + <gml:Point gml:id="Gml_4B749696-FBE8-46FF-BBB4-FBB2B6FF741B" srsName="EPSG:25832"> + <gml:pos>576530.711 5942533.185</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_e3d2f053-c8ae-498f-aab5-b497490ec636"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576625.089 5942561.859</gml:lowerCorner> + <gml:upperCorner>576625.089 5942561.859</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">40.6</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_5E20D2F4-BC0B-4861-A740-189B030A4E38" srsName="EPSG:25832"> + <gml:pos>576625.089 5942561.859</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_f352bbb5-f0e0-4059-8c86-61f393a9c732"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576476.841 5942424.932</gml:lowerCorner> + <gml:upperCorner>576476.841 5942424.932</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">48.2</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_2F7B240E-C36F-46BF-871B-C22FA919CD2D" srsName="EPSG:25832"> + <gml:pos>576476.841 5942424.932</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_6bd85817-ed09-4b54-8ffa-d1faa982d616"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576537.705 5942460.636</gml:lowerCorner> + <gml:upperCorner>576586.283 5942475.557</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_c50c09c9-84d0-48ad-8c29-0a823b223514" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_A4A13CE9-607A-47FF-9744-07380B8A4CCF" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576586.283 5942462.063 576585.884 5942475.557 576537.705 5942474.13 + 576538.104 5942460.636 576586.283 5942462.063 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_c50c09c9-84d0-48ad-8c29-0a823b223514"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576561.994 5942468.096</gml:lowerCorner> + <gml:upperCorner>576561.994 5942468.096</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_6bd85817-ed09-4b54-8ffa-d1faa982d616" /> + <xplan:position> + <gml:Point gml:id="Gml_E89E7982-1495-4818-8010-FEB219E2A2F2" srsName="EPSG:25832"> + <gml:pos>576561.994 5942468.096</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_1ce434d3-ca84-4476-8cb2-18cd42647531"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576585.605 5942419.368</gml:lowerCorner> + <gml:upperCorner>576600.713 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(E)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_4ebd4bb6-0bf4-460b-a23a-bdd149ebef6f" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_33707095-3440-490b-9d83-c362569a0ef4" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_51a21b00-c38b-4ff7-bc86-766994a242f1" /> + <xplan:position> + <gml:Polygon gml:id="Gml_6661044E-F178-4304-999B-350A12931C85" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576600.713 5942419.649 576599.891 5942440.018 576598.756 5942468.151 + 576594.615 5942570.631 576588.214 5942571.795 576585.605 5942570.928 + 576587.244 5942530.136 576590.82 5942519.15 576591.61 5942515.589 + 576592.25 5942494.172 576591.693 5942485.065 576590.737 5942484.009 + 576590.328 5942483.557 576592.094 5942439.776 576592.923 5942419.368 + 576600.713 5942419.649 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_4ebd4bb6-0bf4-460b-a23a-bdd149ebef6f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576593.85 5942426.013</gml:lowerCorner> + <gml:upperCorner>576593.85 5942426.013</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1ce434d3-ca84-4476-8cb2-18cd42647531" /> + <xplan:schriftinhalt>(E)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_DAA4094B-66C4-4EA0-8CCA-08156FD0C908" srsName="EPSG:25832"> + <gml:pos>576593.85 5942426.013</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_33707095-3440-490b-9d83-c362569a0ef4"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576588.391 5942549.915</gml:lowerCorner> + <gml:upperCorner>576588.391 5942549.915</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1ce434d3-ca84-4476-8cb2-18cd42647531" /> + <xplan:position> + <gml:Point gml:id="Gml_0D04349C-0851-4988-A134-916A84BD89BE" srsName="EPSG:25832"> + <gml:pos>576588.391 5942549.915</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_c94e422a-b3ed-4d92-95d5-8dc4c189650e"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.633 5942440.616</gml:lowerCorner> + <gml:upperCorner>576486.662 5942459.097</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_5c143714-4150-4f49-8d5a-d2b826e7958d" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_86CFF1EA-9CD4-44F8-893A-84AC2524D58A" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576486.662 5942441.015 576486.123 5942459.097 576472.633 5942458.698 + 576473.168 5942440.616 576486.662 5942441.015 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_5c143714-4150-4f49-8d5a-d2b826e7958d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576479.647 5942449.856</gml:lowerCorner> + <gml:upperCorner>576479.647 5942449.856</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_c94e422a-b3ed-4d92-95d5-8dc4c189650e" /> + <xplan:position> + <gml:Point gml:id="Gml_9E604246-64EE-4B39-8960-6075D6DF1E1F" srsName="EPSG:25832"> + <gml:pos>576479.647 5942449.856</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_96a7bd77-f199-4cea-84d3-fdbabfe3f643"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576420.864 5942475.609</gml:lowerCorner> + <gml:upperCorner>576439.57 5942509.053</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_BF5A027E-8523-4803-9E49-2A930DEAF507" srsName="EPSG:25832"> + <gml:posList>576429.409 5942509.053 576420.864 5942506.213 576431.033 5942475.609 + 576439.57 5942478.445 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_a95a1007-a70f-474c-b791-ffb675af4015"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576554.382 5942533.416</gml:lowerCorner> + <gml:upperCorner>576572.897 5942554.84</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_bc8efcd2-efba-4a41-bd7f-6d3b26f272de" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_F028F04C-B735-4219-88E3-6BB8361773F8" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576572.897 5942537.673 576567.193 5942554.84 576554.382 5942550.583 + 576560.087 5942533.416 576572.897 5942537.673 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_bc8efcd2-efba-4a41-bd7f-6d3b26f272de"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576563.64 5942544.128</gml:lowerCorner> + <gml:upperCorner>576563.64 5942544.128</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_a95a1007-a70f-474c-b791-ffb675af4015" /> + <xplan:position> + <gml:Point gml:id="Gml_D1A4B981-C2ED-4A8E-9DE2-2096B4A89B4D" srsName="EPSG:25832"> + <gml:pos>576563.64 5942544.128</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_bff9a682-a559-4db3-a3b5-4fabc70907a6"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576507.318 5942441.643</gml:lowerCorner> + <gml:upperCorner>576521.347 5942460.124</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_0FACB72B-CF29-4B20-8D51-169C6A33252B" srsName="EPSG:25832"> + <gml:posList>576507.318 5942459.725 576507.853 5942441.643 576521.347 5942442.042 + 576520.812 5942460.124 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_b021ad8f-e4d0-498b-896a-2db5e334ff4d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.234 5942458.698</gml:lowerCorner> + <gml:upperCorner>576520.812 5942473.618</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_897356A8-AA23-4516-876B-8478DC890765" srsName="EPSG:25832"> + <gml:posList>576520.812 5942460.124 576520.412 5942473.618 576472.234 5942472.192 + 576472.633 5942458.698 576520.812 5942460.124 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_3264fd82-1958-4a67-8673-42cb63036f17"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576430.41 5942410.41</gml:lowerCorner> + <gml:upperCorner>576480.297 5942414.884</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(G)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_8ded082b-f799-4b8c-ba49-a1aa23a63d8f" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_8d149ef7-4b94-40d9-b994-6b222dd4734e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_661BD052-7B0B-4F02-9D56-E73365408ACC" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576480.297 5942411.883 576480.266 5942414.884 576430.41 5942413.408 + 576430.543 5942410.41 576480.297 5942411.883 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_8ded082b-f799-4b8c-ba49-a1aa23a63d8f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576438.813 5942411.191</gml:lowerCorner> + <gml:upperCorner>576438.813 5942411.191</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3264fd82-1958-4a67-8673-42cb63036f17" /> + <xplan:schriftinhalt>(G)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_4011D498-541E-4E02-ADA3-4DCA81C0B306" srsName="EPSG:25832"> + <gml:pos>576438.813 5942411.191</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_109fb3fb-2e1f-45a1-86af-2bb1dcc6d8ed"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576507.318 5942441.643</gml:lowerCorner> + <gml:upperCorner>576521.347 5942460.124</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_77b72a48-372d-482a-8355-c966829968ba" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_DCC44A0A-4326-475E-AA91-27E1A91DACBB" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576521.347 5942442.042 576520.812 5942460.124 576507.318 5942459.725 + 576507.853 5942441.643 576521.347 5942442.042 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_77b72a48-372d-482a-8355-c966829968ba"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576514.333 5942450.884</gml:lowerCorner> + <gml:upperCorner>576514.333 5942450.884</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_109fb3fb-2e1f-45a1-86af-2bb1dcc6d8ed" /> + <xplan:position> + <gml:Point gml:id="Gml_828F95B0-3615-43E8-87E5-E416611D22F6" srsName="EPSG:25832"> + <gml:pos>576514.333 5942450.884</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_1a6c9d6a-6e93-4854-9229-bd579e4d0df6"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576418.558 5942521.081</gml:lowerCorner> + <gml:upperCorner>576418.558 5942521.081</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">40.8</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_DA0366E5-D4A2-46F4-8230-D92E29C03B7F" srsName="EPSG:25832"> + <gml:pos>576418.558 5942521.081</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_a8fcb5cd-7364-46b6-8ad9-beb227979325"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576459.295 5942501.817</gml:lowerCorner> + <gml:upperCorner>576477.811 5942523.238</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_5ba9de57-cd5c-4658-a2af-afd65f5b25bf" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_7ACB1384-E59D-49D7-8A29-4BDBC2D5C149" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576477.811 5942506.074 576472.107 5942523.238 576459.295 5942518.984 + 576465 5942501.817 576477.811 5942506.074 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_5ba9de57-cd5c-4658-a2af-afd65f5b25bf"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576468.553 5942512.528</gml:lowerCorner> + <gml:upperCorner>576468.553 5942512.528</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_a8fcb5cd-7364-46b6-8ad9-beb227979325" /> + <xplan:position> + <gml:Point gml:id="Gml_7E18C026-8913-4867-AE06-C38408B722A2" srsName="EPSG:25832"> + <gml:pos>576468.553 5942512.528</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_35e891fa-16a4-4ac3-a5a5-c449ad78d271"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576620.053 5942520.948</gml:lowerCorner> + <gml:upperCorner>576620.053 5942520.948</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:position> + <gml:Point gml:id="Gml_71204A2B-FC75-41DC-92D7-8D3C84E8B0E8" srsName="EPSG:25832"> + <gml:pos>576620.053 5942520.948</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Bereich gml:id="Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576594.615 5942468.151</gml:lowerCorner> + <gml:upperCorner>576656.335 5942570.631</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:nummer>1</xplan:nummer> + <xplan:bedeutung>1600</xplan:bedeutung> + <xplan:geltungsbereich> + <gml:Polygon gml:id="Gml_01CD3DC3-47FA-4C69-B17E-D1758B7E5586" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576655.825 5942531.79 576639.6672 5942544.3423 576609.257 5942567.967 + 576594.615 5942570.631 576597.1439 5942508.047 576598.756 5942468.151 + 576611.81 5942468.677 576626.513 5942487.073 576625.447 5942487.931 + 576652.088 5942522.116 576656.335 5942527.565 576655.825 5942531.79 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:geltungsbereich> + <xplan:refScan> + <xplan:XP_ExterneReferenz> + <xplan:georefURL>BPlan001_5-2_Bereich1.pgw</xplan:georefURL> + <xplan:referenzURL>BPlan001_5-2_Bereich1.png</xplan:referenzURL> + </xplan:XP_ExterneReferenz> + </xplan:refScan> + <xplan:planinhalt xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:planinhalt xlink:href="#GML_f20bca86-bba8-47dc-b32c-2149f1816e55" /> + <xplan:planinhalt xlink:href="#GML_14188ee0-916a-4355-bafc-da98d2825c05" /> + <xplan:planinhalt xlink:href="#GML_e36ff7bb-13fd-4216-9ae6-f8b39c1ccdfc" /> + <xplan:planinhalt xlink:href="#GML_bbe87b33-5e0d-44cb-8e1c-79078f6c3bf0" /> + <xplan:praesentationsobjekt xlink:href="#GML_e1769717-420a-4fc2-9537-6edb0fd69083" /> + <xplan:praesentationsobjekt xlink:href="#GML_35e891fa-16a4-4ac3-a5a5-c449ad78d271" /> + <xplan:praesentationsobjekt xlink:href="#GML_91d05bc0-9d71-4382-88e4-d1c02c48cdaa" /> + <xplan:praesentationsobjekt xlink:href="#GML_0bf9f998-bd70-4fea-9cbc-2f2668f5839a" /> + <xplan:versionBauNVOText>Version vom 11.06.2013</xplan:versionBauNVOText> + <xplan:gehoertZuPlan xlink:href="#GML_1c23cbae-b6e9-4f21-b9c2-f3fc6df46545" /> + </xplan:BP_Bereich> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_bfa7ceb2-40d5-40ac-9023-7960473efb78"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576594.615 5942468.151</gml:lowerCorner> + <gml:upperCorner>576656.335 5942570.631</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>2</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_35e891fa-16a4-4ac3-a5a5-c449ad78d271" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_e1769717-420a-4fc2-9537-6edb0fd69083" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_91d05bc0-9d71-4382-88e4-d1c02c48cdaa" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:position> + <gml:Polygon gml:id="Gml_274C2988-8D2E-434D-A18F-773B257BEF77" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576611.81 5942468.677 576626.513 5942487.073 576625.447 5942487.931 + 576652.088 5942522.116 576656.335 5942527.565 576655.825 5942531.79 + 576609.257 5942567.967 576594.615 5942570.631 576598.756 5942468.151 + 576611.81 5942468.677 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:GRZ>0.4</xplan:GRZ> + <xplan:Z>2</xplan:Z> + <xplan:besondereArtDerBaulNutzung>1500</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_e1769717-420a-4fc2-9537-6edb0fd69083"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576620.962 5942527.931</gml:lowerCorner> + <gml:upperCorner>576620.962 5942527.931</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:position> + <gml:Point gml:id="Gml_555D03D5-C571-4D96-B7C9-6055E33D52B0" srsName="EPSG:25832"> + <gml:pos>576620.962 5942527.931</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_91d05bc0-9d71-4382-88e4-d1c02c48cdaa"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576622.145 5942515.494</gml:lowerCorner> + <gml:upperCorner>576622.145 5942515.494</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:position> + <gml:Point gml:id="Gml_21AAF525-E3BA-4255-AB43-719D06AF803A" srsName="EPSG:25832"> + <gml:pos>576622.145 5942515.494</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_f20bca86-bba8-47dc-b32c-2149f1816e55"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576602.018 5942468.433</gml:lowerCorner> + <gml:upperCorner>576652.088 5942561.023</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_FB5AD614-1127-47DA-B5DF-0EC0DEBFB49A" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576611.81 5942468.677 576626.513 5942487.073 576625.447 5942487.931 + 576652.088 5942522.116 576602.018 5942561.023 576605.75 5942468.433 + 576611.81 5942468.677 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:GRZ>0.4</xplan:GRZ> + <xplan:Z>2</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_14188ee0-916a-4355-bafc-da98d2825c05"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576602.018 5942468.433</gml:lowerCorner> + <gml:upperCorner>576652.088 5942561.023</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_19C015BE-B3C3-497A-89E7-6635318FC179" srsName="EPSG:25832"> + <gml:posList>576605.75 5942468.433 576611.81 5942468.677 576626.513 5942487.073 + 576625.434 5942487.914 576652.088 5942522.116 576602.018 5942561.023 + 576605.75 5942468.433 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_0bf9f998-bd70-4fea-9cbc-2f2668f5839a"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576609.908 5942485.248</gml:lowerCorner> + <gml:upperCorner>576609.908 5942485.248</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bbe87b33-5e0d-44cb-8e1c-79078f6c3bf0" /> + <xplan:schriftinhalt>(A)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_8907FAFE-54F5-4F51-AB0A-F33B8DB526C7" srsName="EPSG:25832"> + <gml:pos>576609.908 5942485.248</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_bbe87b33-5e0d-44cb-8e1c-79078f6c3bf0"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576597.144 5942468.151</gml:lowerCorner> + <gml:upperCorner>576656.335 5942544.342</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(A)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_0bf9f998-bd70-4fea-9cbc-2f2668f5839a" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_72584846-FFF5-4D02-8638-9C1108BA41F1" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576652.088 5942522.116 576656.335 5942527.565 576655.825 5942531.79 + 576639.667 5942544.342 576605.88 5942500.937 576605.337 5942501.379 + 576597.144 5942508.047 576598.756 5942468.151 576611.81 5942468.677 + 576626.513 5942487.073 576625.447 5942487.931 576652.088 5942522.116 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_NutzungsartenGrenze gml:id="GML_e36ff7bb-13fd-4216-9ae6-f8b39c1ccdfc"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576597.149 5942500.937</gml:lowerCorner> + <gml:upperCorner>576639.667 5942544.342</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:text>Sonstige Abgrenzung</xplan:text> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_4EB3DC53-BBEC-4D5A-8960-C7AF1579E367" srsName="EPSG:25832"> + <gml:posList>576639.667 5942544.342 576605.88 5942500.937 576597.149 5942508.043 + </gml:posList> + </gml:LineString> + </xplan:position> + <xplan:typ>9999</xplan:typ> + </xplan:BP_NutzungsartenGrenze> + </gml:featureMember> +</xplan:XPlanAuszug> \ No newline at end of file diff --git a/xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_NoGemeinden.gml b/xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_NoGemeinden.gml new file mode 100644 index 0000000000..21dfbf639b --- /dev/null +++ b/xplan-database/xplan-database-scripts/src/test/resources/BPlan001_5-2_NoGemeinden.gml @@ -0,0 +1,2964 @@ +<?xml version="1.0" encoding="utf-8"?> +<xplan:XPlanAuszug xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" gml:id="Gml_1EE271CF-56BA-4C7B-82BC-C26862404C1A" xsi:schemaLocation="http://www.xplanung.de/xplangml/5/2 http://www.xplanungwiki.de/upload/XPlanGML/5.2/Schema/XPlanung-Operationen.xsd" xmlns:xplan="http://www.xplanung.de/xplangml/5/2"> + <!-- Testplan mit zwei BP_Bereich Objekten und Rasterdaten --> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942410.13</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <gml:featureMember> + <xplan:BP_Plan gml:id="GML_1c23cbae-b6e9-4f21-b9c2-f3fc6df46545"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942410.13</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:name>BPlan001_5-2 Bereiche</xplan:name> + <xplan:beschreibung>Der vorhabenbezogene Bebauungsplan BPlan001_5-2 für das Gebiet südlich Schierenberg, westlich Saseler Straße (Bezirk Wandsbek, Ortsteil 526) wird festgestellt. Das Plangebiet wird wie folgt begrenzt: Schierenberg – Saseler Straße – Südostgrenze des Flurstücks 129, über das Flur-stück 5687, Südgrenzen der Flurstücke 5687 und 5684, Ostgrenzen der Flurstücke 4402 und 4403, über die Flurstücke 4403 und 4401 und Westgrenzen der Flurstücke 4401 und 4400 der Gemarkung Meiendorf.</xplan:beschreibung> + <xplan:technHerstellDatum>2016-07-21</xplan:technHerstellDatum> + <xplan:erstellungsMassstab>1000</xplan:erstellungsMassstab> + <xplan:raeumlicherGeltungsbereich> + <gml:Polygon gml:id="Gml_B44A56A5-756B-4732-A2F4-57356F2A7CD9" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576599.891 5942440.018 576598.756 5942468.151 576611.81 5942468.677 + 576626.513 5942487.073 576625.447 5942487.931 576652.088 5942522.116 + 576656.335 5942527.565 576655.825 5942531.79 576662.68 5942540.274 + 576601.22 5942588.473 576588.349 5942584.209 576416.125 5942527.154 + 576416.434 5942514.7 576419.617 5942443.127 576419.938 5942435.927 + 576421.087 5942410.13 576423.587 5942410.205 576480.297 5942411.883 + 576480.165 5942424.848 576485.589 5942430.139 576505.565 5942430.669 + 576512.841 5942426.038 576516.148 5942426.171 576516.545 5942413.603 + 576593.045 5942416.37 576600.834 5942416.652 576599.891 5942440.018 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:raeumlicherGeltungsbereich> + <xplan:texte xlink:href="#GML_b4003c7b-9bc5-4d29-8de8-ddc80de9f251" /> + <xplan:texte xlink:href="#GML_51a21b00-c38b-4ff7-bc86-766994a242f1" /> + <xplan:texte xlink:href="#GML_c61d212b-e6b2-45c8-8d13-640d1550668e" /> + <xplan:texte xlink:href="#GML_ad4a57ec-d094-4fb7-bf50-96dd5537d474" /> + <xplan:texte xlink:href="#GML_8d149ef7-4b94-40d9-b994-6b222dd4734e" /> + <xplan:texte xlink:href="#GML_abd5458e-92a4-4620-b6ec-944a997c3fcf" /> + <xplan:texte xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:texte xlink:href="#GML_28cf5e05-9279-4205-946b-aad02be217dd" /> + <xplan:texte xlink:href="#GML_78445473-8bfb-4234-bcfa-9675e3c39fe7" /> + <xplan:texte xlink:href="#GML_e54b2640-a9f8-4b60-be2b-11345fb076b4" /> + <xplan:texte xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:texte xlink:href="#GML_0b4c3abf-323c-4369-bba0-fdaf90a05e18" /> + <xplan:texte xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:texte xlink:href="#GML_1ed1108a-2204-47f8-822f-08e3ddc697e2" /> + <xplan:texte xlink:href="#GML_854a644c-3f65-4596-8362-c6eb77cb747d" /> + <xplan:texte xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:texte xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:texte xlink:href="#GML_7c360c93-0ccf-44bd-85cd-3c9c54647cc8" /> + <xplan:texte xlink:href="#GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a" /> + <xplan:texte xlink:href="#GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e" /> + <xplan:texte xlink:href="#GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9" /> + <xplan:texte xlink:href="#GML_b63ca453-1e1e-4f09-b99f-bc4dec515188" /> + <xplan:texte xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:texte xlink:href="#GML_a3c27752-304e-4220-8eed-a2d91f2531d7" /> + <xplan:planArt>3000</xplan:planArt> + <xplan:verfahren>1000</xplan:verfahren> + <xplan:rechtsstand>3000</xplan:rechtsstand> + <xplan:rechtsverordnungsDatum>2016-06-21</xplan:rechtsverordnungsDatum> + <xplan:durchfuehrungsVertrag>true</xplan:durchfuehrungsVertrag> + <xplan:versionBauNVOText>Version vom 11.06.2013</xplan:versionBauNVOText> + <xplan:bereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:bereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + </xplan:BP_Plan> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_b4003c7b-9bc5-4d29-8de8-ddc80de9f251"> + <xplan:schluessel>§2 Nr.15</xplan:schluessel> + <xplan:text>Für festgesetzte Einzelbäume sowie auf den Flächen für + die Erhaltung und zum Anpflanzen von Bäumen und + Sträuchern sind bei Abgang gleichwertige Ersatzpflanzungen + vorzunehmen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_51a21b00-c38b-4ff7-bc86-766994a242f1"> + <xplan:schluessel>§2 Nr.14</xplan:schluessel> + <xplan:text>Auf der mit „(E)“ bezeichneten Fläche für die Erhaltung + und zum Anpflanzen von Bäumen und Sträuchern sind + Lücken mit Bäumen und Sträuchern so zu schließen sowie + Wall-Aufsetzarbeiten so durchzuführen, dass der Charakter + und Aufbau eines Knicks erhalten bleibt.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_c61d212b-e6b2-45c8-8d13-640d1550668e"> + <xplan:schluessel>§2 Nr.23</xplan:schluessel> + <xplan:text>Auf der mit „(F)“ bezeichneten Fläche für Maßnahmen + zum Schutz, zur Pflege und zur Entwicklung von Boden, + Natur und Landschaft ist eine mindestens 250 m² große + Hochstaudenflur herzustellen. Die Fläche ist allseitig einzuzäunen + und zu dem mit „MI 1“ bezeichneten Mischgebiet zusätzlich mit einer vorgelagerten, dichtwachsenden + zweireihigen Strauchhecke abzupflanzen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_ad4a57ec-d094-4fb7-bf50-96dd5537d474"> + <xplan:schluessel>§2 Nr.10</xplan:schluessel> + <xplan:text>Einseitig zu den mit „(B)“ gekennzeichneten Gebäudeseiten + ausgerichtete Wohnungen sind unzulässig. Zu den mit + „(C)“ gekennzeichneten Gebäudeseiten ausgerichtete + offene Außenwohnbereiche (zum Beispiel Balkone, Loggien, + Terrassen) sind unzulässig. An den mit „(C)“ gekennzeichneten + Gebäudeseiten sind entweder vor den Aufenthaltsräumen + verglaste Vorbauten wie zum Beispiel Doppelfassaden, + verglaste Loggien, Wintergärten, verglaste + Laubengänge oder in ihrer Wirkung vergleichbare Maßnahmen + vorzusehen oder in den Aufenthaltsräumen durch + geeignete bauliche Schallschutzmaßnahmen wie zum Beispiel + Doppelfassaden, verglaste Vorbauten, besondere + Fensterkonstruktionen oder in ihrer Wirkung vergleichbare + Maßnahmen sicherzustellen, dass durch diese baulichen + Maßnahmen insgesamt eine Schallpegeldifferenz + erreicht wird, die es ermöglicht, dass in Aufenthaltsräumen + ein lnnenraumpegel von 40 dB(A) während der Tagzeit + und 30 dB(A) während der Nachtzeit bei teilgeöffneten + Fenstern nicht überschritten wird.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_8d149ef7-4b94-40d9-b994-6b222dd4734e"> + <xplan:schluessel>§2 Nr.24</xplan:schluessel> + <xplan:text>Auf den mit „(G)“ bezeichneten Flächen für Maßnahmen + zum Schutz, zur Pflege und zur Entwicklung von Boden, + Natur und Landschaft ist jeweils eine dichtwachsende + zweireihige Strauchhecke aus dornenbewehrten Arten + anzupflanzen und auf der Südseite einzuzäunen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_abd5458e-92a4-4620-b6ec-944a997c3fcf"> + <xplan:schluessel>§2 Nr.18</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in dem mit „MI 1“ + bezeichneten Mischgebiet sind Standplätze für Abfallbehälter + außerhalb von Gebäuden mit Sträuchern oder + Hecken einzugrünen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_6c87c405-f456-4a52-ae02-d345333bc7c2"> + <xplan:schluessel>§2 Nr.19</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in dem mit „MI 1“ + bezeichneten Mischgebiet sind die Dachflächen von + Gebäuden und Carports mit einem mindestens 8 cm starken + durchwurzelbaren Substrataufbau zu versehen und + mindestens extensiv zu begrünen. Ausnahmen für erforderliche + befestigte Flächen und anderweitige Nutzungen + können zugelassen werden.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_28cf5e05-9279-4205-946b-aad02be217dd"> + <xplan:schluessel>§2 Nr.20</xplan:schluessel> + <xplan:text>Nicht überbaute Tiefgaragen sind mit einem mindestens + 50 cm starken durchwurzelbaren Substrataufbau zu versehen + und dauerhaft zu begrünen. Ausnahmen für erforderliche + befestigte Flächen können zugelassen werden. + Für anzupflanzende Bäume auf Tiefgaragen muss auf einer + Fläche von mindestens 12 m² je Baum die Schichtstärke + des durchwurzelbaren Substrataufbaus mindestens 1 m + betragen. Tiefgaragenzufahrten sind baulich einzufassen + oder mit Rankgerüsten oder Pergolen zu überstellen und + mit Schling- oder Kletterpflanzen zu begrünen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_78445473-8bfb-4234-bcfa-9675e3c39fe7"> + <xplan:schluessel>§2 Nr.3</xplan:schluessel> + <xplan:text>In den Mischgebieten sind Gartenbaubetriebe und Tankstellen + unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_e54b2640-a9f8-4b60-be2b-11345fb076b4"> + <xplan:schluessel>§2 Nr.9</xplan:schluessel> + <xplan:text>Das festgesetzte Gehrecht auf dem Flurstück 4402 der + Gemarkung Meiendorf umfasst die Befugnis der Freien + und Hansestadt Hamburg zu verlangen, dass die bezeichnete + Fläche dem allgemeinen Fußgängerverkehr als Gehweg + zur Verfügung gestellt wird.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_da22f094-ff79-47c3-905d-57125ad15bbe"> + <xplan:schluessel>§2 Nr.8</xplan:schluessel> + <xplan:text>Eine Ãœberschreitung der Baugrenzen durch Balkone um + bis zu 1,5 m, durch Wintergärten um bis zu 1,75 m sowie + durch ebenerdige Terrassen um bis zu 3 m, kann zugelassen + werden.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_0b4c3abf-323c-4369-bba0-fdaf90a05e18"> + <xplan:schluessel>§2 Nr.13</xplan:schluessel> + <xplan:text>Auf der mit „(D)“ bezeichneten Fläche für die Erhaltung + und zum Anpflanzen von Bäumen und Sträuchern sind + Lücken mit Bäumen und Sträuchern so zu schließen, dass + der Charakter und Aufbau des dichtwachsenden, gestuften + Schutzgrüns wieder hergestellt und dauerhaft erhalten + wird.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_ba86d815-a484-4530-83fe-ad2003191bdf"> + <xplan:schluessel>§2 Nr.21</xplan:schluessel> + <xplan:text>Auf den privaten Grundstücksflächen sind ebenerdige, + nicht überdachte Stellplätze in wasser- und luftdurchlässigem + Aufbau herzustellen. Feuerwehrumfahrten und -aufstellflächen + auf zu begrünenden Flächen sind in vegetationsfähigem + Aufbau (Schotterrasen) herzustellen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_1ed1108a-2204-47f8-822f-08e3ddc697e2"> + <xplan:schluessel>§2 Nr.22</xplan:schluessel> + <xplan:text>Drainagen oder sonstige bauliche oder technische Maßnahmen, + die zu einer dauerhaften Absenkung des vegetationsverfügbaren + Grundwasserspiegels beziehungsweise + von Staunässe führen, sind unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_854a644c-3f65-4596-8362-c6eb77cb747d"> + <xplan:schluessel>§2 Nr.7</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten sind Stellplätze nur in + Tiefgaragen zulässig. Tiefgaragen sind auch außerhalb der + Baugrenzen zulässig. Für Tiefgaragen und deren Zufahrten + kann die festgesetzte Grundflächenzahl bis zu einer + Grundflächenzahl von 0,8 in dem mit „WA 1“ und bis zu + einer Grundflächenzahl von 0,7 in dem mit „WA 2“ + bezeichneten Wohngebiet überschritten werden.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1"> + <xplan:schluessel>§2 Nr.6</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in dem mit „MI 1“ + bezeichneten Mischgebiet sind Staffelgeschosse unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_5060fe64-2557-4954-af7c-0f79ca0811dd"> + <xplan:schluessel>§2 Nr.17</xplan:schluessel> + <xplan:text>In den Baugebieten sind an Straßenverkehrsflächen + angrenzende Einfriedigungen nur in Form von Hecken + oder durchbrochenen Zäunen in Verbindung mit Hecken + zulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_7c360c93-0ccf-44bd-85cd-3c9c54647cc8"> + <xplan:schluessel>§2 Nr.1</xplan:schluessel> + <xplan:text>Im Rahmen der festgesetzten Nutzungen sind innerhalb + des Vorhabengebiets nur solche Vorhaben zulässig, zu + deren Durchführung sich der Vorhabenträger im Durchführungsvertrag + verpflichtet.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a"> + <xplan:schluessel>§2 Nr.2</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten werden Ausnahmen für + Gartenbaubetriebe und Tankstellen ausgeschlossen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e"> + <xplan:schluessel>§2 Nr.5</xplan:schluessel> + <xplan:text>Auf der mit „(A)“ bezeichneten Fläche des Mischgebiets + ist der dort vorhandene Tischlereibetrieb zulässig. Änderungen + und Erneuerungen der betrieblichen Anlagen können + ausnahmsweise zugelassen werden, wenn durch geeignete + Maßnahmen und bauliche Vorkehrungen, wie zum + Beispiel Einhausungen, sichergestellt wird, dass sich die + vom Betrieb ausgehenden Emissionen nicht erhöhen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9"> + <xplan:schluessel>§2 Nr.4</xplan:schluessel> + <xplan:text>In den gewerblich geprägten Teilen der Mischgebiete sind + Vergnügungsstätten, insbesondere Spielhallen, Wettbüros + und ähnliche Unternehmen im Sinne von § 1 Absatz 2 des + Hamburgischen Spielhallengesetzes vom 4. Dezember + 2012 (HmbGVBl. S. 505), die der Aufstellung von Spielgeräten + mit oder ohne Gewinnmöglichkeiten dienen und + Vorführ- und Geschäftsräume, deren Zweck auf Darstellungen + oder auf Handlungen mit sexuellem Charakter ausgerichtet + ist, unzulässig. In den übrigen Teilen der Mischgebiete + werden Ausnahmen für Vergnügungsstätten ausgeschlossen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_b63ca453-1e1e-4f09-b99f-bc4dec515188"> + <xplan:schluessel>§2 Nr.11</xplan:schluessel> + <xplan:text>Außerhalb von öffentlichen Straßenverkehrsflächen sind + Geländeaufhöhungen und Abgrabungen sowie Ablagerungen + im Kronenbereich zu erhaltender Bäume unzulässig.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6"> + <xplan:schluessel>§2 Nr.16</xplan:schluessel> + <xplan:text>In den allgemeinen Wohngebieten und in den Mischgebieten + ist für je angefangene 250 m² der nicht überbaubaren + Grundstücksfläche, einschließlich der zu begrünenden + unterbauten Flächen, ein kleinkroniger Baum oder für je + angefangene 500 m² mindestens ein großkroniger Baum zu + pflanzen.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextAbschnitt gml:id="GML_a3c27752-304e-4220-8eed-a2d91f2531d7"> + <xplan:schluessel>§2 Nr.12</xplan:schluessel> + <xplan:text>Für festgesetzte Anpflanzungen und für Ersatzpflanzungen + von Bäumen, Sträuchern und Hecken sind standortgerechte, + einheimische Laubgehölzarten zu verwenden + und dauerhaft zu erhalten. Ausnahmen können zugelassen + werden. Bäume müssen einen Stammumfang von mindestens + 18 cm, in 1 m Höhe über dem Erdboden gemessen, + aufweisen. Im Kronenbereich jedes Baumes ist eine offene + Vegetationsfläche von mindestens 12 m² anzulegen und zu + begrünen. Sträucher und Heckenpflanzen müssen mindestens + folgende Qualität aufweisen: Zweimal verpflanzt, + Höhe mindestens 60 cm.</xplan:text> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + </xplan:BP_TextAbschnitt> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Bereich gml:id="GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942410.13</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:nummer>0</xplan:nummer> + <xplan:bedeutung>1600</xplan:bedeutung> + <xplan:geltungsbereich> + <gml:Polygon gml:id="Gml_42F0B741-8812-464A-B458-486949C7E924" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576655.825 5942531.79 576662.68 5942540.274 576601.22 5942588.473 + 576588.349 5942584.209 576416.125 5942527.154 576416.434 5942514.7 + 576419.617 5942443.127 576419.938 5942435.927 576421.087 5942410.13 + 576423.587 5942410.205 576480.297 5942411.883 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.545 5942413.603 576593.045 5942416.37 + 576600.834 5942416.652 576599.891 5942440.018 576598.756 5942468.151 + 576597.1439 5942508.047 576594.615 5942570.631 576609.257 5942567.967 + 576639.6672 5942544.3423 576655.825 5942531.79 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:geltungsbereich> + <xplan:refScan> + <xplan:XP_ExterneReferenz> + <xplan:georefURL>BPlan001_5-2_Bereich0.pgw</xplan:georefURL> + <xplan:referenzURL>BPlan001_5-2_Bereich0.png</xplan:referenzURL> + </xplan:XP_ExterneReferenz> + </xplan:refScan> + <xplan:planinhalt xlink:href="#GML_0a7293a1-8897-42a2-8f7d-8e652a2f3a04" /> + <xplan:planinhalt xlink:href="#GML_f58a0678-d7ea-409c-94ba-a3c3c199f8e3" /> + <xplan:planinhalt xlink:href="#GML_4a804a8a-3125-455e-a89a-bf3783b92da1" /> + <xplan:planinhalt xlink:href="#GML_2aa72a5e-4e29-4258-9969-aca657c6774e" /> + <xplan:planinhalt xlink:href="#GML_8f0e7555-075d-4dd0-957a-bc93c5a42c1e" /> + <xplan:planinhalt xlink:href="#GML_3981919b-339d-47be-8361-fa38881dcb29" /> + <xplan:planinhalt xlink:href="#GML_49ddaa03-f4e7-4847-a4b6-275295694227" /> + <xplan:planinhalt xlink:href="#GML_7f7168b3-920f-4672-85de-df3b8a712c6f" /> + <xplan:planinhalt xlink:href="#GML_c662dafa-b6fc-4115-a0a0-3e53c1094a99" /> + <xplan:planinhalt xlink:href="#GML_59d9124b-f014-4c8b-a9d1-d11638a73bca" /> + <xplan:planinhalt xlink:href="#GML_7a1a96af-d38b-4325-a0bd-f1e1e4ce9680" /> + <xplan:planinhalt xlink:href="#GML_85090559-3c6e-4f29-bb6e-418f2f7bff9c" /> + <xplan:planinhalt xlink:href="#GML_627b957f-ad28-472d-a7c8-5aeb75e823a1" /> + <xplan:planinhalt xlink:href="#GML_6faad647-0a64-405e-a0be-515184414780" /> + <xplan:planinhalt xlink:href="#GML_4c252228-adbf-4027-83ef-4a7373cf8ad9" /> + <xplan:planinhalt xlink:href="#GML_2f681dc9-7be4-43bd-8542-e801008aab39" /> + <xplan:planinhalt xlink:href="#GML_4edc6426-2d9d-4408-bbf6-0865c0271e08" /> + <xplan:planinhalt xlink:href="#GML_508ca656-eafb-48ff-9ee4-8cef746898ee" /> + <xplan:planinhalt xlink:href="#GML_df45a20e-be9e-4cb6-8053-21df2169c36b" /> + <xplan:planinhalt xlink:href="#GML_3951a89c-a3f9-4065-aa6d-767e9549235a" /> + <xplan:planinhalt xlink:href="#GML_842bad69-eb2b-43f4-bd1b-45dba4c33ef7" /> + <xplan:planinhalt xlink:href="#GML_038d8a87-7958-4bc0-b9a5-93f725ee77c9" /> + <xplan:planinhalt xlink:href="#GML_432bd289-8860-4325-88de-64896e887095" /> + <xplan:planinhalt xlink:href="#GML_c07fcf83-6309-40dd-86d0-b9ebc8f44055" /> + <xplan:planinhalt xlink:href="#GML_1e89c3a6-8e10-4354-abd2-a518e932c6fb" /> + <xplan:planinhalt xlink:href="#GML_3647946c-2a30-4078-909d-35f765227756" /> + <xplan:planinhalt xlink:href="#GML_ac8bcc7c-996b-403c-beda-0c44e62e5526" /> + <xplan:planinhalt xlink:href="#GML_1d7081c1-9315-478a-b33a-bba36110dd12" /> + <xplan:planinhalt xlink:href="#GML_3bbebe5a-71f8-4d11-b1e9-b8802aa0a2ec" /> + <xplan:planinhalt xlink:href="#GML_dad385e7-637b-40c7-8d96-ca50c85d4c6d" /> + <xplan:planinhalt xlink:href="#GML_631c2328-7244-4952-9fcd-9f7c993901b5" /> + <xplan:planinhalt xlink:href="#GML_f9aebab9-62a1-45e0-bcca-7998ec7156c2" /> + <xplan:planinhalt xlink:href="#GML_1f6bab62-0bb3-4fec-881e-b0cd25c51168" /> + <xplan:planinhalt xlink:href="#GML_47fb016d-dab5-4213-a4c1-deed9fb7dd94" /> + <xplan:planinhalt xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:planinhalt xlink:href="#GML_3b8a6af5-457e-4e0f-9e12-60b936cadfdf" /> + <xplan:planinhalt xlink:href="#GML_8047a192-d634-4414-b38a-950438ea177c" /> + <xplan:planinhalt xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:planinhalt xlink:href="#GML_0e8dfd5a-603d-4c56-b846-5f5c1573c528" /> + <xplan:planinhalt xlink:href="#GML_b1826698-ecc5-4cb0-9c88-d5afe1f31b5d" /> + <xplan:planinhalt xlink:href="#GML_60fb20fd-8cd3-4173-ac56-880f4451e4d8" /> + <xplan:planinhalt xlink:href="#GML_11901099-8d74-4850-8177-6541547ab30b" /> + <xplan:planinhalt xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:planinhalt xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:planinhalt xlink:href="#GML_ba300100-99e7-4741-8fc0-323cbfe283f3" /> + <xplan:planinhalt xlink:href="#GML_269bef7b-7d34-40e6-b48d-611a5001ab73" /> + <xplan:planinhalt xlink:href="#GML_e3d2f053-c8ae-498f-aab5-b497490ec636" /> + <xplan:planinhalt xlink:href="#GML_f352bbb5-f0e0-4059-8c86-61f393a9c732" /> + <xplan:planinhalt xlink:href="#GML_6bd85817-ed09-4b54-8ffa-d1faa982d616" /> + <xplan:planinhalt xlink:href="#GML_1ce434d3-ca84-4476-8cb2-18cd42647531" /> + <xplan:planinhalt xlink:href="#GML_c94e422a-b3ed-4d92-95d5-8dc4c189650e" /> + <xplan:planinhalt xlink:href="#GML_96a7bd77-f199-4cea-84d3-fdbabfe3f643" /> + <xplan:planinhalt xlink:href="#GML_a95a1007-a70f-474c-b791-ffb675af4015" /> + <xplan:planinhalt xlink:href="#GML_bff9a682-a559-4db3-a3b5-4fabc70907a6" /> + <xplan:planinhalt xlink:href="#GML_b021ad8f-e4d0-498b-896a-2db5e334ff4d" /> + <xplan:planinhalt xlink:href="#GML_3264fd82-1958-4a67-8673-42cb63036f17" /> + <xplan:planinhalt xlink:href="#GML_109fb3fb-2e1f-45a1-86af-2bb1dcc6d8ed" /> + <xplan:planinhalt xlink:href="#GML_1a6c9d6a-6e93-4854-9229-bd579e4d0df6" /> + <xplan:planinhalt xlink:href="#GML_a8fcb5cd-7364-46b6-8ad9-beb227979325" /> + <xplan:praesentationsobjekt xlink:href="#GML_8ded082b-f799-4b8c-ba49-a1aa23a63d8f" /> + <xplan:praesentationsobjekt xlink:href="#GML_4ebd4bb6-0bf4-460b-a23a-bdd149ebef6f" /> + <xplan:praesentationsobjekt xlink:href="#GML_00f7eff9-1faf-4448-8ec7-1f0ef6c16d6d" /> + <xplan:praesentationsobjekt xlink:href="#GML_5ba9de57-cd5c-4658-a2af-afd65f5b25bf" /> + <xplan:praesentationsobjekt xlink:href="#GML_1f29d226-6c44-4dd2-ac8e-d109edb17354" /> + <xplan:praesentationsobjekt xlink:href="#GML_05afd08d-622c-4587-829b-6e25b25c7e97" /> + <xplan:praesentationsobjekt xlink:href="#GML_71de5645-d06c-4eb8-82f7-97b8bf8a00e9" /> + <xplan:praesentationsobjekt xlink:href="#GML_c50c09c9-84d0-48ad-8c29-0a823b223514" /> + <xplan:praesentationsobjekt xlink:href="#GML_05d2bf60-cc10-4a38-ab83-d3af0057d8f7" /> + <xplan:praesentationsobjekt xlink:href="#GML_77b72a48-372d-482a-8355-c966829968ba" /> + <xplan:praesentationsobjekt xlink:href="#GML_b651ba20-7173-4b57-a0f7-cd61928b563b" /> + <xplan:praesentationsobjekt xlink:href="#GML_bc8efcd2-efba-4a41-bd7f-6d3b26f272de" /> + <xplan:praesentationsobjekt xlink:href="#GML_c233cc65-4339-4252-934c-24fb7eb2ad14" /> + <xplan:praesentationsobjekt xlink:href="#GML_5e9681f5-4c33-46f4-8113-b287cbe57b3a" /> + <xplan:praesentationsobjekt xlink:href="#GML_6a527b3a-3287-42fe-8705-d1e28dcbb3d7" /> + <xplan:praesentationsobjekt xlink:href="#GML_b4c0ed8b-3299-4bc4-bfd6-72a53a6957b8" /> + <xplan:praesentationsobjekt xlink:href="#GML_6bfad91a-e310-49d9-93ac-2677f9578e6d" /> + <xplan:praesentationsobjekt xlink:href="#GML_150032b9-df25-4c7a-abf2-b05693dcccba" /> + <xplan:praesentationsobjekt xlink:href="#GML_83094468-6c4d-4e1a-ad90-8a86710d3363" /> + <xplan:praesentationsobjekt xlink:href="#GML_33707095-3440-490b-9d83-c362569a0ef4" /> + <xplan:praesentationsobjekt xlink:href="#GML_0ab64645-e5c3-4661-b57e-ae29122cf610" /> + <xplan:praesentationsobjekt xlink:href="#GML_7796ee9b-c35f-4e4d-9309-269006f6ccf8" /> + <xplan:praesentationsobjekt xlink:href="#GML_ac19c4a5-51ea-4718-b2e3-98cff0c05273" /> + <xplan:praesentationsobjekt xlink:href="#GML_5c143714-4150-4f49-8d5a-d2b826e7958d" /> + <xplan:praesentationsobjekt xlink:href="#GML_cf666f15-e87c-4193-b484-68ccd5e72343" /> + <xplan:praesentationsobjekt xlink:href="#GML_94de2016-50e2-4e56-9819-3e80454a2a36" /> + <xplan:praesentationsobjekt xlink:href="#GML_c2a44c83-eb3f-46df-ba27-96f0ad9ab3c8" /> + <xplan:praesentationsobjekt xlink:href="#GML_cf3fbe32-bf2e-4dc1-8386-7ec5c0532f1b" /> + <xplan:praesentationsobjekt xlink:href="#GML_916188a0-f5b0-4f17-942f-c25a0d915bd9" /> + <xplan:praesentationsobjekt xlink:href="#GML_0bdc76ef-35d5-4c75-9d5b-fa3ea30ba4d1" /> + <xplan:praesentationsobjekt xlink:href="#GML_a5d113d2-aae0-4d37-be0d-86c438e4381f" /> + <xplan:praesentationsobjekt xlink:href="#GML_d0723b30-7904-45b2-9b6a-8b55bf18b911" /> + <xplan:praesentationsobjekt xlink:href="#GML_15890cb4-3da8-43fc-ab37-2c9ecc3cd74c" /> + <xplan:praesentationsobjekt xlink:href="#GML_231f5f5d-30e9-4114-a1ce-e88cd7e3d2b2" /> + <xplan:versionBauNVOText>Version vom 11.06.2013</xplan:versionBauNVOText> + <xplan:gehoertZuPlan xlink:href="#GML_1c23cbae-b6e9-4f21-b9c2-f3fc6df46545" /> + </xplan:BP_Bereich> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_SchutzPflegeEntwicklungsFlaeche gml:id="GML_0a7293a1-8897-42a2-8f7d-8e652a2f3a04"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576419.618 5942410.13</gml:lowerCorner> + <gml:upperCorner>576480.297 5942443.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_8FC74F80-50EF-486D-8307-D490AF0ACE15" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576429.724 5942428.829 576436.04 5942429.111 576436.179 5942434.919 + 576431.773 5942443.668 576419.618 5942443.127 576419.938 5942435.927 + 576421.087 5942410.13 576423.587 5942410.205 576480.297 5942411.883 + 576480.266 5942414.884 576430.41 5942413.408 576429.724 5942428.829 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:massnahme> + <xplan:XP_SPEMassnahmenDaten> + <xplan:klassifizMassnahme>9999</xplan:klassifizMassnahme> + </xplan:XP_SPEMassnahmenDaten> + </xplan:massnahme> + </xplan:BP_SchutzPflegeEntwicklungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_f58a0678-d7ea-409c-94ba-a3c3c199f8e3"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.409 5942439.738</gml:lowerCorner> + <gml:upperCorner>576456.937 5942513.277</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_94de2016-50e2-4e56-9819-3e80454a2a36" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_8B032B00-5C41-4665-AEBB-D70CD93CF481" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576456.937 5942440.135 576455.999 5942471.816 576442.12 5942513.277 + 576429.409 5942509.053 576442.564 5942469.424 576443.446 5942439.738 + 576456.937 5942440.135 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_94de2016-50e2-4e56-9819-3e80454a2a36"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576448.798 5942469.435</gml:lowerCorner> + <gml:upperCorner>576448.798 5942469.435</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_f58a0678-d7ea-409c-94ba-a3c3c199f8e3" /> + <xplan:position> + <gml:Point gml:id="Gml_0EFFA883-ADA4-47E1-BC24-0D01C2CA1E3A" srsName="EPSG:25832"> + <gml:pos>576448.798 5942469.435</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_4a804a8a-3125-455e-a89a-bf3783b92da1"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576572.789 5942443.581</gml:lowerCorner> + <gml:upperCorner>576586.817 5942462.063</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_59E6236F-03B6-42C7-823D-500C0FB971AF" srsName="EPSG:25832"> + <gml:posList>576572.789 5942461.663 576573.324 5942443.581 576586.817 5942443.98 + 576586.283 5942462.063 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_2aa72a5e-4e29-4258-9969-aca657c6774e"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576591.66 5942440.947</gml:lowerCorner> + <gml:upperCorner>576591.66 5942440.947</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">41.07</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_4A08737B-AB65-4E71-870D-CCF9770964B7" srsName="EPSG:25832"> + <gml:pos>576591.66 5942440.947</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_8f0e7555-075d-4dd0-957a-bc93c5a42c1e"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576492.223 5942512.76</gml:lowerCorner> + <gml:upperCorner>576510.74 5942534.189</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_C7C8333A-6BFA-4EA5-90D8-201E4A9BC1C1" srsName="EPSG:25832"> + <gml:posList>576510.74 5942517.017 576505.034 5942534.189 576492.223 5942529.932 + 576497.929 5942512.76 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_3981919b-339d-47be-8361-fa38881dcb29"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576527.157 5942509.662</gml:lowerCorner> + <gml:upperCorner>576577.155 5942537.673</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_7262C208-27C2-40E5-825A-2B6F908C00CB" srsName="EPSG:25832"> + <gml:posList>576531.415 5942509.662 576577.155 5942524.862 576572.897 5942537.673 + 576527.157 5942522.473 576531.415 5942509.662 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_StrassenbegrenzungsLinie gml:id="GML_49ddaa03-f4e7-4847-a4b6-275295694227"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.434 5942474.449</gml:lowerCorner> + <gml:upperCorner>576655.825 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_05FE9CA9-8375-4C41-9A09-82CF68E49E69" srsName="EPSG:25832"> + <gml:posList>576655.825 5942531.79 576609.257 5942567.967 576594.615 5942570.631 + 576588.214 5942571.795 576585.605 5942570.928 576580.138 5942569.112 + 576578.266 5942565.328 576584.585 5942546.633 576586.698 5942540.648 + 576584.613 5942538.256 576585.286 5942536.147 576587.281 5942530.022 + 576590.82 5942519.15 576591.61 5942515.589 576592.25 5942494.172 + 576591.693 5942485.065 576590.737 5942484.009 576589.163 5942482.269 + 576586.072 5942480.109 576582.576 5942478.696 576578.853 5942478.1 + 576461.588 5942474.628 576455.548 5942474.449 576442.293 5942514.335 + 576446.184 5942515.628 576444.447 5942520.855 576440.666 5942522.762 + 576416.434 5942514.7 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_StrassenbegrenzungsLinie> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_SchutzPflegeEntwicklungsFlaeche gml:id="GML_7f7168b3-920f-4672-85de-df3b8a712c6f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576516.45 5942413.603</gml:lowerCorner> + <gml:upperCorner>576593.045 5942419.368</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_84050227-8FC6-4370-931D-9671FAA1B42E" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576593.045 5942416.37 576592.923 5942419.368 576516.45 5942416.602 + 576516.545 5942413.603 576593.045 5942416.37 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + </xplan:BP_SchutzPflegeEntwicklungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_NebenanlagenFlaeche gml:id="GML_c662dafa-b6fc-4115-a0a0-3e53c1094a99"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576418.023 5942507.169</gml:lowerCorner> + <gml:upperCorner>576446.184 5942522.771</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_cf3fbe32-bf2e-4dc1-8386-7ec5c0532f1b" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_48BA4436-BD00-446D-9B35-C3F613165F85" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576442.293 5942514.335 576446.184 5942515.628 576444.447 5942520.855 + 576440.649 5942522.771 576418.023 5942515.238 576420.704 5942507.169 + 576442.293 5942514.335 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:zweckbestimmung>1000</xplan:zweckbestimmung> + </xplan:BP_NebenanlagenFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_cf3fbe32-bf2e-4dc1-8386-7ec5c0532f1b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576435.799 5942516.668</gml:lowerCorner> + <gml:upperCorner>576435.799 5942516.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>zweckbestimmung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_c662dafa-b6fc-4115-a0a0-3e53c1094a99" /> + <xplan:position> + <gml:Point gml:id="Gml_10F8E369-D6F9-43BF-A2CF-D948919422D5" srsName="EPSG:25832"> + <gml:pos>576435.799 5942516.668</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_KennzeichnungsFlaeche gml:id="GML_59d9124b-f014-4c8b-a9d1-d11638a73bca"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.434 5942410.13</gml:lowerCorner> + <gml:upperCorner>576600.834 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_D54DDA9F-AF71-431C-8205-1779FB76F6D5" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576599.891 5942440.018 576598.756 5942468.151 576594.615 5942570.631 + 576588.214 5942571.795 576585.605 5942570.928 576580.138 5942569.112 + 576566.153 5942564.472 576456.312 5942527.947 576440.649 5942522.771 + 576416.434 5942514.7 576419.618 5942443.127 576419.938 5942435.927 + 576421.087 5942410.13 576423.587 5942410.205 576480.297 5942411.883 + 576480.266 5942414.884 576480.165 5942424.848 576485.589 5942430.139 + 576505.565 5942430.669 576512.841 5942426.038 576516.148 5942426.171 + 576516.45 5942416.602 576516.545 5942413.603 576593.045 5942416.37 + 576600.834 5942416.652 576599.891 5942440.018 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:zweckbestimmung>8000</xplan:zweckbestimmung> + </xplan:BP_KennzeichnungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_7a1a96af-d38b-4325-a0bd-f1e1e4ce9680"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576501.302 5942537.538</gml:lowerCorner> + <gml:upperCorner>576501.302 5942537.538</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_77E2EAA8-5C2E-49C5-9583-3CC7E59C3435" srsName="EPSG:25832"> + <gml:pos>576501.302 5942537.538</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>1000</xplan:massnahme> + <xplan:gegenstand>1000</xplan:gegenstand> + <xplan:kronendurchmesser uom="m">1</xplan:kronendurchmesser> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Wegerecht gml:id="GML_85090559-3c6e-4f29-bb6e-418f2f7bff9c"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576569.222 5942517.447</gml:lowerCorner> + <gml:upperCorner>576584.731 5942558.997</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_e54b2640-a9f8-4b60-be2b-11345fb076b4" /> + <xplan:position> + <gml:Polygon gml:id="Gml_CF65598F-B8B1-4084-A0B3-278D15BEF5AA" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576584.731 5942518.078 576571.12 5942558.997 576569.222 5942558.366 + 576582.833 5942517.447 576584.731 5942518.078 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:typ>1000</xplan:typ> + </xplan:BP_Wegerecht> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_627b957f-ad28-472d-a7c8-5aeb75e823a1"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.724 5942413.408</gml:lowerCorner> + <gml:upperCorner>576592.923 5942439.776</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(E)</xplan:gliederung1> + <xplan:gliederung2>(D)</xplan:gliederung2> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_1f29d226-6c44-4dd2-ac8e-d109edb17354" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_231f5f5d-30e9-4114-a1ce-e88cd7e3d2b2" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_51a21b00-c38b-4ff7-bc86-766994a242f1" /> + <xplan:refTextInhalt xlink:href="#GML_0b4c3abf-323c-4369-bba0-fdaf90a05e18" /> + <xplan:position> + <gml:Polygon gml:id="Gml_2FF2D69E-EC33-4A9A-90DF-FAC9BDC31189" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.094 5942439.776 576462.797 5942435.779 576462.798 5942435.749 + 576436.179 5942434.919 576436.04 5942429.111 576429.724 5942428.829 + 576430.41 5942413.408 576480.266 5942414.884 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.45 5942416.602 576592.923 5942419.368 + 576592.094 5942439.776 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_1f29d226-6c44-4dd2-ac8e-d109edb17354"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576568.679 5942428.219</gml:lowerCorner> + <gml:upperCorner>576568.679 5942428.219</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung2</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_627b957f-ad28-472d-a7c8-5aeb75e823a1" /> + <xplan:position> + <gml:Point gml:id="Gml_E52F6BF7-2108-4AF5-A631-56D9347EF0EF" srsName="EPSG:25832"> + <gml:pos>576568.679 5942428.219</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_231f5f5d-30e9-4114-a1ce-e88cd7e3d2b2"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576469.912 5942419.198</gml:lowerCorner> + <gml:upperCorner>576469.912 5942419.198</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_627b957f-ad28-472d-a7c8-5aeb75e823a1" /> + <xplan:schriftinhalt>(E)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_1BA42B7E-4759-46A6-9C81-77DAD3858EA6" srsName="EPSG:25832"> + <gml:pos>576469.912 5942419.198</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_6faad647-0a64-405e-a0be-515184414780"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576521.453 5942522.473</gml:lowerCorner> + <gml:upperCorner>576539.969 5942543.897</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_F74A371C-2259-48CC-9B2E-26F408477805" srsName="EPSG:25832"> + <gml:posList>576539.969 5942526.73 576534.264 5942543.897 576521.453 5942539.64 + 576527.157 5942522.473 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_4c252228-adbf-4027-83ef-4a7373cf8ad9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576572.789 5942443.581</gml:lowerCorner> + <gml:upperCorner>576586.817 5942462.063</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_7796ee9b-c35f-4e4d-9309-269006f6ccf8" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_FD35F040-8775-4DC1-9250-378758802639" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576586.817 5942443.98 576586.283 5942462.063 576572.789 5942461.663 + 576573.324 5942443.581 576586.817 5942443.98 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_7796ee9b-c35f-4e4d-9309-269006f6ccf8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576579.803 5942452.822</gml:lowerCorner> + <gml:upperCorner>576579.803 5942452.822</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_4c252228-adbf-4027-83ef-4a7373cf8ad9" /> + <xplan:position> + <gml:Point gml:id="Gml_48C89054-C333-4A7D-AF36-555D000321D0" srsName="EPSG:25832"> + <gml:pos>576579.803 5942452.822</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_2f681dc9-7be4-43bd-8542-e801008aab39"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576537.705 5942460.636</gml:lowerCorner> + <gml:upperCorner>576586.283 5942475.557</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_E8B43C28-CCEA-409A-B4C4-41BC69BB5FE2" srsName="EPSG:25832"> + <gml:posList>576586.283 5942462.063 576585.884 5942475.557 576537.705 5942474.13 + 576538.104 5942460.636 576586.283 5942462.063 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_StrassenbegrenzungsLinie gml:id="GML_4edc6426-2d9d-4408-bbf6-0865c0271e08"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576454.397 5942483.772</gml:lowerCorner> + <gml:upperCorner>576585.945 5942564.472</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_88E0D2BE-19B0-4819-ACE4-91EDCC4574F2" srsName="EPSG:25832"> + <gml:posList>576454.397 5942524.162 576465.108 5942491.997 576466.066 5942489.137 + 576467.009 5942487.194 576468.029 5942485.955 576468.991 5942485.155 + 576470.103 5942484.509 576471.162 5942484.101 576472.593 5942483.814 + 576473.672 5942483.772 576476.148 5942483.813 576574.305 5942486.719 + 576577.618 5942487.564 576580.728 5942489.289 576582.388 5942490.772 + 576583.807 5942492.573 576585.186 5942495.361 576585.945 5942499.069 + 576585.446 5942515.928 576569.937 5942562.554 576566.153 5942564.472 + 576456.312 5942527.947 576454.397 5942524.162 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_StrassenbegrenzungsLinie> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_508ca656-eafb-48ff-9ee4-8cef746898ee"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576526.139 5942547.483</gml:lowerCorner> + <gml:upperCorner>576526.139 5942547.483</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_A77464E8-3EEA-4563-89AA-E2F6C5AE9CDC" srsName="EPSG:25832"> + <gml:pos>576526.139 5942547.483</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>1000</xplan:massnahme> + <xplan:gegenstand>1000</xplan:gegenstand> + <xplan:kronendurchmesser uom="m">1</xplan:kronendurchmesser> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_df45a20e-be9e-4cb6-8053-21df2169c36b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576432.12 5942433.33</gml:lowerCorner> + <gml:upperCorner>576432.12 5942433.33</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">41</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_538055B4-EC7C-44D1-AA88-29EC09D6278C" srsName="EPSG:25832"> + <gml:pos>576432.12 5942433.33</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_3951a89c-a3f9-4065-aa6d-767e9549235a"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576496.67 5942438.659</gml:lowerCorner> + <gml:upperCorner>576496.67 5942438.659</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">41.3</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_BD3ED782-9557-4BFF-A568-E292BDE2BA89" srsName="EPSG:25832"> + <gml:pos>576496.67 5942438.659</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_842bad69-eb2b-43f4-bd1b-45dba4c33ef7"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576459.295 5942501.817</gml:lowerCorner> + <gml:upperCorner>576477.811 5942523.238</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_372990D9-6C48-43BC-8C3F-06B2F1BFC3A8" srsName="EPSG:25832"> + <gml:posList>576477.811 5942506.074 576472.107 5942523.238 576459.295 5942518.984 + 576465 5942501.817 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_038d8a87-7958-4bc0-b9a5-93f725ee77c9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.633 5942440.616</gml:lowerCorner> + <gml:upperCorner>576486.662 5942459.097</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_4E0FB011-5E3E-475A-8808-2E858BC8591A" srsName="EPSG:25832"> + <gml:posList>576472.633 5942458.698 576473.168 5942440.616 576486.662 5942441.015 + 576486.123 5942459.097 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_432bd289-8860-4325-88de-64896e887095"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.724 5942413.408</gml:lowerCorner> + <gml:upperCorner>576592.924 5942439.776</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_AB7517F1-F72F-4904-BB4C-DEB195F3FF14" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.094 5942439.776 576462.797 5942435.779 576462.798 5942435.749 + 576436.179 5942434.919 576436.04 5942429.111 576429.724 5942428.829 + 576430.41 5942413.408 576480.266 5942414.884 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.45 5942416.602 576592.924 5942419.348 + 576592.094 5942439.776 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>3000</xplan:massnahme> + <xplan:gegenstand>2000</xplan:gegenstand> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_c07fcf83-6309-40dd-86d0-b9ebc8f44055"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576465 5942489.005</gml:lowerCorner> + <gml:upperCorner>576514.998 5942517.017</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_05d2bf60-cc10-4a38-ab83-d3af0057d8f7" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_FB6D84EF-CB63-49B8-BE50-BBE94261D7F0" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576514.998 5942504.206 576510.74 5942517.017 576465 5942501.817 + 576469.253 5942489.005 576514.998 5942504.206 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_05d2bf60-cc10-4a38-ab83-d3af0057d8f7"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576489.998 5942503.011</gml:lowerCorner> + <gml:upperCorner>576489.998 5942503.011</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_c07fcf83-6309-40dd-86d0-b9ebc8f44055" /> + <xplan:position> + <gml:Point gml:id="Gml_D2B10062-54FC-49BE-A1AD-3ECACA066190" srsName="EPSG:25832"> + <gml:pos>576489.998 5942503.011</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_1e89c3a6-8e10-4354-abd2-a518e932c6fb"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576465 5942489.005</gml:lowerCorner> + <gml:upperCorner>576514.998 5942517.017</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_36546E5E-F74F-4EA3-B4EC-2188D0F68F08" srsName="EPSG:25832"> + <gml:posList>576469.253 5942489.005 576514.998 5942504.206 576510.74 5942517.017 + 576465 5942501.817 576469.253 5942489.005 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_3647946c-2a30-4078-909d-35f765227756"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576527.157 5942509.662</gml:lowerCorner> + <gml:upperCorner>576577.155 5942537.673</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_b4c0ed8b-3299-4bc4-bfd6-72a53a6957b8" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_1E33130F-1378-41A7-BA51-66631721DF2F" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576577.155 5942524.862 576572.897 5942537.673 576527.157 5942522.473 + 576531.415 5942509.662 576577.155 5942524.862 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_b4c0ed8b-3299-4bc4-bfd6-72a53a6957b8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576552.156 5942523.668</gml:lowerCorner> + <gml:upperCorner>576552.156 5942523.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3647946c-2a30-4078-909d-35f765227756" /> + <xplan:position> + <gml:Point gml:id="Gml_7AD69712-5ECA-428D-8D9A-FADAC7315A2C" srsName="EPSG:25832"> + <gml:pos>576552.156 5942523.668</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_ac8bcc7c-996b-403c-beda-0c44e62e5526"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576420.864 5942475.609</gml:lowerCorner> + <gml:upperCorner>576439.57 5942509.053</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_150032b9-df25-4c7a-abf2-b05693dcccba" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_C62C38AA-BD20-4007-A00B-861AFD857AD1" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576439.57 5942478.445 576429.409 5942509.053 576420.864 5942506.213 + 576431.033 5942475.609 576439.57 5942478.445 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>1</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_150032b9-df25-4c7a-abf2-b05693dcccba"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576430.217 5942492.331</gml:lowerCorner> + <gml:upperCorner>576430.217 5942492.331</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_ac8bcc7c-996b-403c-beda-0c44e62e5526" /> + <xplan:position> + <gml:Point gml:id="Gml_A399277E-1234-4438-8C33-41806021341A" srsName="EPSG:25832"> + <gml:pos>576430.217 5942492.331</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_1d7081c1-9315-478a-b33a-bba36110dd12"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576516.45 5942413.603</gml:lowerCorner> + <gml:upperCorner>576593.045 5942419.348</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(G)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_8d149ef7-4b94-40d9-b994-6b222dd4734e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_3B8A8F35-90FD-4683-8E92-35C39857C37A" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576593.045 5942416.37 576592.924 5942419.348 576516.45 5942416.602 + 576516.545 5942413.603 576593.045 5942416.37 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_StrassenVerkehrsFlaeche gml:id="GML_3bbebe5a-71f8-4d11-b1e9-b8802aa0a2ec"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.125 5942474.449</gml:lowerCorner> + <gml:upperCorner>576662.68 5942588.473</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_251385C4-5861-48CD-9839-0E2E85DB1397" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576601.22 5942588.473 576588.349 5942584.209 576416.125 5942527.154 + 576416.434 5942514.7 576440.649 5942522.771 576444.447 5942520.855 + 576446.184 5942515.628 576442.293 5942514.335 576455.548 5942474.449 + 576461.588 5942474.628 576578.853 5942478.1 576582.576 5942478.696 + 576586.072 5942480.109 576589.163 5942482.269 576590.737 5942484.009 + 576591.693 5942485.065 576592.25 5942494.172 576591.61 5942515.589 + 576590.82 5942519.15 576587.281 5942530.022 576585.286 5942536.147 + 576584.613 5942538.256 576586.701 5942540.649 576585.643 5942543.641 + 576584.585 5942546.633 576578.266 5942565.328 576580.138 5942569.112 + 576585.605 5942570.928 576588.214 5942571.795 576594.615 5942570.631 + 576609.257 5942567.967 576655.825 5942531.79 576662.68 5942540.274 + 576601.22 5942588.473 </gml:posList> + </gml:LinearRing> + </gml:exterior> + <gml:interior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576454.397 5942524.162 576456.312 5942527.947 576566.153 5942564.472 + 576569.937 5942562.554 576585.446 5942515.928 576585.945 5942499.069 + 576585.186 5942495.361 576583.807 5942492.573 576582.388 5942490.772 + 576580.728 5942489.289 576577.618 5942487.564 576574.305 5942486.719 + 576476.148 5942483.813 576473.672 5942483.772 576472.593 5942483.814 + 576471.162 5942484.101 576470.103 5942484.509 576468.991 5942485.155 + 576468.029 5942485.955 576467.009 5942487.194 576466.066 5942489.137 + 576465.108 5942491.997 576454.397 5942524.162 </gml:posList> + </gml:LinearRing> + </gml:interior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:nutzungsform>2000</xplan:nutzungsform> + </xplan:BP_StrassenVerkehrsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_dad385e7-637b-40c7-8d96-ca50c85d4c6d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576419.618 5942410.13</gml:lowerCorner> + <gml:upperCorner>576436.179 5942443.668</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(F)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_ac19c4a5-51ea-4718-b2e3-98cff0c05273" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_c61d212b-e6b2-45c8-8d13-640d1550668e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_F9FBEDA1-0783-4D6F-9FDB-28C621E759F0" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576423.587 5942410.205 576430.543 5942410.41 576430.41 5942413.408 + 576429.724 5942428.829 576436.04 5942429.111 576436.179 5942434.919 + 576431.773 5942443.668 576419.618 5942443.127 576421.087 5942410.13 + 576423.587 5942410.205 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_ac19c4a5-51ea-4718-b2e3-98cff0c05273"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576422.832 5942424.648</gml:lowerCorner> + <gml:upperCorner>576422.832 5942424.648</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_dad385e7-637b-40c7-8d96-ca50c85d4c6d" /> + <xplan:schriftinhalt>(F)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_7F489B65-AC1C-43A2-8D8E-8524501D75F7" srsName="EPSG:25832"> + <gml:pos>576422.832 5942424.648</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Wegerecht gml:id="GML_631c2328-7244-4952-9fcd-9f7c993901b5"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576569.937 5942517.281</gml:lowerCorner> + <gml:upperCorner>576584.996 5942562.554</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_00809F0C-E950-4223-81B5-49FD42F623CD" srsName="EPSG:25832"> + <gml:posList>576584.996 5942517.281 576569.937 5942562.554 </gml:posList> + </gml:LineString> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:typ>1000</xplan:typ> + </xplan:BP_Wegerecht> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_f9aebab9-62a1-45e0-bcca-7998ec7156c2"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576571.627 5942441.909</gml:lowerCorner> + <gml:upperCorner>576588.92 5942477.592</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(C)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ad4a57ec-d094-4fb7-bf50-96dd5537d474" /> + <xplan:position> + <gml:Polygon gml:id="Gml_916222ED-7F34-4594-85A5-CFCAA77E28C5" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576588.92 5942477.592 576579.633 5942476.632 576579.633 5942472.712 + 576583.156 5942472.712 576583.756 5942465.671 576571.867 5942465.511 + 576572.107 5942459.351 576584.056 5942459.191 576584.357 5942445.989 + 576571.627 5942445.989 576571.627 5942441.909 576587.719 5942441.909 + 576588.92 5942441.909 576588.92 5942477.592 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_1f6bab62-0bb3-4fec-881e-b0cd25c51168"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576492.223 5942512.76</gml:lowerCorner> + <gml:upperCorner>576510.74 5942534.189</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_0bdc76ef-35d5-4c75-9d5b-fa3ea30ba4d1" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_EFDA03AE-47DE-427C-9BF8-ECFD3AD38986" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576510.74 5942517.017 576505.034 5942534.189 576492.223 5942529.932 + 576497.929 5942512.76 576510.74 5942517.017 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_0bdc76ef-35d5-4c75-9d5b-fa3ea30ba4d1"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576501.481 5942523.475</gml:lowerCorner> + <gml:upperCorner>576501.481 5942523.475</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1f6bab62-0bb3-4fec-881e-b0cd25c51168" /> + <xplan:position> + <gml:Point gml:id="Gml_37C69BB2-B214-4D97-B0CF-8296141053D3" srsName="EPSG:25832"> + <gml:pos>576501.481 5942523.475</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_47fb016d-dab5-4213-a4c1-deed9fb7dd94"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.234 5942458.698</gml:lowerCorner> + <gml:upperCorner>576520.812 5942473.618</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_b651ba20-7173-4b57-a0f7-cd61928b563b" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_EAF51293-F93B-478F-9894-8EA3DFFAB36E" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576520.812 5942460.124 576520.412 5942473.618 576472.234 5942472.192 + 576472.633 5942458.698 576520.812 5942460.124 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_b651ba20-7173-4b57-a0f7-cd61928b563b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576496.523 5942466.158</gml:lowerCorner> + <gml:upperCorner>576496.523 5942466.158</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_47fb016d-dab5-4213-a4c1-deed9fb7dd94" /> + <xplan:position> + <gml:Point gml:id="Gml_8690DCEF-EF7D-4B22-A4F8-B0455989EFB8" srsName="EPSG:25832"> + <gml:pos>576496.523 5942466.158</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_1a82a070-de61-4fbe-ac33-6891f7702b34"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576454.397 5942483.772</gml:lowerCorner> + <gml:upperCorner>576585.945 5942564.472</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>1</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_0ab64645-e5c3-4661-b57e-ae29122cf610" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_c2a44c83-eb3f-46df-ba27-96f0ad9ab3c8" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_d0723b30-7904-45b2-9b6a-8b55bf18b911" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_abd5458e-92a4-4620-b6ec-944a997c3fcf" /> + <xplan:refTextInhalt xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:refTextInhalt xlink:href="#GML_854a644c-3f65-4596-8362-c6eb77cb747d" /> + <xplan:refTextInhalt xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:position> + <gml:Polygon gml:id="Gml_CFCD78E6-138F-460F-AA2C-7C2A61BAF851" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576476.148 5942483.813 576574.305 5942486.719 576577.618 5942487.564 + 576580.728 5942489.289 576582.388 5942490.772 576583.807 5942492.573 + 576585.186 5942495.361 576585.945 5942499.069 576585.446 5942515.928 + 576569.937 5942562.554 576566.153 5942564.472 576456.312 5942527.947 + 576454.397 5942524.162 576465.108 5942491.997 576466.066 5942489.137 + 576467.009 5942487.194 576468.029 5942485.955 576468.991 5942485.155 + 576470.103 5942484.509 576471.162 5942484.101 576472.593 5942483.814 + 576473.672 5942483.772 576476.148 5942483.813 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:dachgestaltung> + <xplan:BP_Dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + </xplan:BP_Dachgestaltung> + </xplan:dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + <xplan:GRZ>0.35</xplan:GRZ> + <xplan:besondereArtDerBaulNutzung>1200</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_0ab64645-e5c3-4661-b57e-ae29122cf610"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576537.524 5942497.207</gml:lowerCorner> + <gml:upperCorner>576537.524 5942497.207</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:position> + <gml:Point gml:id="Gml_C01C0BCC-5AFC-480F-8780-764C4BB8FD7E" srsName="EPSG:25832"> + <gml:pos>576537.524 5942497.207</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_c2a44c83-eb3f-46df-ba27-96f0ad9ab3c8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576540.684 5942503.522</gml:lowerCorner> + <gml:upperCorner>576540.684 5942503.522</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:position> + <gml:Point gml:id="Gml_083851FF-8E62-494E-A7A7-29CCC8915CC6" srsName="EPSG:25832"> + <gml:pos>576540.684 5942503.522</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_d0723b30-7904-45b2-9b6a-8b55bf18b911"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576536.662 5942492.615</gml:lowerCorner> + <gml:upperCorner>576536.662 5942492.615</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>dachgestaltung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1a82a070-de61-4fbe-ac33-6891f7702b34" /> + <xplan:position> + <gml:Point gml:id="Gml_78955109-C799-4576-9EF9-7B3CB67ACF7D" srsName="EPSG:25832"> + <gml:pos>576536.662 5942492.615</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_3b8a6af5-457e-4e0f-9e12-60b936cadfdf"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.409 5942439.738</gml:lowerCorner> + <gml:upperCorner>576456.937 5942513.277</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_55B65877-EA96-4C99-AAC8-C31598279E48" srsName="EPSG:25832"> + <gml:posList>576443.446 5942439.738 576456.937 5942440.135 576455.999 5942471.816 + 576442.12 5942513.277 576429.409 5942509.053 576442.564 5942469.424 + 576443.446 5942439.738 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_8047a192-d634-4414-b38a-950438ea177c"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576538.104 5942442.549</gml:lowerCorner> + <gml:upperCorner>576552.134 5942461.036</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_83094468-6c4d-4e1a-ad90-8a86710d3363" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_3ED3D0A4-3AE8-4568-937B-E008681823E1" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576552.134 5942442.955 576551.598 5942461.036 576538.104 5942460.636 + 576538.64 5942442.549 576552.134 5942442.955 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_83094468-6c4d-4e1a-ad90-8a86710d3363"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576545.119 5942451.794</gml:lowerCorner> + <gml:upperCorner>576545.119 5942451.794</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_8047a192-d634-4414-b38a-950438ea177c" /> + <xplan:position> + <gml:Point gml:id="Gml_8659C23D-57CF-4268-9D72-0550868F655E" srsName="EPSG:25832"> + <gml:pos>576545.119 5942451.794</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576461.588 5942435.749</gml:lowerCorner> + <gml:upperCorner>576599.891 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>2</xplan:gliederung1> + <xplan:gliederung2>(C)</xplan:gliederung2> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_5e9681f5-4c33-46f4-8113-b287cbe57b3a" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_6bfad91a-e310-49d9-93ac-2677f9578e6d" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_cf666f15-e87c-4193-b484-68ccd5e72343" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_abd5458e-92a4-4620-b6ec-944a997c3fcf" /> + <xplan:refTextInhalt xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_854a644c-3f65-4596-8362-c6eb77cb747d" /> + <xplan:refTextInhalt xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_c9dc8fb4-db8d-411f-9974-ebd078dc055a" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:position> + <gml:Polygon gml:id="Gml_448471AF-0B82-4D7D-B51D-1E95579AC5D7" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.043 5942439.774 576599.891 5942440.018 576598.756 5942468.151 + 576594.615 5942570.631 576588.214 5942571.795 576585.605 5942570.928 + 576580.138 5942569.112 576578.266 5942565.328 576584.585 5942546.633 + 576585.643 5942543.641 576586.701 5942540.649 576584.613 5942538.256 + 576585.286 5942536.147 576587.281 5942530.022 576590.82 5942519.15 + 576591.61 5942515.589 576592.25 5942494.172 576591.693 5942485.065 + 576590.737 5942484.009 576589.163 5942482.269 576586.072 5942480.109 + 576582.576 5942478.696 576578.853 5942478.1 576461.588 5942474.628 + 576462.798 5942435.749 576592.043 5942439.774 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:dachgestaltung> + <xplan:BP_Dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + </xplan:BP_Dachgestaltung> + </xplan:dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + <xplan:GRZ>0.4</xplan:GRZ> + <xplan:besondereArtDerBaulNutzung>1200</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_5e9681f5-4c33-46f4-8113-b287cbe57b3a"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576524.665 5942454.124</gml:lowerCorner> + <gml:upperCorner>576524.665 5942454.124</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>dachgestaltung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:position> + <gml:Point gml:id="Gml_E0A2C857-23D9-4F3D-99F7-9CFB8A853B5F" srsName="EPSG:25832"> + <gml:pos>576524.665 5942454.124</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_6bfad91a-e310-49d9-93ac-2677f9578e6d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576526.983 5942464.84</gml:lowerCorner> + <gml:upperCorner>576526.983 5942464.84</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:position> + <gml:Point gml:id="Gml_4BDECC78-9255-4034-AF3B-3233AD6A8704" srsName="EPSG:25832"> + <gml:pos>576526.983 5942464.84</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_cf666f15-e87c-4193-b484-68ccd5e72343"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576525.824 5942459.048</gml:lowerCorner> + <gml:upperCorner>576525.824 5942459.048</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3f91fd67-0c0b-4b1a-aa98-8753c8199ba8" /> + <xplan:position> + <gml:Point gml:id="Gml_4526C7BB-45F1-43D3-875E-24D436872EA9" srsName="EPSG:25832"> + <gml:pos>576525.824 5942459.048</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_GruenFlaeche gml:id="GML_0e8dfd5a-603d-4c56-b846-5f5c1573c528"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576429.724 5942413.408</gml:lowerCorner> + <gml:upperCorner>576600.834 5942440.018</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:text>Schutzgrün</xplan:text> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_916188a0-f5b0-4f17-942f-c25a0d915bd9" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:position> + <gml:Polygon gml:id="Gml_83A4903D-3A87-4548-843E-766827D3CE61" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576599.891 5942440.018 576592.043 5942439.774 576462.798 5942435.749 + 576436.179 5942434.919 576436.04 5942429.111 576429.724 5942428.829 + 576430.41 5942413.408 576480.266 5942414.884 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.45 5942416.602 576592.923 5942419.368 + 576593.045 5942416.37 576600.834 5942416.652 576599.891 5942440.018 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:zweckbestimmung>9999</xplan:zweckbestimmung> + <xplan:nutzungsform>1000</xplan:nutzungsform> + </xplan:BP_GruenFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_916188a0-f5b0-4f17-942f-c25a0d915bd9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576444.052 5942422.671</gml:lowerCorner> + <gml:upperCorner>576444.052 5942422.671</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>text</xplan:art> + <xplan:art>nutzungsform</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_0e8dfd5a-603d-4c56-b846-5f5c1573c528" /> + <xplan:position> + <gml:Point gml:id="Gml_423526DF-A419-4FB5-A137-415F016AF445" srsName="EPSG:25832"> + <gml:pos>576444.052 5942422.671</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_b1826698-ecc5-4cb0-9c88-d5afe1f31b5d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576538.104 5942442.549</gml:lowerCorner> + <gml:upperCorner>576552.134 5942461.036</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_45BA466C-BAEF-4B9F-88AC-FA52A0B79002" srsName="EPSG:25832"> + <gml:posList>576538.104 5942460.636 576538.64 5942442.549 576552.134 5942442.955 + 576551.598 5942461.036 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_60fb20fd-8cd3-4173-ac56-880f4451e4d8"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576543.221 5942428.491</gml:lowerCorner> + <gml:upperCorner>576543.221 5942428.491</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">48.4</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_A50B9AF6-B9E6-43E7-9822-B2A5C0B4575E" srsName="EPSG:25832"> + <gml:pos>576543.221 5942428.491</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_AnpflanzungBindungErhaltung gml:id="GML_11901099-8d74-4850-8177-6541547ab30b"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576585.605 5942419.368</gml:lowerCorner> + <gml:upperCorner>576600.713 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_E9B5ABE5-D758-43B5-8F6F-B67DE8D0FE97" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576600.713 5942419.649 576599.891 5942440.018 576598.756 5942468.151 + 576594.615 5942570.631 576588.214 5942571.795 576585.605 5942570.928 + 576587.244 5942530.136 576590.82 5942519.15 576591.61 5942515.589 + 576592.25 5942494.172 576591.693 5942485.065 576590.737 5942484.009 + 576590.328 5942483.557 576592.094 5942439.776 576592.923 5942419.368 + 576600.713 5942419.649 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:massnahme>3000</xplan:massnahme> + <xplan:gegenstand>2000</xplan:gegenstand> + </xplan:BP_AnpflanzungBindungErhaltung> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_42c7fef5-324b-4253-ada5-725c99cb27cf"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576416.434 5942434.919</gml:lowerCorner> + <gml:upperCorner>576462.798 5942522.771</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>1</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_00f7eff9-1faf-4448-8ec7-1f0ef6c16d6d" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_05afd08d-622c-4587-829b-6e25b25c7e97" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_c233cc65-4339-4252-934c-24fb7eb2ad14" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_b4003c7b-9bc5-4d29-8de8-ddc80de9f251" /> + <xplan:refTextInhalt xlink:href="#GML_6c87c405-f456-4a52-ae02-d345333bc7c2" /> + <xplan:refTextInhalt xlink:href="#GML_bd96f489-ace2-4a87-8731-9ef82e38c8c1" /> + <xplan:refTextInhalt xlink:href="#GML_78445473-8bfb-4234-bcfa-9675e3c39fe7" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:position> + <gml:Polygon gml:id="Gml_C2C76A25-90BC-4E17-988F-5E559A540A58" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576442.293 5942514.335 576446.184 5942515.628 576444.447 5942520.855 + 576440.649 5942522.771 576416.434 5942514.7 576419.618 5942443.127 + 576431.773 5942443.668 576436.179 5942434.919 576462.798 5942435.749 + 576461.588 5942474.628 576455.548 5942474.449 576442.293 5942514.335 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:dachgestaltung> + <xplan:BP_Dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + </xplan:BP_Dachgestaltung> + </xplan:dachgestaltung> + <xplan:dachform>1000</xplan:dachform> + <xplan:GRZ>0.5</xplan:GRZ> + <xplan:besondereArtDerBaulNutzung>1500</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_00f7eff9-1faf-4448-8ec7-1f0ef6c16d6d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576427.154 5942469.442</gml:lowerCorner> + <gml:upperCorner>576427.154 5942469.442</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:position> + <gml:Point gml:id="Gml_09CD11D1-86C9-40C5-BB5C-E6477518ED4A" srsName="EPSG:25832"> + <gml:pos>576427.154 5942469.442</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_05afd08d-622c-4587-829b-6e25b25c7e97"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576427.882 5942462.534</gml:lowerCorner> + <gml:upperCorner>576427.882 5942462.534</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:position> + <gml:Point gml:id="Gml_CD229C09-23ED-4116-AD4C-17EC5C8613D0" srsName="EPSG:25832"> + <gml:pos>576427.882 5942462.534</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_c233cc65-4339-4252-934c-24fb7eb2ad14"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576426.972 5942457.081</gml:lowerCorner> + <gml:upperCorner>576426.972 5942457.081</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>dachgestaltung</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_42c7fef5-324b-4253-ada5-725c99cb27cf" /> + <xplan:position> + <gml:Point gml:id="Gml_B525CF40-F0EC-4618-A4B5-D90F7294B62A" srsName="EPSG:25832"> + <gml:pos>576426.972 5942457.081</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Immissionsschutz gml:id="GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576422.504 5942410.205</gml:lowerCorner> + <gml:upperCorner>576593.045 5942439.776</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>2000</xplan:hoehenbezug> + <xplan:bezugspunkt>3000</xplan:bezugspunkt> + <xplan:h uom="m">9</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_71de5645-d06c-4eb8-82f7-97b8bf8a00e9" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_6a527b3a-3287-42fe-8705-d1e28dcbb3d7" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_15890cb4-3da8-43fc-ab37-2c9ecc3cd74c" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_F5AFE5F1-1B38-44C5-AD1B-FCC51BF90F23" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576592.094 5942439.776 576422.504 5942434.534 576423.587 5942410.205 + 576430.543 5942410.41 576480.297 5942411.883 576480.165 5942424.848 + 576485.589 5942430.139 576505.565 5942430.669 576512.841 5942426.038 + 576516.148 5942426.171 576516.545 5942413.603 576593.045 5942416.37 + 576592.923 5942419.368 576592.094 5942439.776 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + <xplan:nutzung>Fläche für besondere Anlagen</xplan:nutzung> + <xplan:typ>2000</xplan:typ> + <xplan:technVorkehrung>10002</xplan:technVorkehrung> + <xplan:detaillierteTechnVorkehrung>Schutzwall mit Schutzwand</xplan:detaillierteTechnVorkehrung> + </xplan:BP_Immissionsschutz> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_71de5645-d06c-4eb8-82f7-97b8bf8a00e9"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576532.471 5942420.745</gml:lowerCorner> + <gml:upperCorner>576532.471 5942420.745</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:position> + <gml:Point gml:id="Gml_B1B165EE-577A-4C64-95D1-4BDBE2982187" srsName="EPSG:25832"> + <gml:pos>576532.471 5942420.745</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">1.73</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_6a527b3a-3287-42fe-8705-d1e28dcbb3d7"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576526.885 5942431.723</gml:lowerCorner> + <gml:upperCorner>576526.885 5942431.723</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:schriftinhalt>Schutzwall mit Schutzwand</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_986BFC9C-9F25-4AE6-ABFF-55D439D66163" srsName="EPSG:25832"> + <gml:pos>576526.885 5942431.723</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">1.36</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_15890cb4-3da8-43fc-ab37-2c9ecc3cd74c"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576523.225 5942422.286</gml:lowerCorner> + <gml:upperCorner>576523.225 5942422.286</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>hoehenangabe</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_438cb8ae-be20-4cce-b7fa-6d5b7326a357" /> + <xplan:position> + <gml:Point gml:id="Gml_1544F56F-5AFF-403C-870B-423DF4BCE2F1" srsName="EPSG:25832"> + <gml:pos>576523.225 5942422.286</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_ba300100-99e7-4741-8fc0-323cbfe283f3"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576554.382 5942533.416</gml:lowerCorner> + <gml:upperCorner>576572.897 5942554.84</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_A2BFA3B1-2597-414F-BB16-42BF09149D59" srsName="EPSG:25832"> + <gml:posList>576572.897 5942537.673 576567.193 5942554.84 576554.382 5942550.583 + 576560.087 5942533.416 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_269bef7b-7d34-40e6-b48d-611a5001ab73"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576521.453 5942522.473</gml:lowerCorner> + <gml:upperCorner>576539.969 5942543.897</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_a5d113d2-aae0-4d37-be0d-86c438e4381f" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_86CA0A7F-1439-43B9-B28B-332C6D6BF23E" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576539.969 5942526.73 576534.264 5942543.897 576521.453 5942539.64 + 576527.157 5942522.473 576539.969 5942526.73 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_a5d113d2-aae0-4d37-be0d-86c438e4381f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576530.711 5942533.185</gml:lowerCorner> + <gml:upperCorner>576530.711 5942533.185</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_269bef7b-7d34-40e6-b48d-611a5001ab73" /> + <xplan:position> + <gml:Point gml:id="Gml_4B749696-FBE8-46FF-BBB4-FBB2B6FF741B" srsName="EPSG:25832"> + <gml:pos>576530.711 5942533.185</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_e3d2f053-c8ae-498f-aab5-b497490ec636"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576625.089 5942561.859</gml:lowerCorner> + <gml:upperCorner>576625.089 5942561.859</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">40.6</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_5E20D2F4-BC0B-4861-A740-189B030A4E38" srsName="EPSG:25832"> + <gml:pos>576625.089 5942561.859</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_f352bbb5-f0e0-4059-8c86-61f393a9c732"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576476.841 5942424.932</gml:lowerCorner> + <gml:upperCorner>576476.841 5942424.932</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">48.2</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_2F7B240E-C36F-46BF-871B-C22FA919CD2D" srsName="EPSG:25832"> + <gml:pos>576476.841 5942424.932</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_6bd85817-ed09-4b54-8ffa-d1faa982d616"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576537.705 5942460.636</gml:lowerCorner> + <gml:upperCorner>576586.283 5942475.557</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_c50c09c9-84d0-48ad-8c29-0a823b223514" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_A4A13CE9-607A-47FF-9744-07380B8A4CCF" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576586.283 5942462.063 576585.884 5942475.557 576537.705 5942474.13 + 576538.104 5942460.636 576586.283 5942462.063 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>4</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_c50c09c9-84d0-48ad-8c29-0a823b223514"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576561.994 5942468.096</gml:lowerCorner> + <gml:upperCorner>576561.994 5942468.096</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_6bd85817-ed09-4b54-8ffa-d1faa982d616" /> + <xplan:position> + <gml:Point gml:id="Gml_E89E7982-1495-4818-8010-FEB219E2A2F2" srsName="EPSG:25832"> + <gml:pos>576561.994 5942468.096</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_1ce434d3-ca84-4476-8cb2-18cd42647531"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576585.605 5942419.368</gml:lowerCorner> + <gml:upperCorner>576600.713 5942571.795</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(E)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_4ebd4bb6-0bf4-460b-a23a-bdd149ebef6f" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_33707095-3440-490b-9d83-c362569a0ef4" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_51a21b00-c38b-4ff7-bc86-766994a242f1" /> + <xplan:position> + <gml:Polygon gml:id="Gml_6661044E-F178-4304-999B-350A12931C85" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576600.713 5942419.649 576599.891 5942440.018 576598.756 5942468.151 + 576594.615 5942570.631 576588.214 5942571.795 576585.605 5942570.928 + 576587.244 5942530.136 576590.82 5942519.15 576591.61 5942515.589 + 576592.25 5942494.172 576591.693 5942485.065 576590.737 5942484.009 + 576590.328 5942483.557 576592.094 5942439.776 576592.923 5942419.368 + 576600.713 5942419.649 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_4ebd4bb6-0bf4-460b-a23a-bdd149ebef6f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576593.85 5942426.013</gml:lowerCorner> + <gml:upperCorner>576593.85 5942426.013</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1ce434d3-ca84-4476-8cb2-18cd42647531" /> + <xplan:schriftinhalt>(E)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_DAA4094B-66C4-4EA0-8CCA-08156FD0C908" srsName="EPSG:25832"> + <gml:pos>576593.85 5942426.013</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_33707095-3440-490b-9d83-c362569a0ef4"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576588.391 5942549.915</gml:lowerCorner> + <gml:upperCorner>576588.391 5942549.915</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_1ce434d3-ca84-4476-8cb2-18cd42647531" /> + <xplan:position> + <gml:Point gml:id="Gml_0D04349C-0851-4988-A134-916A84BD89BE" srsName="EPSG:25832"> + <gml:pos>576588.391 5942549.915</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_c94e422a-b3ed-4d92-95d5-8dc4c189650e"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.633 5942440.616</gml:lowerCorner> + <gml:upperCorner>576486.662 5942459.097</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_5c143714-4150-4f49-8d5a-d2b826e7958d" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_86CFF1EA-9CD4-44F8-893A-84AC2524D58A" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576486.662 5942441.015 576486.123 5942459.097 576472.633 5942458.698 + 576473.168 5942440.616 576486.662 5942441.015 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_5c143714-4150-4f49-8d5a-d2b826e7958d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576479.647 5942449.856</gml:lowerCorner> + <gml:upperCorner>576479.647 5942449.856</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_c94e422a-b3ed-4d92-95d5-8dc4c189650e" /> + <xplan:position> + <gml:Point gml:id="Gml_9E604246-64EE-4B39-8960-6075D6DF1E1F" srsName="EPSG:25832"> + <gml:pos>576479.647 5942449.856</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_96a7bd77-f199-4cea-84d3-fdbabfe3f643"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576420.864 5942475.609</gml:lowerCorner> + <gml:upperCorner>576439.57 5942509.053</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_BF5A027E-8523-4803-9E49-2A930DEAF507" srsName="EPSG:25832"> + <gml:posList>576429.409 5942509.053 576420.864 5942506.213 576431.033 5942475.609 + 576439.57 5942478.445 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_a95a1007-a70f-474c-b791-ffb675af4015"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576554.382 5942533.416</gml:lowerCorner> + <gml:upperCorner>576572.897 5942554.84</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_bc8efcd2-efba-4a41-bd7f-6d3b26f272de" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_F028F04C-B735-4219-88E3-6BB8361773F8" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576572.897 5942537.673 576567.193 5942554.84 576554.382 5942550.583 + 576560.087 5942533.416 576572.897 5942537.673 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_bc8efcd2-efba-4a41-bd7f-6d3b26f272de"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576563.64 5942544.128</gml:lowerCorner> + <gml:upperCorner>576563.64 5942544.128</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_a95a1007-a70f-474c-b791-ffb675af4015" /> + <xplan:position> + <gml:Point gml:id="Gml_D1A4B981-C2ED-4A8E-9DE2-2096B4A89B4D" srsName="EPSG:25832"> + <gml:pos>576563.64 5942544.128</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_bff9a682-a559-4db3-a3b5-4fabc70907a6"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576507.318 5942441.643</gml:lowerCorner> + <gml:upperCorner>576521.347 5942460.124</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_0FACB72B-CF29-4B20-8D51-169C6A33252B" srsName="EPSG:25832"> + <gml:posList>576507.318 5942459.725 576507.853 5942441.643 576521.347 5942442.042 + 576520.812 5942460.124 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_b021ad8f-e4d0-498b-896a-2db5e334ff4d"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576472.234 5942458.698</gml:lowerCorner> + <gml:upperCorner>576520.812 5942473.618</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_897356A8-AA23-4516-876B-8478DC890765" srsName="EPSG:25832"> + <gml:posList>576520.812 5942460.124 576520.412 5942473.618 576472.234 5942472.192 + 576472.633 5942458.698 576520.812 5942460.124 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_3264fd82-1958-4a67-8673-42cb63036f17"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576430.41 5942410.41</gml:lowerCorner> + <gml:upperCorner>576480.297 5942414.884</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(G)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_8ded082b-f799-4b8c-ba49-a1aa23a63d8f" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_8d149ef7-4b94-40d9-b994-6b222dd4734e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_661BD052-7B0B-4F02-9D56-E73365408ACC" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576480.297 5942411.883 576480.266 5942414.884 576430.41 5942413.408 + 576430.543 5942410.41 576480.297 5942411.883 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_8ded082b-f799-4b8c-ba49-a1aa23a63d8f"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576438.813 5942411.191</gml:lowerCorner> + <gml:upperCorner>576438.813 5942411.191</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_3264fd82-1958-4a67-8673-42cb63036f17" /> + <xplan:schriftinhalt>(G)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_4011D498-541E-4E02-ADA3-4DCA81C0B306" srsName="EPSG:25832"> + <gml:pos>576438.813 5942411.191</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_109fb3fb-2e1f-45a1-86af-2bb1dcc6d8ed"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576507.318 5942441.643</gml:lowerCorner> + <gml:upperCorner>576521.347 5942460.124</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_77b72a48-372d-482a-8355-c966829968ba" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_DCC44A0A-4326-475E-AA91-27E1A91DACBB" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576521.347 5942442.042 576520.812 5942460.124 576507.318 5942459.725 + 576507.853 5942441.643 576521.347 5942442.042 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_77b72a48-372d-482a-8355-c966829968ba"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576514.333 5942450.884</gml:lowerCorner> + <gml:upperCorner>576514.333 5942450.884</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_109fb3fb-2e1f-45a1-86af-2bb1dcc6d8ed" /> + <xplan:position> + <gml:Point gml:id="Gml_828F95B0-3615-43E8-87E5-E416611D22F6" srsName="EPSG:25832"> + <gml:pos>576514.333 5942450.884</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_HoehenMass gml:id="GML_1a6c9d6a-6e93-4854-9229-bd579e4d0df6"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576418.558 5942521.081</gml:lowerCorner> + <gml:upperCorner>576418.558 5942521.081</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:hoehenangabe> + <xplan:XP_Hoehenangabe> + <xplan:hoehenbezug>1000</xplan:hoehenbezug> + <xplan:h uom="m">40.8</xplan:h> + </xplan:XP_Hoehenangabe> + </xplan:hoehenangabe> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:rechtscharakter>5000</xplan:rechtscharakter> + <xplan:position> + <gml:Point gml:id="Gml_DA0366E5-D4A2-46F4-8230-D92E29C03B7F" srsName="EPSG:25832"> + <gml:pos>576418.558 5942521.081</gml:pos> + </gml:Point> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:nordwinkel uom="grad">0</xplan:nordwinkel> + </xplan:BP_HoehenMass> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_a8fcb5cd-7364-46b6-8ad9-beb227979325"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576459.295 5942501.817</gml:lowerCorner> + <gml:upperCorner>576477.811 5942523.238</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_5ba9de57-cd5c-4658-a2af-afd65f5b25bf" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_7ACB1384-E59D-49D7-8A29-4BDBC2D5C149" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576477.811 5942506.074 576472.107 5942523.238 576459.295 5942518.984 + 576465 5942501.817 576477.811 5942506.074 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:Z>3</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_5ba9de57-cd5c-4658-a2af-afd65f5b25bf"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576468.553 5942512.528</gml:lowerCorner> + <gml:upperCorner>576468.553 5942512.528</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#GML_a1587702-61cb-4dc7-a7fc-6b3d8ea2ebe3" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_a8fcb5cd-7364-46b6-8ad9-beb227979325" /> + <xplan:position> + <gml:Point gml:id="Gml_7E18C026-8913-4867-AE06-C38408B722A2" srsName="EPSG:25832"> + <gml:pos>576468.553 5942512.528</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_35e891fa-16a4-4ac3-a5a5-c449ad78d271"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576620.053 5942520.948</gml:lowerCorner> + <gml:upperCorner>576620.053 5942520.948</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>Z</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:position> + <gml:Point gml:id="Gml_71204A2B-FC75-41DC-92D7-8D3C84E8B0E8" srsName="EPSG:25832"> + <gml:pos>576620.053 5942520.948</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_Bereich gml:id="Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576594.615 5942468.151</gml:lowerCorner> + <gml:upperCorner>576656.335 5942570.631</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:nummer>1</xplan:nummer> + <xplan:bedeutung>1600</xplan:bedeutung> + <xplan:geltungsbereich> + <gml:Polygon gml:id="Gml_01CD3DC3-47FA-4C69-B17E-D1758B7E5586" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576655.825 5942531.79 576639.6672 5942544.3423 576609.257 5942567.967 + 576594.615 5942570.631 576597.1439 5942508.047 576598.756 5942468.151 + 576611.81 5942468.677 576626.513 5942487.073 576625.447 5942487.931 + 576652.088 5942522.116 576656.335 5942527.565 576655.825 5942531.79 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:geltungsbereich> + <xplan:refScan> + <xplan:XP_ExterneReferenz> + <xplan:georefURL>BPlan001_5-2_Bereich1.pgw</xplan:georefURL> + <xplan:referenzURL>BPlan001_5-2_Bereich1.png</xplan:referenzURL> + </xplan:XP_ExterneReferenz> + </xplan:refScan> + <xplan:planinhalt xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:planinhalt xlink:href="#GML_f20bca86-bba8-47dc-b32c-2149f1816e55" /> + <xplan:planinhalt xlink:href="#GML_14188ee0-916a-4355-bafc-da98d2825c05" /> + <xplan:planinhalt xlink:href="#GML_e36ff7bb-13fd-4216-9ae6-f8b39c1ccdfc" /> + <xplan:planinhalt xlink:href="#GML_bbe87b33-5e0d-44cb-8e1c-79078f6c3bf0" /> + <xplan:praesentationsobjekt xlink:href="#GML_e1769717-420a-4fc2-9537-6edb0fd69083" /> + <xplan:praesentationsobjekt xlink:href="#GML_35e891fa-16a4-4ac3-a5a5-c449ad78d271" /> + <xplan:praesentationsobjekt xlink:href="#GML_91d05bc0-9d71-4382-88e4-d1c02c48cdaa" /> + <xplan:praesentationsobjekt xlink:href="#GML_0bf9f998-bd70-4fea-9cbc-2f2668f5839a" /> + <xplan:versionBauNVOText>Version vom 11.06.2013</xplan:versionBauNVOText> + <xplan:gehoertZuPlan xlink:href="#GML_1c23cbae-b6e9-4f21-b9c2-f3fc6df46545" /> + </xplan:BP_Bereich> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BaugebietsTeilFlaeche gml:id="GML_bfa7ceb2-40d5-40ac-9023-7960473efb78"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576594.615 5942468.151</gml:lowerCorner> + <gml:upperCorner>576656.335 5942570.631</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>2</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_35e891fa-16a4-4ac3-a5a5-c449ad78d271" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_e1769717-420a-4fc2-9537-6edb0fd69083" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_91d05bc0-9d71-4382-88e4-d1c02c48cdaa" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e" /> + <xplan:refTextInhalt xlink:href="#GML_5060fe64-2557-4954-af7c-0f79ca0811dd" /> + <xplan:refTextInhalt xlink:href="#GML_a7b715e5-c683-4ac9-ae8c-f6b3960810d9" /> + <xplan:refTextInhalt xlink:href="#GML_c984e887-2e6f-4cfd-a569-3f54d81c29e6" /> + <xplan:refTextInhalt xlink:href="#GML_ba86d815-a484-4530-83fe-ad2003191bdf" /> + <xplan:refTextInhalt xlink:href="#GML_da22f094-ff79-47c3-905d-57125ad15bbe" /> + <xplan:position> + <gml:Polygon gml:id="Gml_274C2988-8D2E-434D-A18F-773B257BEF77" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576611.81 5942468.677 576626.513 5942487.073 576625.447 5942487.931 + 576652.088 5942522.116 576656.335 5942527.565 576655.825 5942531.79 + 576609.257 5942567.967 576594.615 5942570.631 576598.756 5942468.151 + 576611.81 5942468.677 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>true</xplan:flaechenschluss> + <xplan:GRZ>0.4</xplan:GRZ> + <xplan:Z>2</xplan:Z> + <xplan:besondereArtDerBaulNutzung>1500</xplan:besondereArtDerBaulNutzung> + </xplan:BP_BaugebietsTeilFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_e1769717-420a-4fc2-9537-6edb0fd69083"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576620.962 5942527.931</gml:lowerCorner> + <gml:upperCorner>576620.962 5942527.931</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>besondereArtDerBaulNutzung</xplan:art> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:position> + <gml:Point gml:id="Gml_555D03D5-C571-4D96-B7C9-6055E33D52B0" srsName="EPSG:25832"> + <gml:pos>576620.962 5942527.931</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PPO gml:id="GML_91d05bc0-9d71-4382-88e4-d1c02c48cdaa"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576622.145 5942515.494</gml:lowerCorner> + <gml:upperCorner>576622.145 5942515.494</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>GRZ</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bfa7ceb2-40d5-40ac-9023-7960473efb78" /> + <xplan:position> + <gml:Point gml:id="Gml_21AAF525-E3BA-4255-AB43-719D06AF803A" srsName="EPSG:25832"> + <gml:pos>576622.145 5942515.494</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PPO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_UeberbaubareGrundstuecksFlaeche gml:id="GML_f20bca86-bba8-47dc-b32c-2149f1816e55"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576602.018 5942468.433</gml:lowerCorner> + <gml:upperCorner>576652.088 5942561.023</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:Polygon gml:id="Gml_FB5AD614-1127-47DA-B5DF-0EC0DEBFB49A" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576611.81 5942468.677 576626.513 5942487.073 576625.447 5942487.931 + 576652.088 5942522.116 576602.018 5942561.023 576605.75 5942468.433 + 576611.81 5942468.677 </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + <xplan:GRZ>0.4</xplan:GRZ> + <xplan:Z>2</xplan:Z> + </xplan:BP_UeberbaubareGrundstuecksFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_BauGrenze gml:id="GML_14188ee0-916a-4355-bafc-da98d2825c05"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576602.018 5942468.433</gml:lowerCorner> + <gml:upperCorner>576652.088 5942561.023</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_19C015BE-B3C3-497A-89E7-6635318FC179" srsName="EPSG:25832"> + <gml:posList>576605.75 5942468.433 576611.81 5942468.677 576626.513 5942487.073 + 576625.434 5942487.914 576652.088 5942522.116 576602.018 5942561.023 + 576605.75 5942468.433 </gml:posList> + </gml:LineString> + </xplan:position> + </xplan:BP_BauGrenze> + </gml:featureMember> + <gml:featureMember> + <xplan:XP_PTO gml:id="GML_0bf9f998-bd70-4fea-9cbc-2f2668f5839a"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576609.908 5942485.248</gml:lowerCorner> + <gml:upperCorner>576609.908 5942485.248</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:art>gliederung1</xplan:art> + <xplan:index>0</xplan:index> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:dientZurDarstellungVon xlink:href="#GML_bbe87b33-5e0d-44cb-8e1c-79078f6c3bf0" /> + <xplan:schriftinhalt>(A)</xplan:schriftinhalt> + <xplan:position> + <gml:Point gml:id="Gml_8907FAFE-54F5-4F51-AB0A-F33B8DB526C7" srsName="EPSG:25832"> + <gml:pos>576609.908 5942485.248</gml:pos> + </gml:Point> + </xplan:position> + <xplan:drehwinkel uom="grad">0</xplan:drehwinkel> + </xplan:XP_PTO> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_TextlicheFestsetzungsFlaeche gml:id="GML_bbe87b33-5e0d-44cb-8e1c-79078f6c3bf0"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576597.144 5942468.151</gml:lowerCorner> + <gml:upperCorner>576656.335 5942544.342</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:gliederung1>(A)</xplan:gliederung1> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:wirdDargestelltDurch xlink:href="#GML_0bf9f998-bd70-4fea-9cbc-2f2668f5839a" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:refTextInhalt xlink:href="#GML_ea29c620-e827-4e8c-8fc1-f7f0e605904e" /> + <xplan:position> + <gml:Polygon gml:id="Gml_72584846-FFF5-4D02-8638-9C1108BA41F1" srsName="EPSG:25832"> + <gml:exterior> + <gml:LinearRing> + <gml:posList srsName="EPSG:25832">576652.088 5942522.116 576656.335 5942527.565 576655.825 5942531.79 + 576639.667 5942544.342 576605.88 5942500.937 576605.337 5942501.379 + 576597.144 5942508.047 576598.756 5942468.151 576611.81 5942468.677 + 576626.513 5942487.073 576625.447 5942487.931 576652.088 5942522.116 + </gml:posList> + </gml:LinearRing> + </gml:exterior> + </gml:Polygon> + </xplan:position> + <xplan:flaechenschluss>false</xplan:flaechenschluss> + </xplan:BP_TextlicheFestsetzungsFlaeche> + </gml:featureMember> + <gml:featureMember> + <xplan:BP_NutzungsartenGrenze gml:id="GML_e36ff7bb-13fd-4216-9ae6-f8b39c1ccdfc"> + <gml:boundedBy> + <gml:Envelope srsName="EPSG:25832"> + <gml:lowerCorner>576597.149 5942500.937</gml:lowerCorner> + <gml:upperCorner>576639.667 5942544.342</gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <xplan:text>Sonstige Abgrenzung</xplan:text> + <xplan:gehoertZuBereich xlink:href="#Gml_1A345FC1-C010-43E1-8E55-3755CC94C54E" /> + <xplan:rechtscharakter>1000</xplan:rechtscharakter> + <xplan:position> + <gml:LineString gml:id="Gml_4EB3DC53-BBEC-4D5A-8960-C7AF1579E367" srsName="EPSG:25832"> + <gml:posList>576639.667 5942544.342 576605.88 5942500.937 576597.149 5942508.043 + </gml:posList> + </gml:LineString> + </xplan:position> + <xplan:typ>9999</xplan:typ> + </xplan:BP_NutzungsartenGrenze> + </gml:featureMember> +</xplan:XPlanAuszug> \ No newline at end of file diff --git a/xplan-distribution/pom.xml b/xplan-distribution/pom.xml index 9c5cddf836..817daeb701 100644 --- a/xplan-distribution/pom.xml +++ b/xplan-distribution/pom.xml @@ -147,6 +147,11 @@ <version>${project.version}</version> <type>zip</type> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>xplan-database-scripts</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>xplan-manager-config</artifactId> @@ -224,14 +229,7 @@ <groupId>${project.groupId}</groupId> <artifactId>xplan-webservices-workspaces</artifactId> <version>${project.version}</version> - <classifier>xplan-webservices-validator-wms-memory-workspace</classifier> - <type>zip</type> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>xplan-webservices-workspaces</artifactId> - <version>${project.version}</version> - <classifier>xplan-webservices-validator-wms-sql-workspace</classifier> + <classifier>xplan-webservices-validator-wms-workspace</classifier> <type>zip</type> </dependency> <!-- Test > /test --> diff --git a/xplan-distribution/src/main/assembly/assembly.xml b/xplan-distribution/src/main/assembly/assembly.xml index f5bb04b8e7..328fb6ef40 100644 --- a/xplan-distribution/src/main/assembly/assembly.xml +++ b/xplan-distribution/src/main/assembly/assembly.xml @@ -88,7 +88,7 @@ <outputDirectory>conf</outputDirectory> <outputFileNameMapping>${artifact.artifactId}${dashClassifier?}.${artifact.extension}</outputFileNameMapping> <includes> - <include>de.latlon.product.xplanbox:xplan-database-scripts:zip:*</include> + <include>de.latlon.product.xplanbox:xplan-database-scripts:*:*</include> </includes> </dependencySet> <dependencySet> diff --git a/xplan-docker/xplan-docker-volume-init/pom.xml b/xplan-docker/xplan-docker-volume-init/pom.xml index d7a4c3deed..f13710daca 100644 --- a/xplan-docker/xplan-docker-volume-init/pom.xml +++ b/xplan-docker/xplan-docker-volume-init/pom.xml @@ -13,7 +13,7 @@ <properties> <docker-image.skip>false</docker-image.skip> - <docker-contextTarFile.expectedSizeInMat10pct>14</docker-contextTarFile.expectedSizeInMat10pct> + <docker-contextTarFile.expectedSizeInMat10pct>12</docker-contextTarFile.expectedSizeInMat10pct> </properties> <build> @@ -67,14 +67,7 @@ <artifactId>xplan-webservices-workspaces</artifactId> <version>${project.version}</version> <type>zip</type> - <classifier>xplan-webservices-validator-wms-memory-workspace</classifier> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>xplan-webservices-workspaces</artifactId> - <version>${project.version}</version> - <type>zip</type> - <classifier>xplan-webservices-validator-wms-sql-workspace</classifier> + <classifier>xplan-webservices-validator-wms-workspace</classifier> </dependency> <dependency> <groupId>${project.groupId}</groupId> diff --git a/xplan-docker/xplan-docker-volume-init/setupVolumes.sh b/xplan-docker/xplan-docker-volume-init/setupVolumes.sh index f8653ee8d4..127dc2b500 100755 --- a/xplan-docker/xplan-docker-volume-init/setupVolumes.sh +++ b/xplan-docker/xplan-docker-volume-init/setupVolumes.sh @@ -102,10 +102,8 @@ sed -i 's|apiUrl=|apiUrl='$XPLAN_DOKUMENTEAPI_URL_PUBLIC'|g' xplan-dokumente-con sed -i 's|wmsUrl=|wmsUrl='$XPLAN_WMS_URL_PUBLIC'/xplan-wms|g' xplan-manager-config/managerApiConfiguration.properties sed -i 's|workspaceReloadUrls=|workspaceReloadUrls='$XPLAN_SERVICES_URL_INTERNAL'/xplan-wms|g' xplan-manager-config/managerConfiguration.properties sed -i 's/workspaceReloadApiKey=/workspaceReloadApiKey='$XPLAN_SERVICES_API_KEY'/g' xplan-manager-config/managerConfiguration.properties -sed -i 's/workspaceReloadAction=ALL/workspaceReloadAction='$XPLAN_MANAGER_WORKSPACE_RELOAD_ACTION'/g' xplan-manager-config/managerConfiguration.properties sed -i 's/pathToHaleCli=/pathToHaleCli=\/hale\/bin\/hale/g' xplan-manager-config/managerConfiguration.properties sed -i 's|http://localhost:8080|'$XPLAN_WMS_URL_PUBLIC'|g' xplan-manager-config/managerWebConfiguration.properties -sed -i 's|rasterConfigurationCrs=EPSG:25832|rasterConfigurationCrs='$XPLAN_SERVICES_DEFAULT_CRS'|g' xplan-manager-config/managerConfiguration.properties if [ $XPLAN_INIT_INSPIREPLU = "enabled" ] then @@ -190,31 +188,11 @@ find xplan-workspaces/xplan-services-wfs-syn-workspace/services -iname xplansynw echo $XPLAN_SERVICES_API_KEY >> xplan-workspaces/config.apikey # Rastertype -if [[ -z "${spring_profiles_active##*mapserver*}" ]] -then - echo "[$(date -Iseconds)] Configure rastertype mapserver" - mv xplan-workspaces/xplan-services-wms-workspace/layers/mapserver.ignore xplan-workspaces/xplan-services-wms-workspace/layers/mapserver.xml - mv xplan-workspaces/xplan-services-wms-workspace/datasources/remoteows/mapserver.ignore xplan-workspaces/xplan-services-wms-workspace/datasources/remoteows/mapserver.xml - find xplan-workspaces/xplan-services-wms-workspace/themes -iname *raster.xml -exec sed -i 's/<!--<LayerStoreId>mapserver/<LayerStoreId>mapserver/g' {} \; - find xplan-workspaces/xplan-services-wms-workspace/themes -iname *raster.xml -exec sed -i 's/mapserver<\/LayerStoreId>-->/mapserver<\/LayerStoreId>/g' {} \; - find xplan-workspaces/xplan-services-wms-workspace/themes -iname *raster.xml -exec sed -i 's/<!--<Layer layerStore="mapserver"/<Layer layerStore="mapserver"/g' {} \; - find xplan-workspaces/xplan-services-wms-workspace/themes -iname *raster.xml -exec sed -i 's/_rasterarchive<\/Layer>-->/_rasterarchive<\/Layer>/g' {} \; - find xplan-workspaces/xplan-services-wms-workspace/themes -iname *raster.xml -exec sed -i 's/_rasterpre<\/Layer>-->/_rasterpre<\/Layer>/g' {} \; - find xplan-workspaces/xplan-services-wms-workspace/themes -iname *raster.xml -exec sed -i 's/_raster<\/Layer>-->/_raster<\/Layer>/g' {} \; - sed -i 's|http://localhost:8080/mapserver|'$XPLAN_MAPSERVER_URL_INTERNAL'/mapserver|g' xplan-workspaces/xplan-services-wms-workspace/datasources/remoteows/mapserver.xml -else - echo "[$(date -Iseconds)] Configure rastertype geotiff" -fi +echo "[$(date -Iseconds)] Configure rastertype mapserver" +sed -i 's|http://localhost:8080/mapserver|'$XPLAN_MAPSERVER_URL_INTERNAL'/mapserver|g' xplan-workspaces/xplan-services-wms-workspace/datasources/remoteows/mapserver.xml sed -i 's|validatorWmsEndpoint=|validatorWmsEndpoint='$XPLAN_VALIDATORWMS_URL_PUBLIC'\/xplan-validator-wms\/services\/wms|g' xplan-validator-config/validatorConfiguration.properties -# memory or sql -if [[ -z "${spring_profiles_active##*validatorwmssql*}" ]] -then - echo "[$(date -Iseconds)] Configure XPlanValidatorWMS with database" - sed -i 's|xplan-webservices-validator-wms-memory-workspace|xplan-webservices-validator-wms-sql-workspace|g' xplan-validator-workspaces/webapps.properties -fi - #copy example external codelist XPLAN_INIT_EXAMPLE_CODELIST="${XPLAN_INIT_EXAMPLE_CODELIST:-disabled}" if [ $XPLAN_INIT_EXAMPLE_CODELIST = "enabled" ] diff --git a/xplan-docker/xplan-docker-volume-init/src/assembly/xplan-docker-volumes.xml b/xplan-docker/xplan-docker-volume-init/src/assembly/xplan-docker-volumes.xml index d2e3b0114d..050ac1e335 100644 --- a/xplan-docker/xplan-docker-volume-init/src/assembly/xplan-docker-volumes.xml +++ b/xplan-docker/xplan-docker-volume-init/src/assembly/xplan-docker-volumes.xml @@ -94,20 +94,11 @@ <unpack>true</unpack> <useProjectArtifact>false</useProjectArtifact> </dependencySet> - <!-- xplan-webservices-validator-wms-memory-workspaces --> + <!-- xplan-webservices-validator-wms-workspaces --> <dependencySet> - <outputDirectory>/xplan-validator-workspaces/xplan-webservices-validator-wms-memory-workspace</outputDirectory> + <outputDirectory>/xplan-validator-workspaces/xplan-webservices-validator-wms-workspace</outputDirectory> <includes> - <include>${project.groupId}:xplan-webservices-workspaces::xplan-webservices-validator-wms-memory-workspace</include> - </includes> - <unpack>true</unpack> - <useProjectArtifact>false</useProjectArtifact> - </dependencySet> - <!-- xplan-webservices-validator-wms-sql-workspaces --> - <dependencySet> - <outputDirectory>/xplan-validator-workspaces/xplan-webservices-validator-wms-sql-workspace</outputDirectory> - <includes> - <include>${project.groupId}:xplan-webservices-workspaces::xplan-webservices-validator-wms-sql-workspace</include> + <include>${project.groupId}:xplan-webservices-workspaces::xplan-webservices-validator-wms-workspace</include> </includes> <unpack>true</unpack> <useProjectArtifact>false</useProjectArtifact> diff --git a/xplan-docker/xplan-docker-volume-init/src/main/resources/xplan-validator-workspaces/webapps.properties b/xplan-docker/xplan-docker-volume-init/src/main/resources/xplan-validator-workspaces/webapps.properties index f45cbe1702..f17fafb16a 100644 --- a/xplan-docker/xplan-docker-volume-init/src/main/resources/xplan-validator-workspaces/webapps.properties +++ b/xplan-docker/xplan-docker-volume-init/src/main/resources/xplan-validator-workspaces/webapps.properties @@ -18,4 +18,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% ### -/xplan-validator-wms=xplan-webservices-validator-wms-memory-workspace +/xplan-validator-wms=xplan-webservices-validator-wms-workspace diff --git a/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanManager_Grundlagen.adoc b/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanManager_Grundlagen.adoc index f7fd8eca2e..3858be4249 100644 --- a/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanManager_Grundlagen.adoc +++ b/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanManager_Grundlagen.adoc @@ -166,17 +166,7 @@ NOTE: Ãœber die Editor-Funktion des XPlanManager können Rasterdaten über XP_Ra [[voraussetzungen-fuer-die-rasterdaten]] ===== Voraussetzungen für die Rasterdaten -Um Rasterdaten importieren und diese über die XPlanWMS-Ebene zur Verfügung -stellen zu können, müssen die Daten folgende Anforderungen erfüllen. - -Die Unterstützung verschiedener Rasterdatenformate ist vom gesetzten -Raster-Konfigurationstyp abhängig. - -IMPORTANT: Dies kann nur zentral für die xPlanBox konfiguriert und nicht durch den Nutzer geändert werden. Hinweise zur Konfiguration sind im Betriebshandbuch zu finden. - -Unterschieden wird dabei zwischen Rasterdatenformaten mit oder ohne World-File. - -Folgende Voraussetzung werden an die einzelnen Formate gestellt: +Um Rasterdaten importieren und diese über die XPlanWMS-Ebenen zur Verfügung stellen zu können, müssen die Daten bestimmt Voraussetzungen erfüllen, von denen einige während des Importvorgangs geprüft werden. Für eine korrekte Darstellung im XPlanWMS werden folgende Voraussetzung an die einzelnen Formate gestellt, wobei zwischen Rasterdatenformaten mit oder ohne World-File unterschieden wird: *GeoTIFF*: @@ -198,10 +188,8 @@ Folgende Voraussetzung werden an die einzelnen Formate gestellt: * Farbmodell (RGB) mit ein, drei oder vier Bändern. * Farbtiefe ist 8bit, 16bit oder 256 indizierten Farben im Farbpalettenmodus. * Transparenz ist als Alphakanal je Band (RGBA) oder als "NoData Value" angegeben. - * PNG-Dateien liegen in dem Koordinatenreferenzsystem vor, welches für - den XPlanManager konfiguriert ist. - * PNG-Dateien enthalten ihre räumliche Ausdehnung in dem - ausgelagerten World-File (pgw-Datei). + * PNG-Dateien liegen in dem Koordinatenreferenzsystem vor, welches für den XPlanManager konfiguriert ist. + * PNG-Dateien enthalten ihre räumliche Ausdehnung in dem ausgelagerten World-File (pgw-Datei). * Wenn das Kommandozeilentool __XPlanManagerCLI__ verwendet wird, muss in der Datei _aux.xml_ das Koordinatenreferenzsystem der PNG-Datei definiert sein. Für den XPlanManagerWeb ist dies keine Voraussetzung, da der diff --git a/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/aenderungsHistorie.adoc b/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/aenderungsHistorie.adoc index afdf37b75e..8879736638 100644 --- a/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/aenderungsHistorie.adoc +++ b/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/aenderungsHistorie.adoc @@ -12,6 +12,15 @@ - Fehler beim Import von Plänen mit externen Referenzen auf Rasterdaten über die XPlanManagerAPI behoben - Aktualisierung der Validierungsregeln auf v1.1.9 +==== Veraltete Funktionen + +Die folgenden Funktionen sind veraltet und werden in einer zukünftigen Version der xPlanBox entfernt: + +- Nutzung von XPlanWMS mit GeoTiffTileStore ist veraltet (deprecated) +- Nutzung von XPlanWMS mit MapServer und lokalen Dateisystem ist veraltet (deprecated) +- Nutzung von XPlanValidatorWMS mit einem In-Memory-FeatureStore ist veraltet (deprecated). +- Die Workspace-Konfiguration xplan-webservices-validator-wms-memory-workspace ist veraltet (deprecated). + [[Aenderungshistorie-7.2.1]] === Version 7.2.1 diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/datenbank.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/datenbank.adoc index f569a36588..fdcbed9ce0 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/datenbank.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/datenbank.adoc @@ -28,7 +28,7 @@ NOTE: Weitere Informationen zu der Erstellung der XPlanDB im Anhang <<appendix_x ==== Liquibase Um die XPlanDB einzurichten ist die Installation von https://www.liquibase.com/download[Liquibase] 4.27+ erforderlich. -Liquibase benötigt ein <<jdk>> und einen aktuellen JDBC-Treiber für die <<datenbank>>. +Liquibase benötigt ein <<jdk,JDK>> und einen aktuellen JDBC-Treiber für den Zugriff auf die <<datenbank>>. Für die initiale Installation und auch Aktualisierungen sind folgende Schritte erforderlich: @@ -43,8 +43,8 @@ $LIQUIBASE_HOME/liquibase --version [source,bash] ---- $LIQUIBASE_HOME/liquibase - --driver org.postgresql.Driver \ <1> - --classpath=./org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar \ <2> + --driver=org.postgresql.Driver \ <1> + --classpath=changelog:/liquibase/classpath/xplan-database-scripts.jar:./org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar \ <2> --search-path=changelog \ <3> --changelog-file=changelog_xplandb.yaml \ <4> --url=$XPLAN_JDBC_URL \ <5> @@ -54,8 +54,8 @@ $LIQUIBASE_HOME/liquibase -Dxplan.db.user=$XPLAN_DB_USER <9> -Dxplan.srid=$XPLAN_SERVICES_DEFAULT_CRS_SRID <10> ---- -<1> ein JDBC-Treiber für PostgreSQL ist in Liquibase enthalten (optional) -<2> Pfad zu JDBC-Treiber (optional) +<1> JDBC-Treiber für PostgreSQL ist in Liquibase enthalten (optional) +<2> Pfad zu den gepackten Liquibase-Dateien und Pfad zu JDBC-Treiber getrennt durch `:` unter LINUX/UNIX oder `;` unter Windows (optional) <3> Pfad zu den Liquibase Changelog-Dateien (optional) <4> Liquibase-Datei für die XPlanDB _changelog_xplandb.yaml_ <5> JDBC URL, z.B. `jdbc:postgresql://localhost:5432/xplanbox` diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/installation.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/installation.adoc index 31e84b0363..2dae25de60 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/installation.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/installation.adoc @@ -12,8 +12,8 @@ Die ZIP-Archive mit den deegree Workspaces (s. <<installationskomponenten>>) mü * _xplan-services-wfs-workspace.zip_ * _xplan-services-wfs-syn-workspace.zip_ * _xplan-services-wms-workspace.zip_ -* _xplan-validator-workspace.zip_ (nur erforderlich in Kombination mit dem _xplan-webservices-validator-wms-sql-workspace.zip_) -* _xplan-webservices-validator-wms-memory-workspace.zip_ *oder* _xplan-webservices-validator-wms-sql-workspace.zip_ (siehe <<konfiguration-xplanvalidatorwms>>) +* _xplan-validator-workspace.zip_ +* _xplan-webservices-validator-wms-workspace.zip_ (siehe <<konfiguration-xplanvalidatorwms>>) * _xplan-webservices-inspireplu-workspace.zip_ (optional) Die ZIP-Archive mit den Konfigurationen für die XPlanManager und XPlanValidator (s. <<installationskomponenten>>) müssen in das Verzeichnis _<XPLANBOX_CONFIG>_ (s. <<vorbereitung-der-installation>>) entpackt werden: diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/ueberblick.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/ueberblick.adoc index ae2e4e7503..cce7e091ee 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/ueberblick.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/installation/ueberblick.adoc @@ -20,16 +20,16 @@ Die xPlanBox umfasst die folgenden Komponenten, die zusammengenommen die Liefere |xplan-validator-api.war |xplan-validator-config.zip, xplan-validator-workspace.zip |xplan-webpages-default.war |- |xplan-webservices-inspireplu.war |xplan-webservices-inspireplu-workspace.zip -|xplan-webservices-validator-wms.war |xplan-webservices-validator-wms-memory-workspace.zip, xplan-webservices-validator-wms-sql-workspace.zip +|xplan-webservices-validator-wms.war |xplan-webservices-validator-wms-workspace.zip |=== -* MapServer Konfiguration +* MapServer Konfiguration: ** xplan-mapserver-config.zip - -* MapProxy Konfiguration +* MapProxy Konfiguration: ** xplan-mapproxy-config.zip - -* Dokumentation : +* Liquibase Changelog-Dateien: + ** xplan-database-scripts.jar +* Dokumentation: ** xplan-benutzerhandbuch-<html|pdf>.zip - XPlanBenutzerhandbuch - Benutzerhandbuch für die Komponenten der xPlanBox in HTML und PDF-Format ** xplan-betriebshandbuch-<html|pdf>.zip - XPlanBetriebshandbuch - Betriebshandbuch und Installationsanleitung für die xPlanBox in HTML und PDF-Format diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/manager/koordinatensystem.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/manager/koordinatensystem.adoc index 402754551e..ee71dad119 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/manager/koordinatensystem.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/manager/koordinatensystem.adoc @@ -6,15 +6,7 @@ Die von der xPlanBox unterstützten Koordinatenreferenzsysteme können wie folgt [[crs-rasterdaten]] ==== Rasterdaten -Die nachfolgende Konfiguration muss in der Datei _<XPLANBOX_CONFIG>/managerConfiguration.properties_ angepasst werden. - -Das Standard-Koordinatenreferenzsystem kann über den Schlüssel -_rasterConfigurationCrs_ konfiguriert werden: - -[source,properties] ----- -rasterConfigurationCrs=EPSG:25832 ----- +Das Standard-Koordinatenreferenzsystem (Vorgabewert: `EPSG:25832`) kann durch das Setzen der Umgebungsvariable `XPLAN_SERVICES_DEFAULT_CRS` konfiguriert werden: `export XPLAN_SERVICES_DEFAULT_CRS=EPSG:25833` [[crs-featurestore]] ==== Ändern des Koordinatenreferenzsystems diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/rest-api/main.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/rest-api/main.adoc index a66f9113d1..86205f585e 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/rest-api/main.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/rest-api/main.adoc @@ -75,6 +75,8 @@ skipLaufrichtung=false skipGeltungsbereich=true ---- +NOTE: Ab der Version 8.0 ist die Validierung von Rasterdaten Teil der Validierung und wird beim Import mit ausgeführt. Für die Komponente XPlanValidatorAPI kann dieser Schritt über die Umgebungsvariable `XPLAN_RASTER_EVALUATION_SKIPPED=true` deaktiviert werden. + [[konfiguration-validator-api]] === XPlanValidatorAPI diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/validator/kartenvorschau.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/validator/kartenvorschau.adoc index ed5ca23173..a13d40e447 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/validator/kartenvorschau.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/konfiguration/validator/kartenvorschau.adoc @@ -34,28 +34,18 @@ IMPORTANT: Der XPlanValidatorWMS ist veraltet und wird in zukünftigen Versionen [[konfiguration-xplanvalidatorwms]] ==== Konfiguration des XPlanValidatorWMS -Im XPlanValidatorWMS werden die im XPlanValidator hochgeladenen XPlanGML-Dateien visualisiert und können u.a. über die Kartenvorschau im XPlanValidatorWeb angezeigt werden. Der XPlanValidatorWMS unterstützt für die temporäre Datenhaltung zwei Konfigurationen. +Im XPlanValidatorWMS werden die im XPlanValidator hochgeladenen XPlanGML-Dateien visualisiert und können u.a. über die Kartenvorschau im XPlanValidatorWeb angezeigt werden. Der XPlanValidatorWMS nutzt für die temporäre Datenhaltung die XPlanDB. -Mit der Workspace-Konfiguration _xplan-webservices-validator-wms-memory-workspace_ wird der XPlanValidatorWMS so konfiguriert, dass die Daten ausschliesslich im Arbeitsspeicher vorgehalten werden. +Mit dem _xplan-webservices-validator-wms-workspace_ wird die XPlanDB als Datenhaltung für den XPlanValidatorWMS konfiguriert. Dafür muss ein separates Schema für den XPlanValidatorWMS in der XPlanDB angelegt werden (weitere Informationen zur Einrichtung der XPlanDB im Kapitel <<konfiguration-der-datenbank>>). Zusammen mit der Workspace-Konfiguration für den XPlanValidatorWMS, muss zusätzlich auch der _xplan-validator-workspace.zip_ im Verzeichnis _<DEEGREE_WORKSPACE_ROOT>_ abgelegt werden. -Mit dem _xplan-webservices-validator-wms-sql-workspace_ kann stattdessen die XPlanDB als Datenhaltung für den XPlanValidatorWMS konfiguriert werden. Dabei muss ein separates Schema für den XPlanValidatorWMS in der XPlanDB angelegt werden (weitere Informationen zur Einrichtung der XPlanDB im Kapitel <<konfiguration-der-datenbank>>). Wenn diese Workspace-Konfiguration gewählt wird, muss zusätzlich auch der _xplan-validator-workspace.zip_ im Verzeichnis _<DEEGREE_WORKSPACE_ROOT>_ abgelegt werden. - -Die Aktivierung der gewünschten Workspace-Konfiguration erfolgt über die Datei _<DEEGREE_WORKSPACE_ROOT>/webapps.properties_ (siehe <<installation-webapp-properties>>). +Die Aktivierung der Workspace-Konfiguration erfolgt über die Datei _<DEEGREE_WORKSPACE_ROOT>/webapps.properties_ (siehe <<installation-webapp-properties>>). .Beispiel für den Eintrag in der _webapps.properties_ mit der Auswahl der XPlanDB als Datenhaltung für den XPlanValidatorWMS: [source,properties] ---- -/xplan-webservices-validator-wms=xplan-webservices-validator-wms-sql-workspace +/xplan-webservices-validator-wms=xplan-webservices-validator-wms-workspace ---- -[IMPORTANT] -==== -Um die Kartenvorschau zu aktivieren, muss zusätzlich die Umgebungsvariable `spring_profiles_active` für XPlanValidatorWeb, XPlanValidatorAPI und XPlanValidatorWMS wie folgt gesetzt werden: - -* Für die Speicherung der Daten im Arbeitsspeicher: `spring_profiles_active=validatorwmsmemory` -* Für die Speicherung der Daten in der XPlanDB: `spring_profiles_active=validatorwmssql` -==== - [[konfiguration-xplanvalidatorwms-scheduler]] ==== Konfiguration des Löschens von Daten aus dem XPlanValidatorWMS diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/s3storage.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/s3storage.adoc index 504fe7be2b..61f35a37b5 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/s3storage.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/s3storage.adoc @@ -28,7 +28,6 @@ XPLAN_S3_ENDPOINT=s3.eu-central-1.amazonaws.com <5> <4> Hier muss die S3 Region gesetzt werden <5> Hier muss die S3 Endpoint URL gesetzt werden -NOTE: Für die Aktivierung des S3-Objektspeichers für die Ablage von Rasterdaten muss zusätzlich auch die Umgebungsvariable `spring_profiles_active=s3img` gesetzt werden. [[s3-storage-doc]] === Begleitdokumente @@ -48,5 +47,3 @@ XPLAN_S3_ENDPOINT=s3.eu-central-1.amazonaws.com <5> <3> Hier muss der Name des S3 Bucket für die Begleitdokumente gesetzt werden, hier als Beispiel `mydocumentbucket` <4> Hier muss die S3 Region gesetzt werden <5> Hier muss die S3 Endpoint URL gesetzt werden - -NOTE: Für die Aktivierung des S3 Objektspeichers für die Ablage von Begleitdokumenten muss zusätzlich auch die Umgebungsvariable `spring_profiles_active=s3doc` gesetzt werden. diff --git a/xplan-dokumente/xplan-dokumente-api/pom.xml b/xplan-dokumente/xplan-dokumente-api/pom.xml index 8baa4030be..44b534a231 100755 --- a/xplan-dokumente/xplan-dokumente-api/pom.xml +++ b/xplan-dokumente/xplan-dokumente-api/pom.xml @@ -267,6 +267,15 @@ <artifactId>hsqldb</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-test</artifactId> + </dependency> + <dependency> + <groupId>io.findify</groupId> + <artifactId>s3mock_2.13</artifactId> + <scope>test</scope> + </dependency> </dependencies> <profiles> diff --git a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/DokumenteApiConfiguration.java b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/DokumenteApiConfiguration.java index 21748d976a..c82343841f 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/DokumenteApiConfiguration.java +++ b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/DokumenteApiConfiguration.java @@ -38,9 +38,10 @@ public class DokumenteApiConfiguration extends ApiConfiguration { public DokumenteApiConfiguration(PropertiesLoader propertiesLoader) throws ConfigurationException { super(propertiesLoader, API_CONFIGURATION_PROPERTIES); + logProperties(); } - protected void logProperties() { + private void logProperties() { LOG.info("-------------------------------------------"); LOG.info("Configuration of the XPlanDokumenteApi:"); LOG.info("-------------------------------------------"); diff --git a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/S3DocumentContext.java b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/S3DocumentContext.java index cc43ddb716..528ec6eeed 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/S3DocumentContext.java +++ b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/config/S3DocumentContext.java @@ -20,25 +20,23 @@ */ package de.latlon.xplanbox.api.dokumente.config; +import static org.slf4j.LoggerFactory.getLogger; + import com.amazonaws.services.s3.AmazonS3; import de.latlon.xplan.commons.s3.S3Storage; -import de.latlon.xplan.manager.storage.s3.config.AmazonS3Context; +import de.latlon.xplan.manager.storage.s3.config.AmazonS3ReadOnlyContext; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; - -import static org.slf4j.LoggerFactory.getLogger; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 */ @Configuration -@Profile("s3img & s3doc") -@Import(AmazonS3Context.class) +@Import(AmazonS3ReadOnlyContext.class) public class S3DocumentContext { private static final Logger LOG = getLogger(S3DocumentContext.class); diff --git a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/db/DBDocumentService.java b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/db/DBDocumentService.java deleted file mode 100644 index 78ae8475c2..0000000000 --- a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/db/DBDocumentService.java +++ /dev/null @@ -1,95 +0,0 @@ -/*- - * #%L - * xplan-dokumente-api - Software zur Verwaltung von XPlanGML Daten - * %% - * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package de.latlon.xplanbox.api.dokumente.service.db; - -import de.latlon.xplan.core.manager.db.model.Artefact; -import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; -import de.latlon.xplanbox.api.dokumente.exception.InvalidDocument; -import de.latlon.xplanbox.api.dokumente.service.DocumentHeader; -import de.latlon.xplanbox.api.dokumente.service.DocumentHeaderWithStream; -import de.latlon.xplanbox.api.dokumente.service.DocumentService; -import de.latlon.xplanbox.api.dokumente.v1.model.Document; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import jakarta.ws.rs.core.StreamingOutput; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.zip.GZIPInputStream; - -import static de.latlon.xplan.core.manager.db.model.ArtefactType.XPLANGML; - -/** - * Implementation of a {@link DocumentService} retrieving the documents from the database - * (xplanmgr schema). - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @since 7.0 - */ -@Service -@Profile("!s3img & !s3doc") -public class DBDocumentService implements DocumentService { - - @Autowired - private ArtefactRepository artefactRepository; - - @Override - @Transactional(readOnly = true) - public List<Document> listDocuments(int planId) { - Stream<Artefact> allArtefactsOfPlan = artefactRepository.findAllByPlanId(planId); - return allArtefactsOfPlan.filter(artefact -> XPLANGML != artefact.getArtefacttype()) - .map(artefact -> new Document().fileName(artefact.getId().getFilename())) - .collect(Collectors.toList()); - } - - @Override - public DocumentHeader retrieveHeader(int planId, String fileName) throws InvalidDocument { - Optional<Artefact> artefactCandidate = artefactRepository.findByPlanAndFilename(planId, fileName); - if (!artefactCandidate.isPresent()) - throw new InvalidDocument(planId, fileName); - Artefact artefact = artefactCandidate.get(); - return new DocumentHeader(artefact.getLength(), artefact.getMimetype()); - } - - @Override - public DocumentHeaderWithStream retrieveDocumentAndHeader(int planId, String fileName) throws InvalidDocument { - Optional<Artefact> artefactCandidate = artefactRepository.findByPlanAndFilename(planId, fileName); - if (!artefactCandidate.isPresent()) - throw new InvalidDocument(planId, fileName); - Artefact artefact = artefactCandidate.get(); - byte[] data = artefact.getData(); - try (ByteArrayInputStream bis = new ByteArrayInputStream(data)) { - GZIPInputStream is = new GZIPInputStream(bis); - StreamingOutput streamingOutput = outputStream -> is.transferTo(outputStream); - return new DocumentHeaderWithStream(artefact.getLength(), artefact.getMimetype(), streamingOutput); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - -} diff --git a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/s3/S3DocumentService.java b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/s3/S3DocumentService.java index ee34897a6c..ca01d66314 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/s3/S3DocumentService.java +++ b/xplan-dokumente/xplan-dokumente-api/src/main/java/de/latlon/xplanbox/api/dokumente/service/s3/S3DocumentService.java @@ -20,7 +20,17 @@ */ package de.latlon.xplanbox.api.dokumente.service.s3; +import static jakarta.ws.rs.core.Response.Status.NOT_FOUND; + +import java.io.ByteArrayInputStream; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import com.amazonaws.services.s3.model.S3ObjectSummary; + import de.latlon.xplan.commons.s3.S3Metadata; import de.latlon.xplan.commons.s3.S3Object; import de.latlon.xplan.commons.s3.S3Storage; @@ -30,16 +40,7 @@ import de.latlon.xplanbox.api.dokumente.service.DocumentHeader; import de.latlon.xplanbox.api.dokumente.service.DocumentHeaderWithStream; import de.latlon.xplanbox.api.dokumente.service.DocumentService; import de.latlon.xplanbox.api.dokumente.v1.model.Document; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Service; - import jakarta.ws.rs.core.StreamingOutput; -import java.io.ByteArrayInputStream; -import java.util.List; -import java.util.stream.Collectors; - -import static jakarta.ws.rs.core.Response.Status.NOT_FOUND; /** * Implementation of a {@link DocumentService} retrieving the documents from S3. @@ -48,7 +49,6 @@ import static jakarta.ws.rs.core.Response.Status.NOT_FOUND; * @since 7.0 */ @Service -@Profile("s3img & s3doc") public class S3DocumentService implements DocumentService { @Autowired diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestContext.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestContext.java index 94c17c14fa..fc2e1c522b 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestContext.java +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestContext.java @@ -20,6 +20,12 @@ */ package de.latlon.xplanbox.api.dokumente.config; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.nio.charset.StandardCharsets; +import java.util.Collections; + import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; import de.latlon.xplanbox.api.dokumente.handler.DocumentHandler; import de.latlon.xplanbox.api.dokumente.service.DocumentHeader; @@ -28,6 +34,7 @@ import de.latlon.xplanbox.api.dokumente.v1.DefaultApi; import de.latlon.xplanbox.api.dokumente.v1.DokumentApi; import de.latlon.xplanbox.api.dokumente.v1.InfoApi; import de.latlon.xplanbox.api.dokumente.v1.model.Document; +import jakarta.ws.rs.core.StreamingOutput; import org.apache.commons.io.IOUtils; import org.glassfish.jersey.server.ResourceConfig; import org.springframework.context.annotation.Bean; @@ -35,18 +42,12 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; -import jakarta.ws.rs.core.StreamingOutput; -import java.util.Collections; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 7.0 */ @Configuration -@Import(HsqlJpaContext.class) +@Import({ HsqlJpaContext.class, TestS3Context.class }) public class TestContext { @Bean @@ -65,7 +66,7 @@ public class TestContext { when(documentHandler.listDocuments("1")) .thenReturn(Collections.singletonList(new Document().fileName("test.png"))); when(documentHandler.headDocument("1", "test.png")).thenReturn(new DocumentHeader(5, "image/png")); - StreamingOutput stream = outputStream -> IOUtils.write("test", outputStream); + StreamingOutput stream = outputStream -> IOUtils.write("test", outputStream, StandardCharsets.UTF_8); when(documentHandler.getDocument("1", "test.png")) .thenReturn(new DocumentHeaderWithStream(5, "image/png", stream)); return documentHandler; diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestS3Context.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestS3Context.java new file mode 100644 index 0000000000..9a816ea2c2 --- /dev/null +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/config/TestS3Context.java @@ -0,0 +1,67 @@ +package de.latlon.xplanbox.api.dokumente.config; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.AnonymousAWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import io.findify.s3mock.S3Mock; +import jakarta.annotation.PreDestroy; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.test.util.TestSocketUtils; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Configuration +public class TestS3Context { + + private final int port = TestSocketUtils.findAvailableTcpPort(); + + private AmazonS3 s3TestClient; + + private S3Mock s3Mock; + + @Bean + public S3Mock s3Mock() { + this.s3Mock = new S3Mock.Builder().withPort(port).withInMemoryBackend().build(); + s3Mock.start(); + return s3Mock; + } + + @Bean + @Primary + public AmazonS3 s3Client(S3Mock s3Mock, @Value("${xplanbox.s3.bucketName}") String bucketName) { + AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration( + "http://localhost:" + port, "eu-central-1"); + AmazonS3 client = AmazonS3ClientBuilder.standard() + .withPathStyleAccessEnabled(true) + .withEndpointConfiguration(endpoint) + .withCredentials(new AWSStaticCredentialsProvider(new AnonymousAWSCredentials())) + .build(); + client.createBucket(bucketName); + s3TestClient = client; + return client; + } + + @Bean + @Primary + public AWSCredentials credentials() { + return new BasicAWSCredentials("accessKeyId", "secretKey"); + } + + @PreDestroy + public void shutdown() { + s3TestClient.shutdown(); + if (s3Mock != null) { + s3Mock.stop(); + } + } + +} diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/handler/DocumentHandlerTest.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/handler/DocumentHandlerTest.java index b81dabd3cc..cbcf9f3c17 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/handler/DocumentHandlerTest.java +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/handler/DocumentHandlerTest.java @@ -8,12 +8,12 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% @@ -32,19 +32,21 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Path; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.zip.GZIPOutputStream; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.Commit; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.transaction.annotation.Transactional; - +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.AnonymousAWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import de.latlon.xplan.commons.s3.S3Storage; import de.latlon.xplan.core.manager.db.model.Artefact; import de.latlon.xplan.core.manager.db.model.ArtefactId; import de.latlon.xplan.core.manager.db.model.Bereich; @@ -59,41 +61,109 @@ import de.latlon.xplanbox.api.dokumente.exception.InvalidDocument; import de.latlon.xplanbox.api.dokumente.service.DocumentHeader; import de.latlon.xplanbox.api.dokumente.service.DocumentHeaderWithStream; import de.latlon.xplanbox.api.dokumente.v1.model.Document; +import io.findify.s3mock.S3Mock; +import jakarta.annotation.PreDestroy; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.util.TestSocketUtils; +import org.springframework.transaction.annotation.Transactional; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { ApplicationContext.class, HsqlJpaContext.class }) +@ContextConfiguration( + classes = { ApplicationContext.class, HsqlJpaContext.class, DocumentHandlerTest.TestConfig.class }) @Transactional +@TestPropertySource(properties = "xplanbox.s3.bucketName=my-test-bucket") class DocumentHandlerTest { + static class TestConfig { + + private final int port = TestSocketUtils.findAvailableTcpPort(); + + private AmazonS3 s3TestClient; + + @Autowired + private S3Mock s3Mock; + + @Bean + public S3Mock s3Mock() { + S3Mock s3Mock = new S3Mock.Builder().withPort(port).withInMemoryBackend().build(); + s3Mock.start(); + return s3Mock; + } + + @Bean + @Primary + public AmazonS3 s3Client(S3Mock s3Mock, @Value("${xplanbox.s3.bucketName}") String bucketName) { + AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration( + "http://localhost:" + port, "eu-central-1"); + AmazonS3 client = AmazonS3ClientBuilder.standard() + .withPathStyleAccessEnabled(true) + .withEndpointConfiguration(endpoint) + .withCredentials(new AWSStaticCredentialsProvider(new AnonymousAWSCredentials())) + .build(); + client.createBucket(bucketName); + s3TestClient = client; + return client; + } + + @Bean + @Primary + public AWSCredentials credentials() { + return new BasicAWSCredentials("accessKeyId", "secretKey"); + } + + @PreDestroy + public void shutdown() { + s3TestClient.shutdown(); + if (s3Mock != null) { + s3Mock.stop(); + } + } + + } + @Autowired private DocumentHandler documentHandler; @Autowired private PlanRepository planRepository; + @Autowired + private S3Storage documentStorage; + @Test @Commit void test_listDocuments() throws Exception { Plan plan = createPlanWithArtefact(); planRepository.save(plan); + documentStorage.insertObject(plan.getId() + "_test.txt", + Path.of(Objects.requireNonNull(getClass().getResource("/test.txt")).toURI())); List<Document> documents = documentHandler.listDocuments(String.valueOf(plan.getId())); assertEquals(1, documents.size()); } @Test - void test_listDocuments_invalidPlanId() throws Exception { + void test_listDocuments_invalidPlanId() { assertThrows(InvalidPlanIdSyntax.class, () -> { documentHandler.listDocuments("stringid"); }); } @Test - void test_listDocuments_unknownPlanId() throws Exception { + void test_listDocuments_unknownPlanId() { assertThrows(InvalidPlanId.class, () -> { documentHandler.listDocuments("99"); }); @@ -104,21 +174,23 @@ class DocumentHandlerTest { void test_headDocument() throws Exception { Plan plan = createPlanWithArtefact(); planRepository.save(plan); + documentStorage.insertObject(plan.getId() + "_test.txt", + Path.of(Objects.requireNonNull(getClass().getResource("/test.txt")).toURI())); - DocumentHeader documentHeader = documentHandler.headDocument(String.valueOf(plan.getId()), "test.xml"); - assertEquals(4, documentHeader.getFileSize()); - assertEquals("text/xml", documentHeader.getMediaType()); + DocumentHeader documentHeader = documentHandler.headDocument(String.valueOf(plan.getId()), "test.txt"); + assertEquals(19, documentHeader.getFileSize()); + assertEquals("text/plain", documentHeader.getMediaType()); } @Test - void test_headDocument_invalidPlanId() throws Exception { + void test_headDocument_invalidPlanId() { assertThrows(InvalidPlanIdSyntax.class, () -> { documentHandler.headDocument("stringid", "test.xml"); }); } @Test - void test_headDocument_unknownPlanId() throws Exception { + void test_headDocument_unknownPlanId() { assertThrows(InvalidPlanId.class, () -> { documentHandler.headDocument("99", "test.xml"); }); @@ -126,9 +198,9 @@ class DocumentHandlerTest { @Test void test_headDocument_unknownDocument() throws Exception { + Plan plan = createPlanWithArtefact(); + planRepository.save(plan); assertThrows(InvalidDocument.class, () -> { - Plan plan = createPlanWithArtefact(); - planRepository.save(plan); documentHandler.headDocument(String.valueOf(plan.getId()), "unknown.xml"); }); } @@ -138,22 +210,24 @@ class DocumentHandlerTest { void test_getDocument() throws Exception { Plan plan = createPlanWithArtefact(); planRepository.save(plan); + documentStorage.insertObject(plan.getId() + "_test.txt", + Path.of(Objects.requireNonNull(getClass().getResource("/test.txt")).toURI())); - DocumentHeaderWithStream documentHeader = documentHandler.getDocument(String.valueOf(plan.getId()), "test.xml"); - assertEquals(4, documentHeader.getFileSize()); - assertEquals("text/xml", documentHeader.getMediaType()); + DocumentHeaderWithStream documentHeader = documentHandler.getDocument(String.valueOf(plan.getId()), "test.txt"); + assertEquals(19, documentHeader.getFileSize()); + assertEquals("text/plain", documentHeader.getMediaType()); assertTrue(documentHeader.getStreamingOutput() != null); } @Test - void test_getDocument_invalidPlanId() throws Exception { + void test_getDocument_invalidPlanId() { assertThrows(InvalidPlanIdSyntax.class, () -> { documentHandler.getDocument("stringid", "test.xml"); }); } @Test - void test_getDocument_unknownPlanId() throws Exception { + void test_getDocument_unknownPlanId() { assertThrows(InvalidPlanId.class, () -> { documentHandler.getDocument("99", "test.xml"); }); @@ -161,9 +235,9 @@ class DocumentHandlerTest { @Test void test_getDocument_unknownDocument() throws Exception { + Plan plan = createPlanWithArtefact(); + planRepository.save(plan); assertThrows(InvalidDocument.class, () -> { - Plan plan = createPlanWithArtefact(); - planRepository.save(plan); documentHandler.getDocument(String.valueOf(plan.getId()), "unknown.xml"); }); } diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DefaultApiTest.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DefaultApiTest.java index 37821f2a57..be1e0cdc33 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DefaultApiTest.java +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DefaultApiTest.java @@ -23,34 +23,15 @@ package de.latlon.xplanbox.api.dokumente.v1; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplanbox.api.dokumente.config.ApplicationContext; -import de.latlon.xplanbox.api.dokumente.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 7.0 */ -class DefaultApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(DefaultApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class DefaultApiTest extends DokumenteApiJerseyTest<DefaultApi> { @Test void verifyThat_Response_ContainsCorrectStatusCodeAndMediaType() { diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumentApiTest.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumentApiTest.java index 8c58de728f..b36e91e580 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumentApiTest.java +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumentApiTest.java @@ -22,34 +22,14 @@ package de.latlon.xplanbox.api.dokumente.v1; import static org.assertj.core.api.Assertions.assertThat; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplanbox.api.dokumente.config.ApplicationContext; -import de.latlon.xplanbox.api.dokumente.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 7.0 */ -class DokumentApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(DokumentApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - resourceConfig.register(this); - return resourceConfig; - } +class DokumentApiTest extends DokumenteApiJerseyTest<DokumentApi> { @Test void verifyThat_ListDokumente_Response_ContainsCorrectStatusCode() { diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumenteApiJerseyTest.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumenteApiJerseyTest.java new file mode 100644 index 0000000000..f06c219243 --- /dev/null +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/DokumenteApiJerseyTest.java @@ -0,0 +1,42 @@ +package de.latlon.xplanbox.api.dokumente.v1; + +import java.lang.reflect.ParameterizedType; +import java.util.Collections; +import java.util.Map; + +import de.latlon.xplanbox.api.dokumente.config.ApplicationContext; +import de.latlon.xplanbox.api.dokumente.config.TestContext; +import jakarta.ws.rs.core.Application; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.TestProperties; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.PropertySource; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public abstract class DokumenteApiJerseyTest<T> extends JerseyTest { + + @Override + protected Application configure() { + enable(TestProperties.LOG_TRAFFIC); + Class<T> actualTypeArgument = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()) + .getActualTypeArguments()[0]; + final ResourceConfig resourceConfig = new ResourceConfig(actualTypeArgument); + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + ConfigurableEnvironment env = context.getEnvironment(); + Map<String, Object> map = Collections.singletonMap("xplanbox.s3.bucketName", "test-bucket"); + PropertySource<?> propertySource = new MapPropertySource("dokumente-api", map); + env.getPropertySources().addLast(propertySource); + context.setEnvironment(env); + context.register(ApplicationContext.class, TestContext.class); + context.refresh(); + resourceConfig.property("contextConfig", context); + return resourceConfig; + } + +} diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/InfoApiTest.java b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/InfoApiTest.java index 6f9debab8f..cafd7a8ef0 100644 --- a/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/InfoApiTest.java +++ b/xplan-dokumente/xplan-dokumente-api/src/test/java/de/latlon/xplanbox/api/dokumente/v1/InfoApiTest.java @@ -24,34 +24,15 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplanbox.api.dokumente.config.ApplicationContext; -import de.latlon.xplanbox.api.dokumente.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 7.0 */ -class InfoApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(InfoApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class InfoApiTest extends DokumenteApiJerseyTest<InfoApi> { @Test void verifyThat_Response_ContainsCorrectStatusCodeAndMediaType() { diff --git a/xplan-dokumente/xplan-dokumente-api/src/test/resources/test.txt b/xplan-dokumente/xplan-dokumente-api/src/test/resources/test.txt new file mode 100644 index 0000000000..897e621aa8 --- /dev/null +++ b/xplan-dokumente/xplan-dokumente-api/src/test/resources/test.txt @@ -0,0 +1 @@ +DocumentHandlerTest \ No newline at end of file diff --git a/xplan-manager/xplan-manager-api/pom.xml b/xplan-manager/xplan-manager-api/pom.xml index 6769dae9f6..1f205ff5a6 100644 --- a/xplan-manager/xplan-manager-api/pom.xml +++ b/xplan-manager/xplan-manager-api/pom.xml @@ -330,6 +330,10 @@ <groupId>de.latlon.product.xplanbox</groupId> <artifactId>xplan-core-validator-events</artifactId> </dependency> + <dependency> + <groupId>io.findify</groupId> + <artifactId>s3mock_2.13</artifactId> + </dependency> </dependencies> <profiles> diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java index d3ed3829e8..6ad088e423 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java @@ -46,6 +46,7 @@ import de.latlon.xplanbox.api.commons.v1.model.VersionEnum; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.openapi.v1.ApiV1Config; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v1.model.Link; import de.latlon.xplanbox.api.manager.v1.model.PlanInfo; import de.latlon.xplanbox.api.manager.v1.model.PlanInfoXplanModelData; @@ -64,15 +65,19 @@ public class PlanInfoBuilder { private final List<Bereich> bereiche; + private final List<Gemeinde> gemeinden; + private final ManagerApiConfiguration managerApiConfiguration; private final List<String> alternateMediaTypes = new ArrayList<>(); private String selfMediaType; - public PlanInfoBuilder(XPlan xPlan, List<Bereich> bereiche, ManagerApiConfiguration managerApiConfiguration) { + public PlanInfoBuilder(XPlan xPlan, List<Bereich> bereiche, List<Gemeinde> gemeinden, + ManagerApiConfiguration managerApiConfiguration) { this.xPlan = xPlan; this.bereiche = bereiche; + this.gemeinden = gemeinden; this.managerApiConfiguration = managerApiConfiguration; } @@ -95,12 +100,15 @@ public class PlanInfoBuilder { private static PlanInfoXplanModelData convertToV1( de.latlon.xplanbox.api.manager.v2.model.PlanInfoXplanModelData planInfoXplanModelData) { Date inkrafttretensDatum = convertToDate(planInfoXplanModelData.getInkrafttretensDatum()); + List<Gemeinde> gemeinden = planInfoXplanModelData.getGemeinden(); return new PlanInfoXplanModelData().name(planInfoXplanModelData.getName()) .nummer(planInfoXplanModelData.getNummer()) .internalId(planInfoXplanModelData.getInternalId()) .inkrafttretensDatum(inkrafttretensDatum) .rechtsstand(planInfoXplanModelData.getRechtsstand()) - .ags(planInfoXplanModelData.getAgs()) + .ags(!gemeinden.isEmpty() ? gemeinden.get(0).getAgs() : null) + .gemeindeName(!gemeinden.isEmpty() ? gemeinden.get(0).getGemeindeName() : null) + .gemeinden(gemeinden) .bereiche(planInfoXplanModelData.getBereich()); } @@ -148,8 +156,10 @@ public class PlanInfoBuilder { .internalId(xPlan.getInternalId()) .inkrafttretensDatum(xPlan.getReleaseDate()) .rechtsstand(xPlan.getLegislationStatus()) - .ags(xPlan.getGkz()) - .bereiche(bereiche); + .bereiche(bereiche) + .ags(!gemeinden.isEmpty() ? gemeinden.get(0).getAgs() : null) + .gemeindeName(!gemeinden.isEmpty() ? gemeinden.get(0).getGemeindeName() : null) + .gemeinden(gemeinden); } private de.latlon.xplanbox.api.manager.v2.model.PlanInfoXplanModelData xPlanModelDataV2() { @@ -159,8 +169,8 @@ public class PlanInfoBuilder { .internalId(xPlan.getInternalId()) .inkrafttretensDatum(inkrafttrensDatum) .rechtsstand(xPlan.getLegislationStatus()) - .ags(xPlan.getGkz()) - .bereiche(bereiche); + .bereiche(bereiche) + .gemeinden(gemeinden); } private PlanStatusEnum planStatus() { diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java index 8cedc9b90e..05f1344674 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java @@ -20,8 +20,6 @@ */ package de.latlon.xplanbox.api.manager.config; -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLANSYN_WMS_WORKSPACE; - import java.io.IOException; import java.nio.file.Path; import java.util.Arrays; @@ -45,12 +43,11 @@ import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; import de.latlon.xplan.manager.database.XPlanDbAdapter; import de.latlon.xplan.manager.database.XPlanManagerDao; import de.latlon.xplan.manager.document.XPlanDocumentManager; -import de.latlon.xplan.manager.document.config.DocumentStorageContext; +import de.latlon.xplan.manager.document.config.AmazonS3DocumentStorageContext; import de.latlon.xplan.manager.export.XPlanExporter; import de.latlon.xplan.manager.metadata.DataServiceCouplingException; import de.latlon.xplan.manager.metadata.MetadataCouplingHandler; import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer; import de.latlon.xplan.manager.synthesizer.rules.SynRulesAccessor; import de.latlon.xplan.manager.transaction.AttachmentUrlHandler; @@ -61,16 +58,9 @@ import de.latlon.xplan.manager.transaction.service.XPlanDeleteService; import de.latlon.xplan.manager.transaction.service.XPlanEditService; import de.latlon.xplan.manager.transaction.service.XPlanInsertService; import de.latlon.xplan.manager.web.shared.ConfigurationException; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; -import de.latlon.xplan.manager.wmsconfig.config.GeotiffRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3RasterStorageContext; -import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper; import de.latlon.xplan.manager.workspace.WorkspaceException; import de.latlon.xplan.manager.workspace.WorkspaceReloader; import de.latlon.xplan.validator.XPlanValidator; @@ -90,10 +80,13 @@ import de.latlon.xplan.validator.semantic.xquery.XQuerySemanticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplanbox.security.config.SecurityContext; -import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import de.latlon.xplanbox.validator.storage.config.AmazonS3Context; -import de.latlon.xplanbox.validator.storage.filesystem.FileSystemValidationExecutionStorage; +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.cs.exceptions.UnknownCRSException; +import org.deegree.cs.persistence.CRSManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; @@ -101,7 +94,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; import org.springframework.core.io.ResourceLoader; /** @@ -112,9 +104,8 @@ import org.springframework.core.io.ResourceLoader; */ @Configuration @ComponentScan(basePackages = { "de.latlon.xplanbox.api.manager.handler" }) -@Import({ SecurityContext.class, JpaContext.class, GeotiffRasterStorageContext.class, - MapserverRasterStorageContext.class, AmazonS3RasterStorageContext.class, DocumentStorageContext.class, - AmazonS3Context.class }) +@Import({ SecurityContext.class, JpaContext.class, AmazonS3RasterStorageContext.class, + AmazonS3DocumentStorageContext.class, AmazonS3Context.class, RasterEvaluationContext.class }) public class ApplicationContext { @Autowired @@ -170,13 +161,16 @@ public class ApplicationContext { @Bean public SemanticProfiles semanticProfiles(ValidatorConfiguration validatorConfiguration, - PropertiesLoader validatorPropertiesLoader, - @Value("#{environment.XPLAN_VALIDATOR_PROFILES}") String activatedProfiles) throws ConfigurationException { - List<String> activatedProfilesList = activatedProfiles != null ? Arrays.asList(activatedProfiles.split(",")) - : Collections.emptyList(); + PropertiesLoader validatorPropertiesLoader, List<String> activatedProfiles) throws ConfigurationException { SemanticProfilesCreator semanticProfilesCreator = new SemanticProfilesCreator(validatorConfiguration, validatorPropertiesLoader, resourceLoader); - return semanticProfilesCreator.createSemanticProfiles(activatedProfilesList); + return semanticProfilesCreator.createSemanticProfiles(activatedProfiles); + } + + @Bean + public List<String> activatedProfiles(@Value("${xplanbox.validation.profiles}") String activatedProfiles) { + return activatedProfiles != null && !activatedProfiles.isEmpty() ? Arrays.asList(activatedProfiles.split(",")) + : Collections.emptyList(); } @Bean @@ -193,33 +187,17 @@ public class ApplicationContext { } @Bean - @Profile("!mapserver") - public WmsWorkspaceWrapper wmsWorkspaceWrapper(ManagerConfiguration managerConfiguration) - throws WorkspaceException, de.latlon.xplan.manager.configuration.ConfigurationException { - DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE); - return new WmsWorkspaceWrapper(managerConfiguration, wmsWorkspace.getWorkspaceInstance()); - } - - @Bean - public XPlanRasterEvaluator xPlanRasterEvaluator(RasterEvaluation rasterEvaluation) { - return new XPlanRasterEvaluator(rasterEvaluation); - } - - @Bean - public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage, RasterConfigManager rasterConfigManager) - throws WorkspaceException { - return new XPlanRasterManager(rasterStorage, rasterConfigManager, applicationEventPublisher); + public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage) throws WorkspaceException { + return new XPlanRasterManager(rasterStorage, applicationEventPublisher); } @Bean public XPlanManager xPlanManager(XPlanManagerDao xPlanManagerDao, XPlanArchiveCreator archiveCreator, ManagerConfiguration managerConfiguration, XPlanExporter xPlanExporter, - XPlanRasterEvaluator xPlanRasterEvaluator, XPlanRasterManager xPlanRasterManager, - SortPropertyReader sortPropertyReader, XPlanInsertManager xPlanInsertManager, + XPlanRasterEvaluator xPlanRasterEvaluator, XPlanInsertManager xPlanInsertManager, XPlanEditManager xPlanEditManager, XPlanDeleteManager xPlanDeleteManager) throws Exception { return new XPlanManager(xPlanManagerDao, archiveCreator, managerConfiguration, xPlanExporter, - xPlanRasterEvaluator, xPlanRasterManager, sortPropertyReader, null, xPlanInsertManager, - xPlanEditManager, xPlanDeleteManager); + xPlanRasterEvaluator, null, xPlanInsertManager, xPlanEditManager, xPlanDeleteManager); } @Bean @@ -242,10 +220,15 @@ public class ApplicationContext { XPlanExporter xPlanExporter, ManagerConfiguration managerConfiguration, WorkspaceReloader workspaceReloader, XPlanRasterManager xPlanRasterManager, SortPropertyReader sortPropertyReader, XPlanEditService xPlanEditService, MetadataCouplingHandler metadataCouplingHandler, - Optional<AttachmentUrlHandler> attachmentUrlHandler) { + Optional<AttachmentUrlHandler> attachmentUrlHandler, ICRS defaultCrs) { return new XPlanEditManager(xPlanSynthesizer, xPlanManagerDao, xPlanExporter, xPlanRasterManager, workspaceReloader, managerConfiguration, sortPropertyReader, xPlanEditService, metadataCouplingHandler, - attachmentUrlHandler.orElse(null)); + attachmentUrlHandler.orElse(null), defaultCrs); + } + + @Bean + public ICRS defaultCrs(@Value("${xplanbox.services.crs}") String defaultCrs) throws UnknownCRSException { + return CRSManager.lookup(defaultCrs); } @Bean @@ -256,8 +239,8 @@ public class ApplicationContext { @Bean public XPlanDeleteManager xPlanDeleteManager(WorkspaceReloader workspaceReloader, - XPlanRasterManager xPlanRasterManager, XPlanDeleteService xPlanDeleteService) { - return new XPlanDeleteManager(xPlanRasterManager, workspaceReloader, xPlanDeleteService); + XPlanDeleteService xPlanDeleteService) { + return new XPlanDeleteManager(workspaceReloader, xPlanDeleteService); } @Bean @@ -303,7 +286,7 @@ public class ApplicationContext { SemanticValidator semanticValidator, SemanticProfiles semanticProfiles, ReportArchiveGenerator reportArchiveGenerator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, - semanticProfiles.getProfileValidators(), reportArchiveGenerator); + semanticProfiles.getProfileValidators(), reportArchiveGenerator, Optional.empty()); } @Bean @@ -334,11 +317,6 @@ public class ApplicationContext { return new WorkspaceReloader(managerConfiguration.getWorkspaceReloaderConfiguration()); } - @Bean - public DeegreeRasterCacheCleaner deegreeRasterCacheCleaner(ManagerConfiguration managerConfiguration) { - return new DeegreeRasterCacheCleaner(managerConfiguration.getWorkspaceReloaderConfiguration()); - } - @Bean public ValidatorConfiguration validatorConfiguration(PropertiesLoader validatorPropertiesLoader) throws IOException, ConfigurationException { @@ -368,13 +346,6 @@ public class ApplicationContext { return new SynRulesAccessor(); } - @Bean - @Profile("!s3execution") - public ValidationExecutionStorage validationExecutionStorage( - @Value("${xplanbox.validation.fsdirectory}") Optional<Path> fsExecutionDir) throws IOException { - return new FileSystemValidationExecutionStorage(fsExecutionDir); - } - private SortConfiguration createSortConfiguration(ManagerConfiguration managerConfiguration) { if (managerConfiguration != null) return managerConfiguration.getSortConfiguration(); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ManagerApiConfiguration.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ManagerApiConfiguration.java index a3edbf5ede..6fe49104e0 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ManagerApiConfiguration.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ManagerApiConfiguration.java @@ -20,15 +20,15 @@ */ package de.latlon.xplanbox.api.manager.config; +import java.net.URI; +import java.util.Properties; + import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.manager.web.shared.ConfigurationException; import de.latlon.xplanbox.api.commons.config.ApiConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.URI; -import java.util.Properties; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -46,6 +46,7 @@ public class ManagerApiConfiguration extends ApiConfiguration { public ManagerApiConfiguration(PropertiesLoader propertiesLoader) throws ConfigurationException { super(propertiesLoader, MANAGER_API_CONFIGURATION_PROPERTIES); + logProperties(); } /** @@ -73,7 +74,7 @@ public class ManagerApiConfiguration extends ApiConfiguration { defaultValidationConfiguration = new DefaultValidationConfiguration(); } - protected void logProperties() { + private void logProperties() { LOG.info("-------------------------------------------"); LOG.info("Configuration of the XPlanManagerApi:"); LOG.info("-------------------------------------------"); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidPlan.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidPlan.java index 79cbe7cc3c..c8ca113b1e 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidPlan.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidPlan.java @@ -22,13 +22,9 @@ package de.latlon.xplanbox.api.manager.exception; import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; -import de.latlon.xplan.validator.report.ValidatorReport; -import de.latlon.xplanbox.api.commons.ValidationReportBuilder; import de.latlon.xplanbox.api.commons.exception.XPlanApiException; import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; -; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -38,10 +34,6 @@ public class InvalidPlan extends XPlanApiException { private final ValidationReport validationReport; - public InvalidPlan(ValidatorReport validatorReport, String xFileName) { - this(new ValidationReportBuilder().validatorReport(validatorReport).filename(xFileName).build()); - } - public InvalidPlan(ValidationReport validationReport) { super(EXCEPTION_MESSAGE); this.validationReport = validationReport; diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloadAction.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidRasterdata.java similarity index 55% rename from xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloadAction.java rename to xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidRasterdata.java index e44740898e..d3df1e8408 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/workspace/WorkspaceReloadAction.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/exception/InvalidRasterdata.java @@ -1,6 +1,6 @@ /*- * #%L - * xplan-core-manager - XPlan Manager Core Komponente + * xplan-manager-api - Software zur Verwaltung von XPlanGML Daten * %% * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH * %% @@ -18,13 +18,30 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.manager.workspace; +package de.latlon.xplanbox.api.manager.exception; + +import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; + +import java.util.List; +import java.util.stream.Collectors; + +import de.latlon.xplanbox.api.commons.exception.XPlanApiException; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 */ -public enum WorkspaceReloadAction { +public class InvalidRasterdata extends XPlanApiException { + + private static final String EXCEPTION_MESSAGE = "Plan has missing references: %s"; + + public InvalidRasterdata(List<String> invalidReferences) { + super(String.format(EXCEPTION_MESSAGE, invalidReferences.stream().collect(Collectors.joining(",")))); + } - RELOAD, PLANWERKWMS, ALL + @Override + public int getStatusCode() { + return BAD_REQUEST.getStatusCode(); + } } diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/executor/PlanImporter.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/executor/PlanImporter.java index 69817cd71b..8694485a01 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/executor/PlanImporter.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/executor/PlanImporter.java @@ -22,19 +22,18 @@ package de.latlon.xplanbox.api.manager.executor; import static de.latlon.core.validator.events.v1.XPlanboxPublicV1Event.EventType.IMPORT_FINISHED; import static de.latlon.core.validator.events.v1.XPlanboxPublicV1Event.EventType.IMPORT_STARTED; -import static de.latlon.xplanbox.api.manager.v2.PlanApi2.MEDIA_TYPES_SEARCH; +import static de.latlon.xplanbox.api.commons.XPlanBoxMediaType.APPLICATION_ZIP; import static de.latlon.xplanbox.validator.storage.StatusType.IMPORT_FAILED; import static de.latlon.xplanbox.validator.storage.exception.ErrorType.INTERNAL_ERROR; import static de.latlon.xplanbox.validator.storage.exception.ErrorType.INVALID_REQUEST; import static de.latlon.xplanbox.validator.storage.exception.ErrorType.fromStatusCode; -import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -55,6 +54,7 @@ import de.latlon.xplanbox.api.manager.PlanInfoBuilder; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.handler.PlanHandler; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v2.model.PlanInfo; import de.latlon.xplanbox.validator.storage.StatusType; import de.latlon.xplanbox.validator.storage.StoredImportedPlans; @@ -98,7 +98,7 @@ public class PlanImporter { XPlanArchive archive = createArchive(event, tmpPath); List<XPlan> xPlans = planHandler.importPlanWithoutValidation(archive, event.getInternalId(), event.getPlanStatus()); - List<PlanInfo> planInfo = createPlanInfo(APPLICATION_JSON_TYPE, xPlans); + List<PlanInfo> planInfo = createPlanInfo(xPlans, event.isSupportsGetPlanByIdAsZip()); Path pathToPlanInfo = createPlanInfoFile(planInfo); List<String> planIds = xPlans.stream().map(xPlan -> xPlan.getId()).toList(); StoredImportedPlans storedImportedPlans = validationExecutionStorage.savePlanInfo(event.getUuid(), @@ -165,24 +165,22 @@ public class PlanImporter { } } - private List<PlanInfo> createPlanInfo(MediaType requestedMediaType, List<XPlan> plans) { - return plans.stream().map(plan -> createPlanInfo(requestedMediaType, plan)).collect(Collectors.toList()); + private List<PlanInfo> createPlanInfo(List<XPlan> plans, boolean supportsGetPlanByIdAsZip) { + return plans.stream().map(plan -> { + List<String> alternateMediaTypes = alternateMediaTypes(supportsGetPlanByIdAsZip); + List<Bereich> bereiche = planHandler.findBereiche(plan.getId()); + List<Gemeinde> gemeinden = planHandler.findGemeinden(plan.getId()); + return new PlanInfoBuilder(plan, bereiche, gemeinden, managerApiConfiguration) + .selfMediaType(MediaType.APPLICATION_JSON_TYPE.toString()) + .alternateMediaType(alternateMediaTypes) + .buildV2(); + }).collect(Collectors.toList()); } - private PlanInfo createPlanInfo(MediaType requestedMediaType, XPlan planById) { - List<String> alternateMediaTypes = alternateMediaTypes(requestedMediaType); - List<Bereich> bereiche = planHandler.findBereiche(planById.getId()); - return new PlanInfoBuilder(planById, bereiche, managerApiConfiguration) - .selfMediaType(requestedMediaType.toString()) - .alternateMediaType(alternateMediaTypes) - .buildV2(); - } - - private List<String> alternateMediaTypes(MediaType requestedMediaType) { - return Arrays.stream(MEDIA_TYPES_SEARCH) - .filter(mediaType -> !mediaType.equals(requestedMediaType)) - .map(mediaType -> mediaType.toString()) - .collect(Collectors.toList()); + private List<String> alternateMediaTypes(boolean supportsGetPlanByIdAsZip) { + if (supportsGetPlanByIdAsZip) + return Collections.singletonList(APPLICATION_ZIP); + return Collections.emptyList(); } } diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AbstractAsyncImportWrapper.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AbstractAsyncImportWrapper.java new file mode 100644 index 0000000000..f1c9a61416 --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AbstractAsyncImportWrapper.java @@ -0,0 +1,16 @@ +package de.latlon.xplanbox.api.manager.handler; + +import de.latlon.core.validator.events.EventSender; +import de.latlon.xplanbox.api.commons.handler.AbstractAsyncWrapper; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class AbstractAsyncImportWrapper extends AbstractAsyncWrapper { + + protected AbstractAsyncImportWrapper(EventSender eventSender) { + super(eventSender); + } + +} diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AsyncImportWrapper.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AsyncImportWrapper.java index 2718951bba..e75e174b08 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AsyncImportWrapper.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/AsyncImportWrapper.java @@ -22,7 +22,6 @@ package de.latlon.xplanbox.api.manager.handler; import de.latlon.core.validator.events.EventSender; import de.latlon.core.validator.events.planimport.ImportFinishedEvent; -import de.latlon.xplanbox.api.commons.handler.AbstractAsyncWrapper; import jakarta.inject.Singleton; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @@ -33,7 +32,7 @@ import org.springframework.stereotype.Component; */ @Component @Singleton -public class AsyncImportWrapper extends AbstractAsyncWrapper { +public class AsyncImportWrapper extends AbstractAsyncImportWrapper { public AsyncImportWrapper(EventSender eventSender) { super(eventSender); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/ConfigHandler.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/ConfigHandler.java index 75ad85a654..a56eb5a1c6 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/ConfigHandler.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/ConfigHandler.java @@ -23,7 +23,6 @@ package de.latlon.xplanbox.api.manager.handler; import static org.slf4j.LoggerFactory.getLogger; import java.io.IOException; -import java.util.Arrays; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; @@ -33,6 +32,7 @@ import de.latlon.xplanbox.api.manager.v1.model.ManagerSystemConfig; import jakarta.inject.Singleton; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @@ -57,23 +57,15 @@ public class ConfigHandler { @Autowired private Environment env; - private enum RasterConfigurationSource { - - geotiff, mapserver - - } + @Value("${xplanbox.services.crs}") + private String defaultCrs; public ManagerSystemConfig describeManagerSystem() throws IOException { LOG.debug("Generating manager config information"); - String rasterCrs = managerConfiguration.getRasterConfigurationCrs(); - RasterConfigurationSource rasterType = Arrays.stream(env.getActiveProfiles()) - .anyMatch(p -> RasterConfigurationSource.mapserver.name().equals(p)) ? RasterConfigurationSource.mapserver - : RasterConfigurationSource.geotiff; DefaultValidationConfiguration defaultValidationConfiguration = managerApiConfiguration .getDefaultValidationConfiguration(); - return (ManagerSystemConfig) new ManagerSystemConfig().rasterCrs(rasterCrs) - .rasterType(rasterType.name()) + return (ManagerSystemConfig) new ManagerSystemConfig().rasterCrs(defaultCrs) .skipSemantisch(defaultValidationConfiguration.isSkipSemantisch()) .skipGeometrisch(defaultValidationConfiguration.isSkipGeometrisch()) .skipFlaechenschluss(defaultValidationConfiguration.isSkipFlaechenschluss()) diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java index 9a2474450d..5939b2a483 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.stream.Collectors; import de.latlon.xplan.commons.archive.XPlanArchive; -import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; import de.latlon.xplan.core.manager.db.model.Artefact; @@ -43,15 +42,11 @@ import de.latlon.xplan.manager.transaction.XPlanDeleteManager; import de.latlon.xplan.manager.transaction.XPlanInsertManager; import de.latlon.xplan.manager.web.shared.PlanStatus; import de.latlon.xplan.manager.web.shared.XPlan; -import de.latlon.xplan.validator.XPlanValidator; -import de.latlon.xplan.validator.report.ValidatorReport; -import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.exception.InvalidPlanId; import de.latlon.xplanbox.api.commons.exception.InvalidPlanIdSyntax; import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; -import de.latlon.xplanbox.api.manager.exception.InvalidPlan; -import de.latlon.xplanbox.api.manager.exception.InvalidPlanReferences; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v1.model.StatusMessage; import jakarta.inject.Singleton; import jakarta.ws.rs.core.StreamingOutput; @@ -72,12 +67,6 @@ public class PlanHandler { private static final String DELETE_MSG = "Plan mit ID %s entfernt."; - @Autowired - private XPlanArchiveCreator archiveCreator; - - @Autowired - private XPlanValidator xPlanValidator; - @Autowired private XPlanInsertManager xPlanInsertManager; @@ -90,22 +79,6 @@ public class PlanHandler { @Autowired private XPlanExporter xPlanExporter; - public List<XPlan> importPlan(XPlanArchive xPlanArchive, String xFileName, ValidationSettings validationSettings, - String internalId, String planStatus) throws Exception { - LOG.info("Importing plan using validation settings '{}'", validationSettings); - ValidatorReport validatorReport = xPlanValidator.validateNotWriteReport(validationSettings, xPlanArchive, - xFileName); - if (!validatorReport.isReportValid()) { - throw new InvalidPlan(validatorReport, xFileName); - } - if (validatorReport.getExternalReferenceReport() != null - && validatorReport.getExternalReferenceReport().hasMissingReferences()) { - throw new InvalidPlanReferences(validatorReport.getExternalReferenceReport().getMissingReferences()); - } - LOG.info("Plan is valid"); - return importPlanWithoutValidation(xPlanArchive, internalId, planStatus); - } - public List<XPlan> importPlanWithoutValidation(XPlanArchive xPlanArchive, String internalId, String planStatus) throws Exception { LOG.info("Importing plan into storage for '{}'", StringUtils.normalizeSpace(planStatus)); @@ -176,6 +149,17 @@ public class PlanHandler { .collect(Collectors.toList()); } + public List<Gemeinde> findGemeinden(String planId) { + LOG.info("Finding Bereiche of plan with dd '{}'", planId); + return xPlanDao.retrieveGemeindeOfPlanWithId(planId) + .stream() + .map(gemeinde -> new Gemeinde().ags(gemeinde.getAgs()) + .rs(gemeinde.getRs()) + .gemeindeName(gemeinde.getGemeindeName()) + .ortsteilName(gemeinde.getOrtsteilName())) + .collect(Collectors.toList()); + } + private XPlan findPlanById(int id) throws InvalidPlanId { XPlan xPlanById = xPlanDao.getXPlanById(id); if (xPlanById == null) { diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/v2/ConfigHandlerV2.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/v2/ConfigHandlerV2.java new file mode 100644 index 0000000000..3a53624383 --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/v2/ConfigHandlerV2.java @@ -0,0 +1,100 @@ +/*- + * #%L + * xplan-manager-api - Software zur Verwaltung von XPlanGML Daten + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.manager.handler.v2; + +import static org.slf4j.LoggerFactory.getLogger; + +import java.util.Arrays; +import java.util.List; + +import de.latlon.xplan.manager.configuration.ManagerConfiguration; +import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; +import de.latlon.xplanbox.api.manager.config.DefaultValidationConfiguration; +import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; +import de.latlon.xplanbox.api.manager.v2.model.ManagerSystemConfig; +import jakarta.inject.Singleton; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Component +@Singleton +public class ConfigHandlerV2 { + + private static final Logger LOG = getLogger(ConfigHandlerV2.class); + + @Autowired + private SystemConfigHandler systemConfigHandler; + + @Autowired + private ManagerConfiguration managerConfiguration; + + @Autowired + private ManagerApiConfiguration managerApiConfiguration; + + @Autowired + private Environment env; + + @Value("${xplanbox.services.crs}") + private String defaultCrs; + + @Autowired + private List<String> activatedProfiles; + + private enum RasterConfigurationSource { + + geotiff, mapserver + + } + + public ManagerSystemConfig describeManagerSystem() { + LOG.debug("Generating manager config information"); + RasterConfigurationSource rasterType = Arrays.stream(env.getActiveProfiles()) + .anyMatch(p -> RasterConfigurationSource.mapserver.name().equals(p)) ? RasterConfigurationSource.mapserver + : RasterConfigurationSource.geotiff; + DefaultValidationConfiguration defaultValidationConfiguration = managerApiConfiguration + .getDefaultValidationConfiguration(); + + return (ManagerSystemConfig) new ManagerSystemConfig().rasterCrs(defaultCrs) + .rasterType(rasterType.name()) + .skipSemantisch(defaultValidationConfiguration.isSkipSemantisch()) + .skipGeometrisch(defaultValidationConfiguration.isSkipGeometrisch()) + .skipFlaechenschluss(defaultValidationConfiguration.isSkipFlaechenschluss()) + .skipGeltungsbereich(defaultValidationConfiguration.isSkipGeltungsbereich()) + .skipLaufrichtung(defaultValidationConfiguration.isSkipLaufrichtung()) + .documentUrl(managerConfiguration.getEnvironmentVariableValue("XPLAN_DOCUMENT_URL_PUBLIC")) + .profiles(activatedProfiles) + .supportedXPlanGmlVersions(systemConfigHandler.allSupportedVersions()) + .version(parseVersion()); + } + + public String parseVersion() { + Package thisPackage = getClass().getPackage(); + return thisPackage.getImplementationVersion(); + } + +} diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/messagingrabbitmq/Receiver.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/messagingrabbitmq/Receiver.java index f5c3bddd3f..32fd40c45d 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/messagingrabbitmq/Receiver.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/messagingrabbitmq/Receiver.java @@ -55,8 +55,8 @@ public class Receiver { LOG.info("Received event: " + event); try { - if (event.getValidationResult() == ImportRequestedEvent.VALIDATION_RESULT.VALID - && event.getExternalReferencesResult() == ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE) + if (event.getValidationResult() == ImportRequestedEvent.VALIDATION_RESULT.VALID && event + .getExternalReferencesResult() == ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE_AND_VALID) planImporter.importPlan(event); ImportFinishedEvent finishedEvent = new ImportFinishedEvent(event.getUuid(), IMPORT_SUCCEEDED); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v1/ApiV1Config.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v1/ApiV1Config.java index 19398478a1..296df583c2 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v1/ApiV1Config.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v1/ApiV1Config.java @@ -98,7 +98,7 @@ public class ApiV1Config extends AbstractApiConfig { protected void addInfo(OpenAPI openApi, ManagerApiConfiguration managerApiConfiguration) { openApi.setInfo(new Info().title("XPlanManagerAPI") - .version("1.4.0") + .version("1.5.0") .description("XPlanManager REST API") .termsOfService(getTermsOfService(managerApiConfiguration)) .license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html"))); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v2/ApiV2Filter.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v2/ApiV2Filter.java index 5a0f72d379..edf7ab059d 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v2/ApiV2Filter.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/openapi/v2/ApiV2Filter.java @@ -1,9 +1,16 @@ package de.latlon.xplanbox.api.manager.openapi.v2; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReport; import de.latlon.xplanbox.api.manager.openapi.ManagerOpenApiFilter; +import de.latlon.xplanbox.api.manager.v2.model.PlanInfo; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; /** * Filter to keep only v2 Api elements. @@ -19,4 +26,13 @@ public class ApiV2Filter extends ManagerOpenApiFilter { return matcher.replaceFirst("/"); } + @Override + public Optional<OpenAPI> filterOpenAPI(OpenAPI openAPI, Map<String, List<String>> params, + Map<String, String> cookies, Map<String, List<String>> headers) { + Components components = openAPI.getComponents(); + addSchemas(components, ValidationReport.class); + addSchemas(components, PlanInfo.class); + return super.filterOpenAPI(openAPI, params, cookies, headers); + } + } diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java index bb618a04eb..e3a8889724 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java @@ -58,27 +58,32 @@ import java.util.stream.Collectors; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.EventSender; +import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.planimport.ImportValidationRequestedEvent; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.ObjectMapperContextResolver; +import de.latlon.xplanbox.api.commons.ValidationReportBuilder; import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; -import de.latlon.xplanbox.api.commons.handler.AbstractAsyncWrapper; import de.latlon.xplanbox.api.commons.v1.model.ExternalReferenceResult; import de.latlon.xplanbox.api.commons.v1.model.ExternalReferenceStatusEnum; -import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; +import de.latlon.xplanbox.api.commons.v2.model.CrsStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ImageFormatStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReport; import de.latlon.xplanbox.api.manager.PlanInfoBuilder; import de.latlon.xplanbox.api.manager.config.DefaultValidationConfiguration; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.exception.InvalidApiVersion; import de.latlon.xplanbox.api.manager.exception.InvalidPlan; import de.latlon.xplanbox.api.manager.exception.InvalidPlanReferences; +import de.latlon.xplanbox.api.manager.handler.AbstractAsyncImportWrapper; +import de.latlon.xplanbox.api.manager.exception.InvalidRasterdata; import de.latlon.xplanbox.api.manager.handler.PlanHandler; import de.latlon.xplanbox.api.manager.openapi.v1.ApiV1Config; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v1.model.Link; import de.latlon.xplanbox.api.manager.v1.model.PlanInfo; import de.latlon.xplanbox.api.manager.v1.model.StatusMessage; @@ -131,7 +136,9 @@ public class PlanApi { private final static MediaType[] MEDIA_TYPES_SEARCH = { APPLICATION_JSON_TYPE, XPLANBOX_NO_VERSION_JSON_TYPE, XPLANBOX_V1_JSON_TYPE, XPLANBOX_V2_JSON_TYPE, APPLICATION_XML_TYPE, APPLICATION_ZIP_TYPE }; - private static final boolean WITH_GEOMETRISCH_VALIDATION = false; + private static final boolean WITH_SKIP_GEOMETRISCH_VALIDATION = false; + + private static final boolean WITH_SKIP_RASTER_EVALUATION = false; @Autowired private ValidationExecutionStorage validationExecutionStorage; @@ -148,9 +155,8 @@ public class PlanApi { @Context private ManagerApiConfiguration managerApiConfiguration; - // TODO: use AsyncImportWrapper (PlanApi tests fails if AsyncImportWrapper is used) @Context - private AbstractAsyncWrapper importWrapper; + private AbstractAsyncImportWrapper importWrapper; @POST @Consumes({ "application/octet-stream", "application/zip", "application/x-zip", "application/x-zip-compressed" }) @@ -325,7 +331,9 @@ public class PlanApi { List<XPlan> plans = planHandler.findPlansByName(planName); List<PlanInfo> planInfos = plans.stream().map(xPlan -> { List<Bereich> bereiche = planHandler.findBereiche(xPlan.getId()); - return new PlanInfoBuilder(xPlan, bereiche, managerApiConfiguration).selfMediaType(APPLICATION_JSON) + List<Gemeinde> gemeinden = planHandler.findGemeinden(xPlan.getId()); + return new PlanInfoBuilder(xPlan, bereiche, gemeinden, managerApiConfiguration) + .selfMediaType(APPLICATION_JSON) .alternateMediaType(Arrays.asList(APPLICATION_XML, APPLICATION_ZIP)) .build(); }).collect(Collectors.toList()); @@ -342,14 +350,16 @@ public class PlanApi { String validationName = detectOrCreateValidationName(xFilename); DefaultValidationConfiguration validationConfig = managerApiConfiguration.getDefaultValidationConfiguration(); - ValidationSettings validationSettings = createValidationSettings(validationName, WITH_GEOMETRISCH_VALIDATION, + ValidationSettings validationSettings = createValidationSettings(validationName, + WITH_SKIP_GEOMETRISCH_VALIDATION, overwriteByRequest(skipSemantisch, validationConfig.isSkipSemantisch()), overwriteByRequest(skipFlaechenschluss, validationConfig.isSkipFlaechenschluss()), overwriteByRequest(skipGeltungsbereich, validationConfig.isSkipGeltungsbereich()), - overwriteByRequest(skipLaufrichtung, validationConfig.isSkipLaufrichtung()), profiles); + overwriteByRequest(skipLaufrichtung, validationConfig.isSkipLaufrichtung()), profiles, + WITH_SKIP_RASTER_EVALUATION); ImportValidationRequestedEvent event = new ImportValidationRequestedEvent(uuid, validationSettings, xFilename, - internalId, planStatus, ValidationRequestedEvent.MediaType.JSON, originFile); + internalId, planStatus, ValidationRequestedEvent.MediaType.JSON, originFile, true); importWrapper.sendEvent(event); byte[] planInfosAsBytes = validationExecutionStorage.retrievePlanInfo(event.getUuid()); @@ -358,7 +368,7 @@ public class PlanApi { byte[] report = validationExecutionStorage.retrieveReport(uuid, JSON); ValidationReport validationReport = createReportFileFrom(report); if (!validationReport.getValid()) { - throw new InvalidPlan(validationReport); + throw new InvalidPlan(ValidationReportBuilder.convertToV1(validationReport)); } List<String> missingExternalReferences = validationReport.getExternalReferencesResult() .stream() @@ -369,6 +379,15 @@ public class PlanApi { if (!missingExternalReferences.isEmpty()) { throw new InvalidPlanReferences(missingExternalReferences); } + List<String> invalidRasterdata = validationReport.getExternalReferencesResult() + .stream() + .filter(externalReferenceResult -> externalReferenceResult.getCrsStatus() == CrsStatusEnum.UNSUPPORTED + || externalReferenceResult.getImageFormatStatus() == ImageFormatStatusEnum.UNSUPPORTED) + .map(ExternalReferenceResult::getName) + .toList(); + if (!invalidRasterdata.isEmpty()) { + throw new InvalidRasterdata(invalidRasterdata); + } } List<PlanInfo> planInfos = createPlanInfoFileFrom(planInfosAsBytes); @@ -387,7 +406,8 @@ public class PlanApi { private PlanInfo createPlanInfo(MediaType requestedMediaType, XPlan planById) { List<String> alternateMediaTypes = alternateMediaTypes(requestedMediaType); List<Bereich> bereiche = planHandler.findBereiche(planById.getId()); - return new PlanInfoBuilder(planById, bereiche, managerApiConfiguration) + List<Gemeinde> gemeinden = planHandler.findGemeinden(planById.getId()); + return new PlanInfoBuilder(planById, bereiche, gemeinden, managerApiConfiguration) .selfMediaType(requestedMediaType.toString()) .alternateMediaType(alternateMediaTypes) .build(); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java index d4245663d9..741461e65a 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java @@ -20,12 +20,18 @@ */ package de.latlon.xplanbox.api.manager.v1; +import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; + +import java.util.List; +import java.util.stream.Collectors; + import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.api.manager.PlanInfoBuilder; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.exception.InvalidSearch; import de.latlon.xplanbox.api.manager.handler.PlanHandler; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v1.model.PlanInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -33,18 +39,13 @@ import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import org.springframework.beans.factory.annotation.Autowired; - import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.Response; -import java.util.List; -import java.util.stream.Collectors; - -import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; +import org.springframework.beans.factory.annotation.Autowired; /** * Controller class for handling search over all plans. @@ -87,7 +88,9 @@ public class PlansApi { List<XPlan> plans = searchByNameOrId(planName, planIds); List<PlanInfo> planInfos = plans.stream().map(xPlan -> { List<Bereich> bereiche = planHandler.findBereiche(xPlan.getId()); - return new PlanInfoBuilder(xPlan, bereiche, managerApiConfiguration).selfMediaType(APPLICATION_JSON) + List<Gemeinde> gemeinden = planHandler.findGemeinden(xPlan.getId()); + return new PlanInfoBuilder(xPlan, bereiche, gemeinden, managerApiConfiguration) + .selfMediaType(APPLICATION_JSON) .build(); }).collect(Collectors.toList()); return Response.ok().entity(planInfos).build(); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/Gemeinde.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/Gemeinde.java new file mode 100644 index 0000000000..41d776c5c2 --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/Gemeinde.java @@ -0,0 +1,107 @@ +package de.latlon.xplanbox.api.manager.v1.model; + +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class Gemeinde { + + private @Valid @JsonInclude(JsonInclude.Include.NON_NULL) String ags; + + private @Valid @JsonInclude(JsonInclude.Include.NON_NULL) String rs; + + private @Valid @JsonInclude(JsonInclude.Include.NON_NULL) String gemeindeName; + + private @Valid @JsonInclude(JsonInclude.Include.NON_NULL) String ortsteilName; + + public Gemeinde ags(String ags) { + this.ags = ags; + return this; + } + + @Schema(example = "02000000") + @JsonProperty("ags") + public String getAgs() { + return ags; + } + + public void setAgs(String ags) { + this.ags = ags; + } + + public Gemeinde rs(String rs) { + this.rs = rs; + return this; + } + + @Schema(example = "123765305201") + @JsonProperty("rs") + public String getRs() { + return rs; + } + + public void setRs(String rs) { + this.rs = rs; + } + + public Gemeinde gemeindeName(String gemeindeName) { + this.gemeindeName = gemeindeName; + return this; + } + + @Schema(example = "Gemeindename") + @JsonProperty("gemeindeName") + public String getGemeindeName() { + return gemeindeName; + } + + public void setGemeindeName(String gemeindeName) { + this.gemeindeName = gemeindeName; + } + + public Gemeinde ortsteilName(String ortsteilName) { + this.ortsteilName = ortsteilName; + return this; + } + + @Schema(example = "Ortsteilname") + @JsonProperty("ortsteilName") + public String getOrtsteilName() { + return ortsteilName; + } + + public void setOrtsteilName(String ortsteilName) { + this.ortsteilName = ortsteilName; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Gemeinde gemeinde = (Gemeinde) o; + return Objects.equals(ags, gemeinde.ags) && Objects.equals(rs, gemeinde.rs) + && Objects.equals(gemeindeName, gemeinde.gemeindeName) + && Objects.equals(ortsteilName, gemeinde.ortsteilName); + } + + @Override + public int hashCode() { + return Objects.hash(ags, rs, gemeindeName, ortsteilName); + } + + @Override + public String toString() { + return "Gemeinde{" + "ags='" + ags + '\'' + ", rs='" + rs + '\'' + ", gemeindeName='" + gemeindeName + '\'' + + ", ortsteilName='" + ortsteilName + '\'' + '}'; + } + +} diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/ManagerSystemConfig.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/ManagerSystemConfig.java index 91a765f015..edeebef3b7 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/ManagerSystemConfig.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/ManagerSystemConfig.java @@ -8,31 +8,31 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ package de.latlon.xplanbox.api.manager.v1.model; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +import java.util.Arrays; +import java.util.Objects; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import de.latlon.xplanbox.api.commons.v1.model.SystemConfig; import io.swagger.v3.oas.annotations.media.Schema; - import jakarta.validation.Valid; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlRootElement; -import java.util.Arrays; -import java.util.Objects; - -import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; /** * Datatype for ManagerSystemConfig. @@ -47,7 +47,7 @@ public class ManagerSystemConfig extends SystemConfig { private @Valid String rasterCrs; - private @Valid String rasterType; + private final @Valid String rasterType = "mapserver"; private @Valid Boolean skipSemantisch = false; @@ -80,24 +80,13 @@ public class ManagerSystemConfig extends SystemConfig { this.rasterCrs = rasterCrs; } - /** - * Typ der Rasterdatenhaltung: geotiff of mapserver - **/ - public ManagerSystemConfig rasterType(String rasterType) { - this.rasterType = rasterType; - return this; - } - - @Schema(example = "geotiff", description = "Typ der Rasterdatenhaltung: geotiff or mapserver") + @Schema(example = "geotiff", + description = "Typ der Rasterdatenhaltung: mapserver (since 8.0 only mapserver is supported)") @JsonProperty("rasterType") public String getRasterType() { return rasterType; } - public void setRasterType(String rasterType) { - this.rasterType = rasterType; - } - /** * Semantische Validierung bei Import ueberspringen **/ diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfoXplanModelData.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfoXplanModelData.java index 64b5b2fb3f..ac4eb43016 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfoXplanModelData.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfoXplanModelData.java @@ -20,17 +20,18 @@ */ package de.latlon.xplanbox.api.manager.v1.model; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; - import jakarta.validation.Valid; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlRootElement; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; /** * Datatype for PlanInfoXplanModelData with attributes derived from XPlanGML data model. @@ -54,6 +55,8 @@ public class PlanInfoXplanModelData { private @Valid String gemeindeName; + private @Valid @JsonInclude(JsonInclude.Include.NON_EMPTY) List<Gemeinde> gemeinden = new ArrayList<>(); + private @Valid String rechtsstand; private @Valid Date inkrafttretensDatum; @@ -122,7 +125,7 @@ public class PlanInfoXplanModelData { return this; } - @Schema(example = "02000000") + @Schema(example = "02000000", deprecated = true, description = "Replaced by gemeinden.ags") @JsonProperty("ags") public String getAgs() { return ags; @@ -140,7 +143,7 @@ public class PlanInfoXplanModelData { return this; } - @Schema(example = "Gemeindename") + @Schema(example = "Gemeindename", deprecated = true, description = "Replaced by gemeinden.gemeindeName") @JsonProperty("gemeindeName") public String getGemeindeName() { return gemeindeName; @@ -150,6 +153,24 @@ public class PlanInfoXplanModelData { this.gemeindeName = gemeindeName; } + /** + * Gemeinden related to the plan + **/ + public PlanInfoXplanModelData gemeinden(List<Gemeinde> gemeinden) { + this.gemeinden = gemeinden; + return this; + } + + @Schema(description = "Gemeinden related to the Plan") + @JsonProperty("gemeinden") + public List<Gemeinde> getGemeinden() { + return gemeinden; + } + + public void setGemeinden(List<Gemeinde> gemeinden) { + this.gemeinden = gemeinden; + } + /** * translation of code list value of xplan:rechtsstand **/ @@ -218,6 +239,7 @@ public class PlanInfoXplanModelData { && Objects.equals(this.internalId, planInfoXplanModelData.internalId) && Objects.equals(this.ags, planInfoXplanModelData.ags) && Objects.equals(this.gemeindeName, planInfoXplanModelData.gemeindeName) + && Objects.equals(this.gemeinden, planInfoXplanModelData.gemeinden) && Objects.equals(this.rechtsstand, planInfoXplanModelData.rechtsstand) && Objects.equals(this.inkrafttretensDatum, planInfoXplanModelData.inkrafttretensDatum) && Objects.equals(this.bereiche, planInfoXplanModelData.bereiche); @@ -225,7 +247,8 @@ public class PlanInfoXplanModelData { @Override public int hashCode() { - return Objects.hash(name, nummer, internalId, ags, gemeindeName, rechtsstand, inkrafttretensDatum, bereiche); + return Objects.hash(name, nummer, internalId, ags, gemeindeName, gemeinden, rechtsstand, inkrafttretensDatum, + bereiche); } @Override @@ -238,6 +261,7 @@ public class PlanInfoXplanModelData { sb.append(" internalId: ").append(toIndentedString(internalId)).append("\n"); sb.append(" ags: ").append(toIndentedString(ags)).append("\n"); sb.append(" gemeindeName: ").append(toIndentedString(gemeindeName)).append("\n"); + sb.append(" gemeinden: ").append(toIndentedString(gemeinden)).append("\n"); sb.append(" rechtsstand: ").append(toIndentedString(rechtsstand)).append("\n"); sb.append(" inkrafttretensDatum: ").append(toIndentedString(inkrafttretensDatum)).append("\n"); sb.append(" bereiche: ").append(toIndentedString(bereiche)).append("\n"); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/InfoApi2.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/InfoApi2.java index 49a7010eab..04fb806967 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/InfoApi2.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/InfoApi2.java @@ -20,10 +20,8 @@ */ package de.latlon.xplanbox.api.manager.v2; -import java.io.IOException; - -import de.latlon.xplanbox.api.manager.handler.ConfigHandler; -import de.latlon.xplanbox.api.manager.v1.model.ManagerSystemConfig; +import de.latlon.xplanbox.api.manager.handler.v2.ConfigHandlerV2; +import de.latlon.xplanbox.api.manager.v2.model.ManagerSystemConfig; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -45,7 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired; public class InfoApi2 { @Autowired - private ConfigHandler configHandler; + private ConfigHandlerV2 configHandler; @GET @Produces({ "application/json" }) @@ -55,7 +53,7 @@ public class InfoApi2 { @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(schema = @Schema(implementation = ManagerSystemConfig.class))), @ApiResponse(responseCode = "406", description = "Requested format is not available") }) - public Response showConfig() throws IOException { + public Response showConfig() { ManagerSystemConfig managerSystemConfig = configHandler.describeManagerSystem(); return Response.ok().entity(managerSystemConfig).build(); } diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java index 3a4890d8e5..78b98cd16a 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java @@ -27,34 +27,30 @@ import static de.latlon.xplanbox.api.commons.ValidatorConverter.createValidation import static de.latlon.xplanbox.api.commons.ValidatorConverter.detectOrCreateValidationName; import static de.latlon.xplanbox.api.commons.XPlanBoxMediaType.APPLICATION_ZIP; import static de.latlon.xplanbox.api.commons.XPlanBoxMediaType.APPLICATION_ZIP_TYPE; -import static de.latlon.xplanbox.api.commons.v2.model.Link.RelEnum.STATUS; +import static de.latlon.xplanbox.api.commons.v2.model.ResponseLink.RelEnum.STATUS; import static de.latlon.xplanbox.validator.storage.StatusType.IMPORT_REQUESTED; import static io.swagger.v3.oas.annotations.enums.Explode.FALSE; -import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; -import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE; -import static org.slf4j.LoggerFactory.getLogger; import java.io.File; import java.net.URI; -import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import de.latlon.core.validator.events.EventSender; import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.planimport.ImportValidationRequestedEvent; -import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; +import de.latlon.xplanbox.api.commons.v2.model.ResponseLink; import de.latlon.xplanbox.api.manager.PlanInfoBuilder; import de.latlon.xplanbox.api.manager.config.DefaultValidationConfiguration; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.handler.PlanHandler; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v1.model.StatusMessage; import de.latlon.xplanbox.api.manager.v2.model.ImportReceipt; import de.latlon.xplanbox.api.manager.v2.model.PlanInfo; @@ -62,7 +58,6 @@ import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -80,12 +75,9 @@ import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Request; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.StreamingOutput; -import jakarta.ws.rs.core.Variant; -import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; /** @@ -98,11 +90,9 @@ import org.springframework.beans.factory.annotation.Autowired; @Path("/plan") public class PlanApi2 { - private static final Logger LOG = getLogger(PlanApi2.class); + private static final boolean WITH_SKIP_GEOMETRISCH_VALIDATION = false; - public final static MediaType[] MEDIA_TYPES_SEARCH = { APPLICATION_JSON_TYPE, APPLICATION_ZIP_TYPE }; - - private static final boolean WITH_GEOMETRISCH_VALIDATION = false; + private static final boolean WITH_SKIP_RASTER_EVALUATION = false; @Autowired private ValidationExecutionStorage validationExecutionStorage; @@ -110,9 +100,6 @@ public class PlanApi2 { @Autowired private EventSender eventSender; - @Autowired - private XPlanArchiveCreator archiveCreator; - @Autowired private PlanHandler planHandler; @@ -220,14 +207,13 @@ public class PlanApi2 { @GET @Path("/{planId}") - @Produces({ "application/json", "application/zip" }) + @Produces({ "application/json" }) @Operation(summary = "Get plan identified by the given planID", description = "Returns an existing plan identified by the given planID", tags = { "manage", "search", }, responses = { - @ApiResponse(responseCode = "200", description = "successful operation", content = { - @Content(mediaType = "application/json", schema = @Schema(implementation = PlanInfo.class)), - @Content(mediaType = "application/zip", - schema = @Schema(type = "string", format = "binary")) }), + @ApiResponse(responseCode = "200", description = "successful operation", + content = { @Content(mediaType = "application/json", + schema = @Schema(implementation = PlanInfo.class)) }), @ApiResponse(responseCode = "400", description = "PlanID is not a valid int value"), @ApiResponse(responseCode = "404", description = "Invalid planID, plan not found"), @ApiResponse(responseCode = "406", description = "Requested format is not available") }) @@ -235,16 +221,8 @@ public class PlanApi2 { @PathParam("planId") @Parameter(description = "ID of the plan to be returned", example = "123") String planId) throws Exception { - MediaType requestedMediaType = requestedMediaType(request); - if (APPLICATION_ZIP_TYPE.equals(requestedMediaType)) { - StreamingOutput plan = planHandler.exportPlan(planId); - return Response.ok(plan) - .type(APPLICATION_ZIP) - .header("Content-Disposition", "attachment; filename=\"" + planId + ".zip\"") - .build(); - } XPlan planById = planHandler.findPlanById(planId); - PlanInfo planInfo = createPlanInfo(requestedMediaType, planById); + PlanInfo planInfo = createPlanInfo(planById); return Response.ok().entity(planInfo).build(); } @@ -272,31 +250,6 @@ public class PlanApi2 { .build(); } - @GET - @Path("/name/{planName}") - @Produces({ "application/json" }) - @Operation(summary = "Get plan identified by the given planName", - description = "Returns a list of plans which match exactly the given planName", tags = { "search" }, - responses = { - @ApiResponse(responseCode = "200", description = "OK", - content = { @Content(mediaType = "application/json", - array = @ArraySchema(schema = @Schema(implementation = PlanInfo.class))) }), - @ApiResponse(responseCode = "404", description = "Invalid planName, plan not found"), - @ApiResponse(responseCode = "406", description = "Requested format is not available") }) - public Response getByName(@Context Request request, - @PathParam("planName") @Parameter(description = "name of the plan to be returned", - example = "bplan_123, fplan-123, rplan20200803") String planName) - throws Exception { - List<XPlan> plans = planHandler.findPlansByName(planName); - List<PlanInfo> planInfos = plans.stream().map(xPlan -> { - List<Bereich> bereiche = planHandler.findBereiche(xPlan.getId()); - return new PlanInfoBuilder(xPlan, bereiche, managerApiConfiguration).selfMediaType(APPLICATION_JSON) - .alternateMediaType(Arrays.asList(APPLICATION_ZIP)) - .buildV2(); - }).collect(Collectors.toList()); - return Response.ok().entity(planInfos).build(); - } - private Response callImport(String xFilename, Boolean skipSemantisch, Boolean skipFlaechenschluss, Boolean skipGeltungsbereich, Boolean skipLaufrichtung, List<String> profiles, String internalId, String planStatus, File file, ValidationRequestedEvent.OriginFile originFile) throws Exception { @@ -306,30 +259,30 @@ public class PlanApi2 { String validationName = detectOrCreateValidationName(xFilename); DefaultValidationConfiguration validationConfig = managerApiConfiguration.getDefaultValidationConfiguration(); - ValidationSettings validationSettings = createValidationSettings(validationName, WITH_GEOMETRISCH_VALIDATION, + ValidationSettings validationSettings = createValidationSettings(validationName, + WITH_SKIP_GEOMETRISCH_VALIDATION, overwriteByRequest(skipSemantisch, validationConfig.isSkipSemantisch()), overwriteByRequest(skipFlaechenschluss, validationConfig.isSkipFlaechenschluss()), overwriteByRequest(skipGeltungsbereich, validationConfig.isSkipGeltungsbereich()), - overwriteByRequest(skipLaufrichtung, validationConfig.isSkipLaufrichtung()), profiles); + overwriteByRequest(skipLaufrichtung, validationConfig.isSkipLaufrichtung()), profiles, + WITH_SKIP_RASTER_EVALUATION); eventSender.sendEvent(new ImportValidationRequestedEvent(uuid, validationSettings, xFilename, internalId, - planStatus, ValidationRequestedEvent.MediaType.JSON, originFile)); + planStatus, ValidationRequestedEvent.MediaType.JSON, originFile, false)); URI linkToStatus = createLinkToStatus(uuid); - de.latlon.xplanbox.api.commons.v2.model.Link statusLink = (de.latlon.xplanbox.api.commons.v2.model.Link) new de.latlon.xplanbox.api.commons.v2.model.Link() - .rel(STATUS) + ResponseLink statusLink = (ResponseLink) new ResponseLink().rel(STATUS) .href(linkToStatus) .type("application/json"); ImportReceipt importReceipt = new ImportReceipt(uuid, statusLink); return Response.ok().entity(importReceipt).build(); } - private PlanInfo createPlanInfo(MediaType requestedMediaType, XPlan planById) { - List<String> alternateMediaTypes = alternateMediaTypes(requestedMediaType); + private PlanInfo createPlanInfo(XPlan planById) { List<Bereich> bereiche = planHandler.findBereiche(planById.getId()); - return new PlanInfoBuilder(planById, bereiche, managerApiConfiguration) - .selfMediaType(requestedMediaType.toString()) - .alternateMediaType(alternateMediaTypes) + List<Gemeinde> gemeinden = planHandler.findGemeinden(planById.getId()); + return new PlanInfoBuilder(planById, bereiche, gemeinden, managerApiConfiguration) + .selfMediaType(APPLICATION_ZIP_TYPE.toString()) .buildV2(); } @@ -340,21 +293,6 @@ public class PlanApi2 { return apiUrl.resolve(servletContext.getContextPath() + "/api/v2/status/" + uuid); } - private MediaType requestedMediaType(Request request) { - Variant.VariantListBuilder acceptedMediaTypes = Variant.mediaTypes(MEDIA_TYPES_SEARCH); - Variant selectVariant = request.selectVariant(acceptedMediaTypes.build()); - if (selectVariant == null) - return APPLICATION_JSON_TYPE; - return selectVariant.getMediaType(); - } - - private List<String> alternateMediaTypes(MediaType requestedMediaType) { - return Arrays.stream(MEDIA_TYPES_SEARCH) - .filter(mediaType -> !mediaType.equals(requestedMediaType)) - .map(mediaType -> mediaType.toString()) - .collect(Collectors.toList()); - } - private boolean overwriteByRequest(Boolean requested, boolean configured) { if (requested != null) return requested; diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java index 6f228c0d58..3eca4431b6 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java @@ -31,6 +31,7 @@ import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.exception.InvalidSearch; import de.latlon.xplanbox.api.manager.handler.PlanHandler; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v2.model.PlanInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -83,7 +84,9 @@ public class PlansApi2 { List<XPlan> plans = searchByNameOrId(planName, planIds); List<PlanInfo> planInfos = plans.stream().map(xPlan -> { List<Bereich> bereiche = planHandler.findBereiche(xPlan.getId()); - return new PlanInfoBuilder(xPlan, bereiche, managerApiConfiguration).selfMediaType(APPLICATION_JSON) + List<Gemeinde> gemeinden = planHandler.findGemeinden(xPlan.getId()); + return new PlanInfoBuilder(xPlan, bereiche, gemeinden, managerApiConfiguration) + .selfMediaType(APPLICATION_JSON) .buildV2(); }).collect(Collectors.toList()); return Response.ok().entity(planInfos).build(); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/StatusApi.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/StatusApi.java index dd95030085..d83efc41e6 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/StatusApi.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/StatusApi.java @@ -20,8 +20,8 @@ */ package de.latlon.xplanbox.api.manager.v2; -import static de.latlon.xplanbox.api.commons.v2.model.Link.RelEnum.PLANINFO; -import static de.latlon.xplanbox.api.commons.v2.model.Link.RelEnum.REPORT; +import static de.latlon.xplanbox.api.commons.v2.model.ResponseLink.RelEnum.PLANINFO; +import static de.latlon.xplanbox.api.commons.v2.model.ResponseLink.RelEnum.REPORT; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import java.net.URI; @@ -29,7 +29,7 @@ import java.net.URISyntaxException; import de.latlon.xplan.commons.s3.StorageException; import de.latlon.xplanbox.api.commons.exception.InvalidValidationUuid; -import de.latlon.xplanbox.api.commons.v2.model.Link; +import de.latlon.xplanbox.api.commons.v2.model.ResponseLink; import de.latlon.xplanbox.api.commons.v2.model.StatusEnum; import de.latlon.xplanbox.api.commons.v2.model.StatusNotification; import de.latlon.xplanbox.validator.storage.Status; @@ -89,19 +89,19 @@ public class StatusApi { .importedPlanIds(status.getImportedPlanIds()) .errorMsg(status.getErrorMsg()); if (status.getLinkToJsonReport() != null) - statusNotification.links((Link) new Link().rel(REPORT) + statusNotification.links((ResponseLink) new ResponseLink().rel(REPORT) .expirationTime(status.getExpirationTime()) .type("application/json") .title("Validierungsreport") .href(new URI(status.getLinkToJsonReport()))); if (status.getLinkToPdfReport() != null) - statusNotification.links((Link) new Link().rel(REPORT) + statusNotification.links((ResponseLink) new ResponseLink().rel(REPORT) .expirationTime(status.getExpirationTime()) .type("application/pdf") .title("Validierungsreport") .href(new URI(status.getLinkToPdfReport()))); if (status.getLinkToPlansMetadata() != null) - statusNotification.links((Link) new Link().rel(PLANINFO) + statusNotification.links((ResponseLink) new ResponseLink().rel(PLANINFO) .expirationTime(status.getExpirationTime()) .type("application/json") .title("PlanInfo") diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ImportReceipt.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ImportReceipt.java index 81bd41b45d..35e68cfe07 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ImportReceipt.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ImportReceipt.java @@ -20,7 +20,7 @@ */ package de.latlon.xplanbox.api.manager.v2.model; -import de.latlon.xplanbox.api.commons.v2.model.Link; +import de.latlon.xplanbox.api.commons.v2.model.ResponseLink; /** * A receipt for the submission of an import request. @@ -32,9 +32,9 @@ public class ImportReceipt { private final String uuid; - private final Link statusLink; + private final ResponseLink statusLink; - public ImportReceipt(String uuid, Link statusLink) { + public ImportReceipt(String uuid, ResponseLink statusLink) { this.uuid = uuid; this.statusLink = statusLink; } @@ -43,7 +43,7 @@ public class ImportReceipt { return uuid; } - public Link getStatusLink() { + public ResponseLink getStatusLink() { return statusLink; } diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ManagerSystemConfig.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ManagerSystemConfig.java new file mode 100644 index 0000000000..ce496f28c3 --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/ManagerSystemConfig.java @@ -0,0 +1,264 @@ +/*- + * #%L + * xplan-manager-api - Software zur Verwaltung von XPlanGML Daten + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.manager.v2.model; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +import java.util.Arrays; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import de.latlon.xplanbox.api.commons.v2.model.SystemConfig; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; + +/** + * Datatype for ManagerSystemConfig. + * + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class ManagerSystemConfig extends SystemConfig { + + private @Valid String rasterCrs; + + private @Valid String rasterType; + + private @Valid Boolean skipSemantisch = false; + + private @Valid Boolean skipGeometrisch = false; + + private @Valid Boolean skipFlaechenschluss = false; + + private @Valid Boolean skipGeltungsbereich = false; + + private @Valid Boolean skipLaufrichtung = false; + + @JsonInclude(NON_NULL) + private @Valid String documentUrl; + + /** + * Konfiguriertes CRS für die Rasterdatenhaltung + **/ + public ManagerSystemConfig rasterCrs(String rasterCrs) { + this.rasterCrs = rasterCrs; + return this; + } + + @Schema(example = "epsg:28352", description = "Konfiguriertes CRS für die Rasterdatenhaltung") + @JsonProperty("rasterCrs") + public String getRasterCrs() { + return rasterCrs; + } + + public void setRasterCrs(String rasterCrs) { + this.rasterCrs = rasterCrs; + } + + /** + * Typ der Rasterdatenhaltung: geotiff of mapserver + **/ + public ManagerSystemConfig rasterType(String rasterType) { + this.rasterType = rasterType; + return this; + } + + @Schema(example = "geotiff", description = "Typ der Rasterdatenhaltung: geotiff or mapserver") + @JsonProperty("rasterType") + public String getRasterType() { + return rasterType; + } + + public void setRasterType(String rasterType) { + this.rasterType = rasterType; + } + + /** + * Semantische Validierung bei Import ueberspringen + **/ + public ManagerSystemConfig skipSemantisch(Boolean skipSemantisch) { + this.skipSemantisch = skipSemantisch; + return this; + } + + @Schema(description = "Semantische Validierung bei Import ueberspringen") + @JsonProperty("skipSemantisch") + public Boolean getSkipSemantisch() { + return skipSemantisch; + } + + public void setSkipSemantisch(Boolean skipSemantisch) { + this.skipSemantisch = skipSemantisch; + } + + /** + * Geometrische Validierung bei Import ueberspringen + **/ + public ManagerSystemConfig skipGeometrisch(Boolean skipGeometrisch) { + this.skipGeometrisch = skipGeometrisch; + return this; + } + + @Schema(description = "Geometrische Validierung bei Import ueberspringen") + @JsonProperty("skipGeometrisch") + public Boolean getSkipGeometrisch() { + return skipGeometrisch; + } + + public void setSkipGeometrisch(Boolean skipGeometrisch) { + this.skipGeometrisch = skipGeometrisch; + } + + /** + * Ueberpruefung des Flaechenschluss bei Import ueberspringen + **/ + public ManagerSystemConfig skipFlaechenschluss(Boolean skipFlaechenschluss) { + this.skipFlaechenschluss = skipFlaechenschluss; + return this; + } + + @Schema(description = "Ueberpruefung des Flaechenschluss bei Import ueberspringen") + @JsonProperty("skipFlaechenschluss") + public Boolean getSkipFlaechenschluss() { + return skipFlaechenschluss; + } + + public void setSkipFlaechenschluss(Boolean skipFlaechenschluss) { + this.skipFlaechenschluss = skipFlaechenschluss; + } + + /** + * Ueberpruefung des Geltungsbereich bei Import ueberspringen + **/ + public ManagerSystemConfig skipGeltungsbereich(Boolean skipGeltungsbereich) { + this.skipGeltungsbereich = skipGeltungsbereich; + return this; + } + + @Schema(description = "Ueberpruefung des Geltungsbereich bei Import ueberspringen") + @JsonProperty("skipGeltungsbereich") + public Boolean getSkipGeltungsbereich() { + return skipGeltungsbereich; + } + + public void setSkipGeltungsbereich(Boolean skipGeltungsbereich) { + this.skipGeltungsbereich = skipGeltungsbereich; + } + + /** + * Ueberpruefung der Laufrichtung bei Import ueberspringen + **/ + public ManagerSystemConfig skipLaufrichtung(Boolean skipLaufrichtung) { + this.skipLaufrichtung = skipLaufrichtung; + return this; + } + + @Schema(description = "Ueberpruefung der Laufrichtung bei Import ueberspringen") + @JsonProperty("skipLaufrichtung") + public Boolean getSkipLaufrichtung() { + return skipLaufrichtung; + } + + public void setSkipLaufrichtung(Boolean skipLaufrichtung) { + this.skipLaufrichtung = skipLaufrichtung; + } + + /** + * URL ueber die alle Anlagen zu einem Plan heruntergeladen werden koennen + **/ + public ManagerSystemConfig documentUrl(String documentUrl) { + this.documentUrl = documentUrl; + return this; + } + + @Schema(example = "http://example.org/xdokumente/api/v1/dokument/{planId}/{fileName}", + description = "URL ueber die alle Anlagen zu einem Plan heruntergeladen werden koennen") + @JsonProperty("documentUrl") + public String getDocumentUrl() { + return documentUrl; + } + + public void setDocumentUrl(String documentUrl) { + this.documentUrl = documentUrl; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ManagerSystemConfig managerSystemConfig = (ManagerSystemConfig) o; + return super.equals(o) && Objects.equals(this.rasterCrs, managerSystemConfig.rasterCrs) + && Objects.equals(this.rasterType, managerSystemConfig.rasterType) + && Objects.equals(this.skipSemantisch, managerSystemConfig.skipSemantisch) + && Objects.equals(this.skipGeometrisch, managerSystemConfig.skipGeometrisch) + && Objects.equals(this.skipFlaechenschluss, managerSystemConfig.skipFlaechenschluss) + && Objects.equals(this.skipGeltungsbereich, managerSystemConfig.skipGeltungsbereich) + && Objects.equals(this.skipLaufrichtung, managerSystemConfig.skipLaufrichtung); + } + + @Override + public int hashCode() { + return Arrays.hashCode(new int[] { super.hashCode(), Objects.hash(rasterCrs, rasterType, skipSemantisch, + skipGeometrisch, skipFlaechenschluss, skipGeltungsbereich, skipLaufrichtung) }); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ManagerSystemConfig {\n"); + + sb.append(" version: ").append(toIndentedString(getVersion())).append("\n"); + sb.append(" supportedXPlanGmlVersions: ") + .append(toIndentedString(getSupportedXPlanGmlVersions())) + .append("\n"); + sb.append(" rasterCrs: ").append(toIndentedString(rasterCrs)).append("\n"); + sb.append(" rasterType: ").append(toIndentedString(rasterType)).append("\n"); + sb.append(" skipSemantisch: ").append(toIndentedString(skipSemantisch)).append("\n"); + sb.append(" skipGeometrisch: ").append(toIndentedString(skipGeometrisch)).append("\n"); + sb.append(" skipFlaechenschluss: ").append(toIndentedString(skipFlaechenschluss)).append("\n"); + sb.append(" skipGeltungsbereich: ").append(toIndentedString(skipGeltungsbereich)).append("\n"); + sb.append(" skipLaufrichtung: ").append(toIndentedString(skipLaufrichtung)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the + * first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfoXplanModelData.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfoXplanModelData.java index 51d9d680bd..968ea2bef7 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfoXplanModelData.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfoXplanModelData.java @@ -25,8 +25,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.xml.bind.annotation.XmlAccessType; @@ -50,9 +52,7 @@ public class PlanInfoXplanModelData { private @Valid String internalId; - private @Valid String ags; - - private @Valid String gemeindeName; + private @Valid @JsonInclude(JsonInclude.Include.NON_EMPTY) List<Gemeinde> gemeinden = new ArrayList<>(); private @Valid String rechtsstand; @@ -115,39 +115,21 @@ public class PlanInfoXplanModelData { } /** - * - **/ - public PlanInfoXplanModelData ags(String ags) { - this.ags = ags; - return this; - } - - @Schema(example = "02000000") - @JsonProperty("ags") - public String getAgs() { - return ags; - } - - public void setAgs(String ags) { - this.ags = ags; - } - - /** - * + * Gemeinden related to the plan **/ - public PlanInfoXplanModelData gemeindeName(String gemeindeName) { - this.gemeindeName = gemeindeName; + public PlanInfoXplanModelData gemeinden(List<Gemeinde> gemeinden) { + this.gemeinden = gemeinden; return this; } - @Schema(example = "Gemeindename") - @JsonProperty("gemeindeName") - public String getGemeindeName() { - return gemeindeName; + @Schema(description = "Gemeinden related to the Plan") + @JsonProperty("gemeinden") + public List<Gemeinde> getGemeinden() { + return gemeinden; } - public void setGemeindeName(String gemeindeName) { - this.gemeindeName = gemeindeName; + public void setGemeinden(List<Gemeinde> gemeinden) { + this.gemeinden = gemeinden; } /** @@ -216,8 +198,7 @@ public class PlanInfoXplanModelData { return Objects.equals(this.name, planInfoXplanModelData.name) && Objects.equals(this.nummer, planInfoXplanModelData.nummer) && Objects.equals(this.internalId, planInfoXplanModelData.internalId) - && Objects.equals(this.ags, planInfoXplanModelData.ags) - && Objects.equals(this.gemeindeName, planInfoXplanModelData.gemeindeName) + && Objects.equals(this.gemeinden, planInfoXplanModelData.gemeinden) && Objects.equals(this.rechtsstand, planInfoXplanModelData.rechtsstand) && Objects.equals(this.inkrafttretensDatum, planInfoXplanModelData.inkrafttretensDatum) && Objects.equals(this.bereiche, planInfoXplanModelData.bereiche); @@ -225,7 +206,7 @@ public class PlanInfoXplanModelData { @Override public int hashCode() { - return Objects.hash(name, nummer, internalId, ags, gemeindeName, rechtsstand, inkrafttretensDatum, bereiche); + return Objects.hash(name, nummer, internalId, gemeinden, rechtsstand, inkrafttretensDatum, bereiche); } @Override @@ -236,8 +217,7 @@ public class PlanInfoXplanModelData { sb.append(" name: ").append(toIndentedString(name)).append("\n"); sb.append(" nummer: ").append(toIndentedString(nummer)).append("\n"); sb.append(" internalId: ").append(toIndentedString(internalId)).append("\n"); - sb.append(" ags: ").append(toIndentedString(ags)).append("\n"); - sb.append(" gemeindeName: ").append(toIndentedString(gemeindeName)).append("\n"); + sb.append(" gemeinden: ").append(toIndentedString(gemeinden)).append("\n"); sb.append(" rechtsstand: ").append(toIndentedString(rechtsstand)).append("\n"); sb.append(" inkrafttretensDatum: ").append(toIndentedString(inkrafttretensDatum)).append("\n"); sb.append(" bereiche: ").append(toIndentedString(bereiche)).append("\n"); diff --git a/xplan-manager/xplan-manager-api/src/main/resources/application.properties b/xplan-manager/xplan-manager-api/src/main/resources/application.properties index 9492e9ccff..7494502308 100644 --- a/xplan-manager/xplan-manager-api/src/main/resources/application.properties +++ b/xplan-manager/xplan-manager-api/src/main/resources/application.properties @@ -48,3 +48,5 @@ xplanbox.validation.fsdirectory=${XPLAN_FS_DIRECTORY:/tmp/validation} xplanbox.validation.profiles=${XPLAN_VALIDATOR_PROFILES:} xplanbox.validation.s3.bucketName=${XPLAN_VALIDATION_S3_BUCKET_NAME:validation} xplanbox.validation.s3.bucketPublicUrl=${XPLAN_VALIDATION_S3_BUCKET_PUBLIC_URL} + +xplanbox.services.crs=${XPLAN_SERVICES_DEFAULT_CRS:EPSG:25832} \ No newline at end of file diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/ManagerApiJerseyTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/ManagerApiJerseyTest.java new file mode 100644 index 0000000000..bdd8b2b25c --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/ManagerApiJerseyTest.java @@ -0,0 +1,44 @@ +package de.latlon.xplanbox.api.manager; + +import java.lang.reflect.ParameterizedType; + +import de.latlon.xplan.core.manager.db.config.JpaContext; +import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; +import de.latlon.xplanbox.api.manager.config.ApplicationContext; +import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; +import de.latlon.xplanbox.api.manager.config.TestContext; +import jakarta.ws.rs.core.Application; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.TestProperties; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.io.ClassPathResource; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public abstract class ManagerApiJerseyTest<T> extends JerseyTest { + + @Override + protected Application configure() { + enable(TestProperties.LOG_TRAFFIC); + Class<T> actualTypeArgument = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()) + .getActualTypeArguments()[0]; + final ResourceConfig resourceConfig = new ResourceConfig(actualTypeArgument); + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + PropertySourcesPlaceholderConfigurer pph = new PropertySourcesPlaceholderConfigurer(); + pph.setLocations(new ClassPathResource("/application.properties"), new ClassPathResource("/s3Mock.properties")); + context.addBeanFactoryPostProcessor(pph); + context.register(ApplicationContext.class, JpaContext.class, HsqlJpaContext.class, TestContext.class); + context.refresh(); + resourceConfig.register(XPlanApiExceptionMapper.class); + resourceConfig.register(MultiPartFeature.class); + resourceConfig.packages("org.glassfish.jersey.examples.multipart"); + resourceConfig.property("contextConfig", context); + return resourceConfig; + } + +} diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java index 005c84962c..2b76521b5c 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java @@ -13,6 +13,7 @@ import java.util.List; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.v1.model.Bereich; +import de.latlon.xplanbox.api.manager.v1.model.Gemeinde; import de.latlon.xplanbox.api.manager.v1.model.PlanInfo; import de.latlon.xplanbox.api.manager.v1.model.PlanInfoXplanModelData; import org.junit.jupiter.api.Test; @@ -26,8 +27,10 @@ public class PlanInfoBuilderTest { public void verifyBuildV1() throws URISyntaxException { XPlan xplan = createPlan(); List<Bereich> bereiche = Collections.singletonList(new Bereich().name("testbereich").nummer("0")); + List<Gemeinde> gemeinden = Collections + .singletonList(new Gemeinde().ags("87597649").gemeindeName("Mustergemeinde")); ManagerApiConfiguration managerApiConfiguration = createManagerApiConfiguration(); - PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, managerApiConfiguration).build(); + PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, managerApiConfiguration).build(); assertThat(planInfo.getId()).isEqualTo(1); assertThat(planInfo.getType()).isEqualTo("BP_Plan"); @@ -40,8 +43,10 @@ public class PlanInfoBuilderTest { public void verifyBuildV2() throws URISyntaxException { XPlan xplan = createPlan(); List<Bereich> bereiche = Collections.singletonList(new Bereich().name("testbereich").nummer("0")); + List<Gemeinde> gemeinden = Collections + .singletonList(new Gemeinde().ags("87597649").gemeindeName("Mustergemeinde")); ManagerApiConfiguration managerApiConfiguration = createManagerApiConfiguration(); - de.latlon.xplanbox.api.manager.v2.model.PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, + de.latlon.xplanbox.api.manager.v2.model.PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, managerApiConfiguration) .buildV2(); assertThat(planInfo.getId()).isEqualTo(1); @@ -56,8 +61,10 @@ public class PlanInfoBuilderTest { public void verifyConvertToV1() throws URISyntaxException { XPlan xplan = createPlan(); List<Bereich> bereiche = Collections.singletonList(new Bereich().name("testbereich").nummer("0")); + List<Gemeinde> gemeinden = Collections + .singletonList(new Gemeinde().ags("87597649").gemeindeName("Mustergemeinde")); ManagerApiConfiguration managerApiConfiguration = createManagerApiConfiguration(); - de.latlon.xplanbox.api.manager.v2.model.PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, + de.latlon.xplanbox.api.manager.v2.model.PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, managerApiConfiguration) .buildV2(); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/FakeAsyncImportWrapper.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/FakeAsyncImportWrapper.java index 24e2d385b9..aa43bfbdf1 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/FakeAsyncImportWrapper.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/FakeAsyncImportWrapper.java @@ -7,7 +7,7 @@ import java.util.HashMap; import java.util.Map; import de.latlon.core.validator.events.ValidationRequestedEvent; -import de.latlon.xplanbox.api.commons.handler.AbstractAsyncWrapper; +import de.latlon.xplanbox.api.manager.handler.AbstractAsyncImportWrapper; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 8.0 */ -public class FakeAsyncImportWrapper extends AbstractAsyncWrapper { +public class FakeAsyncImportWrapper extends AbstractAsyncImportWrapper { @Autowired private ValidationExecutionStorage validationExecutionStorage; diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java index ccefc830fa..49214e8861 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java @@ -54,13 +54,11 @@ import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.configuration.SortConfiguration; import de.latlon.xplan.commons.feature.SortPropertyReader; import de.latlon.xplan.manager.XPlanManager; -import de.latlon.xplan.manager.configuration.ConfigurationException; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; import de.latlon.xplan.manager.database.PlanNotFoundException; import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.export.XPlanExporter; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer; import de.latlon.xplan.manager.transaction.XPlanDeleteManager; import de.latlon.xplan.manager.transaction.XPlanEditManager; @@ -69,34 +67,31 @@ import de.latlon.xplan.manager.transaction.service.XPlanDeleteService; import de.latlon.xplan.manager.transaction.service.XPlanEditService; import de.latlon.xplan.manager.web.shared.PlanStatus; import de.latlon.xplan.manager.web.shared.XPlan; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.NoConfigRasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.GeotiffRasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.XPlanRasterEvaluator; -import de.latlon.xplan.manager.wmsconfig.raster.storage.FileSystemStorage; import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; -import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper; import de.latlon.xplan.manager.workspace.WorkspaceException; import de.latlon.xplan.manager.workspace.WorkspaceReloader; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import de.latlon.xplanbox.validator.storage.filesystem.FileSystemValidationExecutionStorage; import jakarta.annotation.PostConstruct; import jakarta.servlet.ServletContext; -import org.deegree.commons.config.DeegreeWorkspace; +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.cs.exceptions.UnknownCRSException; +import org.deegree.cs.persistence.CRSManager; import org.deegree.feature.persistence.FeatureStore; import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.bridge.SLF4JBridgeHandler; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; /** @@ -108,6 +103,7 @@ import org.springframework.context.annotation.Primary; * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ @Configuration +@Import(TestS3Context.class) @EnableAutoConfiguration(exclude = { QuartzAutoConfiguration.class, LiquibaseAutoConfiguration.class }) public class TestContext { @@ -136,11 +132,10 @@ public class TestContext { @Bean public XPlanManager xPlanManager(XPlanDao xPlanDao, XPlanArchiveCreator archiveCreator, ManagerConfiguration managerConfiguration, XPlanExporter xPlanExporter, - XPlanRasterEvaluator xPlanRasterEvaluator, XPlanRasterManager xPlanRasterManager, - SortPropertyReader sortPropertyReader, XPlanInsertManager xPlanInsertManager, + XPlanRasterEvaluator xPlanRasterEvaluator, XPlanInsertManager xPlanInsertManager, XPlanEditManager xPlanEditManager, XPlanDeleteManager xPlanDeleteManager) throws Exception { return new XPlanManager(xPlanDao, archiveCreator, managerConfiguration, xPlanExporter, xPlanRasterEvaluator, - xPlanRasterManager, sortPropertyReader, null, xPlanInsertManager, xPlanEditManager, xPlanDeleteManager); + null, xPlanInsertManager, xPlanEditManager, xPlanDeleteManager); } @Bean @@ -157,9 +152,14 @@ public class TestContext { public XPlanEditManager xPlanEditManager(XPlanSynthesizer xPlanSynthesizer, XPlanDao xPlanDao, XPlanExporter xPlanExporter, ManagerConfiguration managerConfiguration, WorkspaceReloader workspaceReloader, XPlanRasterManager xPlanRasterManager, SortPropertyReader sortPropertyReader, - XPlanEditService xPlanEditService) { + XPlanEditService xPlanEditService, ICRS defaultCrs) { return new XPlanEditManager(xPlanSynthesizer, xPlanDao, xPlanExporter, xPlanRasterManager, workspaceReloader, - managerConfiguration, sortPropertyReader, xPlanEditService, null, null); + managerConfiguration, sortPropertyReader, xPlanEditService, null, null, defaultCrs); + } + + @Bean + public ICRS defaultCrs(@Value("${xplanbox.services.crs}") String defaultCrs) throws UnknownCRSException { + return CRSManager.lookup(defaultCrs); } @Primary @@ -170,8 +170,8 @@ public class TestContext { @Bean public XPlanDeleteManager xPlanDeleteManager(WorkspaceReloader workspaceReloader, - XPlanRasterManager xPlanRasterManager, XPlanDeleteService xPlanDeleteService) { - return new XPlanDeleteManager(xPlanRasterManager, workspaceReloader, xPlanDeleteService); + XPlanDeleteService xPlanDeleteService) { + return new XPlanDeleteManager(workspaceReloader, xPlanDeleteService); } @Primary @@ -221,46 +221,8 @@ public class TestContext { @Bean @Primary - public XPlanRasterEvaluator xPlanRasterEvaluator(RasterEvaluation rasterEvaluation) { - return new XPlanRasterEvaluator(rasterEvaluation); - } - - @Bean - @Primary - public RasterEvaluation getRasterEvaluation(ManagerConfiguration managerConfiguration) { - return new GeotiffRasterEvaluation(managerConfiguration.getRasterConfigurationCrs()); - } - - @Bean - @Primary - public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage, RasterConfigManager rasterConfigManager) - throws WorkspaceException { - return new XPlanRasterManager(rasterStorage, rasterConfigManager, applicationEventPublisher); - } - - @Bean - public RasterStorage rasterStorage(WmsWorkspaceWrapper wmsWorkspaceWrapper, RasterEvaluation rasterEvaluation, - DeegreeRasterCacheCleaner deegreeRasterCacheCleaner) { - Path dataDirectory = wmsWorkspaceWrapper.getDataDirectory(); - return new FileSystemStorage(dataDirectory, rasterEvaluation, deegreeRasterCacheCleaner); - } - - @Bean - public RasterConfigManager rasterConfigManager() { - return new NoConfigRasterConfigManager(); - } - - @Bean - @Primary - public WmsWorkspaceWrapper wmsWorkspaceWrapper(ManagerConfiguration managerConfiguration) - throws WorkspaceException, IOException, URISyntaxException, ConfigurationException { - DeegreeWorkspace deegreeWorkspace = mock(DeegreeWorkspace.class); - DeegreeWorkspaceWrapper wmsWorkspace = mock(DeegreeWorkspaceWrapper.class); - when(wmsWorkspace.getWorkspaceInstance()).thenReturn(deegreeWorkspace); - Path tempWorkspaceDir = Files.createTempDirectory("xplan-api-manager"); - initWorkspace(tempWorkspaceDir); - when(deegreeWorkspace.getLocation()).thenReturn(tempWorkspaceDir.toFile()); - return new WmsWorkspaceWrapper(managerConfiguration, wmsWorkspace.getWorkspaceInstance()); + public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage) throws WorkspaceException { + return new XPlanRasterManager(rasterStorage, applicationEventPublisher); } private void initWorkspace(Path dir) throws IOException, URISyntaxException { @@ -343,7 +305,6 @@ public class TestContext { @Primary public ManagerConfiguration managerConfiguration() { ManagerConfiguration mockedConfiguration = mock(ManagerConfiguration.class); - when(mockedConfiguration.getRasterConfigurationCrs()).thenReturn("EPSG:25832"); when(mockedConfiguration.getSortConfiguration()).thenReturn(new SortConfiguration()); return mockedConfiguration; } @@ -356,14 +317,6 @@ public class TestContext { return workspaceReloader; } - @Bean - @Primary - public DeegreeRasterCacheCleaner deegreeRasterCacheCleaner() { - DeegreeRasterCacheCleaner deegreeRasterCacheCleaner = mock(DeegreeRasterCacheCleaner.class); - when(deegreeRasterCacheCleaner.clearCache("1_raster")).thenReturn(true); - return deegreeRasterCacheCleaner; - } - @Bean public ValidationExecutionStorage validationExecutionStorage() throws IOException { return new FileSystemValidationExecutionStorage(Optional.empty()); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestS3Context.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestS3Context.java new file mode 100644 index 0000000000..60b732f3b2 --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestS3Context.java @@ -0,0 +1,67 @@ +package de.latlon.xplanbox.api.manager.config; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.AnonymousAWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import io.findify.s3mock.S3Mock; +import jakarta.annotation.PreDestroy; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.test.util.TestSocketUtils; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Configuration +public class TestS3Context { + + private final int port = TestSocketUtils.findAvailableTcpPort(); + + private AmazonS3 s3TestClient; + + private S3Mock s3Mock; + + @Bean + public S3Mock s3Mock() { + this.s3Mock = new S3Mock.Builder().withPort(port).withInMemoryBackend().build(); + s3Mock.start(); + return s3Mock; + } + + @Bean + @Primary + public AmazonS3 s3Client(S3Mock s3Mock, @Value("${xplanbox.s3.bucketName}") String bucketName) { + AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration( + "http://localhost:" + port, "eu-central-1"); + AmazonS3 client = AmazonS3ClientBuilder.standard() + .withPathStyleAccessEnabled(true) + .withEndpointConfiguration(endpoint) + .withCredentials(new AWSStaticCredentialsProvider(new AnonymousAWSCredentials())) + .build(); + client.createBucket(bucketName); + s3TestClient = client; + return client; + } + + @Bean + @Primary + public AWSCredentials credentials() { + return new BasicAWSCredentials("accessKeyId", "secretKey"); + } + + @PreDestroy + public void shutdown() { + s3TestClient.shutdown(); + if (s3Mock != null) { + s3Mock.stop(); + } + } + +} diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/executor/PlanImporterTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/executor/PlanImporterTest.java index a754a86f8f..40e4d6ca06 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/executor/PlanImporterTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/executor/PlanImporterTest.java @@ -1,6 +1,6 @@ package de.latlon.xplanbox.api.manager.executor; -import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE; +import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE_AND_VALID; import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.VALIDATION_RESULT.VALID; import static de.latlon.core.validator.events.v1.XPlanboxPublicV1Event.EventType.IMPORT_FINISHED; import static de.latlon.core.validator.events.v1.XPlanboxPublicV1Event.EventType.IMPORT_STARTED; @@ -103,7 +103,7 @@ public class PlanImporterTest { String uuid = validationExecutionStorage.addPlanToValidate(pathToPlan, IMPORT_REQUESTED); ImportRequestedEvent event = new ImportRequestedEvent(uuid, "validationName", "internalId", "FESTGESTELLT", - ValidationRequestedEvent.OriginFile.GML, VALID, AVAILABLE); + ValidationRequestedEvent.OriginFile.GML, VALID, AVAILABLE_AND_VALID, true); planImporter.importPlan(event); verify(planHandler).importPlanWithoutValidation(any(XPlanArchive.class), internalIdCaptor.capture(), diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/EditBasisdatenHandlerTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/EditBasisdatenHandlerTest.java index fb16b5db65..baf885b574 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/EditBasisdatenHandlerTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/EditBasisdatenHandlerTest.java @@ -20,27 +20,27 @@ */ package de.latlon.xplanbox.api.manager.handler; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import de.latlon.xplan.core.manager.db.config.JpaContext; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.api.manager.config.ApplicationContext; import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; import de.latlon.xplanbox.api.manager.config.TestContext; import de.latlon.xplanbox.api.manager.exception.InvalidPlanToEdit; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { ApplicationContext.class, JpaContext.class, HsqlJpaContext.class, TestContext.class }) +@SpringBootTest +@ContextConfiguration(classes = { ApplicationContext.class, HsqlJpaContext.class, TestContext.class }) +@TestPropertySource(properties = { "xplanbox.s3.bucketName=test-bucket", + "xplanbox.validation.s3.bucketName=test-bucket-validation", "xplanbox.services.crs=EPSG:25832" }) class EditBasisdatenHandlerTest { @Autowired @@ -53,14 +53,14 @@ class EditBasisdatenHandlerTest { } @Test - void verifyThat_findPlanById_LP_51_shouldNotBeEditable() throws Exception { + void verifyThat_findPlanById_LP_51_shouldNotBeEditable() { assertThrows(InvalidPlanToEdit.class, () -> { editHandler.findPlanById("5"); }); } @Test - void verifyThat_findPlanById_SO_41_shouldNotBeEditable() throws Exception { + void verifyThat_findPlanById_SO_41_shouldNotBeEditable() { assertThrows(InvalidPlanToEdit.class, () -> { editHandler.findPlanById("6"); }); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/PlanHandlerTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/PlanHandlerTest.java index 59c2497c7f..e1cfd2dd43 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/PlanHandlerTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/handler/PlanHandlerTest.java @@ -20,18 +20,13 @@ */ package de.latlon.xplanbox.api.manager.handler; -import static de.latlon.xplan.manager.web.shared.PlanStatus.FESTGESTELLT; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import java.io.File; import java.util.List; -import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; -import de.latlon.xplan.core.manager.db.config.JpaContext; import de.latlon.xplan.manager.web.shared.XPlan; -import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.exception.InvalidPlanId; import de.latlon.xplanbox.api.commons.exception.InvalidPlanIdSyntax; import de.latlon.xplanbox.api.manager.config.ApplicationContext; @@ -40,17 +35,18 @@ import de.latlon.xplanbox.api.manager.config.TestContext; import de.latlon.xplanbox.api.manager.v1.model.StatusMessage; import jakarta.ws.rs.core.StreamingOutput; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.TestPropertySource; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { ApplicationContext.class, JpaContext.class, HsqlJpaContext.class, TestContext.class }) +@SpringBootTest +@ContextConfiguration(classes = { ApplicationContext.class, HsqlJpaContext.class, TestContext.class }) +@TestPropertySource(properties = { "xplanbox.s3.bucketName=test-bucket", + "xplanbox.validation.s3.bucketName=test-bucket-validation", "xplanbox.services.crs=EPSG:25832" }) class PlanHandlerTest { @Autowired @@ -59,17 +55,6 @@ class PlanHandlerTest { @Autowired private XPlanArchiveCreator archiveCreator; - @Test - void verifyThat_importPlanZip() throws Exception { - final File file = new File(PlanHandlerTest.class.getResource("/bplan_valid_41.zip").toURI()); - final ValidationSettings validationSettings = Mockito.mock(ValidationSettings.class); - XPlanArchive xPlanArchive = archiveCreator.createXPlanArchiveFromZip(file); - List<XPlan> xPlan = planHandler.importPlan(xPlanArchive, "noName", validationSettings, "noInternalId", - FESTGESTELLT.toString()); - assertThat(xPlan).hasSize(1); - assertThat(xPlan.get(0).getId()).isEqualTo("123"); - } - @Test void verifyThat_deletePlan_IsNotThrowingException() throws Exception { StatusMessage statusMessage = planHandler.deletePlan("123"); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/DefaultApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/DefaultApiTest.java index b6aaf0bcea..fec5ba23e9 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/DefaultApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/DefaultApiTest.java @@ -23,35 +23,15 @@ package de.latlon.xplanbox.api.manager.v1; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class DefaultApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(DefaultApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class DefaultApiTest extends ManagerApiJerseyTest<DefaultApi> { @Test void verifyThat_Response_ContainsCorrectStatusCodeAndMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/InfoApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/InfoApiTest.java index 29fc77b98a..dc8c7d556e 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/InfoApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/InfoApiTest.java @@ -24,35 +24,15 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class InfoApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(InfoApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class InfoApiTest extends ManagerApiJerseyTest<InfoApi> { @Test void verifyThat_Response_ContainsCorrectStatusCodeAndMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanAenderungApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanAenderungApiTest.java index a26f750535..17af1878fe 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanAenderungApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanAenderungApiTest.java @@ -29,38 +29,16 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanAenderungApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanAenderungenApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanAenderungApiTest extends ManagerApiJerseyTest<PlanAenderungenApi> { @Test void verifyThat_getAenderung_returnsCorrectStatusCodeForValidMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java index 4db4103187..d11e050a76 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java @@ -8,12 +8,12 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% @@ -38,40 +38,18 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; import org.springframework.boot.test.json.BasicJsonTester; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.xmlunit.assertj.XmlAssert; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; - /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class PlanApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanApiTest extends ManagerApiJerseyTest<PlanApi> { @Test void verifyThat_PostPlanOctetStream_ReturnsCorrectStatusCodeForValidMediaType() diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanBasisdatenApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanBasisdatenApiTest.java index 10aafe114c..15cda6dcb8 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanBasisdatenApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanBasisdatenApiTest.java @@ -29,40 +29,16 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.server.ServerProperties; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanBasisdatenApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanBasisdatenApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - resourceConfig.property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true); - return resourceConfig; - } +class PlanBasisdatenApiTest extends ManagerApiJerseyTest<PlanBasisdatenApi> { @Test void verifyThat_getBasisdaten_returnsCorrectStatusCodeForValidMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanDokumentApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanDokumentApiTest.java index 09da5589ab..30c7a52b9e 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanDokumentApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanDokumentApiTest.java @@ -26,45 +26,21 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.net.URISyntaxException; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanDokumentApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanDokumentApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - resourceConfig.packages("org.glassfish.jersey.examples.multipart"); - resourceConfig.register(MultiPartFeature.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanDokumentApiTest extends ManagerApiJerseyTest<PlanDokumentApi> { @Override protected void configureClient(ClientConfig config) { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanGueltigkeitApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanGueltigkeitApiTest.java index ef3f32e5d0..a1f93f398e 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanGueltigkeitApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanGueltigkeitApiTest.java @@ -29,38 +29,16 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanGueltigkeitApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanGueltigkeitApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanGueltigkeitApiTest extends ManagerApiJerseyTest<PlanGueltigkeitApi> { @Test void verifyThat_getGueltigkeit_returnsCorrectStatusCodeForValidMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanRasterbasisApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanRasterbasisApiTest.java index 175d6bb4bc..c20e5fbd26 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanRasterbasisApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanRasterbasisApiTest.java @@ -8,12 +8,12 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% @@ -28,45 +28,21 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.net.URISyntaxException; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanRasterbasisApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanRasterbasisApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - resourceConfig.packages("org.glassfish.jersey.examples.multipart"); - resourceConfig.register(MultiPartFeature.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanRasterbasisApiTest extends ManagerApiJerseyTest<PlanRasterbasisApi> { @Override protected void configureClient(ClientConfig config) { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanTextApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanTextApiTest.java index 41b441eef2..b3caceb4c5 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanTextApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanTextApiTest.java @@ -26,45 +26,21 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.net.URISyntaxException; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanTextApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanTextApi.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - resourceConfig.packages("org.glassfish.jersey.examples.multipart"); - resourceConfig.register(MultiPartFeature.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanTextApiTest extends ManagerApiJerseyTest<PlanTextApi> { @Override protected void configureClient(ClientConfig config) { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java index f1ba8825be..e07019a236 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java @@ -23,34 +23,14 @@ package de.latlon.xplanbox.api.manager.v1; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; - -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class PlansApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlansApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlansApiTest extends ManagerApiJerseyTest<PlansApi> { @Test void verifyThat_GetPlansByName_ReturnCorrectStatus() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/DefaultApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/DefaultApi2Test.java index 9164e1834d..9d6ee1dd92 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/DefaultApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/DefaultApi2Test.java @@ -23,34 +23,15 @@ package de.latlon.xplanbox.api.manager.v2; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; -import de.latlon.xplanbox.api.manager.v1.DefaultApi; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class DefaultApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(DefaultApi2.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class DefaultApi2Test extends ManagerApiJerseyTest<DefaultApi2> { @Test void verifyThat_Response_ContainsCorrectStatusCodeAndMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/InfoApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/InfoApi2Test.java index cfb3e7debd..43c2e1d78d 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/InfoApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/InfoApi2Test.java @@ -24,33 +24,15 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class InfoApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(InfoApi2.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class InfoApi2Test extends ManagerApiJerseyTest<InfoApi2> { @Test void verifyThat_Response_ContainsCorrectStatusCodeAndMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanAenderungApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanAenderungApi2Test.java index f8c0030f8b..7f2811fee4 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanAenderungApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanAenderungApi2Test.java @@ -29,36 +29,16 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanAenderungApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanAenderungenApi2.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanAenderungApi2Test extends ManagerApiJerseyTest<PlanAenderungenApi2> { @Test void verifyThat_getAenderung_returnsCorrectStatusCodeForValidMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanApi2Test.java index 8977d5cd4e..6e7bf9d29d 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanApi2Test.java @@ -36,37 +36,17 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; import org.springframework.boot.test.json.BasicJsonTester; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class PlanApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanApi2.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanApi2Test extends ManagerApiJerseyTest<PlanApi2> { @Test void verifyThat_PostPlanOctetStream_ReturnsCorrectStatusCodeForValidMediaType() @@ -190,25 +170,12 @@ class PlanApi2Test extends JerseyTest { "$.links[?(@.rel=='self' && @.href=='http:\\/\\/localhost:8080\\/xplan-api-manager\\/xmanager\\/api\\/v1\\/plan\\/123')]"); } - @Test - void verifyThat_GetPlanById_AsZip_ReturnsCorrectStatusAndContent() { - final Response response = target("/plan/123").request().accept(APPLICATION_ZIP).get(); - assertThat(response.getStatus()).isEqualTo(Response.Status.OK.getStatusCode()); - assertThat(response.getHeaderString(HttpHeaders.CONTENT_TYPE)).isEqualTo(APPLICATION_ZIP); - } - @Test void verifyThat_GetPlanById_ReturnsCorrectStatusCodeForWrongId() { - final Response response = target("/plan/42").request().accept(APPLICATION_ZIP).get(); + final Response response = target("/plan/42").request().accept(APPLICATION_JSON).get(); assertThat(response.getStatus()).isEqualTo(Response.Status.NOT_FOUND.getStatusCode()); } - @Test - void verifyThat_GetPlanByName_ReturnsCorrectStatus() { - final Response response = target("/plan/name/bplan_41").request().accept(APPLICATION_JSON).get(); - assertThat(response.getHeaderString(HttpHeaders.CONTENT_TYPE)).isEqualTo(APPLICATION_JSON); - } - @Test void verifyThat_GetPlanArchiveById_ReturnsCorrectStatusAndContent() { final Response response = target("/plan/123/archive").request().accept(APPLICATION_ZIP).get(); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanBasisdatenApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanBasisdatenApi2Test.java index aec87bc620..981f63ec73 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanBasisdatenApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanBasisdatenApi2Test.java @@ -29,38 +29,16 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.server.ServerProperties; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanBasisdatenApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanBasisdatenApi2.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - resourceConfig.property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true); - return resourceConfig; - } +class PlanBasisdatenApi2Test extends ManagerApiJerseyTest<PlanBasisdatenApi2> { @Test void verifyThat_getBasisdaten_returnsCorrectStatusCodeForValidMediaType() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanDokumentApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanDokumentApi2Test.java index 8a40ac6827..b238b1ff9d 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanDokumentApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanDokumentApi2Test.java @@ -26,13 +26,8 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.net.URISyntaxException; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; @@ -40,29 +35,12 @@ import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanDokumentApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanDokumentApi2.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - resourceConfig.packages("org.glassfish.jersey.examples.multipart"); - resourceConfig.register(MultiPartFeature.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanDokumentApi2Test extends ManagerApiJerseyTest<PlanDokumentApi2> { @Override protected void configureClient(ClientConfig config) { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanRasterbasisApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanRasterbasisApi2Test.java index eb3c01f141..4f0aa46797 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanRasterbasisApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanRasterbasisApi2Test.java @@ -28,13 +28,8 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.net.URISyntaxException; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; @@ -42,29 +37,12 @@ import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanRasterbasisApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanRasterbasisApi2.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - resourceConfig.packages("org.glassfish.jersey.examples.multipart"); - resourceConfig.register(MultiPartFeature.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanRasterbasisApi2Test extends ManagerApiJerseyTest<PlanRasterbasisApi2> { @Override protected void configureClient(ClientConfig config) { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanTextApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanTextApi2Test.java index 0ff3592f3a..7025c9857d 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanTextApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlanTextApi2Test.java @@ -26,13 +26,8 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.net.URISyntaxException; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; @@ -40,29 +35,12 @@ import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ -class PlanTextApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlanTextApi2.class); - resourceConfig.register(XPlanApiExceptionMapper.class); - resourceConfig.packages("org.glassfish.jersey.examples.multipart"); - resourceConfig.register(MultiPartFeature.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlanTextApi2Test extends ManagerApiJerseyTest<PlanTextApi2> { @Override protected void configureClient(ClientConfig config) { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java index 426b9422fb..ab5764e30a 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java @@ -23,32 +23,14 @@ package de.latlon.xplanbox.api.manager.v2; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class PlansApi2Test extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(PlansApi2.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; - } +class PlansApi2Test extends ManagerApiJerseyTest<PlansApi2> { @Test void verifyThat_GetPlansByName_ReturnCorrectStatus() { diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/StatusApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/StatusApiTest.java index 759e9da3d6..5f77cbfe16 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/StatusApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/StatusApiTest.java @@ -25,36 +25,16 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.UUID; -import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.manager.config.ApplicationContext; -import de.latlon.xplanbox.api.manager.config.HsqlJpaContext; -import de.latlon.xplanbox.api.manager.config.TestContext; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.manager.ManagerApiJerseyTest; import jakarta.ws.rs.core.Response; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 8.0 */ -class StatusApiTest extends JerseyTest { - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(StatusApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - JpaContext.class, HsqlJpaContext.class, TestContext.class); - resourceConfig.property("contextConfig", context); - resourceConfig.register(XPlanApiExceptionMapper.class); - return resourceConfig; - } +class StatusApiTest extends ManagerApiJerseyTest<StatusApi> { @Test @Disabled("TODO: Implement") diff --git a/xplan-manager/xplan-manager-api/src/test/resources/de/latlon/xplanbox/api/manager/config/planinfo.json b/xplan-manager/xplan-manager-api/src/test/resources/de/latlon/xplanbox/api/manager/config/planinfo.json index d47298546b..36e8c3c116 100644 --- a/xplan-manager/xplan-manager-api/src/test/resources/de/latlon/xplanbox/api/manager/config/planinfo.json +++ b/xplan-manager/xplan-manager-api/src/test/resources/de/latlon/xplanbox/api/manager/config/planinfo.json @@ -1 +1 @@ -[{"id":3,"type":"BP_Plan","version":"XPLAN_54","planStatus":"FESTGESTELLT","raster":false,"importDate":"2024-08-07T12:43:01.873+0200","inspirePublished":false,"bbox":{"minX":9.982202,"minY":53.608754,"maxX":9.983553,"maxY":53.609485,"crs":"EPSG:4326"},"xplanModelData":{"name":"BPlan001_5-4","nummer":"-","internalId":null,"ags":"02000000","gemeindeName":null,"rechtsstand":"Satzung","inkrafttretensDatum":null,"bereiche":[{"nummer":"1","name":null}]},"links":[{"href":"http://localhost:8086/xmanager/api/v1/plan/3","type":"application/json","hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"self"},{"href":"http://localhost:8086/xmanager/api/v1/plan/3","type":"application/xml","hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"alternate"},{"href":"http://localhost:8086/xmanager/api/v1/plan/3","type":"application/zip","hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"alternate"},{"href":"http://localhost:8083/xplan-wms/services/planwerkwms/planname/BPlan001_5-4","type":null,"hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"planwerkwms"}]}] +[{"id":3,"type":"BP_Plan","version":"XPLAN_54","planStatus":"FESTGESTELLT","raster":false,"importDate":"2024-08-07T12:43:01.873+0200","inspirePublished":false,"bbox":{"minX":9.982202,"minY":53.608754,"maxX":9.983553,"maxY":53.609485,"crs":"EPSG:4326"},"xplanModelData":{"name":"BPlan001_5-4","nummer":"-","internalId":null,"gemeinden": [{"ags":"02000000","gemeindeName":"Muster"}],"rechtsstand":"Satzung","inkrafttretensDatum":null,"bereiche":[{"nummer":"1","name":null}]},"links":[{"href":"http://localhost:8086/xmanager/api/v1/plan/3","type":"application/json","hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"self"},{"href":"http://localhost:8086/xmanager/api/v1/plan/3","type":"application/xml","hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"alternate"},{"href":"http://localhost:8086/xmanager/api/v1/plan/3","type":"application/zip","hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"alternate"},{"href":"http://localhost:8083/xplan-wms/services/planwerkwms/planname/BPlan001_5-4","type":null,"hreflang":null,"title":"BPlan001_5-4","length":null,"rel":"planwerkwms"}]}] diff --git a/xplan-manager/xplan-manager-api/src/test/resources/s3Mock.properties b/xplan-manager/xplan-manager-api/src/test/resources/s3Mock.properties new file mode 100644 index 0000000000..21647337a8 --- /dev/null +++ b/xplan-manager/xplan-manager-api/src/test/resources/s3Mock.properties @@ -0,0 +1,25 @@ +### +# #%L +# xplan-manager-core - XPlan Manager Core Komponente +# %% +# Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# #L% +### +xplanbox.s3.accessKeyId= +xplanbox.s3.secretKey= +xplanbox.s3.bucketName=latlonxpbtest +xplanbox.s3.region=eu-central-1 +xplanbox.s3.endpoint.url=http://localhost diff --git a/xplan-manager/xplan-manager-config/src/main/filter/filter-default.properties b/xplan-manager/xplan-manager-config/src/main/filter/filter-default.properties index 27df37fe7c..20aa0420eb 100644 --- a/xplan-manager/xplan-manager-config/src/main/filter/filter-default.properties +++ b/xplan-manager/xplan-manager-config/src/main/filter/filter-default.properties @@ -20,7 +20,7 @@ ### ## Manager - managerConfiguration.properties ## # raster configuration -rasterConfigurationCrs=EPSG:25832 +# The rasterConfigurationCrs config option is deprecated, use environment variable XPLAN_SERVICES_DEFAULT_CRS instead. rasterLayerVisisbilityMinScaleDenominator= rasterLayerVisisbilityMaxScaleDenominator= @@ -29,17 +29,9 @@ workspaceReloadUrls= workspaceReloadApiKey= workspaceReloadUser= workspaceReloadPassword= -workspaceReloadAction=ALL +#workspaceReloadAction=ALL # unused since 8.0 - only PLANWERKWMS is supported and applied if workspace reloader configuration is available -#internal id retriever (deprecated) -workspaceName=xplan-manager-workspace -jdbcConnectionId=vfdb -internalIdLabel=id -internalNameLabel=verfahrensname -selectMatchingIdsSql=SELECT id, verfahrensname FROM verfahren.planverfahren WHERE planaktiv = true AND lower(verfahrensname) LIKE lower(?) ORDER BY verfahrensname ASC -selectAllIdsSql=SELECT id, verfahrensname FROM verfahren.planverfahren WHERE planaktiv = true ORDER BY verfahrensname ASC - -#links to detailed information about conformity of the semantic validation +# links to detailed information about conformity of the semantic validation linkSemanticConformity_XPLAN_40=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%204.0.2/Konformit%C3%A4tsbedingungen%20Xplanung%204.0.2.pdf linkSemanticConformity_XPLAN_41=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%204.1/Konformit%C3%A4tsbedingungen%20XPlanung%204.1%20V2.pdf linkSemanticConformity_XPLAN_50=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%205.0.1/Konformit%C3%A4tsbedingungen.pdf @@ -49,7 +41,7 @@ linkSemanticConformity_XPLAN_53=https://xleitstelle.de/downloads/xplanung/releas linkSemanticConformity_XPLAN_54=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%205.4/XPlanGML_%205_4_Konformit%C3%A4tsbedingungen.pdf linkSemanticConformity_XPLAN_60=https://xleitstelle.de/downloads/xplanung/releases/XPlanung%20Version%206.0.2/XPlanGML_%206_0_2_Konformit%C3%A4tsbedingungen.pdf -#source of the wmsSortDate value. Configured as 'FeatureTypeName,PropertyName', empty (or missing) if not available for a PlanType and/or version. +# source of the wmsSortDate value. Configured as 'FeatureTypeName,PropertyName', empty (or missing) if not available for a PlanType and/or version. wmsSortDate_BP_Plan_XPLAN_40=BP_Plan,rechtsverordnungsDatum wmsSortDate_BP_Plan_XPLAN_41=BP_Plan,rechtsverordnungsDatum wmsSortDate_BP_Plan_XPLAN_50=BP_Plan,rechtsverordnungsDatum @@ -89,7 +81,7 @@ wmsSortDate_SO_Plan_XPLAN_53= wmsSortDate_SO_Plan_XPLAN_54= wmsSortDate_SO_Plan_XPLAN_60= -#the absolute path to the HALE CLI used to transform XPlan GML to INSPIRE PLU (https://github.com/halestudio/hale-cli) +#the absolute path to the HALE CLI used to transform XPlanGML to INSPIRE PLU (https://github.com/halestudio/hale-cli) pathToHaleCli= #if imported XPlanGml 4.1 should be transformed to XPlanGML 5.1, requires valid pathToHaleCli (default: false) diff --git a/xplan-manager/xplan-manager-config/src/main/resources/managerConfiguration.properties b/xplan-manager/xplan-manager-config/src/main/resources/managerConfiguration.properties index d82213c4c7..1134eb26fe 100644 --- a/xplan-manager/xplan-manager-config/src/main/resources/managerConfiguration.properties +++ b/xplan-manager/xplan-manager-config/src/main/resources/managerConfiguration.properties @@ -20,17 +20,17 @@ ### ## XPlanManagerWeb configuration ## # raster configuration -rasterConfigurationCrs=${rasterConfigurationCrs} +# rasterConfigurationCrs=${rasterConfigurationCrs} use environment variable XPLAN_SERVICES_DEFAULT_CRS instead rasterLayerMinScaleDenominator=${rasterLayerVisisbilityMinScaleDenominator} rasterLayerMaxScaleDenominator=${rasterLayerVisisbilityMaxScaleDenominator} -# workspace reloader configuration, workspaceReloadAction must be one of ALL (default), RELOAD, PLANWERKWMS +# workspace reloader configuration # workspaceReloadUser and workspaceReloadPassword are deprecated! Use workspaceReloadApiKey instead. workspaceReloadUrls=${workspaceReloadUrls} workspaceReloadApiKey=${workspaceReloadApiKey} #workspaceReloadUser=${workspaceReloadUser} #workspaceReloadPassword=${workspaceReloadPassword} -workspaceReloadAction=${workspaceReloadAction} +#workspaceReloadAction=ALL # unused since 8.0 - only PLANWERKWMS is supported and applied if workspace reloader configuration is available # internal id retriever (deprecated) workspaceName=${workspaceName} diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java index f0257d3dfc..2a7e0e597b 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java @@ -20,7 +20,6 @@ */ package de.latlon.xplan.manager.web.spring.config; -import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLANSYN_WMS_WORKSPACE; import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLAN_MANAGER_WORKSPACE; import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorkspace; @@ -53,7 +52,6 @@ import de.latlon.xplan.manager.inspireplu.InspirePluPublisher; import de.latlon.xplan.manager.metadata.DataServiceCouplingException; import de.latlon.xplan.manager.metadata.MetadataCouplingHandler; import de.latlon.xplan.manager.storage.StorageCleanUpManager; -import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; import de.latlon.xplan.manager.synthesizer.XPlanSynthesizer; import de.latlon.xplan.manager.synthesizer.rules.SynRulesAccessor; import de.latlon.xplan.manager.transaction.AttachmentUrlHandler; @@ -65,13 +63,8 @@ import de.latlon.xplan.manager.transaction.service.XPlanEditService; import de.latlon.xplan.manager.transaction.service.XPlanInsertService; import de.latlon.xplan.manager.web.server.service.ManagerReportProvider; import de.latlon.xplan.manager.web.shared.ConfigurationException; -import de.latlon.xplan.manager.wmsconfig.WmsWorkspaceWrapper; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; -import de.latlon.xplan.manager.wmsconfig.raster.config.RasterConfigManager; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; -import de.latlon.xplan.manager.wmsconfig.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; -import de.latlon.xplan.manager.workspace.DeegreeWorkspaceWrapper; import de.latlon.xplan.manager.workspace.WorkspaceException; import de.latlon.xplan.manager.workspace.WorkspaceReloader; import de.latlon.xplan.validator.XPlanValidator; @@ -91,13 +84,19 @@ import de.latlon.xplan.validator.semantic.xquery.XQuerySemanticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplanbox.core.gwt.commons.server.service.ReportProvider; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import org.deegree.commons.config.DeegreeWorkspace; +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.cs.exceptions.UnknownCRSException; +import org.deegree.cs.persistence.CRSManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; import org.springframework.core.io.ResourceLoader; /** @@ -107,6 +106,8 @@ import org.springframework.core.io.ResourceLoader; * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ @Configuration +@Import(RasterEvaluationContext.class) +@PropertySource("classpath:/xplan-manager-web.properties") public class BasicSpringConfig { private static final String RULES_DIRECTORY = "/rules"; @@ -187,34 +188,19 @@ public class BasicSpringConfig { } @Bean - @Profile("!mapserver") - public WmsWorkspaceWrapper wmsWorkspaceWrapper(ManagerConfiguration managerConfiguration) - throws WorkspaceException, de.latlon.xplan.manager.configuration.ConfigurationException { - DeegreeWorkspaceWrapper wmsWorkspace = new DeegreeWorkspaceWrapper(DEFAULT_XPLANSYN_WMS_WORKSPACE); - return new WmsWorkspaceWrapper(managerConfiguration, wmsWorkspace.getWorkspaceInstance()); - } - - @Bean - public XPlanRasterEvaluator xPlanRasterEvaluator(RasterEvaluation rasterEvaluation) { - return new XPlanRasterEvaluator(rasterEvaluation); - } - - @Bean - public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage, RasterConfigManager rasterConfigManager) - throws WorkspaceException { - return new XPlanRasterManager(rasterStorage, rasterConfigManager, applicationEventPublisher); + public XPlanRasterManager xPlanRasterManager(RasterStorage rasterStorage) throws WorkspaceException { + return new XPlanRasterManager(rasterStorage, applicationEventPublisher); } @Bean public XPlanManager xPlanManager(XPlanManagerDao xPlanManagerDao, XPlanArchiveCreator archiveCreator, ManagerConfiguration managerConfiguration, XPlanExporter xPlanExporter, - XPlanRasterEvaluator xPlanRasterEvaluator, XPlanRasterManager xPlanRasterManager, - SortPropertyReader sortPropertyReader, Optional<InspirePluPublisher> inspirePluPublisher, + XPlanRasterEvaluator xPlanRasterEvaluator, Optional<InspirePluPublisher> inspirePluPublisher, XPlanInsertManager xPlanInsertManager, XPlanEditManager xPlanEditManager, XPlanDeleteManager xPlanDeleteManager) throws Exception { return new XPlanManager(xPlanManagerDao, archiveCreator, managerConfiguration, xPlanExporter, - xPlanRasterEvaluator, xPlanRasterManager, sortPropertyReader, inspirePluPublisher.orElse(null), - xPlanInsertManager, xPlanEditManager, xPlanDeleteManager); + xPlanRasterEvaluator, inspirePluPublisher.orElse(null), xPlanInsertManager, xPlanEditManager, + xPlanDeleteManager); } @Bean @@ -237,10 +223,15 @@ public class BasicSpringConfig { XPlanExporter xPlanExporter, ManagerConfiguration managerConfiguration, WorkspaceReloader workspaceReloader, XPlanRasterManager xPlanRasterManager, SortPropertyReader sortPropertyReader, XPlanEditService xPlanEditService, MetadataCouplingHandler metadataCouplingHandler, - Optional<AttachmentUrlHandler> attachmentUrlHandler) { + Optional<AttachmentUrlHandler> attachmentUrlHandler, ICRS defaultCrs) { return new XPlanEditManager(xPlanSynthesizer, xPlanManagerDao, xPlanExporter, xPlanRasterManager, workspaceReloader, managerConfiguration, sortPropertyReader, xPlanEditService, metadataCouplingHandler, - attachmentUrlHandler.orElse(null)); + attachmentUrlHandler.orElse(null), defaultCrs); + } + + @Bean + public ICRS defaultCrs(@Value("${xplanbox.services.crs}") String defaultCrs) throws UnknownCRSException { + return CRSManager.lookup(defaultCrs); } @Bean @@ -251,8 +242,8 @@ public class BasicSpringConfig { @Bean public XPlanDeleteManager xPlanDeleteManager(WorkspaceReloader workspaceReloader, - XPlanRasterManager xPlanRasterManager, XPlanDeleteService xPlanDeleteService) { - return new XPlanDeleteManager(xPlanRasterManager, workspaceReloader, xPlanDeleteService); + XPlanDeleteService xPlanDeleteService) { + return new XPlanDeleteManager(workspaceReloader, xPlanDeleteService); } @Bean @@ -298,7 +289,7 @@ public class BasicSpringConfig { SemanticValidator semanticValidator, SemanticProfiles semanticProfiles, ReportArchiveGenerator reportArchiveGenerator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, - semanticProfiles.getProfileValidators(), reportArchiveGenerator); + semanticProfiles.getProfileValidators(), reportArchiveGenerator, Optional.empty()); } @Bean @@ -323,11 +314,6 @@ public class BasicSpringConfig { return new WorkspaceReloader(managerConfiguration.getWorkspaceReloaderConfiguration()); } - @Bean - public DeegreeRasterCacheCleaner deegreeRasterCacheCleaner(ManagerConfiguration managerConfiguration) { - return new DeegreeRasterCacheCleaner(managerConfiguration.getWorkspaceReloaderConfiguration()); - } - @Bean public ReportProvider reportProvider() { return new ManagerReportProvider(); diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfig.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfig.java index 806743369a..29e169eb7d 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfig.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfig.java @@ -21,11 +21,10 @@ package de.latlon.xplan.manager.web.spring.config; import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplan.manager.document.config.DocumentStorageContext; +import de.latlon.xplan.manager.document.config.AmazonS3DocumentStorageContext; import de.latlon.xplan.manager.web.server.service.security.AuthorizationManager; -import de.latlon.xplan.manager.wmsconfig.config.GeotiffRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3RasterStorageContext; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -37,8 +36,8 @@ import org.springframework.context.annotation.Import; * @version $Revision: $, $Date: $ */ @Configuration -@Import({ BasicSpringConfig.class, JpaContext.class, GeotiffRasterStorageContext.class, - MapserverRasterStorageContext.class, AmazonS3RasterStorageContext.class, DocumentStorageContext.class }) +@Import({ BasicSpringConfig.class, JpaContext.class, AmazonS3RasterStorageContext.class, + AmazonS3DocumentStorageContext.class, RasterEvaluationContext.class }) public class ManagerWebSpringConfig { @Bean diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfigWithSimpleSecurity.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfigWithSimpleSecurity.java index 37fd353414..6deae96e24 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfigWithSimpleSecurity.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/ManagerWebSpringConfigWithSimpleSecurity.java @@ -21,10 +21,9 @@ package de.latlon.xplan.manager.web.spring.config; import de.latlon.xplan.core.manager.db.config.JpaContext; -import de.latlon.xplan.manager.document.config.DocumentStorageContext; -import de.latlon.xplan.manager.wmsconfig.config.GeotiffRasterStorageContext; -import de.latlon.xplan.manager.wmsconfig.config.MapserverRasterStorageContext; +import de.latlon.xplan.manager.document.config.AmazonS3DocumentStorageContext; import de.latlon.xplan.manager.wmsconfig.raster.storage.s3.config.AmazonS3RasterStorageContext; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; @@ -37,8 +36,8 @@ import org.springframework.context.annotation.ImportResource; * @version $Revision: $, $Date: $ */ @Configuration -@Import({ BasicSpringConfig.class, JpaContext.class, GeotiffRasterStorageContext.class, - MapserverRasterStorageContext.class, AmazonS3RasterStorageContext.class, DocumentStorageContext.class }) +@Import({ BasicSpringConfig.class, JpaContext.class, AmazonS3RasterStorageContext.class, + AmazonS3DocumentStorageContext.class, RasterEvaluationContext.class }) @ImportResource("classpath:/de/latlon/xplan/manager/web/spring/security-simple.xml") public class ManagerWebSpringConfigWithSimpleSecurity { diff --git a/xplan-manager/xplan-manager-web/src/main/resources/xplan-manager-web.properties b/xplan-manager/xplan-manager-web/src/main/resources/xplan-manager-web.properties new file mode 100644 index 0000000000..76f279984c --- /dev/null +++ b/xplan-manager/xplan-manager-web/src/main/resources/xplan-manager-web.properties @@ -0,0 +1 @@ +xplanbox.services.crs=${XPLAN_SERVICES_DEFAULT_CRS:EPSG:25832} \ No newline at end of file diff --git a/xplan-tests/xplan-tests-selenium/README.md b/xplan-tests/xplan-tests-selenium/README.md index b7d2e58b14..d477d12421 100644 --- a/xplan-tests/xplan-tests-selenium/README.md +++ b/xplan-tests/xplan-tests-selenium/README.md @@ -5,7 +5,13 @@ Die Tests in diesem Projekt sind nicht gedacht, um direkt als Teil vom Build aus ## Ausführung mit Maven ``` -mvn clean integration-test -Psystem-tests -DbaseUrlValidatorWeb=https://xplanbox.lat-lon.de/xplan-validator-web -Dpassword='PWD' -Dusername=xplanbox +mvn clean integration-test -Psystem-tests \ + -DXPLAN_VALIDATORAPI_URL_PUBLIC=https://xplanbox.lat-lon.de/xplan-validator-api \ + -DXPLAN_MANAGERAPI_URL_PUBLIC=https://xplanbox.lat-lon.de/xplan-manager-api \ + -DXPLAN_DOKUMENTEAPI_URL_PUBLIC=https://xplanbox.lat-lon.de/xplan-dokumente-api \ + -DXPLAN_API_USERNAME=xplanbox -DXPLAN_API_PASSWORD='pwd' \ + -DXPLAN_VALIDATOR_WEB_BASE_URL=https://xplanbox.lat-lon.de/xplan-validator-web \ + -DXPLAN_VALIDATOR_WEB_USERNAME=xplanbox -DXPLAN_VALIDATOR_WEB_PASSWORD='PWD' ``` ## Ausführung im Docker Container @@ -18,18 +24,25 @@ docker run --env XPLAN_VALIDATOR_WEB_BASE_URL=... xplanbox/xplan-tests-selenium ### Umgebungsvariablen -- `XPLAN_DOKUMENTEAPI_URL_PUBLIC`: die Url von der dokumente-api Anwendung (Default: `http://localhost:8092/xplan-dokumente-api`) -- `XPLAN_MANAGERAPI_URL_PUBLIC`: die Url von der manager-api Anwendung (Default: `http://localhost:8086/xplan-manager-api`) -- `XPLAN_VALIDATOR_WEB_BASE_URL` -- `XPLAN_VALIDATOR_WEB_USERNAME` -- `XPLAN_VALIDATOR_WEB_PASSWORD` +#### APIs +- `XPLAN_VALIDATORAPI_URL_PUBLIC`: die Url der XPlanValidatorAPI Anwendung (Default: `http://localhost:8085/xplan-validator-api`) +- `XPLAN_MANAGERAPI_URL_PUBLIC`: die Url von der XPlanManagerAPI Anwendung (Default: `http://localhost:8086/xplan-manager-api`) +- `XPLAN_DOKUMENTEAPI_URL_PUBLIC`: die Url der XPlanDokumenteAPI Anwendung (Default: `http://localhost:8092/xplan-dokumente-api`) +- `XPLAN_API_USERNAME`: Nutzername für den Zugriff auf die XPlanValidatorAPI, XPlanManagerAPI und XPlanDokumenteAPI (Default: keine Absicherung) +- `XPLAN_API_PASSWORD`: Passwort für den Zugriff auf die XPlanValidatorAPI, XPlanManagerAPI und XPlanDokumenteAPI (Default: keine Absicherung) + +#### XPlanValidatorWeb +- `XPLAN_VALIDATOR_WEB_BASE_URL`: die Url des XPlanValidatorWeb (Default: `http://localhost:8081/xplan-validator-web`) +- `XPLAN_VALIDATOR_WEB_USERNAME`: Nutzername für den Zugriff auf den XPlanValidatorWeb (Default: keine Absicherung) +- `XPLAN_VALIDATOR_WEB_PASSWORD`: Password für den Zugriff auf den XPlanValidatorWeb (Default: keine Absicherung) + +#### Rabbit - `SKIP_RABBIT_TESTS`: wenn `true` oder `1` werden die Tests ignoriert, für die eine Verbindung zum RabbitMQ Server benötigt wird. - `XPLAN_RABBIT_HOST`: der Host vom RabbitMQ Server (Default: `localhost`) - `XPLAN_RABBIT_PORT`: der Port vom RabbitMQ Server (Default: `5672`) - `XPLAN_RABBIT_USER`: der Benutzername für die Verbindung zum RabbitMQ Server (Default: `guest`) - `XPLAN_RABBIT_PASSWORD`: das Passwort für die Verbindung zum RabbitMQ Server (Default: `guest`) - `XPLAN_RABBIT_PUBLIC_FANOUT`: der Name vom Fanout Channel (Default: `xplanbox-public-fanout`) -- `XPLAN_VALIDATORAPI_URL_PUBLIC`: die Url von der validator-api Anwendung (Default: `http://localhost:8085/xplan-validator-api`) Der Report im PDF Format kann zu einem S3 Bucket hochgeladen werden, dafür müssen folgende Umgebungsvariablen gesetzt werden: diff --git a/xplan-tests/xplan-tests-selenium/pom.xml b/xplan-tests/xplan-tests-selenium/pom.xml index 2846de24b4..2b9ebb5040 100644 --- a/xplan-tests/xplan-tests-selenium/pom.xml +++ b/xplan-tests/xplan-tests-selenium/pom.xml @@ -75,7 +75,6 @@ <profile> <id>system-tests</id> <properties> - <baseUrlValidatorWeb/> <maven.test.skip>false</maven.test.skip> <password/> <username/> @@ -92,13 +91,6 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> - <configuration> - <systemPropertyVariables> - <baseUrlValidatorWeb>${baseUrlValidatorWeb}</baseUrlValidatorWeb> - <username>${username}</username> - <password>${password}</password> - </systemPropertyVariables> - </configuration> </plugin> </plugins> </build> diff --git a/xplan-tests/xplan-tests-selenium/runAllSeleniumTests.sh b/xplan-tests/xplan-tests-selenium/runAllSeleniumTests.sh index a4594bbb50..64a513933e 100755 --- a/xplan-tests/xplan-tests-selenium/runAllSeleniumTests.sh +++ b/xplan-tests/xplan-tests-selenium/runAllSeleniumTests.sh @@ -47,7 +47,7 @@ Xvfb :0 -screen 0 1024x768x24 & xvfbPid=$! echo "Executing tests..." -DISPLAY=:0 mvn integration-test -Psystem-tests -DbaseUrlValidatorWeb=$XPLAN_VALIDATOR_WEB_BASE_URL -Dusername=$XPLAN_VALIDATOR_WEB_USERNAME -Dpassword=$XPLAN_VALIDATOR_WEB_PASSWORD -Dwebdriver.chrome.driver=/usr/bin/chromedriver +DISPLAY=:0 mvn integration-test -Psystem-tests -DXPLAN_VALIDATORAPI_URL_PUBLIC=$XPLAN_VALIDATOR_WEB_BASE_URL -DXPLAN_MANAGERAPI_URL_PUBLIC=$XPLAN_MANAGERAPI_URL_PUBLIC -DXPLAN_DOKUMENTEAPI_URL_PUBLIC=$XPLAN_DOKUMENTEAPI_URL_PUBLIC -DXPLAN_VALIDATOR_WEB_BASE_URL=$XPLAN_VALIDATOR_WEB_USERNAME -DXPLAN_VALIDATOR_WEB_PASSWORD=$XPLAN_VALIDATOR_WEB_PASSWORD -Dwebdriver.chrome.driver=/usr/bin/chromedriver kill -9 $xvfbPid echo "Generating html report..." diff --git a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/XPlanboxConfig.java b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/XPlanboxConfig.java index 0330e195c2..d695803160 100644 --- a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/XPlanboxConfig.java +++ b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/XPlanboxConfig.java @@ -27,9 +27,10 @@ package de.latlon.xplanbox.tests; * @since 8.0 */ public record XPlanboxConfig(String dokumenteApiBaseUrl, String managerApiBaseUrl, String validatorApiBaseUrl, - RabbitConfig rabbitConfig) { + String apiUsername, String apiPassword, String validatorWebBaseUrl, String validatorWebUsername, + String validatorWebPassword, RabbitConfig rabbitConfig) { - public static record RabbitConfig(String rabbitHost, int rabbitPort, String rabbitUsername, String rabbitPassword, + public record RabbitConfig(String rabbitHost, int rabbitPort, String rabbitUsername, String rabbitPassword, String publicFanoutQueueName) { }; @@ -39,6 +40,14 @@ public record XPlanboxConfig(String dokumenteApiBaseUrl, String managerApiBaseUr String managerApiBaseUrl = getEnv("XPLAN_MANAGERAPI_URL_PUBLIC", "http://localhost:8086/xplan-manager-api"); String validatorApiBaseUrl = getEnv("XPLAN_VALIDATORAPI_URL_PUBLIC", "http://localhost:8085/xplan-validator-api"); + String validatorWebBaseUrl = getEnv("XPLAN_VALIDATOR_WEB_BASE_URL", + "http://localhost:8081/xplan-validator-web"); + + String apiUsername = getEnv("XPLAN_API_USERNAME", null); + String apiPassword = getEnv("XPLAN_API_PASSWORD", null); + + String validatorWebUsername = getEnv("XPLAN_VALIDATOR_WEB_USERNAME", null); + String validatorWebPassword = getEnv("XPLAN_VALIDATOR_WEB_PASSWORD", null); String rabbitHost = getEnv("XPLAN_RABBIT_HOST", "localhost"); int rabbitPort = Integer.parseInt(getEnv("XPLAN_RABBIT_PORT", "5672"), 10); @@ -48,7 +57,8 @@ public record XPlanboxConfig(String dokumenteApiBaseUrl, String managerApiBaseUr RabbitConfig rabbitConfig = new RabbitConfig(rabbitHost, rabbitPort, rabbitUsername, rabbitPassword, publicFanoutQueueName); - return new XPlanboxConfig(dokumenteApiBaseUrl, managerApiBaseUrl, validatorApiBaseUrl, rabbitConfig); + return new XPlanboxConfig(dokumenteApiBaseUrl, managerApiBaseUrl, validatorApiBaseUrl, apiUsername, apiPassword, + validatorWebBaseUrl, validatorWebUsername, validatorWebPassword, rabbitConfig); } private static String getEnv(String key, String defaultValue) { diff --git a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/dokumenteapi/TracingIT.java b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/dokumenteapi/TracingIT.java index 1a8491e0af..7d1403aa70 100644 --- a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/dokumenteapi/TracingIT.java +++ b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/dokumenteapi/TracingIT.java @@ -26,6 +26,7 @@ import de.latlon.xplanbox.tests.FeignUtils; import de.latlon.xplanbox.tests.XPlanboxConfig; import de.latlon.xplanbox.tests.dokumenteapi.DokumenteApi.TraceInfo; import feign.Feign; +import feign.auth.BasicAuthRequestInterceptor; import feign.jackson.JacksonDecoder; import org.junit.jupiter.api.Test; @@ -36,11 +37,15 @@ import org.junit.jupiter.api.Test; class TracingIT { @Test - void validateTraceIdAvalaibleInLog4jThreadContext() throws Exception { - DokumenteApi api = Feign.builder() // + void validateTraceIdAvailableInLog4jThreadContext() throws Exception { + XPlanboxConfig testConfig = XPlanboxConfig.getTestConfig(); + BasicAuthRequestInterceptor interceptor = testConfig.apiUsername() != null + ? new BasicAuthRequestInterceptor(testConfig.apiUsername(), testConfig.apiPassword()) : null; + DokumenteApi api = Feign.builder() .client(FeignUtils.unsecuredClient()) - .decoder(new JacksonDecoder()) // - .target(DokumenteApi.class, XPlanboxConfig.getTestConfig().dokumenteApiBaseUrl()); + .decoder(new JacksonDecoder()) + .requestInterceptor(interceptor) + .target(DokumenteApi.class, testConfig.dokumenteApiBaseUrl()); TraceInfo traceInfo1 = api.traceinfo("00-5ba1163f06d429e9e8dd760c43db3fe8-49a43a5e6e59ea22-00"); assertEquals("5ba1163f06d429e9e8dd760c43db3fe8", traceInfo1.traceId()); diff --git a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/managerapi/TracingIT.java b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/managerapi/TracingIT.java index 4ba12239f7..8fd19150fe 100644 --- a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/managerapi/TracingIT.java +++ b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/managerapi/TracingIT.java @@ -26,6 +26,7 @@ import de.latlon.xplanbox.tests.FeignUtils; import de.latlon.xplanbox.tests.XPlanboxConfig; import de.latlon.xplanbox.tests.managerapi.ManagerApi.TraceInfo; import feign.Feign; +import feign.auth.BasicAuthRequestInterceptor; import feign.jackson.JacksonDecoder; import org.junit.jupiter.api.Test; @@ -36,11 +37,15 @@ import org.junit.jupiter.api.Test; class TracingIT { @Test - void validateTraceIdAvalaibleInLog4jThreadContext() throws Exception { - ManagerApi api = Feign.builder() // + void validateTraceIdAvailableInLog4jThreadContext() throws Exception { + XPlanboxConfig testConfig = XPlanboxConfig.getTestConfig(); + BasicAuthRequestInterceptor interceptor = testConfig.apiUsername() != null + ? new BasicAuthRequestInterceptor(testConfig.apiUsername(), testConfig.apiPassword()) : null; + ManagerApi api = Feign.builder() .client(FeignUtils.unsecuredClient()) - .decoder(new JacksonDecoder()) // - .target(ManagerApi.class, XPlanboxConfig.getTestConfig().managerApiBaseUrl()); + .decoder(new JacksonDecoder()) + .requestInterceptor(interceptor) + .target(ManagerApi.class, testConfig.managerApiBaseUrl()); TraceInfo traceInfo1 = api.traceinfo("00-5ba1163f06d429e9e8dd760c43db3fe8-49a43a5e6e59ea22-00"); assertEquals("5ba1163f06d429e9e8dd760c43db3fe8", traceInfo1.traceId()); diff --git a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/selenium/validatorweb/XPlanValidatorWebIT.java b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/selenium/validatorweb/XPlanValidatorWebIT.java index 6bbdeabfe5..97f2557bdb 100644 --- a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/selenium/validatorweb/XPlanValidatorWebIT.java +++ b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/selenium/validatorweb/XPlanValidatorWebIT.java @@ -20,6 +20,17 @@ */ package de.latlon.xplanbox.tests.selenium.validatorweb; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; + +import de.latlon.xplanbox.tests.XPlanboxConfig; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.CleanupMode; @@ -30,18 +41,6 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; -import java.io.IOException; -import java.nio.channels.FileChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashMap; -import java.util.Map; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - class XPlanValidatorWebIT { private static final String BPLAN_VALID = "BPlan001_5-4"; @@ -56,9 +55,10 @@ class XPlanValidatorWebIT { @BeforeAll static void readSystemProperties() { - String url = System.getProperty("baseUrlValidatorWeb", "https://xplanbox.lat-lon.de/xplan-validator-web"); - String username = System.getProperty("username", null); - String password = System.getProperty("password", null); + XPlanboxConfig testConfig = XPlanboxConfig.getTestConfig(); + String url = testConfig.validatorWebBaseUrl(); + String username = testConfig.validatorWebUsername(); + String password = testConfig.validatorWebPassword(); connectUrl = createConnectUrl(url, username, password); } diff --git a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/validatorapi/TracingIT.java b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/validatorapi/TracingIT.java index 354ee63348..ba6023684c 100644 --- a/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/validatorapi/TracingIT.java +++ b/xplan-tests/xplan-tests-selenium/src/test/java/de/latlon/xplanbox/tests/validatorapi/TracingIT.java @@ -26,6 +26,7 @@ import de.latlon.xplanbox.tests.FeignUtils; import de.latlon.xplanbox.tests.XPlanboxConfig; import de.latlon.xplanbox.tests.validatorapi.ValidatorApi.TraceInfo; import feign.Feign; +import feign.auth.BasicAuthRequestInterceptor; import feign.jackson.JacksonDecoder; import org.junit.jupiter.api.Test; @@ -36,11 +37,15 @@ import org.junit.jupiter.api.Test; class TracingIT { @Test - void validateTraceIdAvalaibleInLog4jThreadContext() throws Exception { - ValidatorApi validatorApi = Feign.builder() // + void validateTraceIdAvailableInLog4jThreadContext() throws Exception { + XPlanboxConfig testConfig = XPlanboxConfig.getTestConfig(); + BasicAuthRequestInterceptor interceptor = testConfig.apiUsername() != null + ? new BasicAuthRequestInterceptor(testConfig.apiUsername(), testConfig.apiPassword()) : null; + ValidatorApi validatorApi = Feign.builder() .client(FeignUtils.unsecuredClient()) - .decoder(new JacksonDecoder()) // - .target(ValidatorApi.class, XPlanboxConfig.getTestConfig().validatorApiBaseUrl()); + .decoder(new JacksonDecoder()) + .requestInterceptor(interceptor) + .target(ValidatorApi.class, testConfig.validatorApiBaseUrl()); TraceInfo traceInfo1 = validatorApi.traceinfo("00-5ba1163f06d429e9e8dd760c43db3fe8-49a43a5e6e59ea22-00"); assertEquals("5ba1163f06d429e9e8dd760c43db3fe8", traceInfo1.traceId()); diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml index d7cf043caf..4e8bd742b6 100644 --- a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml +++ b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml @@ -1892,7 +1892,7 @@ Search for plan by name</con:description> </con:method> </con:resource> </con:interface> - <con:testSuite id="ae0d5def-8690-4dc0-ad4a-ca5fa4c2df24" name="XPlanManagerAPI TestSuite"> + <con:testSuite id="ae0d5def-8690-4dc0-ad4a-ca5fa4c2df24" name="XPlanManagerAPI v1 TestSuite"> <con:description>TestSuite generated for REST Service [XPlanManagerAPI]</con:description> <con:settings/> <con:runType>SEQUENTIAL</con:runType> @@ -2060,10 +2060,10 @@ assert json.version != null</scriptText> <con:testCase id="590e4313-3d64-4a15-ba7b-622018c5b711" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:description>TestCase generated for REST Resource [/plan] located at [/plan]</con:description> <con:settings/> - <con:testStep type="restrequest" name="POST BP 4.0 sF,sG,sS importPlanInvalidLaufrichtung" id="7e56ccf1-03dd-457c-8db3-39a2793a5837"> + <con:testStep type="restrequest" name="POST BP 4.0 sF,sG,sS importPlanInvalidLaufrichtungExpectError400" id="7e56ccf1-03dd-457c-8db3-39a2793a5837"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 4.0 sF,sG,sS importPlanInvalidLaufrichtung" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 4.0 sF,sG,sS importPlanInvalidLaufrichtungExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2075,7 +2075,7 @@ assert json.version != null</scriptText> <codes>400</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="dae44771-07af-42ae-b07d-9693bf7a9afd" name="JsonPath Match"> + <con:assertion type="JsonPath Match" id="dae44771-07af-42ae-b07d-9693bf7a9afd" name="geometrisch.valid"> <con:configuration> <path>$.validationResult.geometrisch.valid</path> <content>false</content> @@ -2162,6 +2162,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="f7a5f271-b979-4684-931a-40389f927886" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="f7a5f271-b979-4684-931a-40389f927886" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="f7a5f271-b979-4684-931a-40389f927886" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="f7a5f271-b979-4684-931a-40389f927886" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>407</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2199,10 +2235,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 4.1 sF,sS,pf importPlanInvalidProfil" id="7af25837-133e-4e6b-a373-277b1d9cda31"> + <con:testStep type="restrequest" name="POST BP 4.1 sF,sS,pf importPlanInvalidProfilExpectError400" id="7af25837-133e-4e6b-a373-277b1d9cda31"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 4.1 sF,sS,pf importPlanInvalidProfil" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 4.1 sF,sS,pf importPlanInvalidProfilExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2298,6 +2334,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="a0ae823f-c57a-42e3-917d-2931850d63d8" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a0ae823f-c57a-42e3-917d-2931850d63d8" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a0ae823f-c57a-42e3-917d-2931850d63d8" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a0ae823f-c57a-42e3-917d-2931850d63d8" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>Bezirk Eimsbüttel Ortsteil 320</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2376,6 +2448,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="c19e5739-21f1-4411-95c7-7292ce5dcb66" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c19e5739-21f1-4411-95c7-7292ce5dcb66" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c19e5739-21f1-4411-95c7-7292ce5dcb66" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c19e5739-21f1-4411-95c7-7292ce5dcb66" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>412</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2413,10 +2521,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 4.1 XX importInvalidPlan" id="e889d8ec-d819-4e8b-8220-2f4963722d8e"> + <con:testStep type="restrequest" name="POST BP 4.1 XX importInvalidPlanExpectError400" id="e889d8ec-d819-4e8b-8220-2f4963722d8e"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 4.1 XX importInvalidPlan" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 4.1 XX importInvalidPlanExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2511,6 +2619,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="d7b0bbdd-d59c-4779-9da7-614445a2ccfb" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d7b0bbdd-d59c-4779-9da7-614445a2ccfb" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d7b0bbdd-d59c-4779-9da7-614445a2ccfb" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d7b0bbdd-d59c-4779-9da7-614445a2ccfb" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>407</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2549,10 +2693,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.0 XX importInvalidPlanWithEntity" id="73ba9f3f-eb85-413a-9bef-f617d876ce4d"> + <con:testStep type="restrequest" name="POST BP 5.0 XX importInvalidPlanWithEntityExpectError422" id="73ba9f3f-eb85-413a-9bef-f617d876ce4d"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.0 XX importInvalidPlanWithEntity" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.0 XX importInvalidPlanWithEntityExpectError422" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2639,6 +2783,33 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="ee29354f-a1bb-47f6-b398-14ae4cd2c1ec" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>1234567</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ee29354f-a1bb-47f6-b398-14ae4cd2c1ec" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Demo-Gemeinde</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ee29354f-a1bb-47f6-b398-14ae4cd2c1ec" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Demo-Gemeinde</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2673,10 +2844,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.1 sF,sS importPlanInvalidText/XML" id="ccff0c36-e6c2-4cb0-af59-dbd7de7c063f"> + <con:testStep type="restrequest" name="POST BP 5.1 sF,sS importPlanInvalidText/XMLExpectError422" id="ccff0c36-e6c2-4cb0-af59-dbd7de7c063f"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.1 sF,sS importPlanInvalidText/XML" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.1 sF,sS importPlanInvalidText/XMLExpectError422" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2725,10 +2896,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.2 sF importInvalidPlanMultiplePlaene" id="8eb7ba26-c34f-4e1f-8dd9-47a94c581d16"> + <con:testStep type="restrequest" name="POST BP 5.2 sF importInvalidPlanMultiplePlaeneExpectError400" id="8eb7ba26-c34f-4e1f-8dd9-47a94c581d16"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.2 sF importInvalidPlanMultiplePlaene" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.2 sF importInvalidPlanMultiplePlaeneExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2821,6 +2992,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="0301ac4a-308c-40f0-91ba-2e4df8e56661" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="0301ac4a-308c-40f0-91ba-2e4df8e56661" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="0301ac4a-308c-40f0-91ba-2e4df8e56661" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="0301ac4a-308c-40f0-91ba-2e4df8e56661" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>216</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2899,6 +3106,33 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="2c75f917-752e-4995-8ceb-11fdab6d75c4" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="2c75f917-752e-4995-8ceb-11fdab6d75c4" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="2c75f917-752e-4995-8ceb-11fdab6d75c4" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2936,10 +3170,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.2 sF,sL,sS importPlanInvalidLaufrichtung" id="97cec68b-daba-47f3-9603-d5c9d6dca21b"> + <con:testStep type="restrequest" name="POST BP 5.2 sF,sL,sS importPlanInvalidLaufrichtungExpectError400" id="97cec68b-daba-47f3-9603-d5c9d6dca21b"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.2 sF,sL,sS importPlanInvalidLaufrichtung" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.2 sF,sL,sS importPlanInvalidLaufrichtungExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -2951,7 +3185,7 @@ assert actualHeader != null</scriptText> <codes>400</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="1769e33e-7fa7-465b-ad5d-cb361c180ef4" name="JsonPath Match"> + <con:assertion type="JsonPath Match" id="1769e33e-7fa7-465b-ad5d-cb361c180ef4" name="geometrisch.valid"> <con:configuration> <path>$.validationResult.geometrisch.valid</path> <content>false</content> @@ -3037,6 +3271,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="d0f3acab-de34-4af2-a54f-79ae69253e2f" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d0f3acab-de34-4af2-a54f-79ae69253e2f" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d0f3acab-de34-4af2-a54f-79ae69253e2f" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d0f3acab-de34-4af2-a54f-79ae69253e2f" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>526</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3074,10 +3344,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanMissingReferenceExpectError" id="40cd30dd-3a50-486d-bbc9-82fab1da0961"> + <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanMissingReferenceExpectError400" id="40cd30dd-3a50-486d-bbc9-82fab1da0961"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.2 XX importPlanMissingReferenceExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.2 XX importPlanMissingReferenceExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -3123,10 +3393,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanAsGmlMissingReferenceExpectError" id="0ba59ea0-125e-4482-a710-dbf086819ebd"> + <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanAsGmlMissingReferenceExpectError400" id="0ba59ea0-125e-4482-a710-dbf086819ebd"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.2 XX importPlanAsGmlMissingReferenceExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="text/xml" postQueryString="false"> + <con:restRequest name="POST BP 5.2 XX importPlanAsGmlMissingReferenceExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="text/xml" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -3172,10 +3442,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanHttpReferenceExpectError" id="526320b1-6c43-4e9e-89d7-e6398ead0ce8"> + <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanHttpReferenceExpectError500" id="526320b1-6c43-4e9e-89d7-e6398ead0ce8"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.2 XX importPlanHttpReferenceExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.2 XX importPlanHttpReferenceExpectError500" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -3221,10 +3491,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanAsGmlHttpReferenceExpectError" id="dd552137-b2f5-4cb3-837c-70470ad5e684"> + <con:testStep type="restrequest" name="POST BP 5.2 XX importPlanAsGmlHttpReferenceExpectError500" id="dd552137-b2f5-4cb3-837c-70470ad5e684"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.2 XX importPlanAsGmlHttpReferenceExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="text/xml" postQueryString="false"> + <con:restRequest name="POST BP 5.2 XX importPlanAsGmlHttpReferenceExpectError500" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="text/xml" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -3328,6 +3598,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="3e1e962c-72e2-43cd-ad90-85dae14176cf" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="3e1e962c-72e2-43cd-ad90-85dae14176cf" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="3e1e962c-72e2-43cd-ad90-85dae14176cf" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="3e1e962c-72e2-43cd-ad90-85dae14176cf" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>515</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3402,6 +3708,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="d9cf761d-7a98-4eb0-af8c-9da8d1ad2f20" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d9cf761d-7a98-4eb0-af8c-9da8d1ad2f20" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d9cf761d-7a98-4eb0-af8c-9da8d1ad2f20" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d9cf761d-7a98-4eb0-af8c-9da8d1ad2f20" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>221</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3436,10 +3778,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 5.3 XX importPlanInvalidXSSExpectError" id="a24792d3-2835-4dfb-95b1-62516766f454"> + <con:testStep type="restrequest" name="POST BP 5.3 XX importPlanInvalidXSSExpectError400" id="a24792d3-2835-4dfb-95b1-62516766f454"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 5.3 XX importPlanInvalidXSSExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 5.3 XX importPlanInvalidXSSExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -3526,22 +3868,58 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain xsi:nil="true"/> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:attachment> - <con:name>BP_5.3_WithText.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>BP_5.3_WithText.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_5.3_WithText.zip</con:url> - <con:id>d27bdabd-dbce-426b-8614-3ff709f09921</con:id> - </con:attachment> + <con:assertion type="JsonPath Match" id="08877d57-57d7-4238-81de-764256e125c6" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="08877d57-57d7-4238-81de-764256e125c6" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="08877d57-57d7-4238-81de-764256e125c6" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="08877d57-57d7-4238-81de-764256e125c6" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>221</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain xsi:nil="true"/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_5.3_WithText.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_5.3_WithText.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_5.3_WithText.zip</con:url> + <con:id>d27bdabd-dbce-426b-8614-3ff709f09921</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters> @@ -3600,6 +3978,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="7547c393-b339-4a8f-9d82-dc210206aa61" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="7547c393-b339-4a8f-9d82-dc210206aa61" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="7547c393-b339-4a8f-9d82-dc210206aa61" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="7547c393-b339-4a8f-9d82-dc210206aa61" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>136</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3683,6 +4097,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="145aaadb-d5b3-4139-9f49-b97d0fa7092f" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="145aaadb-d5b3-4139-9f49-b97d0fa7092f" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="145aaadb-d5b3-4139-9f49-b97d0fa7092f" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="145aaadb-d5b3-4139-9f49-b97d0fa7092f" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>104</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3761,6 +4211,33 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="ee996585-1820-4b91-bdf0-0773a485a963" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ee996585-1820-4b91-bdf0-0773a485a963" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ee996585-1820-4b91-bdf0-0773a485a963" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3837,6 +4314,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="bcc7f2d7-80df-4e11-a660-b139dd290a59" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="bcc7f2d7-80df-4e11-a660-b139dd290a59" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="bcc7f2d7-80df-4e11-a660-b139dd290a59" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="bcc7f2d7-80df-4e11-a660-b139dd290a59" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>221</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3911,6 +4424,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="5c592bb8-bdac-4960-9ede-861d15d41dd8" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="5c592bb8-bdac-4960-9ede-861d15d41dd8" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="5c592bb8-bdac-4960-9ede-861d15d41dd8" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="5c592bb8-bdac-4960-9ede-861d15d41dd8" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>412</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -3985,6 +4534,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="28b90c77-97cb-4f68-bec6-50d39a366126" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="28b90c77-97cb-4f68-bec6-50d39a366126" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="28b90c77-97cb-4f68-bec6-50d39a366126" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="28b90c77-97cb-4f68-bec6-50d39a366126" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>412</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4059,6 +4644,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="23da3bda-13a8-4a48-8c83-6516e9bba0f9" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="23da3bda-13a8-4a48-8c83-6516e9bba0f9" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="23da3bda-13a8-4a48-8c83-6516e9bba0f9" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="23da3bda-13a8-4a48-8c83-6516e9bba0f9" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>412</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4133,6 +4754,33 @@ assert actualHeader != null</scriptText> assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="5d191c4e-ff72-4eb3-beab-985bd70114c6" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="5d191c4e-ff72-4eb3-beab-985bd70114c6" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="5d191c4e-ff72-4eb3-beab-985bd70114c6" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4168,10 +4816,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 6.0.2 XX importPlanExpectValidationErrorNoBereich" id="70f7ce01-5dff-4f14-9854-4e2a5a4a959e"> + <con:testStep type="restrequest" name="POST BP 6.0.2 XX importPlanNoBereichExpectError400" id="70f7ce01-5dff-4f14-9854-4e2a5a4a959e"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 6.0.2 XX importPlanExpectValidationErrorNoBereich" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 6.0.2 XX importPlanNoBereichExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -4192,7 +4840,7 @@ assert actualHeader != null</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="b4c91438-41a6-4d2b-8f1e-9fa2dc8b8c7d" name="geometrisch valid"> + <con:assertion type="JsonPath Match" id="b4c91438-41a6-4d2b-8f1e-9fa2dc8b8c7d" name="geometrisch.valid"> <con:configuration> <path>$.validationResult.geometrisch.valid</path> <content>false</content> @@ -4263,10 +4911,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 6.0 XX importPlanUnsupportedContentTypeExpectError" id="e2984b7f-a42e-4bc0-9057-ced0126c448d"> + <con:testStep type="restrequest" name="POST BP 6.0 XX importPlanUnsupportedContentTypeExpectError415" id="e2984b7f-a42e-4bc0-9057-ced0126c448d"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 6.0 XX importPlanUnsupportedContentTypeExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST BP 6.0 XX importPlanUnsupportedContentTypeExpectError415" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -4313,10 +4961,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST BP 6.0 XX importPlanWithSyntaxErrorExpectError" id="4987179e-23d8-42fc-a3b2-17aa7fedec43"> + <con:testStep type="restrequest" name="POST BP 6.0 XX importPlanWithSyntaxErrorExpectError400" id="4987179e-23d8-42fc-a3b2-17aa7fedec43"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 6.0 XX importPlanWithSyntaxErrorExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/gml+xml" postQueryString="false"> + <con:restRequest name="POST BP 6.0 XX importPlanWithSyntaxErrorExpectError400" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/gml+xml" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -4420,6 +5068,33 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="86c90097-0512-487c-8bb5-a30b45c073bb" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="86c90097-0512-487c-8bb5-a30b45c073bb" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="86c90097-0512-487c-8bb5-a30b45c073bb" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4498,14 +5173,41 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain xsi:nil="true"/> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> + <con:assertion type="JsonPath Match" id="a8bae61a-9a5b-4d70-9834-369bd38607e9" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a8bae61a-9a5b-4d70-9834-369bd38607e9" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a8bae61a-9a5b-4d70-9834-369bd38607e9" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain xsi:nil="true"/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> <con:name>BP_6.0.zip</con:name> @@ -4573,6 +5275,33 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="b9f5f142-acc0-421e-851f-77e2efed5ea1" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="b9f5f142-acc0-421e-851f-77e2efed5ea1" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Test-Gemeinde</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="b9f5f142-acc0-421e-851f-77e2efed5ea1" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Test-Gemeinde</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4668,6 +5397,24 @@ assert actualHeader != null</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="e43d5483-9ef3-4681-a492-bbc9fa71b18e" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>null</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="e43d5483-9ef3-4681-a492-bbc9fa71b18e" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>null</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4753,6 +5500,42 @@ def actualHeader = headers['Location'] assert actualHeader != null</scriptText> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="07681265-f3c7-4c89-8c92-e8c08914d8fc" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="07681265-f3c7-4c89-8c92-e8c08914d8fc" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="07681265-f3c7-4c89-8c92-e8c08914d8fc" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="07681265-f3c7-4c89-8c92-e8c08914d8fc" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>401,402,403,404</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4791,10 +5574,10 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="POST XX X.X XX importFileUnsupportedContentTypeExpectError" id="c8713233-ef5a-45e8-b0cf-b6f032422a2a"> + <con:testStep type="restrequest" name="POST XX X.X XX importFileUnsupportedContentTypeExpectError415" id="c8713233-ef5a-45e8-b0cf-b6f032422a2a"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST XX X.X XX importFileUnsupportedContentTypeExpectError" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:restRequest name="POST XX X.X XX importFileUnsupportedContentTypeExpectError415" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> @@ -5229,6 +6012,42 @@ assert actualHeader != null</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="0a3c4269-f153-4f4a-a0bf-e11e4a9ae7b1" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="0a3c4269-f153-4f4a-a0bf-e11e4a9ae7b1" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="0a3c4269-f153-4f4a-a0bf-e11e4a9ae7b1" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="0a3c4269-f153-4f4a-a0bf-e11e4a9ae7b1" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>Bezirk Eimsbüttel Ortsteil 320</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -5339,6 +6158,42 @@ assert actualHeader != null</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>Bezirk Eimsbüttel Ortsteil 320</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -5389,6 +6244,42 @@ assert actualHeader != null</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4e49f759-7fd9-4f6c-951e-09cd193baaf4" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>Bezirk Eimsbüttel Ortsteil 320</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -5421,7 +6312,7 @@ assert actualHeader != null</scriptText> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="11dca079-8e56-45f3-8591-4990d0f59978" name="JsonPath Match"> + <con:assertion type="JsonPath Match" id="11dca079-8e56-45f3-8591-4990d0f59978" name="id"> <con:configuration> <path>$.[0]id</path> <content>${#TestSuite#currentPlanIdMultiplePlansHafenCity14}</content> @@ -5430,6 +6321,42 @@ assert actualHeader != null</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="11dca079-8e56-45f3-8591-4990d0f59978" name="ags"> + <con:configuration> + <path>$[0].xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="11dca079-8e56-45f3-8591-4990d0f59978" name="gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="11dca079-8e56-45f3-8591-4990d0f59978" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="11dca079-8e56-45f3-8591-4990d0f59978" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ortsteilName</path> + <content>104</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -5447,7 +6374,7 @@ assert actualHeader != null</scriptText> </con:restRequest> </con:config> </con:testStep> - <con:testStep type="restrequest" name="GET BP 5.4 pI,pN invalidPlanNameExpectError" id="60bb9823-bfc2-4bae-bdce-a8fda7507667"> + <con:testStep type="restrequest" name="GET BP 5.4 pI,pN invalidPlanNameExpectError400" id="60bb9823-bfc2-4bae-bdce-a8fda7507667"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plans" methodName="invalidPlanIdAndPlanName" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:restRequest name="GET BP 5.4 pI,pN invalidPlanNameExpectError" id="ba7c71b2-c264-4a61-b0b0-1146f2594e7e" mediaType="application/json"> @@ -16528,6 +17455,42 @@ if (documentUrl != "null"){ <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>Bezirk Eimsbüttel Ortsteil 320</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -16577,6 +17540,42 @@ if (documentUrl != "null"){ <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="2fce8c64-83ba-49d0-b23f-01bc9b56551c" name="ags"> + <con:configuration> + <path>/planInfo/xplanModelData/ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="2fce8c64-83ba-49d0-b23f-01bc9b56551c" name="gemeindeName"> + <con:configuration> + <path>/planInfo/xplanModelData/gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="2fce8c64-83ba-49d0-b23f-01bc9b56551c" name="gemeinden/gemeindeName"> + <con:configuration> + <path>/planInfo/xplanModelData/gemeinden/gemeindeName</path> + <content>Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="2fce8c64-83ba-49d0-b23f-01bc9b56551c" name="gemeinden/ortsteilName"> + <con:configuration> + <path>/planInfo/xplanModelData/gemeinden/ortsteilName</path> + <content>Bezirk Eimsbüttel Ortsteil 320</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -16705,23 +17704,59 @@ assert expectedHeader == actualHeader</scriptText> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain xsi:nil="true"/> - <con:selectedAuthProfile>No Authorization</con:selectedAuthProfile> - <con:preemptive>true</con:preemptive> - <con:authType>No Authorization</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters> - <entry key="planId" value="${#TestSuite#currentPlanIdSOPlan}" xmlns="http://eviware.com/soapui/config"/> - </con:parameters> - </con:restRequest> - </con:config> - </con:testStep> - <con:testStep type="restrequest" name="DEL BP 4.0 pI deletePlan" id="6fa4759c-4b84-434e-88c7-7a68b7660808"> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="ags"> + <con:configuration> + <path>$.xplanModelData.ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea4f3f24-1386-4aaf-b19a-089aacf007b1" name="gemeinden.ortsteilName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ortsteilName</path> + <content>401,402,403,404</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain xsi:nil="true"/> + <con:selectedAuthProfile>No Authorization</con:selectedAuthProfile> + <con:preemptive>true</con:preemptive> + <con:authType>No Authorization</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <entry key="planId" value="${#TestSuite#currentPlanIdSOPlan}" xmlns="http://eviware.com/soapui/config"/> + </con:parameters> + </con:restRequest> + </con:config> + </con:testStep> + <con:testStep type="restrequest" name="DEL BP 4.0 pI deletePlan" id="6fa4759c-4b84-434e-88c7-7a68b7660808"> <con:settings/> <con:config service="XPlanManagerAPI" resourcePath="/plan/{planId}" methodName="delete" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:restRequest name="DEL BP 4.0 pI deletePlan" id="f9bcc4d9-872e-472c-96b8-27484a6e67a3" mediaType="application/json" postQueryString="false"> @@ -18499,299 +19534,119 @@ assert expectedHeader == actualHeader</scriptText> </con:property> </con:properties> </con:testSuite> - <con:testSuite id="0b9ba577-517d-4770-ae8b-842f1a09f403" name="Profiles TestSuite"> + <con:testSuite id="47ddad84-11f6-4224-b37a-ddc4777fd896" name="Workflow v1 TestSuite"> + <con:description>Worflow-TestSuite für die API version 1</con:description> <con:settings/> <con:runType>SEQUENTIAL</con:runType> - <con:testCase id="d85d5258-e301-44d8-ab37-b8bfae32ec8d" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/info TestCase" searchProperties="true"> - <con:settings/> - <con:testStep type="restrequest" name="GET XX X.X XX showConfig" id="e6a87004-ca2f-4aa8-b721-f61ed8060d6c"> - <con:settings/> - <con:config service="XPlanManagerAPI" resourcePath="/info" methodName="showConfig" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="GET XX X.X XX showConfig" id="e9ab8dcf-b755-40af-baf7-aa17a2ca4cdc" mediaType="application/json"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> - <con:request/> - <con:originalUri>https://xplanbox.lat-lon.de/xmanager/api/v1/info</con:originalUri> - <con:assertion type="Valid HTTP Status Codes" id="8738532e-3368-48bb-a866-0b35c62f3643" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match id"> - <con:configuration> - <path>$.profiles[0].id</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match name"> - <con:configuration> - <path>$.profiles[0].name</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match description"> - <con:configuration> - <path>$.profiles[0].description</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match version"> - <con:configuration> - <path>$.profiles[0].version</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match source"> - <con:configuration> - <path>$.profiles[0].source</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain xsi:nil="true"/> - <con:authType>No Authorization</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:restRequest> - </con:config> - </con:testStep> - <con:testStep type="transfer" name="Property Transfer" id="35c10770-7e76-448c-873a-6e998e802208"> - <con:settings/> - <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>profilesId</con:name> - <con:sourceType>Response</con:sourceType> - <con:sourceStep>GET XX X.X XX showConfig</con:sourceStep> - <con:sourcePath>$.profiles[0].id</con:sourcePath> - <con:targetType>profileId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:type>JSONPATH</con:type> - <con:targetTransferType>JSONPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> - </con:config> - </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="08dc4218-1cab-418d-a881-a9d3d90eec06" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan TestCase" searchProperties="true"> + <con:testCase id="74889924-16c2-4caa-81d6-855d5dec2b57" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat)</con:description> <con:settings/> - <con:testStep type="restrequest" name="POST BP 4.1 sF,sS,pf importPlanWithProfil" id="70e48894-fd11-4425-b586-146f2f1fd0b9"> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" id="aefda560-3bdf-43ed-b9c0-9f4636f06785"> <con:settings/> - <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="POST BP 4.1 sF,sS,pf importPlanWithProfil" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> - <con:request/> - <con:originalUri>http://localhost/xplan-manager-api/xmanager/api/v1/plan</con:originalUri> - <con:assertion type="Valid HTTP Status Codes" id="175f3cab-acc4-43f8-857f-68775292193b" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>201,400</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain xsi:nil="true"/> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:attachment> - <con:name>BP_4.1.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>BP_4.1.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_4.1.zip</con:url> - <con:id>f164f967-c936-4019-aa8b-4fb3bda60c80</con:id> - </con:attachment> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters> - <con:entry key="skipFlaechenschluss" value="true"/> - <con:entry key="profiles" value="${#TestSuite#profileId}"/> - <con:entry key="skipSemantisch" value="true"/> - <con:entry key="skipLaufrichtung" value=""/> - </con:parameters> - <con:parameterOrder> - <con:entry>X-Filename</con:entry> - <con:entry>skipSemantisch</con:entry> - <con:entry>skipFlaechenschluss</con:entry> - <con:entry>skipGeltungsbereich</con:entry> - <con:entry>internalId</con:entry> - <con:entry>planStatus</con:entry> - <con:entry>skipLaufrichtung</con:entry> - <con:entry>profiles</con:entry> - </con:parameterOrder> - </con:restRequest> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>201</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="transfer" name="Property Transfer" id="b23cc84c-19f3-4ee9-9924-d6a5f72d877f"> + <con:testStep type="transfer" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan Property Transfer" id="db307584-9c4f-4b83-8eb1-4fcc2f684538"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>planIdProfile</con:name> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>planId</con:name> <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 4.1 sF,sS,pf importPlanWithProfil</con:sourceStep> + <con:sourceStep>POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan</con:sourceStep> <con:sourcePath>$.id</con:sourcePath> - <con:targetType>planIdProfile</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> + <con:targetType>planId</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> <con:upgraded>true</con:upgraded> </con:transfers> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="387666a7-3721-4a64-849f-9b8e20c83581" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId} TestCase" searchProperties="true"> - <con:settings/> - <con:testStep type="restrequest" name="DEL BP 4.1 pI deletePlanWithProfil" id="5a05a8ff-fbd1-4621-b965-2905c8431ae7"> - <con:settings/> - <con:config service="XPlanManagerAPI" resourcePath="/plan/{planId}" methodName="delete" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:restRequest name="DEL BP 4.1 pI deletePlanWithProfil" id="d1cd7d2d-f354-4a5a-9fa0-1137ede48dcd" mediaType="application/json" postQueryString="false"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> - <con:request/> - <con:originalUri>http://localhost/xplan-manager-api/xmanager/api/v1/plan/</con:originalUri> - <con:assertion type="Valid HTTP Status Codes" id="859dc093-1e4d-4794-bcc1-58695077093f" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200,404</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain xsi:nil="true"/> - <con:selectedAuthProfile>No Authorization</con:selectedAuthProfile> - <con:preemptive>true</con:preemptive> - <con:authType>No Authorization</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters> - <entry key="planId" value="${#TestSuite#planIdProfile}" xmlns="http://eviware.com/soapui/config"/> - </con:parameters> - </con:restRequest> - </con:config> - </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="aedaa003-bb2b-42b6-958c-57575e10ec85" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Cleanup Properties" searchProperties="true"> - <con:settings/> - <con:testStep type="transfer" name="Property Transfer" id="e40cda18-0926-49de-8cac-07dd1d3f6f89"> - <con:settings/> - <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>profileId</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>profileId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> - <con:name>planIdProfile</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:sourcePath xsi:nil="true"/> - <con:targetType>planIdProfile</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:targetPath xsi:nil="true"/> - <con:type>XPATH</con:type> - <con:targetTransferType>XPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> - </con:config> - </con:testStep> - <con:properties> - <con:property> - <con:name>empty</con:name> - <con:value/> - </con:property> - </con:properties> - </con:testCase> - <con:properties> - <con:property> - <con:name>profileId</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>planIdProfile</con:name> - <con:value/> - </con:property> - </con:properties> - </con:testSuite> - <con:testSuite id="a4f05c8c-eedf-42f6-be20-b18452375de0" name="XPlanManagerAPIv2 TestSuite"> - <con:description>TestSuite für XPlanManagerAPI version 2.</con:description> - <con:settings/> - <con:runType>SEQUENTIAL</con:runType> - <con:testCase id="07ae12f0-ac5e-4cb1-8f1b-1e1eece581b8" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/ TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/"-Pfad.</con:description> - <con:settings/> - <con:testStep type="httprequest" name="GET XX X.X XX openAPI" id="f14c1458-23c0-457b-b6d6-4edf36743743"> + <con:testStep type="httprequest" name="DEL BP 6.0 pI deletePlan" id="89fb2158-874e-4d4c-99ea-78379a7f0317"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="726e80e0-3694-4e52-a9ca-a38258fe7503" name="GET XX X.X XX openAPI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0 pI deletePlan" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestCase#planId}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="b1659bc9-5975-48fe-8c72-3bdf99daca0f" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="2e5a7efa-134b-4a50-b960-dff030686f34" name="openapi"> - <con:configuration> - <path>$.openapi</path> - <content>3.0.1</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="338faceb-131f-43eb-bf38-2bf035ec149f" name="path /"> - <con:configuration> - <path>$.paths./.get.operationId</path> - <content>openApi</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath RegEx Match" id="c7bcd776-0947-4d88-923d-e40eb4bb599c" name="version"> + <con:assertion type="JsonPath Existence Match" id="e3b7ac04-76d4-4ed3-babc-4ab10275695d" name="messageExists"> <con:configuration> - <path>$.info.version</path> + <path>$.message</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>2.*</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -18807,17 +19662,20 @@ assert expectedHeader == actualHeader</scriptText> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET XX X.X XX invalidAcceptHeaderExpectError406" id="3b94ce9c-2426-464d-88fd-c906032c818c"> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithMissingPNGExpectError400" id="cfe0eed5-d8f1-44ee-b4a6-2918697df01b"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="726e80e0-3694-4e52-a9ca-a38258fe7503" name="GET XX X.X XX invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithMissingPNGExpectError400" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="b1659bc9-5975-48fe-8c72-3bdf99daca0f" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -18828,55 +19686,66 @@ assert expectedHeader == actualHeader</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="9a952141-6600-4b2d-bccd-de0ce037bb89" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/info TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/info"-Pfad.</con:description> - <con:settings/> - <con:testStep type="httprequest" name="GET XX X.X XX showConfig" id="11e7c2b5-68da-4905-bd1c-1dcc75ca2195"> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithWrongCRSExpectError400" id="2efa8323-8f8c-48dc-a7bb-d1a1734f8072"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="ada729bc-f24a-41d6-bcf5-4dd34948e273" name="GET XX X.X XX showConfig" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithWrongCRSExpectError400" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/info</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="860eaa41-d4c0-4b28-9e32-132c7e894b18" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="1beb64fd-81c2-46b9-b690-f88938a487fc" name="hasVersion"> - <con:configuration> - <path>$.version</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="GroovyScriptAssertion" id="bf3730ab-4f4d-4167-b404-d09046ef994c" name="versionNotNull"> - <con:configuration> - <scriptText>import groovy.json.JsonSlurper - -json = new JsonSlurper().parseText(messageExchange.response.responseContent) -assert !(json.isEmpty()) - -assert json.version != null</scriptText> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="a525ec99-c1ee-4ed3-a1f4-19760fc2d1c0" name="supportedXPlanGmlVersions"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.supportedXPlanGmlVersions</path> - <content>["XPLAN_40","XPLAN_41","XPLAN_50","XPLAN_51","XPLAN_52","XPLAN_53","XPLAN_54","XPLAN_60"]</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -18887,83 +19756,66 @@ assert json.version != null</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET XX X.X XX invalidAcceptHeaderExpectError406" id="d28565da-26c0-4317-aa52-63895156e99a"> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithNotSupportedFormatExpectError415" id="c0543a59-aaa3-45e5-8d04-a1752cb4af35"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="ada729bc-f24a-41d6-bcf5-4dd34948e273" name="GET XX X.X XX invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/info</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="860eaa41-d4c0-4b28-9e32-132c7e894b18" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>406</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="e68513c7-b782-498e-9a43-fab6619cbbb3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/plan"-Pfad.</con:description> - <con:settings/> - <con:testStep type="httprequest" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan" id="6b5d393f-424c-42fe-a468-ca531d60500d"> - <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithNotSupportedFormatExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> <con:entry key="Accept" value="application/json"/> <con:entry key="X-Filename" value="soapui-test"/> </xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1/plan</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> - <con:configuration> - <path>$.uuid</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> - <con:configuration> - <path>$.statusLink</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> - <con:configuration> - <path>$.statusLink.href</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>415</codes> </con:configuration> </con:assertion> <con:credentials> @@ -18977,8 +19829,8 @@ assert json.version != null</scriptText> <con:attachment> <con:name>FP_6.0.2.zip</con:name> <con:contentType>application/octet-stream</con:contentType> - <con:contentId>FP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip</con:url> <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -19020,100 +19872,118 @@ assert json.version != null</scriptText> </con:parameters> </con:config> </con:testStep> - <con:testStep type="transfer" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan Property Transfer" id="51ebcb92-bc33-47c6-9d74-b252f2f85fb6"> + <con:testStep type="transfer" name="CleanUp Properties" id="d947a05c-850e-49bf-bbaa-3f92778d452a"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>hrefStatus</con:name> - <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan</con:sourceStep> - <con:sourcePath>$.statusLink.href</con:sourcePath> - <con:targetType>hrefStatus</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:type>JSONPATH</con:type> - <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:name>planId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>planId</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> <con:upgraded>true</con:upgraded> </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pf invalidProfile" id="236ab532-d435-41e6-abde-5689be19b3e6"> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>planId</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:properties/> + </con:testSuite> + <con:testSuite id="0b9ba577-517d-4770-ae8b-842f1a09f403" name="Profiles v1 TestSuite"> + <con:settings/> + <con:runType>SEQUENTIAL</con:runType> + <con:testCase id="d85d5258-e301-44d8-ab37-b8bfae32ec8d" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/info TestCase" searchProperties="true"> + <con:settings/> + <con:testStep type="restrequest" name="GET XX X.X XX showConfig" id="e6a87004-ca2f-4aa8-b721-f61ed8060d6c"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 pf invalidProfile" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> - <con:entry key="Accept" value="application/json"/> - <con:entry key="X-Filename" value="soapui-test"/> -</xml-fragment></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> - <con:configuration> - <path>$.uuid</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> - <con:configuration> - <path>$.statusLink</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> - <con:configuration> - <path>$.statusLink.href</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:attachment> - <con:name>FP_6.0.2.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>FP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> - <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> - </con:attachment> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters> - <con:parameter> - <con:name>profiles</con:name> - <con:value>invalid</con:value> - <con:style>QUERY</con:style> - </con:parameter> - </con:parameters> + <con:config service="XPlanManagerAPI" resourcePath="/info" methodName="showConfig" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:restRequest name="GET XX X.X XX showConfig" id="e9ab8dcf-b755-40af-baf7-aa17a2ca4cdc" mediaType="application/json"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> + <con:request/> + <con:originalUri>https://xplanbox.lat-lon.de/xmanager/api/v1/info</con:originalUri> + <con:assertion type="Valid HTTP Status Codes" id="8738532e-3368-48bb-a866-0b35c62f3643" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match id"> + <con:configuration> + <path>$.profiles[0].id</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match name"> + <con:configuration> + <path>$.profiles[0].name</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match description"> + <con:configuration> + <path>$.profiles[0].description</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match version"> + <con:configuration> + <path>$.profiles[0].version</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9705d513-0993-43b9-9759-99e38583dfd5" name="JsonPath Existence Match source"> + <con:configuration> + <path>$.profiles[0].source</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain xsi:nil="true"/> + <con:authType>No Authorization</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:restRequest> </con:config> </con:testStep> - <con:testStep type="transfer" name="POST BP 6.0.2 pf invalidProfile Property Transfer" id="4539114b-8cab-4e41-ab2b-9f1094957446"> + <con:testStep type="transfer" name="Property Transfer" id="35c10770-7e76-448c-873a-6e998e802208"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>hrefStatus</con:name> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>profilesId</con:name> <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 6.0.2 pf invalidProfile</con:sourceStep> - <con:sourcePath>$.statusLink.href</con:sourcePath> - <con:targetType>hrefStatus3</con:targetType> + <con:sourceStep>GET XX X.X XX showConfig</con:sourceStep> + <con:sourcePath>$.profiles[0].id</con:sourcePath> + <con:targetType>profileId</con:targetType> <con:targetStep>#TestSuite#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> @@ -19121,41 +19991,1404 @@ assert json.version != null</scriptText> </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 XX mismatchingContentTypeAndFileType" id="4132883a-577d-4e97-a182-5759d85f25f2"> + <con:properties/> + </con:testCase> + <con:testCase id="08dc4218-1cab-418d-a881-a9d3d90eec06" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan TestCase" searchProperties="true"> + <con:settings/> + <con:testStep type="restrequest" name="POST BP 4.1 sF,sS,pf importPlanWithProfil" id="70e48894-fd11-4425-b586-146f2f1fd0b9"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 XX mismatchingContentTypeAndFileType" postQueryString="false" mediaType="text/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="c1df2d96-38e5-4318-8284-ad41312a8676" name="uuidExists"> - <con:configuration> - <path>$.uuid</path> - <content>true</content> + <con:config service="XPlanManagerAPI" resourcePath="/plan" methodName="import" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:restRequest name="POST BP 4.1 sF,sS,pf importPlanWithProfil" id="bf7971d6-e318-4bdc-b279-2bb920237af7" mediaType="application/octet-stream" postQueryString="false"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/vnd.xplanbox.api+json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> + <con:request/> + <con:originalUri>http://localhost/xplan-manager-api/xmanager/api/v1/plan</con:originalUri> + <con:assertion type="Valid HTTP Status Codes" id="175f3cab-acc4-43f8-857f-68775292193b" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>201,400</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain xsi:nil="true"/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_4.1.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_4.1.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_4.1.zip</con:url> + <con:id>f164f967-c936-4019-aa8b-4fb3bda60c80</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:entry key="skipFlaechenschluss" value="true"/> + <con:entry key="profiles" value="${#TestSuite#profileId}"/> + <con:entry key="skipSemantisch" value="true"/> + <con:entry key="skipLaufrichtung" value=""/> + </con:parameters> + <con:parameterOrder> + <con:entry>X-Filename</con:entry> + <con:entry>skipSemantisch</con:entry> + <con:entry>skipFlaechenschluss</con:entry> + <con:entry>skipGeltungsbereich</con:entry> + <con:entry>internalId</con:entry> + <con:entry>planStatus</con:entry> + <con:entry>skipLaufrichtung</con:entry> + <con:entry>profiles</con:entry> + </con:parameterOrder> + </con:restRequest> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="Property Transfer" id="b23cc84c-19f3-4ee9-9924-d6a5f72d877f"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>planIdProfile</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 4.1 sF,sS,pf importPlanWithProfil</con:sourceStep> + <con:sourcePath>$.id</con:sourcePath> + <con:targetType>planIdProfile</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="387666a7-3721-4a64-849f-9b8e20c83581" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId} TestCase" searchProperties="true"> + <con:settings/> + <con:testStep type="restrequest" name="DEL BP 4.1 pI deletePlanWithProfil" id="5a05a8ff-fbd1-4621-b965-2905c8431ae7"> + <con:settings/> + <con:config service="XPlanManagerAPI" resourcePath="/plan/{planId}" methodName="delete" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:restRequest name="DEL BP 4.1 pI deletePlanWithProfil" id="d1cd7d2d-f354-4a5a-9fa0-1137ede48dcd" mediaType="application/json" postQueryString="false"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> + <con:request/> + <con:originalUri>http://localhost/xplan-manager-api/xmanager/api/v1/plan/</con:originalUri> + <con:assertion type="Valid HTTP Status Codes" id="859dc093-1e4d-4794-bcc1-58695077093f" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200,404</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain xsi:nil="true"/> + <con:selectedAuthProfile>No Authorization</con:selectedAuthProfile> + <con:preemptive>true</con:preemptive> + <con:authType>No Authorization</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <entry key="planId" value="${#TestSuite#planIdProfile}" xmlns="http://eviware.com/soapui/config"/> + </con:parameters> + </con:restRequest> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="aedaa003-bb2b-42b6-958c-57575e10ec85" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Cleanup Properties" searchProperties="true"> + <con:settings/> + <con:testStep type="transfer" name="Property Transfer" id="e40cda18-0926-49de-8cac-07dd1d3f6f89"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>profileId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>profileId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="false" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> + <con:name>planIdProfile</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:sourcePath xsi:nil="true"/> + <con:targetType>planIdProfile</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:targetPath xsi:nil="true"/> + <con:type>XPATH</con:type> + <con:targetTransferType>XPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:properties> + <con:property> + <con:name>profileId</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>planIdProfile</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testSuite> + <con:testSuite id="a4f05c8c-eedf-42f6-be20-b18452375de0" name="XPlanManagerAPI v2 TestSuite"> + <con:description>TestSuite für XPlanManagerAPI version 2</con:description> + <con:settings/> + <con:runType>SEQUENTIAL</con:runType> + <con:testCase id="07ae12f0-ac5e-4cb1-8f1b-1e1eece581b8" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/ TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="GET XX X.X XX openAPI" id="f14c1458-23c0-457b-b6d6-4edf36743743"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="726e80e0-3694-4e52-a9ca-a38258fe7503" name="GET XX X.X XX openAPI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="b1659bc9-5975-48fe-8c72-3bdf99daca0f" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="2e5a7efa-134b-4a50-b960-dff030686f34" name="openapi"> + <con:configuration> + <path>$.openapi</path> + <content>3.0.1</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="338faceb-131f-43eb-bf38-2bf035ec149f" name="path /"> + <con:configuration> + <path>$.paths./.get.operationId</path> + <content>openApi</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="c7bcd776-0947-4d88-923d-e40eb4bb599c" name="version"> + <con:configuration> + <path>$.info.version</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>2.*</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="baefa2ef-b925-44ef-b1bb-3e43e1a95a34" name="PlanInfo"> + <con:configuration> + <path>$.components.schemas.PlanInfo</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="baefa2ef-b925-44ef-b1bb-3e43e1a95a34" name="ValidationReport"> + <con:configuration> + <path>$.components.schemas.ValidationReport</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET XX X.X XX invalidAcceptHeaderExpectError406" id="3b94ce9c-2426-464d-88fd-c906032c818c"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="726e80e0-3694-4e52-a9ca-a38258fe7503" name="GET XX X.X XX invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="b1659bc9-5975-48fe-8c72-3bdf99daca0f" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>406</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="9a952141-6600-4b2d-bccd-de0ce037bb89" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/info TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/info"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="GET XX X.X XX showConfig" id="11e7c2b5-68da-4905-bd1c-1dcc75ca2195"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="ada729bc-f24a-41d6-bcf5-4dd34948e273" name="GET XX X.X XX showConfig" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/info</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="860eaa41-d4c0-4b28-9e32-132c7e894b18" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="1beb64fd-81c2-46b9-b690-f88938a487fc" name="hasVersion"> + <con:configuration> + <path>$.version</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="GroovyScriptAssertion" id="bf3730ab-4f4d-4167-b404-d09046ef994c" name="versionNotNull"> + <con:configuration> + <scriptText>import groovy.json.JsonSlurper + +json = new JsonSlurper().parseText(messageExchange.response.responseContent) +assert !(json.isEmpty()) + +assert json.version != null</scriptText> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a525ec99-c1ee-4ed3-a1f4-19760fc2d1c0" name="supportedXPlanGmlVersions"> + <con:configuration> + <path>$.supportedXPlanGmlVersions</path> + <content>["XPLAN_40","XPLAN_41","XPLAN_50","XPLAN_51","XPLAN_52","XPLAN_53","XPLAN_54","XPLAN_60"]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET XX X.X XX invalidAcceptHeaderExpectError406" id="d28565da-26c0-4317-aa52-63895156e99a"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="ada729bc-f24a-41d6-bcf5-4dd34948e273" name="GET XX X.X XX invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/info</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="860eaa41-d4c0-4b28-9e32-132c7e894b18" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>406</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="e68513c7-b782-498e-9a43-fab6619cbbb3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan" id="6b5d393f-424c-42fe-a468-ca531d60500d"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan Property Transfer" id="51ebcb92-bc33-47c6-9d74-b252f2f85fb6"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS importPlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 pf invalidProfile" id="236ab532-d435-41e6-abde-5689be19b3e6"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 pf invalidProfile" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>FP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>profiles</con:name> + <con:value>invalid</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 pf invalidProfile Property Transfer" id="4539114b-8cab-4e41-ab2b-9f1094957446"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 pf invalidProfile</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatusInvalidProfile</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX mismatchingContentTypeAndFileType" id="4132883a-577d-4e97-a182-5759d85f25f2"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 XX mismatchingContentTypeAndFileType" postQueryString="false" mediaType="text/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="c1df2d96-38e5-4318-8284-ad41312a8676" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="c1df2d96-38e5-4318-8284-ad41312a8676" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="c1df2d96-38e5-4318-8284-ad41312a8676" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>text/xml</con:contentType> + <con:contentId>FP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 XX mismatchingContentTypeAndFileType Property Transfer" id="5b0ec99a-1f44-466a-b4da-403b4d20455a"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 XX mismatchingContentTypeAndFileType</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatusMismatchingTypes</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX invalidXSSExpectError400" id="401dbcc9-16e7-47bf-a7ed-21612d9fbf6d"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 XX invalidXSSExpectError400" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="//"/> +</xml-fragment></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>400</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX invalidAcceptHeaderExpectError406" id="03a65e66-247d-401c-bf31-853be62db322"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 XX invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>406</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>FP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0 XX unsupportedMediaTypeZipExpectError415" id="5dfe142f-87e9-419c-b271-c608e7ec8393"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 XX unsupportedMediaTypeZipExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>415</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>FP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/Blankenese29_Test_60_InvalidContent.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST XX X.X XX unsupportedMediaTypeOdtExpectError415" id="e7b57a24-6f3d-4127-a9c2-53742acf6fc2"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST XX X.X XX unsupportedMediaTypeOdtExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>415</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>FP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/invalidContentType.odt</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="0bd6341f-a662-4437-9ac7-b4c14284ff61" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/status/{uuid} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/status/{uuid}"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="21e02ed1-eb99-46e0-a831-776df2391487"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatus" id="07dfd200-af16-409e-9ec5-bf0d892d3f34"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatus" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="7b5e345d-819e-4561-8158-053c5005060b"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d27fd88e-b78e-4e28-acfc-dc25276fc1a1" name="status"> + <con:configuration> + <path>$.status</path> + <content>IMPORT_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a9ed262c-75d6-4a67-ad13-5b40ce1eb9ac" name="hrefExists"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="GET BP 6.0.2 sU retrieveStatus Property Transfer" id="185a9506-2d65-4ce0-8891-af698dcdca55"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET BP 6.0.2 sU retrieveStatus</con:sourceStep> + <con:sourcePath>$.links[0].href</con:sourcePath> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>planId</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET BP 6.0.2 sU retrieveStatus</con:sourceStep> + <con:sourcePath>$.importedPlanIds[0]</con:sourcePath> + <con:targetType>planId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReport" id="d59aacb8-fb83-4906-8ab7-809525c545df" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="873abd32-15a2-4f63-a5cf-93aa57bee711" name="GET BP 6.0.2 XX retrieveReport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#report}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b121572-75dc-4331-8608-63651d9942fe" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="CleanUp Properties" id="5c2c32fa-c957-463e-ae47-da698718433a"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatusMismatchingTypes" id="41c913d2-42d4-4e18-8b73-8558153a656b"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatusMismatchingTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatusMismatchingTypes}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatusMismatchingTypes" id="3babb438-a8e0-4474-a305-647b06b616da"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatusMismatchingTypes" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU mismatchingContentTypeAndFileType" id="376bae1d-09d7-4f00-803a-cb9da3c4b22b"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU mismatchingContentTypeAndFileType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatusMismatchingTypes}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4f337b40-5001-46e3-ae48-6c4fcc1920a5" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FAILED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c1848a54-240f-4a71-a77d-d352334d6b1f" name="errorMsg"> + <con:configuration> + <path>$.errorMsg</path> + <content>Could not read attached file as XPlanGML</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d7f0823c-c0f0-46b2-8c85-26b6e828a833" name="importedPlanIds"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>null</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="69eedd5e-af1f-4496-9645-974bd7cf8191" name="links"> + <con:configuration> + <path>$.links</path> + <content>null</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatusInvalidProfile" id="3410ff8c-b573-44f7-a823-0aa74269ac72"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatusInvalidProfile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatusInvalidProfile}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatusInvalidProfile" id="e41e9e45-1764-4625-9bf4-8f97f2e03b51"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatusInvalidProfile" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU invalidProfile" id="8307a0f5-93c1-464b-806a-e7ab8b510755"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU invalidProfile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatusInvalidProfile}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="4f337b40-5001-46e3-ae48-6c4fcc1920a5" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FAILED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c1848a54-240f-4a71-a77d-d352334d6b1f" name="errorMsg"> + <con:configuration> + <path>$.errorMsg</path> + <content>Profile with id invalid does not exist</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d7f0823c-c0f0-46b2-8c85-26b6e828a833" name="importedPlanIds"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>null</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="69eedd5e-af1f-4496-9645-974bd7cf8191" name="links"> + <con:configuration> + <path>$.links</path> + <content>null</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU invalidUuidExpectError404" id="bbb4f23e-2fd0-4cab-856f-8cae8679b1a6"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU invalidUuidExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/status/invalid</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>404</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU invalidAcceptHeaderExpectError406" id="6d808e19-6722-4ed2-ae65-8c16efcc698f"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestSuite#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>406</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>report</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:testCase id="6d00085e-8474-4a41-b422-5187e0c865a4" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plans TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plans"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="GET BP 6.0.2 pN getByPlanName" id="378a5ad5-02d4-435c-bfac-610cbfe4d3c0"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="241a13cd-fc19-4992-83ba-d7e6b56b3743" name="GET BP 6.0.2 pN getByPlanName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plans</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="e21d229a-4da0-46d6-95ba-9d521f98ad6d" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="type"> + <con:configuration> + <path>$[0].type</path> + <content>BP_Plan</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="c1df2d96-38e5-4318-8284-ad41312a8676" name="statusLinkExists"> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="version"> <con:configuration> - <path>$.statusLink</path> - <content>true</content> + <path>$[0].version</path> + <content>XPLAN_60</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="c1df2d96-38e5-4318-8284-ad41312a8676" name="hrefExists"> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="planStatus"> <con:configuration> - <path>$.statusLink.href</path> - <content>true</content> + <path>$[0].planStatus</path> + <content>FESTGESTELLT</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="gemeinden.ags"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -19169,48 +21402,73 @@ assert json.version != null</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>FP_6.0.2.zip</con:name> - <con:contentType>text/xml</con:contentType> - <con:contentId>FP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> - <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="transfer" name="POST BP 6.0.2 XX mismatchingContentTypeAndFileType Property Transfer" id="5b0ec99a-1f44-466a-b4da-403b4d20455a"> - <con:settings/> - <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>hrefStatus</con:name> - <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 6.0.2 XX mismatchingContentTypeAndFileType</con:sourceStep> - <con:sourcePath>$.statusLink.href</con:sourcePath> - <con:targetType>hrefStatus2</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:type>JSONPATH</con:type> - <con:targetTransferType>JSONPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> + <con:parameters> + <con:parameter> + <con:name>planName</con:name> + <con:value>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 XX invalidXSSExpectError400" id="401dbcc9-16e7-47bf-a7ed-21612d9fbf6d"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getByPlanId" id="075daffd-664c-441f-b138-6fe75430bc69"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 XX invalidXSSExpectError400" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="241a13cd-fc19-4992-83ba-d7e6b56b3743" name="GET BP 6.0.2 pI getByPlanId" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> - <con:entry key="Accept" value="application/json"/> - <con:entry key="X-Filename" value="//"/> -</xml-fragment></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plans</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="e21d229a-4da0-46d6-95ba-9d521f98ad6d" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="type"> + <con:configuration> + <path>$[0].type</path> + <content>BP_Plan</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="version"> + <con:configuration> + <path>$[0].version</path> + <content>XPLAN_60</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="planStatus"> + <con:configuration> + <path>$[0].planStatus</path> + <content>FESTGESTELLT</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="gemeinden.ags"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$[0].xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -19221,27 +21479,26 @@ assert json.version != null</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>FP_6.0.2.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>BP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> - <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>planId</con:name> + <con:value>${#TestSuite#planId}</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 XX invalidAcceptHeaderExpectError406" id="03a65e66-247d-401c-bf31-853be62db322"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pN invalidAcceptHeaderExpectError406" id="cbb9bf86-65c4-4e27-9ea9-91ec18b81012"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 XX invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="241a13cd-fc19-4992-83ba-d7e6b56b3743" name="GET BP 6.0.2 pN invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plans</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="e21d229a-4da0-46d6-95ba-9d521f98ad6d" name="Valid HTTP Status Codes"> <con:configuration> <codes>406</codes> </con:configuration> @@ -19254,29 +21511,68 @@ assert json.version != null</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>FP_6.0.2.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>FP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> - <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> - </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>planName</con:name> + <con:value>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="2150525e-2aeb-46bc-bc45-a9d05a41995a" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/archive TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/archive"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getArchiveById" id="3c7a13c1-91ed-45bc-a1a8-dae32811ec02"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI getArchiveById" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="0cafd298-2bed-4e17-81ec-6884448ebe77" name="contentType"> + <con:configuration> + <path>/data/@contentType</path> + <content>application/zip</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0 XX unsupportedMediaTypeZipExpectError415" id="5dfe142f-87e9-419c-b271-c608e7ec8393"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="4873d48d-ee5a-4896-96f7-2e9504591f90"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 XX unsupportedMediaTypeZipExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/archive</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> - <codes>415</codes> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -19287,29 +21583,22 @@ assert json.version != null</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>FP_6.0.2.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>FP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/Blankenese29_Test_60_InvalidContent.zip</con:url> - <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST XX X.X XX unsupportedMediaTypeOdtExpectError415" id="e7b57a24-6f3d-4127-a9c2-53742acf6fc2"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="fc0defba-fc1e-4de2-8d15-97d676688c73"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST XX X.X XX unsupportedMediaTypeOdtExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/archive</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> - <codes>415</codes> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> @@ -19320,70 +21609,22 @@ assert json.version != null</scriptText> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>FP_6.0.2.zip</con:name> - <con:contentType>application/octet-stream</con:contentType> - <con:contentId>FP_6.0.2.zip</con:contentId> - <con:url>${projectDir}/xplan-manager-api/plans/invalidContentType.odt</con:url> - <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="0bd6341f-a662-4437-9ac7-b4c14284ff61" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/status/{uuid} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/status/{uuid}"-Pfad.</con:description> - <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="21e02ed1-eb99-46e0-a831-776df2391487"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="015a3f06-7310-4423-94b1-7fa1b94f582e"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/archive</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> - <con:configuration> - <path>$.status</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> - <con:configuration> - <path>$.errorMsg</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> - <con:configuration> - <path>$.importedPlanIds</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.links</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> @@ -19399,82 +21640,46 @@ assert json.version != null</scriptText> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="groovy" name="pollStatus" id="07dfd200-af16-409e-9ec5-bf0d892d3f34"> - <con:settings/> - <con:config> - <script>import groovy.json.JsonSlurper - -def testStepName = "GET BP 6.0.2 sU pollStatus" -def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") -def json = new JsonSlurper().parseText(response) - -if( context.loopIndex == null ) - context.loopIndex = 0 - -if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ - sleep(1000) - testRunner.gotoStepByName(testStepName) -} else if (context.loopIndex == 40) { - context.loopIndex = null - assert(false) -} else { - context.loopIndex = null -}</script> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="7b5e345d-819e-4561-8158-053c5005060b"> + <con:properties/> + </con:testCase> + <con:testCase id="3b8ec81f-78d9-48ae-920c-e17c55d22c2f" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/basisdaten TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/basisdaten"-Pfad</con:description> + <con:settings/> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getBasisdaten" id="9767ff03-4166-40a9-898a-417e1764a336"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getBasisdaten" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="d27fd88e-b78e-4e28-acfc-dc25276fc1a1" name="status"> - <con:configuration> - <path>$.status</path> - <content>IMPORT_FINISHED</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> - <con:configuration> - <path>$.errorMsg</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="name"> <con:configuration> - <path>$.importedPlanIds</path> - <content>true</content> + <path>$.name</path> + <content>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="planArt"> <con:configuration> - <path>$.links</path> - <content>true</content> + <path>$.planArt</path> + <content>1000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="a9ed262c-75d6-4a67-ad13-5b40ce1eb9ac" name="hrefExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="rechtsstand"> <con:configuration> - <path>$.links[0].href</path> - <content>true</content> + <path>$.rechtsstand</path> + <content>3000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -19483,6 +21688,7 @@ if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -19493,44 +21699,17 @@ if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="GET BP 6.0.2 sU retrieveStatus Property Transfer" id="185a9506-2d65-4ce0-8891-af698dcdca55"> - <con:settings/> - <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>report</con:name> - <con:sourceType>Response</con:sourceType> - <con:sourceStep>GET BP 6.0.2 sU retrieveStatus</con:sourceStep> - <con:sourcePath>$.links[0].href</con:sourcePath> - <con:targetType>report</con:targetType> - <con:targetStep>#TestCase#</con:targetStep> - <con:type>JSONPATH</con:type> - <con:targetTransferType>JSONPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>planId</con:name> - <con:sourceType>Response</con:sourceType> - <con:sourceStep>GET BP 6.0.2 sU retrieveStatus</con:sourceStep> - <con:sourcePath>$.importedPlanIds[0]</con:sourcePath> - <con:targetType>planId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:type>JSONPATH</con:type> - <con:targetTransferType>JSONPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReport" id="d59aacb8-fb83-4906-8ab7-809525c545df" disabled="true"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="472a928d-ed1b-4591-9b50-7fb69cc6324e"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="873abd32-15a2-4f63-a5cf-93aa57bee711" name="GET BP 6.0.2 XX retrieveReport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestCase#report}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/basisdaten</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="2b121572-75dc-4331-8608-63651d9942fe" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>200</codes> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -19546,66 +21725,17 @@ if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="Cleanup Properties" id="5c2c32fa-c957-463e-ae47-da698718433a"> - <con:settings/> - <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>report</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>report</con:targetType> - <con:targetStep>#TestCase#</con:targetStep> - <con:upgraded>true</con:upgraded> - </con:transfers> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus2" id="41c913d2-42d4-4e18-8b73-8558153a656b"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="c984f858-a128-40eb-8b98-7f1f03105d16"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatus2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus2}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/basisdaten</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> - <con:configuration> - <path>$.status</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> - <con:configuration> - <path>$.errorMsg</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> - <con:configuration> - <path>$.importedPlanIds</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.links</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> @@ -19621,76 +21751,17 @@ if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="groovy" name="pollStatus2" id="3babb438-a8e0-4474-a305-647b06b616da"> - <con:settings/> - <con:config> - <script>import groovy.json.JsonSlurper - -def testStepName = "GET BP 6.0.2 sU pollStatus2" -def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") -def json = new JsonSlurper().parseText(response) - -if( context.loopIndex == null ) - context.loopIndex = 0 - -if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ - sleep(1000) - testRunner.gotoStepByName(testStepName) -} else if (context.loopIndex == 40) { - context.loopIndex = null - assert(false) -} else { - context.loopIndex = null -}</script> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU mismatchingContentTypeAndFileType" id="376bae1d-09d7-4f00-803a-cb9da3c4b22b"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="526bd21f-82e8-44a9-a22e-a643005c67b5"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU mismatchingContentTypeAndFileType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus2}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="4f337b40-5001-46e3-ae48-6c4fcc1920a5" name="status"> - <con:configuration> - <path>$.status</path> - <content>VALIDATION_FAILED</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="c1848a54-240f-4a71-a77d-d352334d6b1f" name="errorMsg"> - <con:configuration> - <path>$.errorMsg</path> - <content>Could not read attached file as XPlanGML</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="d7f0823c-c0f0-46b2-8c85-26b6e828a833" name="importedPlanIds"> - <con:configuration> - <path>$.importedPlanIds</path> - <content>null</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="69eedd5e-af1f-4496-9645-974bd7cf8191" name="links"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.links</path> - <content>null</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> @@ -19706,50 +21777,77 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus3" id="3410ff8c-b573-44f7-a823-0aa74269ac72"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI replaceBasisdaten" id="f5a5b269-7f4e-46f3-9666-1cf581178783"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatus3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI replaceBasisdaten" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus3}</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> + <con:request>{ + "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", + "beschreibung": null, + "planArt": 1000, + "verfahren": null, + "rechtsstand": 3000, + "rechtsverordnungsDatum": "2024-08-19", + "technHerstellDatum": "2024-08-18", + "untergangsDatum": "2054-08-19" +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="name"> <con:configuration> - <path>$.status</path> - <content>true</content> + <path>$.name</path> + <content>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="planArt"> <con:configuration> - <path>$.errorMsg</path> - <content>true</content> + <path>$.planArt</path> + <content>1000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="rechtsstand"> <con:configuration> - <path>$.importedPlanIds</path> - <content>true</content> + <path>$.rechtsstand</path> + <content>3000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:assertion type="JsonPath Match" id="462dac20-7d34-4b9d-b5ef-4a7d0e4ec044" name="rechtsverordnungsDatum"> <con:configuration> - <path>$.links</path> - <content>true</content> + <path>$.rechtsverordnungsDatum</path> + <content>2024-08-19</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="462dac20-7d34-4b9d-b5ef-4a7d0e4ec044" name="technHerstellDatum"> + <con:configuration> + <path>$.technHerstellDatum</path> + <content>2024-08-18</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="462dac20-7d34-4b9d-b5ef-4a7d0e4ec044" name="untergangsDatum"> + <con:configuration> + <path>$.untergangsDatum</path> + <content>2054-08-19</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -19758,6 +21856,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -19768,81 +21867,68 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="groovy" name="pollStatus3" id="e41e9e45-1764-4625-9bf4-8f97f2e03b51"> - <con:settings/> - <con:config> - <script>import groovy.json.JsonSlurper - -def testStepName = "GET BP 6.0.2 sU pollStatus3" -def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") -def json = new JsonSlurper().parseText(response) - -if( context.loopIndex == null ) - context.loopIndex = 0 - -if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ - sleep(1000) - testRunner.gotoStepByName(testStepName) -} else if (context.loopIndex == 40) { - context.loopIndex = null - assert(false) -} else { - context.loopIndex = null -}</script> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU invalidProfile" id="8307a0f5-93c1-464b-806a-e7ab8b510755"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="05b528fc-4add-465d-b4fe-428da58dfa9e"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU invalidProfile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus3}</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="4f337b40-5001-46e3-ae48-6c4fcc1920a5" name="status"> - <con:configuration> - <path>$.status</path> - <content>VALIDATION_FAILED</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="c1848a54-240f-4a71-a77d-d352334d6b1f" name="errorMsg"> - <con:configuration> - <path>$.errorMsg</path> - <content>Profile with id invalid does not exist</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="d7f0823c-c0f0-46b2-8c85-26b6e828a833" name="importedPlanIds"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/basisdaten</con:endpoint> + <con:request>{ + "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", + "beschreibung": null, + "planArt": 1000, + "verfahren": null, + "rechtsstand": 3000, + "rechtsverordnungsDatum": null, + "technHerstellDatum": null, + "untergangsDatum": null +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.importedPlanIds</path> - <content>null</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>400</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="69eedd5e-af1f-4496-9645-974bd7cf8191" name="links"> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" id="5ef8a26b-714e-49b3-8a29-2b75cb1a576e"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/basisdaten</con:endpoint> + <con:request>{ + "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", + "beschreibung": null, + "planArt": 1000, + "verfahren": null, + "rechtsstand": 3000, + "rechtsverordnungsDatum": null, + "technHerstellDatum": null, + "untergangsDatum": null +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.links</path> - <content>null</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -19853,22 +21939,32 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU invalidUuidExpectError404" id="bbb4f23e-2fd0-4cab-856f-8cae8679b1a6"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="cc325cd8-dab8-4fdc-a8a8-eb548f6ba1ff"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU invalidUuidExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/status/invalid</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> + <con:request>{ + "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", + "beschreibung": null, + "planArt": 1000, + "verfahren": null, + "rechtsstand": 3000, + "rechtsverordnungsDatum": null, + "technHerstellDatum": null, + "untergangsDatum": null +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -19879,22 +21975,32 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU invalidAcceptHeaderExpectError406" id="6d808e19-6722-4ed2-ae65-8c16efcc698f"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI xssExpectError422" id="839598ba-cc6a-4f56-a75d-bded567ea850"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI xssExpectError422" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus}</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> + <con:request>{ + "name": "ffXSSTestﬕ", + "beschreibung": null, + "planArt": 1000, + "verfahren": null, + "rechtsstand": 3000, + "rechtsverordnungsDatum": null, + "technHerstellDatum": null, + "untergangsDatum": null +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>422</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -19905,82 +22011,37 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:properties> - <con:property> - <con:name>empty</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>report</con:name> - <con:value/> - </con:property> - </con:properties> + <con:properties/> </con:testCase> - <con:testCase id="001a2fd0-e5ae-4c40-8c31-f8561f796096" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/name/{planName} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/plan/name/{planName}"-Pfad.</con:description> + <con:testCase id="93feb88e-f923-4e62-bd1e-4638a2526b04" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/aenderungen TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/aenderungen"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pN getByName" id="6a97ba28-fed1-4ea4-892f-6b592e95af53"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getAenderungen" id="c93b560c-ae99-4163-a86e-a171710a2cb2"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="ddf9334f-69bf-4471-9847-00bf32fd73e6" name="GET BP 6.0.2 pN getByName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getAenderungen" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/name/BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="704db02c-cfcd-4922-bb7f-c0494e9fc746" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="b4e0cfb8-e66f-422e-96a3-56f34cf39485" name="type"> - <con:configuration> - <path>$[0].type</path> - <content>BP_Plan</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="8a30bd7b-46f1-479f-9d94-575ca29b45ec" name="version"> - <con:configuration> - <path>$[0].version</path> - <content>XPLAN_60</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="7a459782-356b-43bc-9bdb-5707163268ee" name="planStatus"> - <con:configuration> - <path>$[0].planStatus</path> - <content>FESTGESTELLT</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="820c168c-e3b5-4d7f-b92e-d29dfdbdf327" name="bboxExists"> - <con:configuration> - <path>$[0].bbox</path> - <content>true</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Existence Match" id="3484c5d9-c371-4779-8f0a-416bf32876bb" name="xplanModelDataExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="aendert"> <con:configuration> - <path>$[0].xplanModelData</path> - <content>true</content> + <path>$.aendert</path> + <content>[]</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="23ea2ad7-d556-4eb5-8cba-cd6b6a97e337" name="linksExists"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="wurdeGeaendertVon"> <con:configuration> - <path>$[0].links</path> - <content>true</content> + <path>$.wurdeGeaendertVon</path> + <content>[]</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -19989,6 +22050,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -19999,22 +22061,23 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET XX X.X pN invalidPlanNameExpectError404" id="96539281-b7a3-4283-9a79-e9a0080409f8" disabled="true"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="e30a3193-444a-4edb-a047-9652a4841e4a"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="ddf9334f-69bf-4471-9847-00bf32fd73e6" name="GET XX X.X pN invalidPlanNameExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/name/invalid</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/aenderungen</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="704db02c-cfcd-4922-bb7f-c0494e9fc746" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20025,22 +22088,23 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pN invalidAcceptHeaderExpectError406" id="8287535b-ee1f-4cf1-a79b-9b036035cd33"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="938d495a-1813-4fcd-beba-67e7dbe3f9ec"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="ddf9334f-69bf-4471-9847-00bf32fd73e6" name="GET BP 6.0.2 pN invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/name/BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/aenderungen</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="704db02c-cfcd-4922-bb7f-c0494e9fc746" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20051,54 +22115,23 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="6d00085e-8474-4a41-b422-5187e0c865a4" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plans TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/plans"-Pfad.</con:description> - <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pN getByPlanName" id="378a5ad5-02d4-435c-bfac-610cbfe4d3c0"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="4ecad8dc-3b11-4f71-8a07-b22272f824dc"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="241a13cd-fc19-4992-83ba-d7e6b56b3743" name="GET BP 6.0.2 pN getByPlanName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plans</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="e21d229a-4da0-46d6-95ba-9d521f98ad6d" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="type"> - <con:configuration> - <path>$[0].type</path> - <content>BP_Plan</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="version"> - <con:configuration> - <path>$[0].version</path> - <content>XPLAN_60</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="planStatus"> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$[0].planStatus</path> - <content>FESTGESTELLT</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20106,127 +22139,60 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters> - <con:parameter> - <con:name>planName</con:name> - <con:value>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:value> - <con:style>QUERY</con:style> - </con:parameter> - </con:parameters> + <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getByPlanId" id="075daffd-664c-441f-b138-6fe75430bc69"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI replaceAenderung" id="2db9d6e5-644b-4fb3-ae34-2424b982e4e8"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="241a13cd-fc19-4992-83ba-d7e6b56b3743" name="GET BP 6.0.2 pI getByPlanId" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI replaceAenderung" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plans</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="e21d229a-4da0-46d6-95ba-9d521f98ad6d" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> + <con:request>{ + "aendert": [ { + "planName": "geaendert", + "rechtscharakter": 1000, + "nummer": "1.1" + }], + "wurdeGeaendertVon": [] +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="type"> - <con:configuration> - <path>$[0].type</path> - <content>BP_Plan</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="version"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="planName"> <con:configuration> - <path>$[0].version</path> - <content>XPLAN_60</content> + <path>$.aendert[0].planName</path> + <content>geaendert</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="6045130d-e4df-49a7-883b-3688df7dc91b" name="planStatus"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="rechtscharakter"> <con:configuration> - <path>$[0].planStatus</path> - <content>FESTGESTELLT</content> + <path>$.aendert[0].rechtscharakter</path> + <content>1000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters> - <con:parameter> - <con:name>planId</con:name> - <con:value>${#TestSuite#planId}</con:value> - <con:style>QUERY</con:style> - </con:parameter> - </con:parameters> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pN invalidAcceptHeaderExpectError406" id="cbb9bf86-65c4-4e27-9ea9-91ec18b81012"> - <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="241a13cd-fc19-4992-83ba-d7e6b56b3743" name="GET BP 6.0.2 pN invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plans</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="e21d229a-4da0-46d6-95ba-9d521f98ad6d" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>406</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters> - <con:parameter> - <con:name>planName</con:name> - <con:value>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:value> - <con:style>QUERY</con:style> - </con:parameter> - </con:parameters> - </con:config> - </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="2150525e-2aeb-46bc-bc45-a9d05a41995a" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/archive TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getArchiveById" id="3c7a13c1-91ed-45bc-a1a8-dae32811ec02"> - <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI getArchiveById" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/archive</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="nummer"> <con:configuration> - <codes>200</codes> + <path>$.aendert[0].nummer</path> + <content>1.1</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="0cafd298-2bed-4e17-81ec-6884448ebe77" name="contentType"> + <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="wurdeGeaendertVon"> <con:configuration> - <path>/data/@contentType</path> - <content>application/zip</content> + <path>$.wurdeGeaendertVon</path> + <content>[]</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -20235,6 +22201,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20245,15 +22212,22 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="4873d48d-ee5a-4896-96f7-2e9504591f90"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="9c845e83-9e6b-4fe6-a54f-6b7fc775c501"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/archive</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/aenderungen</con:endpoint> + <con:request>{ + "aendert": [ { + "planName": "geaendert", + "rechtscharakter": 1000, + "nummer": "1.1" + }], + "wurdeGeaendertVon": [] +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>400</codes> </con:configuration> @@ -20261,6 +22235,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20271,15 +22246,22 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="fc0defba-fc1e-4de2-8d15-97d676688c73"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" id="db1c0f87-e4e6-42b3-8d45-594c99fc8544"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/archive</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/aenderungen</con:endpoint> + <con:request>{ + "aendert": [ { + "planName": "geaendert", + "rechtscharakter": 1000, + "nummer": "1.1" + }], + "wurdeGeaendertVon": [] +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>404</codes> </con:configuration> @@ -20287,6 +22269,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20297,15 +22280,22 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="015a3f06-7310-4423-94b1-7fa1b94f582e"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="758cf285-c79f-45a2-9d5e-0f5591822afa"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/archive</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> + <con:request>{ + "aendert": [ { + "planName": "geaendert", + "rechtscharakter": 1000, + "nummer": "1.1" + }], + "wurdeGeaendertVon": [] +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>406</codes> </con:configuration> @@ -20313,6 +22303,41 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI xssExpectError422" id="115d3e56-7f99-4f4e-b707-bf0037290c53"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI xssExpectError422" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> + <con:request>{ + "aendert": [ { + "planName": "ffXSSTestﬕ", + "rechtscharakter": 1000, + "nummer": "1.1" + }], + "wurdeGeaendertVon": [] +}</con:request> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>422</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20325,48 +22350,22 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:testStep> <con:properties/> </con:testCase> - <con:testCase id="3b8ec81f-78d9-48ae-920c-e17c55d22c2f" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/basisdaten TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="080643b5-a241-41a5-b422-46d67c997820" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/text TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/text"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getBasisdaten" id="9767ff03-4166-40a9-898a-417e1764a336"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getTexte" id="4fc99a55-fd0b-4c65-befe-2bbb6ea14aaa"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getBasisdaten" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getTexte" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="name"> - <con:configuration> - <path>$.name</path> - <content>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="planArt"> - <con:configuration> - <path>$.planArt</path> - <content>1000</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="rechtsstand"> - <con:configuration> - <path>$.rechtsstand</path> - <content>3000</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -20381,13 +22380,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="472a928d-ed1b-4591-9b50-7fb69cc6324e"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="f7f5d700-a4a5-4c6d-8b5c-82943c66b93c"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/basisdaten</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -20397,6 +22396,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20407,13 +22407,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="c984f858-a128-40eb-8b98-7f1f03105d16"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="8294a8c9-009b-40ee-b0ca-a4cfc2f90d51"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/basisdaten</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -20423,6 +22423,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20433,13 +22434,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="526bd21f-82e8-44a9-a22e-a643005c67b5"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="ac91dcc3-ed28-40f2-9e0a-333afc1edef6"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -20449,6 +22450,7 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> + <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -20459,80 +22461,92 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI replaceBasisdaten" id="f5a5b269-7f4e-46f3-9666-1cf581178783"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI addText" id="ded1d86e-6533-4243-9012-86bb6761305f"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI replaceBasisdaten" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI addText" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> - <con:request>{ - "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", - "beschreibung": null, - "planArt": 1000, - "verfahren": null, - "rechtsstand": 3000, - "rechtsverordnungsDatum": "2024-08-19", - "technHerstellDatum": "2024-08-18", - "untergangsDatum": "2054-08-19" -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="name"> - <con:configuration> - <path>$.name</path> - <content>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="planArt"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="schluessel"> <con:configuration> - <path>$.planArt</path> - <content>1000</content> + <path>$.schluessel</path> + <content>HN 9 geaendert</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="rechtsstand"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="rechtscharakter"> <con:configuration> - <path>$.rechtsstand</path> + <path>$.rechtscharakter</path> <content>3000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="462dac20-7d34-4b9d-b5ef-4a7d0e4ec044" name="rechtsverordnungsDatum"> - <con:configuration> - <path>$.rechtsverordnungsDatum</path> - <content>2024-08-19</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="462dac20-7d34-4b9d-b5ef-4a7d0e4ec044" name="technHerstellDatum"> - <con:configuration> - <path>$.technHerstellDatum</path> - <content>2024-08-18</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="462dac20-7d34-4b9d-b5ef-4a7d0e4ec044" name="untergangsDatum"> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 pI addText Property Transfer" id="2a74f745-5a65-4e4f-be65-849be6ce75f7"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>textId</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 pI addText</con:sourceStep> + <con:sourcePath>$.id</con:sourcePath> + <con:targetType>textId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="b573ebde-77c0-4111-a958-34a9c6133822"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.untergangsDatum</path> - <content>2054-08-19</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20544,31 +22558,36 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="05b528fc-4add-465d-b4fe-428da58dfa9e"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" id="148c2420-0b5a-4854-89ed-0348320170f4"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/basisdaten</con:endpoint> - <con:request>{ - "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", - "beschreibung": null, - "planArt": 1000, - "verfahren": null, - "rechtsstand": 3000, - "rechtsverordnungsDatum": null, - "technHerstellDatum": null, - "untergangsDatum": null -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20580,31 +22599,36 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" id="5ef8a26b-714e-49b3-8a29-2b75cb1a576e"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="a4c5e2c9-1429-409f-b293-2d325a0e6585"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/basisdaten</con:endpoint> - <con:request>{ - "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", - "beschreibung": null, - "planArt": 1000, - "verfahren": null, - "rechtsstand": 3000, - "rechtsverordnungsDatum": null, - "technHerstellDatum": null, - "untergangsDatum": null -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20616,31 +22640,36 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="cc325cd8-dab8-4fdc-a8a8-eb548f6ba1ff"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" id="d2c57e66-16c2-4fe7-aeee-173ad067ea9f"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> - <con:request>{ - "name": "BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI-modified", - "beschreibung": null, - "planArt": 1000, - "verfahren": null, - "rechtsstand": 3000, - "rechtsverordnungsDatum": null, - "technHerstellDatum": null, - "untergangsDatum": null -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>415</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20652,28 +22681,33 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI xssExpectError422" id="839598ba-cc6a-4f56-a75d-bded567ea850"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" id="7677393b-bea9-497c-a230-1d473ba2cada"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI xssExpectError422" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/basisdaten</con:endpoint> - <con:request>{ - "name": "ffXSSTestﬕ", - "beschreibung": null, - "planArt": 1000, - "verfahren": null, - "rechtsstand": 3000, - "rechtsverordnungsDatum": null, - "technHerstellDatum": null, - "untergangsDatum": null -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>422</codes> @@ -20688,6 +22722,20 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postTextInvalidContent.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> @@ -20695,34 +22743,44 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:testStep> <con:properties/> </con:testCase> - <con:testCase id="93feb88e-f923-4e62-bd1e-4638a2526b04" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/aenderungen TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="da0530c0-34be-4674-be0a-c66442e5d24d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/text/{id} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/text/{id}"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getAenderungen" id="c93b560c-ae99-4163-a86e-a171710a2cb2"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id getTextById" id="df9fa718-9e7e-4df0-a7b2-a5c14ce7ce14"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getAenderungen" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id getTextById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="aendert"> + <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="id"> <con:configuration> - <path>$.aendert</path> - <content>[]</content> + <path>$.id</path> + <content>${#TestSuite#textId}</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="wurdeGeaendertVon"> + <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="schluessel"> <con:configuration> - <path>$.wurdeGeaendertVon</path> - <content>[]</content> + <path>$.schluessel</path> + <content>HN 9 geaendert</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="rechtscharakter"> + <con:configuration> + <path>$.rechtscharakter</path> + <content>3000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -20742,13 +22800,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="e30a3193-444a-4edb-a047-9652a4841e4a"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="a2a2e844-c1cd-401d-a657-669466d34e2b"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/aenderungen</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text/invalid</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -20769,13 +22827,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="938d495a-1813-4fcd-beba-67e7dbe3f9ec"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" id="3bd21efb-918e-43e7-b942-0cc2414c6214"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/aenderungen</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text/999999999</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -20796,13 +22854,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="4ecad8dc-3b11-4f71-8a07-b22272f824dc"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="ae1381f2-124c-45b0-800a-868c6fb22594"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -20823,60 +22881,85 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI replaceAenderung" id="2db9d6e5-644b-4fb3-ae34-2424b982e4e8"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id replaceTextById" id="a6cc6bc2-7065-4de9-9051-c81484e62636"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI replaceAenderung" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id replaceTextById" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> - <con:request>{ - "aendert": [ { - "planName": "geaendert", - "rechtscharakter": 1000, - "nummer": "1.1" - }], - "wurdeGeaendertVon": [] -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="planName"> + <con:assertion type="JsonPath Match" id="92560390-05d4-48e4-9680-b882e944790c" name="id"> <con:configuration> - <path>$.aendert[0].planName</path> - <content>geaendert</content> + <path>$.id</path> + <content>${#TestSuite#textId}</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="rechtscharakter"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="schluessel"> <con:configuration> - <path>$.aendert[0].rechtscharakter</path> - <content>1000</content> + <path>$.schluessel</path> + <content>HN 9 geaendert</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="nummer"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="rechtscharakter"> <con:configuration> - <path>$.aendert[0].nummer</path> - <content>1.1</content> + <path>$.rechtscharakter</path> + <content>3000</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="f3689ccf-6d8e-4c43-995f-ac1eabca8a1d" name="wurdeGeaendertVon"> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="1c6d3528-2be3-4f15-8367-11237a2264d2"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text/${#TestSuite#textId}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.wurdeGeaendertVon</path> - <content>[]</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20888,29 +22971,36 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="9c845e83-9e6b-4fe6-a54f-6b7fc775c501"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" id="a10ad6d0-f09a-4a9a-bb94-95daf9b15734"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/aenderungen</con:endpoint> - <con:request>{ - "aendert": [ { - "planName": "geaendert", - "rechtscharakter": 1000, - "nummer": "1.1" - }], - "wurdeGeaendertVon": [] -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text/999999999</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20922,29 +23012,36 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" id="db1c0f87-e4e6-42b3-8d45-594c99fc8544"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="ea5bea5b-a327-4923-aa98-ea9c60a836fe"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/aenderungen</con:endpoint> - <con:request>{ - "aendert": [ { - "planName": "geaendert", - "rechtscharakter": 1000, - "nummer": "1.1" - }], - "wurdeGeaendertVon": [] -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20956,29 +23053,36 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="758cf285-c79f-45a2-9d5e-0f5591822afa"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" id="19190b3a-98b7-40a5-ba26-25083a2fe118"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> - <con:request>{ - "aendert": [ { - "planName": "geaendert", - "rechtscharakter": 1000, - "nummer": "1.1" - }], - "wurdeGeaendertVon": [] -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>415</codes> </con:configuration> </con:assertion> <con:credentials> @@ -20990,26 +23094,33 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI xssExpectError422" id="115d3e56-7f99-4f4e-b707-bf0037290c53"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" id="685c723f-5c5d-40db-9b03-23c756c53d1c"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI xssExpectError422" postQueryString="false" mediaType="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/aenderungen</con:endpoint> - <con:request>{ - "aendert": [ { - "planName": "ffXSSTestﬕ", - "rechtscharakter": 1000, - "nummer": "1.1" - }], - "wurdeGeaendertVon": [] -}</con:request> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>422</codes> @@ -21024,6 +23135,20 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>textmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putTextInvalidContent.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> @@ -21031,15 +23156,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:testStep> <con:properties/> </con:testCase> - <con:testCase id="080643b5-a241-41a5-b422-46d67c997820" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/text TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="72840d67-96bc-44ad-8416-cd054fd228f3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/dokument TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/dokument"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getTexte" id="4fc99a55-fd0b-4c65-befe-2bbb6ea14aaa"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getDokumente" id="927948a4-fcce-44ce-9ed5-4d4840bde928"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getTexte" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getDokumente" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21060,13 +23186,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="f7f5d700-a4a5-4c6d-8b5c-82943c66b93c"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="51fe6383-e02d-4c29-ba1e-c92979a6c9e1"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21087,13 +23213,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="8294a8c9-009b-40ee-b0ca-a4cfc2f90d51"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="6451ffcb-c1b5-4f4c-8a92-f699617e9bb6"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21114,13 +23240,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="ac91dcc3-ed28-40f2-9e0a-333afc1edef6"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="297a65b8-1fac-42d1-bd32-5f93c8c7a551"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21141,32 +23267,23 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI addText" id="ded1d86e-6533-4243-9012-86bb6761305f"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI addDokument" id="22d1bdfe-ad49-4ea4-be3f-2c52951ff239"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI addText" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI addDokument" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="schluessel"> - <con:configuration> - <path>$.schluessel</path> - <content>HN 9 geaendert</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="rechtscharakter"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="typ"> <con:configuration> - <path>$.rechtscharakter</path> - <content>3000</content> + <path>$.typ</path> + <content>1010</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -21185,14 +23302,14 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:name>postText.pdf</con:name> <con:contentType>application/pdf</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21200,15 +23317,15 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="POST BP 6.0.2 pI addText Property Transfer" id="2a74f745-5a65-4e4f-be65-849be6ce75f7"> + <con:testStep type="transfer" name="POST BP 6.0.2 pI addDokument Property Transfer" id="27778152-6117-40a8-83bf-152c67b04811"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>textId</con:name> + <con:name>dokumentId</con:name> <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 6.0.2 pI addText</con:sourceStep> + <con:sourceStep>POST BP 6.0.2 pI addDokument</con:sourceStep> <con:sourcePath>$.id</con:sourcePath> - <con:targetType>textId</con:targetType> + <con:targetType>dokumentId</con:targetType> <con:targetStep>#TestSuite#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> @@ -21216,13 +23333,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="b573ebde-77c0-4111-a958-34a9c6133822"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="dbf484d8-1f29-49d9-8474-031010d82102"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21242,14 +23359,14 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:name>postText.pdf</con:name> <con:contentType>application/pdf</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21257,13 +23374,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" id="148c2420-0b5a-4854-89ed-0348320170f4"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" id="5f2abe58-f7c9-4590-bf9d-d4a5b6e8dcba"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21283,14 +23400,14 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:name>postText.pdf</con:name> <con:contentType>application/pdf</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21298,13 +23415,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="a4c5e2c9-1429-409f-b293-2d325a0e6585"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="6a5a257f-b22b-4db0-8486-5c3b7f16e6a2"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21324,14 +23441,14 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:name>postText.pdf</con:name> <con:contentType>application/pdf</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21339,13 +23456,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" id="d2c57e66-16c2-4fe7-aeee-173ad067ea9f"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" id="8acfb022-e53f-4e5a-a9f6-a127123455e7"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21371,8 +23488,8 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21380,13 +23497,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" id="7677393b-bea9-497c-a230-1d473ba2cada"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" id="a24a03bc-19ef-4eb1-afb0-3428ba2966ac"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21406,14 +23523,14 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:name>postText.pdf</con:name> <con:contentType>application/pdf</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postText.pdf</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postTextInvalidContent.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokInvalidContent.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21423,15 +23540,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:testStep> <con:properties/> </con:testCase> - <con:testCase id="da0530c0-34be-4674-be0a-c66442e5d24d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/text/{id} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="267fbe04-ad48-479a-bbbb-5f19a65fd77a" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/dokument/{id} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/dokument/{id}"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id getTextById" id="df9fa718-9e7e-4df0-a7b2-a5c14ce7ce14"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id getDokumentById" id="aa17cee4-d09d-4892-aa8f-57dc1a8afd39"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id getTextById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id getDokumentById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21441,25 +23559,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="id"> <con:configuration> <path>$.id</path> - <content>${#TestSuite#textId}</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="schluessel"> - <con:configuration> - <path>$.schluessel</path> - <content>HN 9 geaendert</content> + <content>${#TestSuite#dokumentId}</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="rechtscharakter"> + <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="typ"> <con:configuration> - <path>$.rechtscharakter</path> - <content>3000</content> + <path>$.typ</path> + <content>1010</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -21479,13 +23588,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="a2a2e844-c1cd-401d-a657-669466d34e2b"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="9bfb83fb-7a5b-4046-8804-67901a8f0807"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text/invalid</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument/${#TestSuite#dokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21506,13 +23615,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" id="3bd21efb-918e-43e7-b942-0cc2414c6214"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" id="373b11f4-dbfc-41f3-81ba-ce013f0821ce"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text/999999999</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument/999999999</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21533,13 +23642,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="ae1381f2-124c-45b0-800a-868c6fb22594"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="d5c866db-8ddc-4025-8308-dfbed63a1b6b"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21560,44 +23669,140 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id replaceTextById" id="a6cc6bc2-7065-4de9-9051-c81484e62636"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="f1b085e6-ba96-45f3-9ffc-12177a151c62"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id replaceTextById" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument/${#TestSuite#dokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>200</codes> + <codes>400</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="92560390-05d4-48e4-9680-b882e944790c" name="id"> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" id="cf56cce1-6d67-447e-9904-9514f4def4c8"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument/999999999</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.id</path> - <content>${#TestSuite#textId}</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>404</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="schluessel"> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="7d071706-c3f7-4f81-a013-50322f61a300"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.schluessel</path> - <content>HN 9 geaendert</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>406</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="rechtscharakter"> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" id="9cbd2eaa-014c-4015-b507-f5944e7a49e4"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <path>$.rechtscharakter</path> - <content>3000</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <codes>415</codes> </con:configuration> </con:assertion> <con:credentials> @@ -21611,16 +23816,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:credentials> <con:attachment> <con:name>postText.pdf</con:name> - <con:contentType>text/plain</con:contentType> + <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21628,17 +23833,67 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="1c6d3528-2be3-4f15-8367-11237a2264d2"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" id="51da4eba-94f0-4da7-9024-ca14cd6be805"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>422</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:domain/> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>postText.pdf</con:name> + <con:contentType>application/pdf</con:contentType> + <con:contentId>datei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> + <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + </con:attachment> + <con:attachment> + <con:name>postText.json</con:name> + <con:contentType>application/json</con:contentType> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokInvalidContent.json</con:url> + <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id replaceDokumentById" id="130d5826-9c20-40d3-99c4-3863a38fbd4e"> + <con:settings/> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id replaceDokumentById" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="typ"> + <con:configuration> + <path>$.typ</path> + <content>1030</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -21652,16 +23907,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:credentials> <con:attachment> <con:name>postText.pdf</con:name> - <con:contentType>text/plain</con:contentType> + <con:contentType>application/pdf</con:contentType> <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> </con:attachment> <con:attachment> <con:name>postText.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> + <con:contentId>dokumentmodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -21669,17 +23924,33 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" id="a10ad6d0-f09a-4a9a-bb94-95daf9b15734"> + <con:testStep type="transfer" name="PUT BP 6.0.2 pI,id replaceDokumentById Property Transfer" id="19f7876b-fee3-4012-8b07-9d902dbbe102"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>replacedDokumentId</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>PUT BP 6.0.2 pI,id replaceDokumentById</con:sourceStep> + <con:sourcePath>$.id</con:sourcePath> + <con:targetType>replacedDokumentId</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="209c8b35-fbb2-42a2-a79d-d0f9a1d1d537"> + <con:settings/> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/text/999999999</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument/${#TestCase#replacedDokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>400</codes> </con:configuration> </con:assertion> <con:credentials> @@ -21691,36 +23962,22 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> - </con:attachment> - <con:attachment> - <con:name>postText.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="ea5bea5b-a327-4923-aa98-ea9c60a836fe"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" id="18e48297-efef-4bd1-87c2-3ef8516290a9"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument/999999999</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>404</codes> </con:configuration> </con:assertion> <con:credentials> @@ -21732,36 +23989,22 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> - </con:attachment> - <con:attachment> - <con:name>postText.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" id="19190b3a-98b7-40a5-ba26-25083a2fe118"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="b38ea79d-b53a-4669-986a-5df82bb74fae"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestCase#replacedDokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>415</codes> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> @@ -21773,36 +24016,40 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> - </con:attachment> - <con:attachment> - <con:name>postText.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" id="685c723f-5c5d-40db-9b03-23c756c53d1c"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id deleteDokumentById" id="d3318fe4-f665-4f8d-9275-505ca5abe89a"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id deleteDokumentById" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/text/${#TestSuite#textId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestCase#replacedDokumentId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> - <codes>422</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="id"> + <con:configuration> + <path>$.id</path> + <content>${#TestCase#replacedDokumentId}</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="typ"> + <con:configuration> + <path>$.typ</path> + <content>1030</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -21814,36 +24061,45 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putText.txt</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> - </con:attachment> - <con:attachment> - <con:name>postText.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>textmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putTextInvalidContent.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:properties/> + <con:testStep type="transfer" name="Cleanup Properties" id="d72bc92d-659e-4390-b267-6152a74dd939"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>replacedDokumentId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>replacedDokumentId</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>replacedDokumentId</con:name> + <con:value/> + </con:property> + </con:properties> </con:testCase> - <con:testCase id="72840d67-96bc-44ad-8416-cd054fd228f3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/dokument TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="ccadec16-905d-4fe8-aafd-93091c764534" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/rasterbasis TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/rasterbasis"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getDokumente" id="927948a4-fcce-44ce-9ed5-4d4840bde928"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI getRasterBasis" id="b1d19332-c2ce-4f1f-ad4a-06135d97734e"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getDokumente" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getRasterBasis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21864,13 +24120,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="51fe6383-e02d-4c29-ba1e-c92979a6c9e1"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="835a4908-c8d6-474e-81ab-8955bb9b0021"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21891,13 +24147,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="6451ffcb-c1b5-4f4c-8a92-f699617e9bb6"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="93f44e37-e364-40b6-9d66-af2f0f42d19b"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21918,13 +24174,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="297a65b8-1fac-42d1-bd32-5f93c8c7a551"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="839e7f5e-86ee-4064-86e8-e39485049be7"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -21945,23 +24201,32 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI addDokument" id="22d1bdfe-ad49-4ea4-be3f-2c52951ff239"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI addRasterBasis" id="2d691e01-0ff4-4bce-84fb-b5b68de9a311"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI addDokument" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI addRasterBasis" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="typ"> + <con:assertion type="JsonPath Match" id="ef3e40e8-ca3a-496f-a0c9-2fdb0ab4290c" name="referenzName"> <con:configuration> - <path>$.typ</path> - <content>1010</content> + <path>$.referenzName</path> + <content>postImg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ef3e40e8-ca3a-496f-a0c9-2fdb0ab4290c" name="bereichNummer"> + <con:configuration> + <path>$.bereichNummer</path> + <content>0</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -21977,33 +24242,40 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>postImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> + <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>postImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> + <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> + </con:attachment> + <con:attachment> + <con:name>postDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> + <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="POST BP 6.0.2 pI addDokument Property Transfer" id="27778152-6117-40a8-83bf-152c67b04811"> + <con:testStep type="transfer" name="POST BP 6.0.2 pI addRasterBasis Property Transfer" id="963638c6-a6bc-407b-a4ae-ba9bf980b0b9"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>dokumentId</con:name> + <con:name>rasterbasisId</con:name> <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 6.0.2 pI addDokument</con:sourceStep> + <con:sourceStep>POST BP 6.0.2 pI addRasterBasis</con:sourceStep> <con:sourcePath>$.id</con:sourcePath> - <con:targetType>dokumentId</con:targetType> + <con:targetType>rasterbasisId</con:targetType> <con:targetStep>#TestSuite#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> @@ -22011,13 +24283,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="dbf484d8-1f29-49d9-8474-031010d82102"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="ee7c04b1-7df3-4e01-8716-50a597447493"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22034,31 +24306,38 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>postImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> + <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> + </con:attachment> + <con:attachment> + <con:name>postImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> + <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>postDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> + <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" id="5f2abe58-f7c9-4590-bf9d-d4a5b6e8dcba"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" id="0e7bfe85-1992-4889-9849-b9dfe9881e12"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22075,31 +24354,38 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>postImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> + <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>postImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> + <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> + </con:attachment> + <con:attachment> + <con:name>postDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> + <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="6a5a257f-b22b-4db0-8486-5c3b7f16e6a2"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="abb3e882-1da3-4dcb-9a1f-559bb438e7f5"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22116,31 +24402,38 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>postImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> + <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>postImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> + <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> + </con:attachment> + <con:attachment> + <con:name>postDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> + <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" id="8acfb022-e53f-4e5a-a9f6-a127123455e7"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" id="4cee4bea-712f-4df2-bbdb-7e4b334e7ddd"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22157,31 +24450,38 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> + <con:name>postImg.png</con:name> <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> - <con:contentId>datei</con:contentId> + <con:contentId>rasterdatei</con:contentId> <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>postImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> + <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> + </con:attachment> + <con:attachment> + <con:name>postDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> + <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" id="a24a03bc-19ef-4eb1-afb0-3428ba2966ac"> + <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" id="5113bb78-6181-43b0-950b-c09cfcc11fae"> <con:settings/> <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22198,18 +24498,25 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>postImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> + <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>postImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> + <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> + </con:attachment> + <con:attachment> + <con:name>postDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokInvalidContent.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/postDokRasterInvalidContent.json</con:url> + <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> @@ -22218,34 +24525,44 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:testStep> <con:properties/> </con:testCase> - <con:testCase id="267fbe04-ad48-479a-bbbb-5f19a65fd77a" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/dokument/{id} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="ebb3fc3f-b954-43ec-96e2-7ef39257e8d3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/rasterbasis/{id} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}/rasterbasis/{id}"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id getDokumentById" id="aa17cee4-d09d-4892-aa8f-57dc1a8afd39"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id getRasterbasisById" id="49759f0c-cb2f-4f8a-a76e-49b8c65b65af"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id getDokumentById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id getRasterbasisById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="referenzName"> + <con:configuration> + <path>$.referenzName</path> + <content>postImg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="id"> <con:configuration> <path>$.id</path> - <content>${#TestSuite#dokumentId}</content> + <content>${#TestSuite#rasterbasisId}</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="typ"> + <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="bereichNummer"> <con:configuration> - <path>$.typ</path> - <content>1010</content> + <path>$.bereichNummer</path> + <content>0</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -22265,13 +24582,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="9bfb83fb-7a5b-4046-8804-67901a8f0807"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="94d5775b-3338-4113-87f7-33d90db58c1f"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22292,13 +24609,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" id="373b11f4-dbfc-41f3-81ba-ce013f0821ce"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" id="8995d151-1693-408b-ad0b-ee9fe3e8291f"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument/999999999</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis/999999999</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22319,13 +24636,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="d5c866db-8ddc-4025-8308-dfbed63a1b6b"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="9e0ea2f9-8728-4ff5-b35a-3b5796d5e2b3"> <con:settings/> <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22346,13 +24663,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="f1b085e6-ba96-45f3-9ffc-12177a151c62"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="edb041b9-fc28-46fb-a44b-087037a15d93"> <con:settings/> <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22369,31 +24686,40 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>putImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> + <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>putImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> + <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> + </con:attachment> + <con:attachment> + <con:name>putDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> + <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" id="cf56cce1-6d67-447e-9904-9514f4def4c8"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" id="aca5362f-e32a-4701-9ea5-c8fab50d60cd"> <con:settings/> <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument/999999999</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis/999999999</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22410,31 +24736,40 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>putImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> + <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>putImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> + <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> + </con:attachment> + <con:attachment> + <con:name>putDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> + <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="7d071706-c3f7-4f81-a013-50322f61a300"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="8d05a382-bae2-44db-b97b-0950bfabd497"> <con:settings/> <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22451,31 +24786,40 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>putImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> + <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>putImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> + <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> + </con:attachment> + <con:attachment> + <con:name>putDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> + <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" id="9cbd2eaa-014c-4015-b507-f5944e7a49e4"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" id="8e2385f5-784a-4719-80e9-1e934e2a4e4d"> <con:settings/> <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22492,31 +24836,40 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> + <con:name>putImg.png</con:name> <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> - <con:contentId>datei</con:contentId> + <con:contentId>rasterdatei</con:contentId> + <con:part xsi:nil="true"/> <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>putImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> + <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> + </con:attachment> + <con:attachment> + <con:name>putDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> + <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" id="51da4eba-94f0-4da7-9024-ca14cd6be805"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" id="27a97564-7a59-4ca0-b78f-804e28b25f81"> <con:settings/> <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22533,41 +24886,50 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>putImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> + <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>putImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> + <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> + </con:attachment> + <con:attachment> + <con:name>putDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokInvalidContent.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokRasterInvalidContent.json</con:url> + <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id replaceDokumentById" id="130d5826-9c20-40d3-99c4-3863a38fbd4e"> + <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id replaceRasterbasisById" id="60528307-d243-478c-83da-18d1a1a401f5"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id replaceDokumentById" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id replaceRasterbasisById" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestSuite#dokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="typ"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="bereichNummer"> <con:configuration> - <path>$.typ</path> - <content>1030</content> + <path>$.bereichNummer</path> + <content>0</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -22583,33 +24945,42 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postText.pdf</con:name> - <con:contentType>application/pdf</con:contentType> - <con:contentId>datei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.pdf</con:url> - <con:id>20c61354-f2d7-40a6-9847-7dce2ebc979e</con:id> + <con:name>putImg.png</con:name> + <con:contentType>image/png</con:contentType> + <con:contentId>rasterdatei</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> + <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> </con:attachment> <con:attachment> - <con:name>postText.json</con:name> + <con:name>putImg.pgw</con:name> + <con:contentType>text/plain</con:contentType> + <con:contentId>georeferenzdatei</con:contentId> + <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> + <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> + </con:attachment> + <con:attachment> + <con:name>putDokRaster.json</con:name> <con:contentType>application/json</con:contentType> - <con:contentId>dokumentmodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putDok.json</con:url> - <con:id>262fdc19-67e6-449d-85ee-9787a4c968e1</con:id> + <con:contentId>rasterbasismodel</con:contentId> + <con:part xsi:nil="true"/> + <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> + <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="PUT BP 6.0.2 pI,id replaceDokumentById Property Transfer" id="19f7876b-fee3-4012-8b07-9d902dbbe102"> + <con:testStep type="transfer" name="PUT BP 6.0.2 pI,id replaceRasterbasisById Property Transfer" id="457e6bcb-6660-453f-9076-fd0a546b8f8a"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>replacedDokumentId</con:name> + <con:name>replacedRasterbasisId</con:name> <con:sourceType>Response</con:sourceType> - <con:sourceStep>PUT BP 6.0.2 pI,id replaceDokumentById</con:sourceStep> + <con:sourceStep>PUT BP 6.0.2 pI,id replaceRasterbasisById</con:sourceStep> <con:sourcePath>$.id</con:sourcePath> - <con:targetType>replacedDokumentId</con:targetType> + <con:targetType>replacedRasterbasisId</con:targetType> <con:targetStep>#TestCase#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> @@ -22617,13 +24988,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="209c8b35-fbb2-42a2-a79d-d0f9a1d1d537"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="8469a42e-2148-440e-887f-62d9fbe19151"> <con:settings/> <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/dokument/${#TestCase#replacedDokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis/${#TestCase#replacedRasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22644,13 +25015,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" id="18e48297-efef-4bd1-87c2-3ef8516290a9"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" id="367033df-565e-4e08-8be5-fdff813bb31f"> <con:settings/> <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/dokument/999999999</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis/999999999</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22671,13 +25042,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="b38ea79d-b53a-4669-986a-5df82bb74fae"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="2a403e57-7682-4b5e-9d6e-b91b73ea0888"> <con:settings/> <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestCase#replacedDokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestCase#replacedRasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22698,13 +25069,13 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id deleteDokumentById" id="d3318fe4-f665-4f8d-9275-505ca5abe89a"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id deleteRasterbasisById" id="d197eb2e-f916-4aaa-9562-8a9ad5662b23"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id deleteDokumentById" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id deleteRasterbasisById" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/dokument/${#TestCase#replacedDokumentId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestCase#replacedRasterbasisId}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> <con:configuration> @@ -22714,16 +25085,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="id"> <con:configuration> <path>$.id</path> - <content>${#TestCase#replacedDokumentId}</content> + <content>${#TestCase#replacedRasterbasisId}</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="typ"> + <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="bereichNummer"> <con:configuration> - <path>$.typ</path> - <content>1030</content> + <path>$.bereichNummer</path> + <content>0</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -22743,14 +25114,14 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="Cleanup Properties" id="d72bc92d-659e-4390-b267-6152a74dd939"> + <con:testStep type="transfer" name="Cleanup Properties" id="6fd8be50-3542-4623-abaf-d90daac7458e"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>replacedDokumentId</con:name> + <con:name>replacedRasterbasisId</con:name> <con:sourceType>empty</con:sourceType> <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>replacedDokumentId</con:targetType> + <con:targetType>replacedRasterbasisId</con:targetType> <con:targetStep>#TestCase#</con:targetStep> <con:upgraded>true</con:upgraded> </con:transfers> @@ -22762,30 +25133,75 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:value/> </con:property> <con:property> - <con:name>replacedDokumentId</con:name> + <con:name>replacedRasterbasisId</con:name> <con:value/> </con:property> </con:properties> </con:testCase> - <con:testCase id="ccadec16-905d-4fe8-aafd-93091c764534" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/rasterbasis TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="253222fc-e5f0-47f9-99b7-5b78d91f05c3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Tests für den "/plan/{planId}"-Pfad</con:description> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI getRasterBasis" id="b1d19332-c2ce-4f1f-ad4a-06135d97734e"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI acceptApplicationJson" id="c6005e2e-fd92-46f5-aad1-104f36aef455"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI getRasterBasis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI acceptApplicationJson" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Match" id="98e8e899-1aa0-49a9-88a4-c2ccaf9f4519" name="type"> + <con:configuration> + <path>$.type</path> + <content>BP_Plan</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="5b37bf48-1272-473a-b0fa-8af44fb4bda9" name="version"> + <con:configuration> + <path>$.version</path> + <content>XPLAN_60</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a3bb8ff5-eb83-4e1c-9375-3a648d208427" name="planStatus"> + <con:configuration> + <path>$.planStatus</path> + <content>FESTGESTELLT</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="b04b5ac9-69db-4238-b0a3-31fb43bfb587" name="gemeinden.ags"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].ags</path> + <content>02000000</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="b04b5ac9-69db-4238-b0a3-31fb43bfb587" name="gemeinden.gemeindeName"> + <con:configuration> + <path>$.xplanModelData.gemeinden[0].gemeindeName</path> + <content>Freie und Hansestadt Hamburg</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -22796,15 +25212,15 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="835a4908-c8d6-474e-81ab-8955bb9b0021"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="aacc1bbb-ad37-479c-8572-894b69e18e23"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>400</codes> </con:configuration> @@ -22812,7 +25228,6 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -22823,15 +25238,15 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="93f44e37-e364-40b6-9d66-af2f0f42d19b"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="dbd2d4c8-15ed-4077-a853-2f54782b0f4a"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>404</codes> </con:configuration> @@ -22839,7 +25254,6 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -22850,124 +25264,41 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="839e7f5e-86ee-4064-86e8-e39485049be7"> + <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="c1aba076-6f09-4943-811a-9d1abd46d554"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>406</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain/> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI addRasterBasis" id="2d691e01-0ff4-4bce-84fb-b5b68de9a311"> - <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI addRasterBasis" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>200</codes> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="ef3e40e8-ca3a-496f-a0c9-2fdb0ab4290c" name="referenzName"> - <con:configuration> - <path>$.referenzName</path> - <content>postImg</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="ef3e40e8-ca3a-496f-a0c9-2fdb0ab4290c" name="bereichNummer"> - <con:configuration> - <path>$.bereichNummer</path> - <content>0</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>406</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> - <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> - </con:attachment> - <con:attachment> - <con:name>postImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> - <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> - </con:attachment> - <con:attachment> - <con:name>postDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> - <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="POST BP 6.0.2 pI addRasterBasis Property Transfer" id="963638c6-a6bc-407b-a4ae-ba9bf980b0b9"> - <con:settings/> - <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>rasterbasisId</con:name> - <con:sourceType>Response</con:sourceType> - <con:sourceStep>POST BP 6.0.2 pI addRasterBasis</con:sourceStep> - <con:sourcePath>$.id</con:sourcePath> - <con:targetType>rasterbasisId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:type>JSONPATH</con:type> - <con:targetTransferType>JSONPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="ee7c04b1-7df3-4e01-8716-50a597447493"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="5962a846-47b2-43b1-bebe-f1979b97c182"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999999999999999</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>400</codes> </con:configuration> @@ -22975,47 +25306,25 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> - <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> - </con:attachment> - <con:attachment> - <con:name>postImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> - <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> - </con:attachment> - <con:attachment> - <con:name>postDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> - <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" id="0e7bfe85-1992-4889-9849-b9dfe9881e12"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI notExistingPlanIdExpectError404" id="aab75bec-d024-4b9e-a92b-59c66881a731"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>404</codes> </con:configuration> @@ -23023,47 +25332,25 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> - <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> - </con:attachment> - <con:attachment> - <con:name>postImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> - <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> - </con:attachment> - <con:attachment> - <con:name>postDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> - <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="abb3e882-1da3-4dcb-9a1f-559bb438e7f5"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="851016d5-cfdf-45d8-9487-7a4cd387b4c4"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> <codes>406</codes> </con:configuration> @@ -23071,173 +25358,323 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> - <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> - </con:attachment> - <con:attachment> - <con:name>postImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> - <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> - </con:attachment> - <con:attachment> - <con:name>postDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> - <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" id="4cee4bea-712f-4df2-bbdb-7e4b334e7ddd"> + <con:testStep type="httprequest" name="DEL BP 6.0.2 pI deletePlan" id="fa52d97b-b10e-4e81-b1ab-c53e13a781c4"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI deletePlan" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> - <codes>415</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="e3b7ac04-76d4-4ed3-babc-4ab10275695d" name="messageExists"> + <con:configuration> + <path>$.message</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>postImg.png</con:name> - <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> - <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> - </con:attachment> - <con:attachment> - <con:name>postImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> - <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> - </con:attachment> - <con:attachment> - <con:name>postDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokRaster.json</con:url> - <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" id="5113bb78-6181-43b0-950b-c09cfcc11fae"> + <con:properties/> + </con:testCase> + <con:testCase id="45abf6c5-f8d2-4a1e-8c19-d132aaf8cd8c" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="CleanUp Properties" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Gesetzte Properties werden wieder geleert</con:description> + <con:settings/> + <con:testStep type="transfer" name="Property Transfer" id="13275765-db9d-43ff-acce-e447fb399a29"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>planId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>planId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> + <con:name>hrefStatusMismatchingTypes</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:sourcePath xsi:nil="true"/> + <con:targetType>hrefStatusMismatchingTypes</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:targetPath xsi:nil="true"/> + <con:type>XPATH</con:type> + <con:targetTransferType>XPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>textId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>textId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>dokumentId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>dokumentId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>rasterbasisId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>rasterbasisId</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatusInvalidProfile</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatusInvalidProfile</con:targetType> + <con:targetStep>#TestSuite#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:properties> + <con:property> + <con:name>hrefStatus</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>hrefStatusMismatchingTypes</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>hrefStatusInvalidProfile</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>planId</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>textId</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>dokumentId</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>rasterbasisId</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testSuite> + <con:testSuite id="a24fcedd-6b79-4153-8047-938cac8308a8" name="Workflow v2 TestSuite"> + <con:description>Worflow-TestSuite für die API version 2</con:description> + <con:settings/> + <con:runType>SEQUENTIAL</con:runType> + <con:testCase id="4ba19cf1-4413-4322-842c-f35c0f43425e" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat)</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" id="47384dc8-250b-41dc-a703-4fc11fe6be5b"> <con:settings/> - <con:config method="POST" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="POST BP 6.0.2 pI invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> - <codes>422</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>postImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.png</con:url> - <con:id>bc046f4c-3ac0-4429-8147-60c18d35f321</con:id> - </con:attachment> - <con:attachment> - <con:name>postImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postImg.pgw</con:url> - <con:id>7e00e2a0-8b73-4665-b2ac-b458ef84b730</con:id> - </con:attachment> - <con:attachment> - <con:name>postDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/postDokRasterInvalidContent.json</con:url> - <con:id>8419d223-e80a-4b12-a72d-c0fc95349d12</con:id> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="ebb3fc3f-b954-43ec-96e2-7ef39257e8d3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId}/rasterbasis/{id} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id getRasterbasisById" id="49759f0c-cb2f-4f8a-a76e-49b8c65b65af"> + <con:testStep type="transfer" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan Property Transfer" id="f82933e6-fd97-427c-9e00-803f265c57cd"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id getRasterbasisById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 sU pollStatusOfImportPlan" id="1e098c49-c6a4-4205-9a4d-ddecdfb74cde"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0 sU pollStatusOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="referenzName"> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> <con:configuration> - <path>$.referenzName</path> - <content>postImg</content> + <path>$.status</path> + <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="id"> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> <con:configuration> - <path>$.id</path> - <content>${#TestSuite#rasterbasisId}</content> + <path>$.errorMsg</path> + <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="d9d5c738-aa0d-4eda-b4cb-cd0fdbdadba6" name="bereichNummer"> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> <con:configuration> - <path>$.bereichNummer</path> - <content>0</content> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -23246,7 +25683,6 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23257,23 +25693,90 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="94d5775b-3338-4113-87f7-33d90db58c1f"> + <con:testStep type="groovy" name="pollStatusOfImportPlan" id="3ab9f16e-684f-419a-8eba-e05874263a90"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0 sU pollStatusOfImportPlan" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 sU retrieveStatusOfImportPlan" id="0a5a9eb9-fb3f-401d-9b0b-9513a77026d2"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0 sU retrieveStatusOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d27fd88e-b78e-4e28-acfc-dc25276fc1a1" name="status"> + <con:configuration> + <path>$.status</path> + <content>IMPORT_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a9ed262c-75d6-4a67-ad13-5b40ce1eb9ac" name="hrefExists"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23284,23 +25787,50 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" id="8995d151-1693-408b-ad0b-ee9fe3e8291f"> + <con:testStep type="transfer" name="GET BP 6.0 sU retrieveStatusOfImportPlan Property Transfer" id="8f60fb8d-51ee-40c1-a1ab-cfead1947716"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>planId</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET BP 6.0 sU retrieveStatusOfImportPlan</con:sourceStep> + <con:sourcePath>$.importedPlanIds[0]</con:sourcePath> + <con:targetType>planId</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET BP 6.0 sU retrieveStatusOfImportPlan</con:sourceStep> + <con:sourcePath>$.links[0].href</con:sourcePath> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:targetPath/> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 XX retrieveReportOfImportPlan" id="87f3b812-ef7e-4be0-9320-52c8bcb046ab" disabled="true"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id notExistingIdExpectError404" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="873abd32-15a2-4f63-a5cf-93aa57bee711" name="GET BP 6.0 XX retrieveReportOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis/999999999</con:endpoint> + <con:endpoint>${#TestCase#report}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="2b121572-75dc-4331-8608-63651d9942fe" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>200</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23311,23 +25841,31 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="9e0ea2f9-8728-4ff5-b35a-3b5796d5e2b3"> + <con:testStep type="httprequest" name="DEL BP 6.0 pI deletePlanOfImportPlan" id="fcfe9afc-ad18-49df-99cb-5a7891025f2c"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="GET BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0 pI deletePlanOfImportPlan" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestCase#planId}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="e3b7ac04-76d4-4ed3-babc-4ab10275695d" name="messageExists"> + <con:configuration> + <path>$.message</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23338,273 +25876,516 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="edb041b9-fc28-46fb-a44b-087037a15d93"> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithNotSupportedFormatExpectError415" id="f6834dbd-6794-4a56-8a1c-9a46db64cbfd"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlanWithNotSupportedFormatExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>415</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>putImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> - <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> - </con:attachment> - <con:attachment> - <con:name>putImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> - <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> - </con:attachment> - <con:attachment> - <con:name>putDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> - <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" id="aca5362f-e32a-4701-9ea5-c8fab50d60cd"> + <con:testStep type="transfer" name="CleanUp Properties" id="f6db3459-6183-408a-a68a-d070a034a34f"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>planId</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>planId</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>planId</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>report</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:testCase id="437fdb33-c85f-47bc-8896-4551bd0b8771" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation missing PNG TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat), wenn die Rasterdatei im XPlanArchiv fehlt</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" id="2b2df413-8661-4c46-aaff-51a03681724e"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis/999999999</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>putImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> - <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> - </con:attachment> - <con:attachment> - <con:name>putImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> - <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> - </con:attachment> - <con:attachment> - <con:name>putDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> - <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="8d05a382-bae2-44db-b97b-0950bfabd497"> + <con:testStep type="transfer" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan Property Transfer" id="9db231a3-6738-497f-9fb6-2d374a3b3657"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 sU pollStatusOfImportPlan" id="f196a0ba-4d6a-459d-9766-c46cfe148b94"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0 sU pollStatusOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> - <codes>406</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>putImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> - <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> - </con:attachment> - <con:attachment> - <con:name>putImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> - <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> - </con:attachment> - <con:attachment> - <con:name>putDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> - <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" id="8e2385f5-784a-4719-80e9-1e934e2a4e4d"> + <con:testStep type="groovy" name="pollStatusOfImportPlan" id="a0e1df51-0cd3-49f0-b7e3-1725d1272fc7"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidMediaTypeExpectError415" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0 sU pollStatusOfImportPlan" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "VALIDATION_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 sU retrieveStatusOfImportPlan" id="c5f8a9ca-d815-492b-a437-6da38063f5d3"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0 sU retrieveStatusOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> - <codes>415</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="d27fd88e-b78e-4e28-acfc-dc25276fc1a1" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a9ed262c-75d6-4a67-ad13-5b40ce1eb9ac" name="hrefExists"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>putImg.png</con:name> - <con:contentType>application/vnd.oasis.opendocument.text</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/invalidContentType.odt</con:url> - <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> - </con:attachment> - <con:attachment> - <con:name>putImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> - <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> - </con:attachment> - <con:attachment> - <con:name>putDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> - <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" id="27a97564-7a59-4ca0-b78f-804e28b25f81"> + <con:testStep type="transfer" name="GET BP 6.0 sU retrieveStatusOfImportPlan Property Transfer" id="7d3c53f0-e76a-4820-85ea-a393ce24e492"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id invalidContentInJsonExpectError422" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET BP 6.0 sU retrieveStatusOfImportPlan</con:sourceStep> + <con:sourcePath>$.links[0].href</con:sourcePath> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:targetPath/> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 XX retrieveReportOfImportPlan" id="bfbc155e-88f4-4f2c-a4cc-7dc431caf5fb" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="873abd32-15a2-4f63-a5cf-93aa57bee711" name="GET BP 6.0 XX retrieveReportOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#report}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="2b121572-75dc-4331-8608-63651d9942fe" name="Valid HTTP Status Codes"> <con:configuration> - <codes>422</codes> + <codes>200</codes> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> - <con:attachment> - <con:name>putImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> - <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> - </con:attachment> - <con:attachment> - <con:name>putImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> - <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> - </con:attachment> - <con:attachment> - <con:name>putDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokRasterInvalidContent.json</con:url> - <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> - </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="PUT BP 6.0.2 pI,id replaceRasterbasisById" id="60528307-d243-478c-83da-18d1a1a401f5"> + <con:testStep type="transfer" name="CleanUp Properties" id="4806fe96-bf30-4465-8087-0fa0c36949df"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>report</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:testCase id="301145fa-4826-4743-ad59-773d6dd91d36" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation wrong CRS TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat), wenn ein falsches CRS in den Rasterdaten gesetzt ist</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" id="d36388d8-ee33-4b7e-81a5-b857d9504b27"> <con:settings/> - <con:config method="PUT" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="PUT BP 6.0.2 pI,id replaceRasterbasisById" postQueryString="false" mediaType="multipart/form-data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestSuite#rasterbasisId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="bereichNummer"> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> <con:configuration> - <path>$.bereichNummer</path> - <content>0</content> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -23613,49 +26394,66 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> <con:attachment> - <con:name>putImg.png</con:name> - <con:contentType>image/png</con:contentType> - <con:contentId>rasterdatei</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.png</con:url> - <con:id>322fb9cb-5a4b-4cd7-9892-e2c60feded4b</con:id> - </con:attachment> - <con:attachment> - <con:name>putImg.pgw</con:name> - <con:contentType>text/plain</con:contentType> - <con:contentId>georeferenzdatei</con:contentId> - <con:url>${projectDir}/xplan-manager-api/attachments/putImg.pgw</con:url> - <con:id>7bce64d6-46bb-41e0-b869-673d1c926ce0</con:id> - </con:attachment> - <con:attachment> - <con:name>putDokRaster.json</con:name> - <con:contentType>application/json</con:contentType> - <con:contentId>rasterbasismodel</con:contentId> - <con:part xsi:nil="true"/> - <con:url>${projectDir}/xplan-manager-api/attachments/putDokRaster.json</con:url> - <con:id>db9fe229-0045-4809-803f-8b64a0a59c53</con:id> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="transfer" name="PUT BP 6.0.2 pI,id replaceRasterbasisById Property Transfer" id="457e6bcb-6660-453f-9076-fd0a546b8f8a"> + <con:testStep type="transfer" name="POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan Property Transfer" id="0fef90e9-f502-4b3e-b678-3c3944755085"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>replacedRasterbasisId</con:name> + <con:name>hrefStatus</con:name> <con:sourceType>Response</con:sourceType> - <con:sourceStep>PUT BP 6.0.2 pI,id replaceRasterbasisById</con:sourceStep> - <con:sourcePath>$.id</con:sourcePath> - <con:targetType>replacedRasterbasisId</con:targetType> + <con:sourceStep>POST BP 6.0 xF,sS,sF,sG,sL,iI,pS importPlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> <con:targetStep>#TestCase#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> @@ -23663,23 +26461,58 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" id="8469a42e-2148-440e-887f-62d9fbe19151"> + <con:testStep type="httprequest" name="GET BP 6.0 sU pollStatusOfImportPlan" id="4abf7e36-9bb1-4273-bc30-a5d49711e241"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0 sU pollStatusOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid/rasterbasis/${#TestCase#replacedRasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> - <codes>400</codes> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23690,50 +26523,90 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" id="367033df-565e-4e08-8be5-fdff813bb31f"> + <con:testStep type="groovy" name="pollStatusOfImportPlan" id="e221f8f8-df20-43b9-9463-423096800877"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id notExistingIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0 sU pollStatusOfImportPlan" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "VALIDATION_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 sU retrieveStatusOfImportPlan" id="e808c8ba-5d87-47fe-9aaf-bbccdac273c5"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0 sU retrieveStatusOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999/rasterbasis/999999999</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>200</codes> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:domain/> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" id="2a403e57-7682-4b5e-9d6e-b91b73ea0888"> - <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestCase#replacedRasterbasisId}</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="JsonPath Match" id="d27fd88e-b78e-4e28-acfc-dc25276fc1a1" name="status"> <con:configuration> - <codes>406</codes> + <path>$.status</path> + <content>VALIDATION_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a9ed262c-75d6-4a67-ad13-5b40ce1eb9ac" name="hrefExists"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23744,41 +26617,39 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI,id deleteRasterbasisById" id="d197eb2e-f916-4aaa-9562-8a9ad5662b23"> + <con:testStep type="transfer" name="GET BP 6.0 sU retrieveStatusOfImportPlan Property Transfer" id="86bbf761-e329-480f-acc3-5ee80cbdf883"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET BP 6.0 sU retrieveStatusOfImportPlan</con:sourceStep> + <con:sourcePath>$.links[0].href</con:sourcePath> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:targetPath/> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0 XX retrieveReportOfImportPlan" id="92d2f4fa-c141-4300-8211-51dda5cf1cca" disabled="true"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="814b3598-7ff7-4708-bf40-b084c3dfdbd8" name="DEL BP 6.0.2 pI,id deleteRasterbasisById" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="873abd32-15a2-4f63-a5cf-93aa57bee711" name="GET BP 6.0 XX retrieveReportOfImportPlan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}/rasterbasis/${#TestCase#replacedRasterbasisId}</con:endpoint> + <con:endpoint>${#TestCase#report}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="5bcfd2ec-377d-48c4-ab82-1bb088367de5" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="2b121572-75dc-4331-8608-63651d9942fe" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="id"> - <con:configuration> - <path>$.id</path> - <content>${#TestCase#replacedRasterbasisId}</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> - <con:assertion type="JsonPath Match" id="08ca7e22-f5e1-4b21-853e-823a3d6c127d" name="bereichNummer"> - <con:configuration> - <path>$.bereichNummer</path> - <content>0</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> - </con:configuration> - </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> - <con:domain/> <con:selectedAuthProfile>Basic</con:selectedAuthProfile> <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:preemptive>true</con:preemptive> @@ -23789,15 +26660,31 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="Cleanup Properties" id="6fd8be50-3542-4623-abaf-d90daac7458e"> + <con:testStep type="transfer" name="CleanUp Properties" id="b4a783ea-b823-4f80-a052-a2cacf6652f9"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>replacedRasterbasisId</con:name> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> + <con:name>hrefStatus</con:name> <con:sourceType>empty</con:sourceType> <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>replacedRasterbasisId</con:targetType> + <con:sourcePath xsi:nil="true"/> + <con:targetType>hrefStatus</con:targetType> <con:targetStep>#TestCase#</con:targetStep> + <con:targetPath xsi:nil="true"/> + <con:type>XPATH</con:type> + <con:targetTransferType>XPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> + <con:name>report</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:sourcePath xsi:nil="true"/> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:targetPath xsi:nil="true"/> + <con:type>XPATH</con:type> + <con:targetTransferType>XPATH</con:targetTransferType> <con:upgraded>true</con:upgraded> </con:transfers> </con:config> @@ -23808,49 +26695,53 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:value/> </con:property> <con:property> - <con:name>replacedRasterbasisId</con:name> + <con:name>hrefStatus</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>report</con:name> <con:value/> </con:property> </con:properties> </con:testCase> - <con:testCase id="253222fc-e5f0-47f9-99b7-5b78d91f05c3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/plan/{planId} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/plan/{planId}"-Pfad.</con:description> + <con:testCase id="184da798-81c7-4677-bdf3-d4ff823c0b21" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Profiles TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI acceptApplicationJson" id="c6005e2e-fd92-46f5-aad1-104f36aef455"> + <con:testStep type="httprequest" name="GET XX X.X XX showConfig" id="0a19d2a8-8323-4881-8650-b63523e5b373"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI acceptApplicationJson" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="ada729bc-f24a-41d6-bcf5-4dd34948e273" name="GET XX X.X XX showConfig" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/info</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="860eaa41-d4c0-4b28-9e32-132c7e894b18" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="98e8e899-1aa0-49a9-88a4-c2ccaf9f4519" name="type"> + <con:assertion type="JsonPath Existence Match" id="1beb64fd-81c2-46b9-b690-f88938a487fc" name="hasVersion"> <con:configuration> - <path>$.type</path> - <content>BP_Plan</content> + <path>$.version</path> + <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="5b37bf48-1272-473a-b0fa-8af44fb4bda9" name="version"> + <con:assertion type="GroovyScriptAssertion" id="bf3730ab-4f4d-4167-b404-d09046ef994c" name="versionNotNull"> <con:configuration> - <path>$.version</path> - <content>XPLAN_60</content> - <allowWildcards>false</allowWildcards> - <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> - <ignoreComments>false</ignoreComments> + <scriptText>import groovy.json.JsonSlurper + +json = new JsonSlurper().parseText(messageExchange.response.responseContent) +assert !(json.isEmpty()) + +assert json.version != null</scriptText> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Match" id="a3bb8ff5-eb83-4e1c-9375-3a648d208427" name="planStatus"> + <con:assertion type="JsonPath Match" id="a525ec99-c1ee-4ed3-a1f4-19760fc2d1c0" name="supportedXPlanGmlVersions"> <con:configuration> - <path>$.planStatus</path> - <content>FESTGESTELLT</content> + <path>$.supportedXPlanGmlVersions</path> + <content>["XPLAN_40","XPLAN_41","XPLAN_50","XPLAN_51","XPLAN_52","XPLAN_53","XPLAN_54","XPLAN_60"]</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> @@ -23869,104 +26760,63 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI acceptApplicationZip" id="69c23822-33ff-4d3a-a5d8-219aa6286d44"> + <con:testStep type="transfer" name="GET XX X.X XX showConfig Property Transfer" id="5c00b85e-4cdb-4b50-a290-fe440502f3d5"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>profile</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET XX X.X XX showConfig</con:sourceStep> + <con:sourcePath>$.profiles[0]</con:sourcePath> + <con:targetType>profile</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS,pf importPlan" id="2d520618-0f96-43e3-8abb-833622c02afa"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI acceptApplicationZip" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="POST" xsi:type="con:HttpRequest" id="fb82fa77-b86e-45f2-8c0f-866cb490b0d1" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS,pf importPlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/zip" xmlns="http://eviware.com/soapui/config"/></con:setting> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment xmlns:con="http://eviware.com/soapui/config"> + <con:entry key="Accept" value="application/json"/> + <con:entry key="X-Filename" value="soapui-test"/> +</xml-fragment></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> + <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="de44e7cd-c4f2-4f55-90d8-367bea84ef1e" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="3b9edcd8-e636-4b11-96e0-a12f3b422da7" name="contentType"> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="uuidExists"> <con:configuration> - <path>/data/@contentType</path> - <content>application/zip</content> + <path>$.uuid</path> + <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="aacc1bbb-ad37-479c-8572-894b69e18e23"> - <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/invalid</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>400</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" id="dbd2d4c8-15ed-4077-a853-2f54782b0f4a"> - <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="statusLinkExists"> <con:configuration> - <codes>404</codes> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="c1aba076-6f09-4943-811a-9d1abd46d554"> - <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="GET BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="JsonPath Existence Match" id="8b1c937c-2310-49dc-8b48-114ced3fabf3" name="hrefExists"> <con:configuration> - <codes>406</codes> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -23977,74 +26827,120 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:preemptive>true</con:preemptive> <con:authType>Preemptive</con:authType> </con:credentials> + <con:attachment> + <con:name>FP_6.0.2.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BP_6.0.2.zip</con:url> + <con:id>e65ee7a4-20dd-461e-a899-ae69d9a90731</con:id> + </con:attachment> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>skipSemantisch</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipFlaechenschluss</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>skipLaufrichtung</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter required="false" disableUrlEncoding="false"> + <con:name>internalId</con:name> + <con:value>soapui-test-id</con:value> + <con:style>QUERY</con:style> + <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>planStatus</con:name> + <con:value>FESTGESTELLT</con:value> + <con:style>QUERY</con:style> + </con:parameter> + <con:parameter> + <con:name>profiles</con:name> + <con:value>${#TestCase#profile}</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" id="5962a846-47b2-43b1-bebe-f1979b97c182"> + <con:testStep type="transfer" name="POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS,pf importPlan Property Transfer" id="9b549a9d-2929-4756-8527-7b00357853d5"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI invalidPlanIdNotIntValueExpectError400" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999999999999999</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> - <con:configuration> - <codes>400</codes> - </con:configuration> - </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 xF,sS,sF,sG,sL,iI,pS,pf importPlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI notExistingPlanIdExpectError404" id="aab75bec-d024-4b9e-a92b-59c66881a731"> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="7672cc36-9f90-4575-b8db-d44c16e65fff"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI notExistingPlanIdExpectError404" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/999999999</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> - <codes>404</codes> + <codes>200</codes> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> - <con:preemptive>true</con:preemptive> - <con:authType>Preemptive</con:authType> - </con:credentials> - <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> - <con:jmsPropertyConfig/> - <con:parameters/> - </con:config> - </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI invalidAcceptHeaderExpectError406" id="851016d5-cfdf-45d8-9487-7a4cd387b4c4"> - <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI invalidAcceptHeaderExpectError406" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <con:settings> - <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="invalid" xmlns="http://eviware.com/soapui/config"/></con:setting> - </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> - <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="JsonPath Existence Match" id="8c1a42b6-d7c1-4c77-91c6-b7d4c3fc4530" name="statusExists"> <con:configuration> - <codes>406</codes> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -24060,22 +26956,81 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="DEL BP 6.0.2 pI deletePlan" id="fa52d97b-b10e-4e81-b1ab-c53e13a781c4"> + <con:testStep type="groovy" name="pollStatus" id="4ebd1bce-c2a9-479f-8bdf-f6747f908e6b"> <con:settings/> - <con:config method="DELETE" xsi:type="con:HttpRequest" id="bb47d485-53e8-420a-b18d-620a3ba2b7e3" name="DEL BP 6.0.2 pI deletePlan" postQueryString="false" mediaType="application/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatus" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 40 && json.status != "IMPORT_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 40) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="4d4ef268-51a5-47d5-b94b-4caacfe7c0fb"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="d219264b-19a2-4e32-bda8-d1d431e563e9" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/api/v2/plan/${#TestSuite#planId}</con:endpoint> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> <con:request/> - <con:assertion type="Valid HTTP Status Codes" id="a8bfebc1-8840-4207-86e3-e063ec337347" name="Valid HTTP Status Codes"> + <con:assertion type="Valid HTTP Status Codes" id="706a255f-d031-4dfe-b078-d7098c7d2b4a" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="JsonPath Existence Match" id="e3b7ac04-76d4-4ed3-babc-4ab10275695d" name="messageExists"> + <con:assertion type="JsonPath Match" id="d27fd88e-b78e-4e28-acfc-dc25276fc1a1" name="status"> <con:configuration> - <path>$.message</path> + <path>$.status</path> + <content>IMPORT_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="129ac743-0353-43ba-93a5-97580a06afee" name="errorMsgExists"> + <con:configuration> + <path>$.errorMsg</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="320f668b-21ff-4589-a944-cfbd07931e2a" name="importedPlanIdsExists"> + <con:configuration> + <path>$.importedPlanIds</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="493b851d-f4cf-4289-90b8-3cb49d482b72" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a9ed262c-75d6-4a67-ad13-5b40ce1eb9ac" name="hrefExists"> + <con:configuration> + <path>$.links[0].href</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -24095,72 +27050,23 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="45abf6c5-f8d2-4a1e-8c19-d132aaf8cd8c" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Cleanup Properties" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Gesetzte Properties werden wieder geleert.</con:description> - <con:settings/> - <con:testStep type="transfer" name="Property Transfer" id="13275765-db9d-43ff-acce-e447fb399a29"> + <con:testStep type="transfer" name="CleanUp Properties" id="305457bb-5704-4cb3-bf8f-968f825d2642"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>hrefStatus</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>hrefStatus</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>planId</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>planId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> - <con:name>hrefStatus2</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:sourcePath xsi:nil="true"/> - <con:targetType>hrefStatus2</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:targetPath xsi:nil="true"/> - <con:type>XPATH</con:type> - <con:targetTransferType>XPATH</con:targetTransferType> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>textId</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>textId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>dokumentId</con:name> - <con:sourceType>empty</con:sourceType> - <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>dokumentId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> - <con:upgraded>true</con:upgraded> - </con:transfers> - <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>rasterbasisId</con:name> + <con:name>profile</con:name> <con:sourceType>empty</con:sourceType> <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>rasterbasisId</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> + <con:targetType>profile</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> <con:upgraded>true</con:upgraded> </con:transfers> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> - <con:name>hrefStatus3</con:name> + <con:name>hrefStatus</con:name> <con:sourceType>empty</con:sourceType> <con:sourceStep>#TestCase#</con:sourceStep> - <con:targetType>hrefStatus3</con:targetType> - <con:targetStep>#TestSuite#</con:targetStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> <con:upgraded>true</con:upgraded> </con:transfers> </con:config> @@ -24170,38 +27076,17 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:name>empty</con:name> <con:value/> </con:property> + <con:property> + <con:name>profile</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value/> + </con:property> </con:properties> </con:testCase> - <con:properties> - <con:property> - <con:name>hrefStatus</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>hrefStatus2</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>hrefStatus3</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>planId</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>textId</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>dokumentId</con:name> - <con:value/> - </con:property> - <con:property> - <con:name>rasterbasisId</con:name> - <con:value/> - </con:property> - </con:properties> + <con:properties/> </con:testSuite> <con:endpointStrategy xsi:type="con:DefaultEndpointStrategy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:endpoint mode="COMPLEMENT" username="${#Project#username}" password="${#Project#password}">${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0.zip b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0.zip new file mode 100644 index 0000000000000000000000000000000000000000..858e2b6fdad5c6805881d01bb28bb2e191ead4f9 GIT binary patch literal 390327 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%0ASu<KQA3OH_+rn`Jo_hm6 zwQ!GN!nY3{ujv)vSmW4Q5zYl|$gh>!k?1ku=;ZQZnpVjR3Il!bCFR@%jzm#mDn;X( zxX*_6zcnP2OeY6bPF(J#={V=MH?wC-Ys>t>hPOa#?TU*61>@?o>ks>`38(pmz^|*# z#0~g--xN8&JN@j9+KO!sK;0a18eTQuGREGSaaz=29TU`xbhHs_NcL{btI@nCXSykW z-=zLf&#)or&e;kjbtB&l%{i9vSD5XAY?0rJmb^0jqxj3UPy{F?Gf&tL_stdQ&;L5x z5Rv3-@Yf%$(q{es68;ILT~cIJbl^ndspca9e^mBh^s}2|R<}{WVaEA;H>u+rcluD< z&py<8w7~LsD;0l1m@&gfMWHo;m#BdGz2rZ`%3Xa;(rwhgP4m#N10bFO_k|Y&zqmx4 zrc2N7JC3xh&B7e0a)wyZogms*);iL_aR>gs`<apjkY(MTs5AwNJ9Rh*=Zw<(t>ADM z7fbC}x4Zn5^|EMP%E>hYr-Q7Ai3j8=RPBV+-_KOid|NdCd1br(d85~V!z7c>=O)Gv z5yRyTcd<suP~9`q+h!7r$J#x{jt%GWUn7gmkKu++_&EM(|8Hu4^JnfwuB5nnp<$~# zw=7o^3Cju5qBypvJ|+@P1f&o#$+#82B>y^?j@9Hg{g^W^Ug{6!1n_A1$^xmTmrnw7 zD^*1ai))_orwMCj<zv)ZMo!c6<A451T5tQ-+$8s;##a$esO`-CK&F$cKMzWO?ds3Z zPtDCY<EAU2r!U<^N8FhkC4EsOf0l}>JBo-|%EWGtX<C|8mX#sEUCi2(zY-eYa+3AO z%$fN!XsyOegmam`UD}N4q<jwCIL%6xb|lRm<L~D2rx=M?Cm%P#Z@z9{j<+K%)k8#+ zAD`rU^yXg>93*#Yzm3{uYa5kYtGfNT!jBXC<Ah(c_V0^6EDL@L?669k&uwrB9j;;) z34=u!v6xpQge;H|huPk?bUn#p+8ynZ{NUX9421^n0a^!6NgmjO$-4iY?d{3#=0)PE zzm3(3O_<dgV)l187}l;KR%|`|z=c|`#i0|<i!DJj?0mTAiPff8uLq4b4D(ozlQPA^ ze?(f>F1kEILx5Y4hrX1a&Wa{GP0F%^V?OWP<(d7#owpnDtANF;qR5V|s{2t1YpnNE zL&+Bwgr03Pj`QPBm!$r$>YfOiXz8bSte<fK&CK6=^2EsMw=?JYmPt0LMUd?izlavt zuh2I!w`mxLJ}^^TS9s&A;pV1{_?1IQm~JvA{tEao()r8%j#HcaIXpqnUm}MT7~)bY z2qG0&udBoe7|?Rm!9|I=ME>2t&ZahX0EVt93twGYda?7L$uk}%F%aOe*^oZ-z0J)n zl<HQQEjT<R3~kaR$k<>KSwCnnL_06EqgFf3TVG7Usy<K>FfAa$ZRRx6*ICXqkLRi~ zD(B0N>r!vxQY|N{EhE2P#Y65BoylVUz~90bE$FSE>|gV1P8mAA@hEv{I@A-wyG~FU zcO7(|;qYXne&<b3$=hyU^~P6{^tF_1?$vj|cLiS|hY9n{-tL?DnVU<RXJ4`4?B{N( z4=!AErw@9PXpKiGS`-i_dd2!Z-VqKJaO|3I$a8rB5$ex1O!+F>ND}CU<}1ho$HcU4 z&Xbn8wus9KUt#iw=b5ONFXY*Ympvy){XfPIxzRXBaJp|&^kN7tW@#SH-E$?5_-F7f zHz`vHZ*@kN$gwYI*$Iec_>3`2vD&|8C!Z$7dHR#D?!KFd{ldFq8rZ_?Y+!bczcJh= zdYHK}Obn~8l<!U);*~9Lb-e5s{Brkq(462o>FuE7X_WUfF*7Y~?CJ_L*M#VjbZyD4 z|5b&!`Y*7~J^v5C;8wB8jRKp{!N;TKY?j#j=qv)S3FF6Gp#2L}Jvf@Ck$Jw`_|$zL zBc)a&$HfC_YrU?NJxwmRevC9@h^fVWUx9msu8XwtTG}$Y-(l_yQuu>ZiZMKFa4MdD zdc|4Y4RZaJS$4cpF2CM+=pE32J9O{;pfquHbb4qW=upNpo0^l8<%|Oqnj~3B%yH0J zbSGNKaZLJ0G1Jo__=KSdmPu0Av)vRz>XuM8f1e*d5^;TC!CuE6?V?Rid58-qyH3^e z4v`S>Xq(w2_O`F_J#`yS+*MWaq$PACVX6B;W`rH!;h#vmyjX6dX}7ZXUGMea3w{g{ zE^%?)zuOwto8l}dR}qpaU9!p39BVI|=zj}<4`tmd;-A0Jd>b1rWUp<aCXkf%5JXj& z(?%oqbAIOu_e%BcMyf1g|3bNmPk*878N+C$_>9b3yc#ZXB>CN&jKc+J^z$e!R$K3} zo}NjO!*9PbX?~w+{YbQVud1qA#xwDT_nC%ENOs-eB2Z@BdUzRmRLc{q^f;hC(KcS= zT<Ciln9$E)Ceirg+qibYzol!=g2*LiU$FHRl<bAp@_PBYpONJzyC&3lap3oMNghj> z1nSt?O2pAuxY{y~Y((>QWm~zmx+0``kzEtBl~C~B`$(79Z;ag_?rPW+d^%q?eI)A) z+V`i4;`0vAPEO9P@e*Rx{gTq;Cn%yo=PB#I5;XsMe}piyu28+jZZH0phzy(8xlU%- zIu7}^5QOqMd=j6{&CnVFjao4>lGS%^n4RHe>$WN>x~DJ;{3RwBD7#LPv(5$H`CHtg zb>w&>Z+c$1sd+!NlkdyU<-DJ2)r7*qMwuQW^6{FN1$5F>1eGrgI&+qn@X=jRpI|(5 zZn=8&e{0{Ise3PGbvm+Py_ONwRE%e8t{*HC^010!6`j1gquci)Dly9#p|dV4_p1>M z^>VBp;g5N9X<Dq(L{DEMZ?9@rSs5#>ZCKw6uuFRDXsi0$%9k$GyQZD1Ta#_6dB@_j za}vWB*z0q4vN@Ck>`VC^Bp>yCjJEkRAngDSj}eEFiHLz3ATsA_eBveEt|a^y^^_W+ z-^*h9rIG$uvw!}toj{Kr)%eAC2fEp*rP9DZf$y%)26X3o`D<@$2t4}%iMs9!xkRp5 zLz~x>JGt2d!YGso=KIGKZVlO*K0hV~S&Dj;Yx@uJ)5lXhZJPt%Mp^!i8piuI%d}jK z;mRSX%;afOZxem*C35@~Wk^MDGltd0(&EnTBYy~x5f;1><euwPBonqhWp5o@S<E_) zCU%uL$}COmEKcA0ZFcopc%=mX(^2JNuaVZ4T%|~x_Eg$hy}VJHzLZn-9N=AVvhkPE zyL&4hS16v;hMJOn<`_!h7#fp~68h37YAf+jDU*;h(Iy<iDQwc)aA^6(<ap8_Vhu(% zd+u)6I(KTn+GQ8stTpWNbbhRLpZPZ%IMbtjj2rO!hMtG4C;_x`vtK-2c?kcj``Y(@ zmOiaA6BRs?<%=tmL?feuzv1s_NbL9I@w%}9`=xrzQkUI&!=c^h(r9^XPn#e%NwUJR zqZ0nqR%C8obI553lmAhvC_XpLK+ADjYWk3pev%9A9ja?gO6JH^S`4lL$M8j9NmjWi zfFtT@n8tCKhGqDeBduVcabxK<NV}}|Co!zDvG{Zo*M><Eq8{^7c;qnc`BVDP?j4n@ zW|~m8*=)0nW(NL~h#^1-);*lcG<a%~Ht#Sl<{IJoZw9q4exTya#zW#oTcFcpnOYot z3Nd;9d7ok8MIQLeS*jY}&OC^4HXHqHek9trki`t)0ZrLZ(bfLO_GYV`_uB6^|7pcq znPpXcr7X$RiIl8*(?{O6(_X2ku1Ns8#E%VP6e^AOGKO;ag<<O+Uaik&B=kO+=N?A{ zzt7#`)ty1jB$=LVJSh-6N5&ztP`U~o#1`s-pW26a5@JsFZ#Q=W7?kg#G^NkA2t;|6 zyNRHMR=Pu%y3OYtlw|`b)dq3*;r7-QADbZ^AkL#C(r*;ZrH!#b?A29K>Z;o4&;q9t z!Q)`WADD*?oD{6wCYoO+Ldk=^{(^0?1)Ca-5X@mhnKGa^Oc9g>8~tK4y06aoCmUvf zjHOd6uGkm#0u9cCUZON;(H@1Obe;447n?2V2SfMLX@lf=K%?N6Oe4VHEz9_=(H~PW z7d8Zs1cQu3kYpTGLnX^%0j9DbF#B(r<XCzw-UXBt#=QRzGIGHL^O%V=0|kd?*Q__f ziYVD5b>VIDbzBRU*VweMltOHs_8RWrf!omLRe%?8Csm!Ep_(VxE|pEpmT}zva?5Zv zn+>CB{oz)|I3WxU&_=9Cav?;*jj$BFEdCC~0M8Jrd0K5y^xCNdKZhO}b?C3{&fQmE zTEhvl;kxsZ-FC0x;+w~@p$gr)+HU-pHzPx8k^kO>fAcbSgy?M4TykP4_r}sVVpdd| zT)p!qj+tqn0yX{vr3K@4)?21$6NQqyLQ0A`Hu@cKu3PX!z#yua63tT{e3Zz&pUDPI z#PCUKH$(Yt1{!(_TeFZ+Bv$tk3-OV4PQ4zs_CfvMo3jNYVSRpi(zXcreaa;QcMHA) z;1zwER<UBBpxfAblYV0QsumSg7!>3w0TT`lv*Nc1hxYkx`p@d~%=@5+=Z|Z9_kyYX z2Hwldn?Lg)bC&;fZGB%dkmq0A->w{tUt6dXtm<UvzwIqWMLcz#SB;79&OE&p+!6d_ zAC@f~zI&-5JT4~VEhaOca!$=9zb?4woMJ&k5x}662Zu;7o6)_%S#?aR5gX-&lSy-$ zb9+JmdFi%_Y0XE8LDwEGO{W_d%-G`py?&8ZXd6iLgeJ>~hf=&{&pyh<lb?2cY+p0J z$%AJiL<>8=EW6#$n5Gyex{=cJ{@yC<>Fuc$G=j&N2C|38Uk(W%#zkVnk+4fti@H>D zstCpmpdiD9d7t}fRvs{F%v!x?t_z5h3uC~KtEw3dZC;nt{tFQp@0Liv6=kx{-0p!w zmIcLf`LpiaQk|0U2pdTkDL=Gp<PJ!D7CicJ@K;ZW8UX4k1q7mW<&n#9D0YH0Unbk! z@JhjO)x`t*hK8EU##d-w1Ub6ja)EvIto!P=9vd6ek1Y20>3_pRT7MWfRaNZ{|B%qI zQ~5)%UyYJBzk+nrsI$Q>2z$}!>Kid`vPImTvTy89v5O9+?+K+(N~4eU%O+7lLr2m5 zSjK}yJq+nB2;4BUWlc-=-)m73RbWYpJAK_rmL7<Td)d90`H`+Ds$Y_hD*kX+k*d-S zq{no6E9eY4`o`H-Soh6yd*3dXktRIEZKG(_knrxq%x^BoYax~T?Ac4U(G*1V1*w(D zGD`0=zN@YCqhTjO7C8)U)Cy&P!iD=>k<ah9V^*{af~*m71D|^AOUmh17-(p?*cp~D zuE3IF->nFLH|QA)ViMQ|aFi&w7trNK-3PjOr{75BxvggUcx7$=6Ok}PbD5&CoF``H zE_59&#=Ext4fB_lun8@mm@5edXAnI4su)47b><QD-FRplyaUVoCtP_DJHP4)oYyli zh<`p3-co28Vp1xy%zq)6_N%rUgZBC7ajg4(W`<w>TK9Jd=K0uKg^0F8?sT^*Uj22$ zKzo7G^MUD}g3gZ!KD|38|MlA4n_%LjUG#FUx?>6jL;ldTbb7AqGOYg8C7UOo*m2LO z8SE4uyqGMzH=H+G^McO!C%waoTjGFGDE+dEGA(Z6=GSRE=YQ%Lwk>#iw*<j0{6o4k zou~7NW@zXRdX=1Fs<XbLN|%O7?uF9{1ZVmK_v=*rp6+1dxB!l&zV_lkwQ`|3cO}zR zkMf(vmU>YGee$KjCTF<5rQbFTIH&7d+rnIWc<0+&UmRxn9nPMrCfZs8NI?rMZ)K5c zjxIGefAHZb?lQ&owFqFEoi=vYEHe!ycXo^!XuG+gm&5iKUUR^Il0y{FSRYiB>F5D= z8{h@rj0n>@bj{M8!Ea1HooH$Q5_!HI!6{UzNc>H!H)476vYD$$1j^T9_gaCDCA*{i zuz4gY``zfyR+>w2%6X~7ewi?93^pqoLG7r(PpYx8Qkq327j0?38d>rGLN)y!46zz4 zbg1L>ID!c&tO^q=xWT#rqoGrZa@fni)buD5V@;^_V%GV_Ly-5q`OyRK{vFv3{)@Tv zmT~&95}1nH^l-!1CKTqa9xa$-oR%o(`U+xHp)BXJ)hTLcPz2}&2c|4&z$r8?{kp?5 zuQqT**VU4qvTGH9;W+#k_B@}`1a$q`nLK>EW<3-}*zhjEqlrAy4GSG=#hQ9`MN$K( zVVAQEew;)g1uyauJ-7-u@<4RLrS+5VH)@<z>$L7nx~HAB7~_8AY)vxFqbbWC?7|ur z5aLNxd^?|I6*8N&(*!$VW@|ILW36r3;IkGkj?D&-NK%zi9KH`!pFn9q3BqoZ*)qSg zj2)-JU>J8DSpcz2Kx-Z~g{&xnUhShrwY!Ll`x5?4PjIf2ZpQlmu9Su5mWN9!n5rp$ zM09m!{#MjI5@;(5=QHz8iPb3QnlI5Pt!K|>d{BItps%Zn`Fs0!VnXt>)8B*E)su7( z%%RHin{9Foq<gZqF+^gRlWBRNwrCGEa918#Y47eJT;O9*F?;|$oYVD6Vpw+lM1Z;D z`6CcNUGC)BM$OO9iTFD20@K&eiS&AFm3*jUt3J@n?R0+C88~p4w3-kbV4a}eev#DJ zIBFyD$}pFW$Sw@RhwH6UUCP!FNzk96U@py<%b8iz3H=6QFzRKXlPP>+=tr2%Wr;2? zAV>%3hr<gfyvfuhJt|bhB{7Chj&-A*i@C|N1gF^18UTy+QZUK{rxj5QG7Q4hgv-*u zk<hJ7fex7ngA3=5DT*AWvEHF6b`ZXrA|v}ajCQ7CzRTR*uZh?!v+8aOCLF_C#UHtH zc7>167W0&kwTiDPWEO`BqmI2(8TFe<|A7)IvLNtm{1fprPnAG|tpKKxm`3NwuR2i+ z`o>PCC|o(sJ=86ec8HuptL4tkWY8XuleSg@{VD}GlX|Mk<8U2atpH|omF!=Mzj7q% zwDFu;;N<&o){~T|j>O2*E>CU7Na?paPQ6*KCAY0bLehv~+NJtJTz~Wh{lGH^Muf}p zEKcaDy{G7~MqM;iw{90P$e%9BlJ>QvK~;i_9f!mg1p^H($E7xaY}1u&-tEz-2gsL@ z4X6Dq@6mrn*R`5?tZ@&tfNfFYu$h1|hvtw7gT)@Q;Lyn+u<}y9++y)s1<3uG4=eJ4 zhB1N8yhfP!7}m1W`#qGbpJ+wR%Hlb&bVen`vTCH3kAN6YUa|G}kMhMIz4&BYeh>Wf zhdE{Y#WH;FWk_&-D4;eK8^xff{F|H&IQh%ilGCMPm3*mD_&6YZBWWva{4YIqUHCFj z*xBCNUO!^{>aA+Ifu##1H;azxoz;8Lw#xVSZaNn}tc|t2nt74nlK$1hPhmLAqi^}k z=K*Av9?L9_k3!*Y09l%dvi=$|G^)vVWCEn6%|yrjKgi32e3R<<sA<`w2D8*!9+Vl> z;$v~S$8_1p8dBdsGVs&Q1@Z5GoCc%`P^ivjhStvFcOt{InZo?MBXU#7=LCu{a4~yN zm!9d2Ab%GC_zQ9Uo4TAUY=sw_9Dc(T79l<T7TbuDT9V2b*vr;>-8;|j^zEED;l}@~ z=k9k+r>61MMUw_CBu&YKHw47Du%y1eTCO$i_rr`;bg}0hvOhZIOXqssGB)M_1KCZ# z6Wx_L4BWh(yWO|9O1gxR)1|HN7B(~-4e%D0h=~gqOpT4&LnAua#BsC^+$IFXaaIo8 zKbRecOw|B=KVD9obEIy!OvU_9nhhmqbI!fdyd0fda?Xbqg3qFHc&|S&hDHJfg+H>g zB&TQOMoV#~s&S#bMcGg(HNG}**Gp!~6zC&XBLrgOmfzQ4G~QSA#&U~6vww#+5H)fO z2YRW}2hq_uG{Z5c|1vT{W~_|90Mju!LB9xBE{w6&Cu!OxYuN!Ro*2=VvpncB;{7qz z(Tl>G+1<>Ba%Tn@8v}9sm&UU7cwX(kD1Z9Pj~h@}T*7-l0p=9Zn;K&)x@U%kciEDI zoqvPwIdCGy0?XXcQ}n}2*}1!k<Ru0b*Y3ioY!$8RLevTKjmgFStsZt}?A`+<k$1U@ zdFI@VWHc)(?K%4$*0lO6g(@kR6eWiV=uS{@pH;Q844+hb6H5CpO_B4$&|w|7w-t07 zB>Ok`mEdn4GbKDWQ@5HlLsS6k2<rFP6rs1Ac61G_5{rD7H@NQs0Y9Ku4Ne;Kpm^-p z4btoJHJaT!?D~(W1Xm$^aoH9(Gv_#V7~NI)(fja7AJ*#4Z}o7~azsxe?bWVczr%GB zJ9LVt&}Lh>9i3bwA}}AeF%D_zmko|;kh0GDm8Zk=OHf#a_kJ1~Hrv&Gzx!B*;-t6F zu|c4EjumTRv3KFOt=)El807sZ?>48=7HNdbbTX$RKCkfVf;L;w$>%v|s9m);hEe|R z>q0OTVhn|9f)JS{E0}nb`gOY%Qe{@sxcz8s`;rdR)f&W0Fy{gNh(9+Vyuy46%!w1s zl<>BmyGAoekr?~}(6hbo6hS(NQT+KT&_TxC2g$kL<&@8rtb7d<Lt%u3Rq02LA_pS> zFsuvSfo!x7?6unO;59o^;l#*6#jl1#Q;gc<M;8d4u)(@bsz7mm=L&jv>w0;(+%4pJ z6qO~o>U%u<W}2X03Xg%BR-I-S=;>^C6+lh-XJJh!d+m1a=jYExB5^lerl7-tu8@Yh z{`eo?4(}1`!oM1nugvA@z**^Rx}P-TFo-quT33yuO1z#%ktV(D;ul0Xieui?3?0@) zj_YHmw3hOiUwN+nY(4r<M-6aCcE(}ldjBd7D^KU2Jb~||8v-m<Cey9G3j!=zm^l{b zZ^V`seP)S&3BLWa6d4ftJZKCE>=V^%zQ5%uKwG}{Cn?h)_=xPKMuqA%Xdct;<ieve zbriN_s`WPc!1&V!PkQkUWno!XT(>lB2IB1m)+rUyMR*`h+qU8qM2|M*L_kr;NZXg< zv1vJ1R@HF=MSjH_a=u8YVvpMzBhpuVDlt+pa}gkmbw(FoX<&|8qU5sry45hGeZ%O! z{Ll$dlWmtQ$`+7uV!~d2kBhQ1P{&sip-`EIiru1{UwVK1X7^P5jS&-}a*ly@r=G`F zUb1xYy}?SjlutIhxKcZ;AsG&vd{@oEb0>W2lvIjR>7aLcw&3P;jd!I;GubSin8dpH zcsf06JRil|F>U<34eZGkm%q%8(Op>O=Pugw{W`eulMIS83+m|@H|gn`bK$s7!a!no zQvEMw(7LI3>Ys@~y(VzNh+aQ)@MQ#+Ss*3MrB29agG0V<G1Hr=tgflbZ4~;tXC5+< zvVmf4or8g)DVN5HOY5cWCaQ6xa;XMj(Gs3dcO9S<*DiZV12(5nr$dF?@V+n`OFD~M zs&&3AN+bOnK@~eMshO*N!<j>BtyBZlTPNa4F=#fiS;0y7u^&rA&ti5$E#z@;37((B z$k|@}-AF00K%%iHZM6uOxx9$_8Sjjko*`|JXc3jLGQfAD;IGBzf~5WL!ZwvUSGC_S zYLoF@B6}PBW6d5|$zkyCqG&1i-h|Q35P1(XhRfvKeX(RI5D(5t%}KDW%-ySFWUyhc zjdZk(B#y^i7Me;Xtcq%0Yn^ZLx*u)*xDNc1R0wt_Zd<>wUqq1eV$Zu)%AV5}c~-V! zLP_zvzOei3?tVfWJ+jN@$aw&NsbtWe4j*Iz%vM=Q{Y6-D&}{ncwb&Et<n2iQAOS0` z_)lDs{nwoOOpO-orMo$Tgn~X>qhSDfO^`^iMQuj(rOv=}zbBTOm(<Wjz0v*J%*vVe z;}71Jw?^Yl@_e*_Es%(wF=6CcO;*2yIs1e~*Jj_dx){_GY(hNQ+qKj`W6U2nDek6g z07nKga#*X9ULTUF0yS8zN|*`)nYT%0E${7q7@VqOkNXOjnP%Fd50e3G!dlY~r1t88 zpgdgRhOh$05MG+Ue`OB!@H^P<=9bXE+u{{!rDXIeRN(zouB7|%gt{U=UeK!!5B)oS z=5Q{leyo38HZLoE@>{d2jrHLg`8BAhWpV5-s5k&QV~-u1<?}u_mxGO&f<hd;C{950 z0ZaR5z7=~{8n6o&)mI7NI!mrAkg3OJ5i~+I?L-oQZm^Xuz-D}|woQe6lIh*o)7Bc> zj~j76GntKpGd@jP_D$LBZmoa&e6!MIWeH$C=WV)Pd#e+X>O{##=5`LW4Xx+7D3^yB zMk+PBo@mj1RB7*qO#GGA-Pt~PYZ6`1-V)UPR!cVZ^)HTa7Yb|Bca&<In`?)U!!18K z5K6R8H8;tyzAdO$<AiT}-MlU~?vgmttIQGle&lcX@7}KMVFz3d=w}IPV_H;RGY+$U zRc0?D4gK91!c%iBxhhrc;$%`&A3mMC9SAdIXONvy8~RhkSL)NTgLhAh|NV|M!es4N zwb=VYl92fKuBJfK)fY!&yu#ql>&DG4riS9t&wG2#;#rfoeH*sCT%v&M1%ir*UhkH+ z=im&R(xzNjs#tJnxni49aAU~ASQW6fwq*-2qCp^YAtF}^pVQLmq5tQ>RDoMVQGe6Y zF4v9F)1nBO-bG8c>gY%qH_-vs&2Qbi-sEn}J72fC(|<fbPUcwzZOa=1=(OwnYx0FM zkIgegRhUuW)_gt+F&Nj>GYz-Tq+@7Hx(j(ksnf0NEa5<?sRo_GYWgic6Xg$AaFSx1 zwMUovR{5&z>yw|C>5v8c*YkyS{?c4mh;PJvg@m>}S*N2V{~yBxFGTUBuY9&~HR-qC zS+aN#4T&*CJS?8%6iH)q5c-)#ph{YpofJ(Ers*?=RqQyN-Y`$oA|#fI)2HsN59mCB z{{{24n1dY(J+>Wz_Om}I#QrX?kBC@)*OAyIsudJr-_lX#A!Qg<;fkp&LpKJ-9j<py zttlUzBc_8?PG|bnoT`_Fj11zo`~AdsTc{SLC$|QC@U64|6rv=zo$|<%)>cCdEUTYd zS8oWXsyV1S?TB`ZQojwzziWTxD2L$&Q<`hBTz_M)Uz^)ya<+{GuTsC51>s3#IBEw8 z={&e}M{mQoGiL72$LPUz^)DbGWwbyK&|Z1CD#UygyrWN@`580#-!v3xbtdvtQFNeq zV5Pd$XH=Pn1^Zkg?(^Zn7IX3=5hexiO5#;ErDILBqZOumWz?hB!v|+}d<oItNClX* zF%1}mv+tOOum_nnSs~F4nkHQR_&DviX$wCXKDqf#nmTJ=yVte-GB)G8J>OAE%?Bdq z1~#gZeGXQlTmE-g1C|*>clN~jYhuYfnEvOb`-9GZ^bZ_O+Mi8Ia>-%j@nwJ-s3!HW zj~g2G=#P3D_3)3`8hyx*#Pf+2q<N@Fyckx6!6;G1NB~is<fq)9G)WO9jsQx9!-99H z>t>{W8=4jj+{>?^K{Xzxu)YHS3$zY8R8yD!$eqc@`T?beA~*2_wgv`NWU0Ma8-}5& z;yX?si5c}|-xrG)N&ZKnTgYb7WpG-p@kTlocJu(Mj0-Z3i6!!AogDDvxRT|4bX2=^ z2_JUPkWOkZ9wJ5>TFC-zrnPu^md>-4T((^c4!^9}2}Zd;@(2yObK!-c`ELhD3>*dv zu!RIDP`^4`$YFUZ{IsJ0NvKE_?$qE0bsNx#QRs6}iSpil?$FlA7ykR^AZKDTiB>Wk zSLBkzA<LlLira0c#Jbm;6{B}vY%DofJ12m~J!^|@lAz#$+)ggksq2Bvo`HaMhJA`V z_mr%b2^Z2PA)!`;43A|6GoUJ&>II`H#F1bHhvz{QK!<UKx7$qrV{YgMhCJp6+*8Xy zzD{E~-cyU>A~b*27%Gzg5IpwtJB-J?qIG?mbuxZc4(!C@%0N#-E6i{C8hpI+Fm4ez zyqb5yIuuDQLPoy#^cF{;(VdaYJ*kI@)mVrjl${38hb!s&QdesruIZERF%-1KiJh$V z&m#eGkDH;!TK&+iO1zXH-VDr_rlhZ4MtaASbWIW+b~u2PAZ`jwl7`gNDnlAmx>>YK zm|o=xXc*Hc5jeLGj7yj&-rM?2BiW#=zcdxMX3hoeSbcCjC0dJdJyDLhn`5QfvUB#5 zH5&3f)e_UV7I8!?ktUo!d*U7=_3MU>iEW0AiOcuu;#N;#^H(FKRxdYvYURl(gzNG8 zfr}HQNqmtH4ehW}-m&q2M0YVU2Aaem6|^g$G>6*5n%i`jCfXW5<ewq0Q*8&DDWl#i zTFyefRz79xWT$J}NQyaqmO@mV2mHRMEBYoe@Kb~$t~xX$_YB@6Uc|25E%=61qYDPi z-fax|21YToqKw_1F_Jc6LR^QVt%7*ap=r+hcI@?!)^QFdbu>XAX>JZXK_r^}VQg{H znG#ln(UXU8gyzqZJZ<P>EnR@`{;={7Vy2N=(oh+{Mzi747G4f^p&9=X{b*=0Qnwx` za^R6TNQl|x&i_%1M3gEV&Trx-vwa>u2`k(dw_sAK)oceNit*I>wa1Wl>CKLs6&#?D zyQID11&6AMuBzfu<4(UJH$Qrb@nyIfZMN}z^dLa86{u5w@<`+O)u(#KVXn(909);1 z>?xfEqasw+j0blY<L^Xg71EoO#Nx`C<K*|vjo$)B_W5$3QVkRvb&A359$NYD!3QT8 zQ+pKqJ9fh0&*HD@`^9j3@1AbjE39%y<5c@*B!mf}PI0%+c*K}k?_#V(xh>UffjwzK z=V=t`Jq#?LI53G=Pz_NopGJl?^cNv$+A>LXU)?Kg#!^osy&1GzX1f%(1%*v?Z&+v; zgBFKfLaM5+Abd5o?az-0hKsyXPQPbl8f%PHh&_L+l-pc1J!QsFwt_KFflZaX2Gd^z zQjCii8Gywm_Dby$LcCmrPHNy!83&%kBV6%x4RNgY=vzMu)E(-2&Md9Q?++zra6hp` z^KUn~vqd%Z6*^3<Fqe9oXa=5FXX+vknHK4z3n(vsw2qNcoSW#gw%~C+ZWt|jQh&ch zcGhjQTy8NdB{};L*&5L+jRAr63)uY*o{Rz~es<B>Z<d`ikG9mch%H>~{?<38I4CP# zuY5A|TKorl%R($m6!0^o$OqPb4htph&nkcV+-A>!bdS)%p7PtuxE(cS2YmP;{*MU9 zelpVmT8VNw62_6(Y_$csT(Twi<PKDMGyHcc%N^efLmbvT<^?&V*>NiV@67_<4l&)1 zx^gE^bT%@Rbu%BvAxE0ZGOe>Ib!Pl(Bc#d#Jhpx}dr@CKF5`n|q*Bh#ml1{BEqS~Q zo%mOq1T9^bFhT{A^j@fa`JRx#rAA*eR8bhQGd~=JBuRQu(t@Pm8y-%IeD<lIBbY4~ zwoq2=c57-P6*yD1lG!FwiC`_+7vWIbBg|c@w-E!}j4Ev;dK7u%EEuB4ks=j5DQKFY zzUxp|Ph>u<2t+DiBPntQYjDag`EdG3AHZ3A;q>87@B&f1^)oT%&%R=F4=mEh6iibI zzKUW9>T_2y<uDLIF;(j9Tqp^0FKc+ynL+=E1|vICES^Fqw>A~dTmtM??KpY4#OdRC zPi>DR)C3KzFlfGDsIu$S+dK$PWIG^h1G4?7VW|XVg09$iO%RhJCQm(N=R6*Kh3tNl zl5P{_!kj*^g`gI4W?|vV9nA6wN!gw<sb;ST<w@UTmy<0AYICxYmSk`o|I>%48F_c` z)??HykObD9q6L)d^}-Z>+O5MW5g@Ud24bby@_l7q)<t!Ws)uT^2q85j{u9=cK$oT% zR@+p!km9n?B`&3n>yKgZCuDOwZDw<kQV0l}7{32=!f@+y7Tu~gm;MN8CE~?dx@*C! zG~H?nzdGK!HMTQ^$CrgDWWoNMDvOegFh_W?6`)*uF;#N7k;uJc+eR(?5+#e4;d&<y z_KRFlY;};8BZ0<bM#yJjSoDcDwhKij79QYgv7e$pi2daY`!{#n>-Av;)L?sBC-?(3 z0tvs3N3`7GP8$N7+t!Y-Ev)wUNpq%sr|c?weN$&|4>F@#%)eIvWhwDPOnsc`G?Men zm?g~8Sj>_0+&JD1?8fy$ovS|SaMWH1xOZmTkM9_{(_or2Ha~g%sDyg!eDy3Zt4^A3 zc7D7rQ{x0hDm;DAX|N5;3taOcF8m9M2l<l0m(Lu52cfbI<1d^w_9g_R0{37sL{zMW zi^zlBI09pjg|Hs2JfSoBh9w|LEjxq^VGsYB1hWwTKy5h&XhP4DaFU5H5TR03#dKh+ zV?1^e((-2LurXa0U45J0o{o+ut3t#!_{yRzT&qTadA0dxF<G_!!C~9Gf}uUGo@2f1 z>H21K#{=TBxpz2ocK&VhP;gXmYmPxIdYL;By=tO@x9bz~&@~@!+hXpq^|1HP?Q<p0 zNeri(uzM`}9{R&vb87fdF0h~>;`-nrs4VI4#R&Ziw&v8GYXrj^T7poDDlIH%T%lBh zaq{Gdskfe4H$UTEH}JW(<Hzgsp7ZeH*^4FQ0K}N2=(9JU=7975>dTlUZ!QJ7Z-Un` z^JZ)7@u$jHrR%Y!%2O?<A576*0naKmJX%7K0!jRb`rDa4nbH*B(flREU@>I(mYopE zPbbIqj@=OX1<4Z1IWm?`qe)2K5xoBHocRc%U<B2EkUq`6%tr16=^<JFQ6CEF3I2zB zTMw2U);?KOEwv)+er_RK4cP~X(u-IUcSCW%q0jlgRt}HaPbP#P#3Zb`8NHqvJZ#=Y zC(ajY9%KM$j=auPT5vwE?K^VY2y4A~C`Y#s805b<>ORn+M95{#T5K`CG_Y84f;ki| zW$lt4sqAE?Af;RR9Vqyb^swRgl1mjMq!K=dnU)04_Zeiqfnwvoe*s2+b(%~b&33b0 z?T?nqg}cr+(c_hjZgm25e*h6axCAT_SWTEd#VV4IzlE<d&U>qC&18zRuz0&T%4TFy z_Qiavb<UWrcvkW&M*RzcV#b4L!Qis?{Y-%ipOpW?|HHBILk=Id1J3XD(}E~3j1D<^ zS^iVW|12RhqdA%!7uPlNT97-aHth;~J)`3nwBLbp5}h!cg)@cBPw<aOzyMa#CsnJ# zh21Ywl1wL0!A<K31Z#u5cH%0cYEayd?0P$xQneW4Twk{`QC)w##W#AJbGPpNjn?C_ zAbO6jKF7x-XlIKDor+dwgSexw6oj2qj3!*vrOUQ$+g8_Cwrv|-wrv|-w%KLdwvG2K zyJ~tSnTtP}WG>E5&c50wId^NXXPF%~atSoaxz(IIK}1e8mUi7^%&+^xg-C)4MJ+AB zvKbi{g_7U8P)SOJ*eI|0;@47|q-M@0iWKX>_SQ)5ogNf!60S50Y|MMON5R!1eCU(X z2Iw}$JThX8Prd-ZYxST!h1k9lq-7s6jx!hYh&}7yd*SG`0T#Mqnx1+odqnb<I)kg1 zxyxWs(Vb&D)YEF8czWRP^ebwcV3FQX#dqqiqS!B|KhoOmk2Pj{K#L;!X{m%_a=YUl z67t>!uZPHA6ZsRYoE3FBsrwpmC+ccPBy|9Cr=3D*c1E5wc*3);8F!NQGc^qIe<}{I zBz1(z)m=(;lg4jRKjB6a0q=C|>{?AmudGL+iGIk-4c{l&<ysV8=}L)7{PE_P%8ly| zMeaRJy>R(zNHpT<?oU<FRoT@+FLcd3QhTo%T<ia=_NwaHf^MKt_`ivY2i<Y~^?Ey7 zZ<PJa(e4|Wu&$qddwm8nDf9~!6V@y`IzFU0U+E1><Lz5pwcS{?ER_r(BvBNFB6%7T zQDCbj&_U{5wf5SAQb-LF(60ZB^ZI%qOf#)366nuiX7i*=%Z~6<_G$GtXP9An+qm>t zw`cl%Xid@I6`PGRC?pTq8z-qz0V5Ghd|R7Ev)*|}hR)XbkS@Sb_1=MkIJ9xw_qS@_ zc`>vJolP{)<42h4AH6%u=$`^HbKYJlw>&9t00Dy)v$8UKCOJh}W-XGobpqi;bVV&4 z{ILPh7awl6afU!78~qAV6>+K^+~JgR@_?%-3>t*JRS4Wi3GU(#gMua6)(3-t^SH=$ zx$OdU`zTDE6YYGR-Lh7V>g?s;*Ydt>`qUY+69GF7Y~~DI44;~Wd<|6R@b=nD<eIA* z9O@-Hj15c`SN@vW7*xqM@4(iP>?V2K{V^GNxMPh1938G6R`v%c+A{wpqANUx;=XA% zHY*UR5!Pn2Eq5(0Myp%XP9DFu<UC%QUkZkNR=MgKmFgo{>GEk6a*<nnbt~q)P6&OF zQ)lF?2=-EGVUmu&u!3AzK>g>P9hHH=Q8W{dk}A#D<t2~%J$z4MRD=zEi&2qq*IezZ zRcRl@JXL2y8ml0VGsGPN3|9~dBMO)R**}bAw`u7a%~krooII+G0BhS8y-HTHtyb#G z7bEIyC++ML=)AweZ-!ZZ8!N1@D3Ne~4PGW~2njNcML%i>?S@4B<6HRYfF3t5g$qhB zebF1X&Sk9mcU0nya>|k05~+**#@oQ5-~$ol6}w;s%!$k?8^4t0MAeL0A;$tbLQ{+{ zmvbdeqop~y2RQ?|5gAebOH^mM<yG5Yi5{+fRG{7AdFy-@g)_jbhTH#)_Pwa~`0;l+ z^NXEOg~A{71G_v|qB{aQ6o>04os@Iup!M=MUM6w+OC6xA;W(5-)u?ONG(RL!pArwb zcg3I!mgui93@Gd~#m;oCy39s8**i6=s_`vFY9R<Y2YvE`tf%tt!l7T2^umvm4vpp5 z%Y#ZvO0I&!?gXEWtOE<Iv8fx^lr%J971w`tH%`{<`#;QY#!5j-r9ebN`P8(~F3rN) zuXFQmIG2L5lKCVmp$vgi$c+)kTm&(1m?zs>qvHko-PV!Qr-{Q8>4bkjrCG*I?%UG; zA#n6L;hlTKQeq;~?PIgiU$ax1gp~`F?2{N1bBU!a>1*$3<z3wXP6epQwK@NtRzqWa zM+rgYw;)6FN%>E+CATQDe87<#xPJ$?QEiNq19wLb$c*%9^FS8T35i~_JkY1N&U%aY zn)5dp=OCLIw)BMw+-7YZMt4H<_Bdhh1$bhnxPKR&)JbTYy}HZQ8%6~Wi|1_O^XEF& ziWLZObw&HPwKuNyI=GM^lX@n4c-9RL$ck7r!UP7i;l9zC1f32oN_x1zMoOy#m7u}` zBsJ3GlYaU2cm5Eqy;7QeB0boVQ>UI~+YhpZKa+OoZwlX{2K?rubm9%CQ%G?5jwL#~ z|9cp7FWV{akia7YbAi(=x_ESPN<|Rpt!P3S&nJAO>96=Q<JT%k!`V|5)_hllpDnUs zv;wq&wU*Ah7wdA-b5;vjo^}G;`f8i}JT(5+KvoFy6V!G~H>vOb?Ny#A2cJ7_>j-eH z--@7FXT!ht>VHPgPh7g)#)8AU!tJUxk!6x*o;>FqW7ftNQpK?dr(LTI#~7h*?~D~R zxivOyuH5n4*Fzg}jYTBcfhc66^*AiNfBG@~enai<1b<!HhUP{s%>&Ldq<*d?Q#SE8 zKQtX!CK0xpE>wy%y#!>wmOldiBkn`p^=}-L%!StC>_JQ4TE*TJip7aA{YXhyzt>Cv ztE{OV;<9!GOVF#bW1nbfisxeMhmT|g&;~hYfWbqoH_)Hp=@zcLByYU;{}cBp2%<=? zHoUh1j@yU!kUII&HgLG1(QdB7dO-GEfp$Gld9QTtF~a+Mi>lFdH~R?c-RH;hEp?+$ zI8#Ac$_e^hGJs*YXaduq9F|;H_<{EmLn<nlN0r)<Q~o=+H22zB89e!+yL9ps^kGn> zmNdu<F$NcQHHFJIe)`*xCM^n*V~p1?(ED9wNI}#5qyUg4ZQ6id;layV1!ZAhx0_f` zVY=a{uhUit)m0oM(+r9O_V_LcJ+Q%Fdy2-_S2`R?8XI1&hH_TyqbO=%s6M#=ouu$` zu_>o_@`W}amh-t|a{WsrDdnYPB>;Z%vc6x?z7UXAD2NeGyia-m_g2dhi+NEWsF*q- zb0xR;+ft-r+%3$`xPBxg0Ub1NPUlVo7gedRXJmB601KZUR_$PUs6)E3N9x>)LhJQf zo2HvHCJfrw3)})ZQ6X2HyqR;4V%dKPr7~K1$V!!UWl)`$kVf_Tg$j;p=R)E?A*uE^ z+!u=MLX*K7!GNz^Pnw*jSJ=8Pg;dlKDo%7=r9BqM-dinX)@gC0nkVZUtqg$(e9B}4 zg*j?^UF`SPVC?Mc;X-(C5*fvMCOm~)z8Tcg_y?`1z4CIuymRa*6K~R45_IxF%bg^L za!JqaE(HgprU?0M_^U%9Z+I2HUMsKO@i~Lip5t5#`QdGdzg!*oRs`hCJZ79#^+S~m z(;xpnF9;jyi^Zv1%1+bkqS3>0Rj?P+f|50U3ts*r7t7;I@3>>1c0)XNpOfrkD*yv6 zy6&ioWD;zVJ~2N7ukce31aT%!bD-qC_G){4dNwIw+^)ZdHhd#%%AlL}`kAT4i7~h} zV+K>}H_A+${|#)-h1?7&RjYzkvcgex?5Jft>3!tdE@j0dGJeYPM=|T~gM4R|9qB(b zO!D;_D=ROf7EkIo*Qr~6aY4x0T1N4`%U3KQh*YMA++)eYPSM!dJ|No2e!FfTyPcZ> z>wMJF5Yy2g2Iu3O2f(_X3Q)<ivwYE;uSyywA@`PQq^3YNE@Ec%zg*CpQznd1(vMn) zy1`A07F=`8E*Gf&OlIU8%!{Sxop~EENg0tekM|-ZmiEhfti2bC;tENn6}n+!{POGY z<PLc=nJTm6J)^PFX4tv-VyFxc+3u@Qj@6e^NCZ(#D670xZgR13MHch|mth;~y!NrZ z@;RodOIMppr#L9`9_Ws7Mr&$plzX5Vo@zHX!%Qvces4f(OL!QjSvjV2uuPlP!lzzw z!w!oyT;1kzZrjLmb?tQ0&sxX{T%j8vV0i0vPMKJgHR?9jgPfH(<_4KbIWK#~-(bsi zw37E>5%xUJi~X-0yL@BO=%QE?0^{47b=hV|a^J(>bsxntGJ#4NpDYm#LW9ug-$`1S zNDG@Cfb5bZwA<>|M$Qcgnxr&gqqwT$2*BLaTCX*auXdXmiMZ-*6~Ca47DK~<vYCl) zr(F@EE<}2u*RT7S?2e^&O7hv0a+$gP%X%LCGz*P?`AK5%5!gqMqv0&??hk#JL?n5% zzmw|htOGAr>x`_{^w}}xGR=!BVir+5ZP6+NETpflsD?|M^DR6|kNWyUVu>crc;qs? z^;tueth1Pb+AW?YOHA}ATGs4mIk$71NE%2>2D$2twvC1|2U{f>oyhi7qXQap21SOg z7h#0UI-vnAXd7smmDc4H`=cfmeCO?JwFOLBA(%OXSF^3H4!p}``#nS50(@o|$KD$C zdXOG8XN~%y>e!()mItJM1!gwlWi2^0j~UbK(Mx4a>@Cj;%b%A=863tBz*#TN5nbMg zitBNigV<{@cU$si3Ym+puI^h~`AA!ADej5kz=!hOaC@=ch&?_s4_Ri3zu|Gm&^-8^ zNGDJFSbM_6E8(xP|3$d#r&7m>a{$P9*DQ+U^l$tH;;+?35AV}ugn(3oWaf627ecU4 zI4UovRREyYTnJVjGUJR4lXn6xN1~;%V)c`d9<mn=EY|6NPXj$}-^O@is~Moh@49Ge zfGW3ZAGhd_QB{P(ggfA~TIhvpddYWPHi`6Y^S*+VGIT4s@$8wCgem+xdm=1#ooj}p z!fz-I4+3YPRogdR)DKO)D@zgSrX}idmIVG!9db&3q^4C7#9wQbbH7l&KsHh8(a8dX z&>_%_>4JvIcfTW=F*78orvkKAGMg6|na4TjVZVCuTXQLRvg!{jDs2;I!Ln1Ia=@Ux zg^(6yCjBDkrcYpII<IDSA3r@g{Cj4wNO!A*f?POE#^rppKz;>Yd`$o!zFmr)^+Rn8 zPJ=aPEpDuvy)-k55uPVk<YQe>(lr)v()+N1a3>DYnddg1Bdat;A-T!*{E8Zkou@-a z%f#Dfra}BaQf#$}6~o1ZY&I^mWbtgMu`ZcUCUa5EbZ}&YE_dS_`w#;sQm^#BZn-u# zLr!0!xPojg^->3h{(_K=ykvr94uh2?)r9X_4~O|le=S%_OF39<$ZE??U|MUL&NPD? z#qRfx?CssuR{5={S^Ibw9v9l~#A&lNrVZc^SK%;R9EK}=R9PYD^RZOw>m9S6@bBnC z+=VI)xmX6Q`wbCWNWD72YC^ve3|>xHUz56=giqc9aGNEu5e8Ut$AGIS0wqqgiZ=}` zu`*vKYi8)=xqJ!}y2Uwmh(7hlFD5Jo=F|$!QTe=Y<z5DJUx&mX>dtvbqSQZG+?9iJ zZep(#pkgXD<B_Nw+GWX;l?IktP-<@!2}$Fl>3%9xIIVhg8QfyANt(kv$~@xJX_izo zN^81s!D3JF5*CWK)aMq!J6Q~QUztijD$?>_6mVLl!tIfqgg+&1oc&rFMEall8A$^Z zyy8_Px}c?|HVM+H10Azf>pXKP;3<9?F{@E2Wd}D{&IY@_OiFQB|M7R-N&`V$W)s6d zm7@eG5_L7zi)%*d;0kTb5~0Ot=2@@A2xMLzZfzkOFl{xO7^W?*?PMy5Y1G#KFi+J$ z;XrDsk!{J5`AsTV=FW56iY26}G(TTu1?1ac&W^B_6b?Au<|@fC2m#4$8bQ*S7zcPn zXLYiDqkBt$gssA&I6_?)Eoeou5MbUm6~R@PvW5~E9NC#B>M$nAmc8mq-`G1~vz_Rp z`PjJM)TvaDadW{SBL1swfqqz<0{X223gXHcE9+iLh((2YX58c|zelFK{s3-ON07XH zBMr^klNXeCkDoGsWBGpRL=K!o$h$(hutjLdqZ#inovN!h%Ul(9K-+#)TBlW(A(?pc z0Qr_7OH#$8Em8Ihkz^~Cixq1%?y%9TpFaYI#|qPFA(qj^#H)0WWvB3#{L|y98|Ken z56@)KD@-&5>ZTBAm`9eu=_h&i9VOhdx2TlJ=XTa)6S32+P*5gb!qjb`6m7{tLOapi zIPcjQI`T38EmW49I3k})&zj(_o)&1I&uBnGOo~7Ss66pUv`uHl|D(gLlGVYjB8|T! z3g`Uty?f~V+a0{3Knj&1`Ok=afJ~Z=IO=cVzFdcLNDF4;7RvXJN6jt4<j<ak;|%^I z4y=i`s?|+@?;6knd#ZWlF4B#cdSGbUzo1oW1cMj>8Tya89xaT`@6|fhsktRE^U2J3 zCs17k6?3w)vL3xM9}lxIE#o9oZ#h+uI7_sL^KbOBplit5-7=yzmlE-WDiSA5ap?$y zc+=;Z?t5%(WINJ-4&}YF)sZ-*--gN(@B^3fb3+qnm2{0+d<<MO@j%Kup-RY*bA17> zJ1Z^fa!A3Rf0@N6wx>b~>{Xr~Fwnl!wuOp!H2L?<*U=x*ytSLADb#YeW2JxZ>VB@W z3p9_$u~V?Dd{-Qt>_Zm)?d?GMUL+eT(Tc4kH`xijqxk%K&duwzCwD!rzut`nrvKDX zE?ToE(YQ>*SXmGvaneL-fYOCrrjU++b2;>$ZsU9;sz{G?UklpZGPgO}kAaH}PZzcI z4j;^lVbbxH&Xu!&m;iPg8M;_$LS<1(F*RU$a*GRRLNEf^SKuf1fO=4mLlR&j(WJPP ztpq7S)k6?XEet_lOw_^PFd8?ySagEFTsU@)Uin~aCt|BSGo#Y6jMP*9scJQzX}9v( zWhAg(?<?({^=M?meHFBP4`cbmf_IuEGRHP)aZB@>{gx#jFB%gVVplu9GRI7yo8FV$ zv{kiF&l?KtmGCR<SmE0lAXIO1apV1rvQUYp?%BXCIX*73$=plE?D8h8?Kuqi!Ld7Q z1v1(l4?_&yFn`*bV{zRRl;%5I$aB*9E4?d$Qs;Gwa}v4Z!6VH8$1`IoA_m1Eo;kG( zc?=5iIFIDs$f5QA+0mfzV4DNW#+ZMRHBxi4QZp8b6Y1dDJb6x4LUdROUyH`7my0)A zE|0%C>-p)?#&#e;#qw0&w9y6vrMe<}qr+m;?T?EmZ{a-(i|xKLG7KyAy9P(HlFIL9 zf~p!R#WUAoAW|@@E>uq(88`&TKX6OQkyL)Ojnm9~hQZd&Z|3%7CNK%Jfb)qLnJN)6 z^ziaiNG2rsadV-(zbF1{y|w1Pn<Y+&RnQ5(#|Qc2TSWT()8l6`ItZsuciDRbhivWQ zmDIo&;gfC6$mCwTx(=XmLsC~WTwQq_zI<6jfCWiwn4&c|lyX=6u)#Gq))ZUx$Z;MK z5r4EPB;!1?vIw>Jj8qCVck8k}Q}#Neri6;;h`b1Yi+K<~uc8v_N}yv`_K~RBafbX> zmP;N;(<~hm5$dF+z1|{Ap?E5dr3EH8(yg<bKGVxxpPk-c!S~7A^xuY}{aL7q!cXSV zkfbpw@s|8ql3GF%<q+M87Y!W`rndMTogPoZ>m6$ut*r=chrxerLN2Li-~VG0@w6kU zNM6flhC2TiyO2bd;1{%hJ*+s55}TDoR_<G!-wZDtl?oK3Vq2ArpGFgGjQfH@zR7Jy zdizfG`;v~2WZg|Ms789G?l~o#n1kIT$y~t6AQS&fmZ^+WE*#~0@25EGe{MyL&7W1x z5aQo)Bx)5X5;ue7og6Y<cUv7S!4qU8VXgPhk$e_~o8ru90{B2OP!mO^{?PjRZ^YU6 z*+R_P9@o`a3g($z6l#x$L(~QWR&7vu*kBmxraW}0SKaJ-a6AdW7cjBW(~fYF|6cb8 z)&1Rs92HAjFkJd{GJbB4<r0}n90F=`Hh!cGC5hN!scw|K&be|uJ1Z@WE&^IbUMAUZ zn12`k0qD(?MeqH4U9)-9jrwZ^W9}EyAFz-Rzq@D~#k$5jy@E93yoeb3YdWRX7j@`a zvXGk$*0a}t@Qx8tg&raAT)G^`#D^?all#OB0JZDb*v{ifpUzqA9JMUEqVmD8>W#%N zOrGus8i^Ar93m`OGZ1Xsk1uQjSL5bpcwS!ka7AxAX<oOGoO?M*V9MziUwkgw41mgC zLgVl(OnM_KIba(Dhll(Y+aiQ&N^YZg_)w{=Bt!Y<cQA%h+9w-Xe87u+$r-vwXoF>{ zwx=5GL(je#0R+^wDfhsD>$upr6DGe0<p6??;w?_-g`lx4g?StEzo_xxYqS~v%fiJF zm)wM9TlgeQzXX_D;!qQ_<0Qqkzug1S&$(B}ABxXbkV+Hc+VpeujRXzdv3Z~9@19>~ z{|wgrzD0KEIakNOUHZ6AR!$Fg7+2meqmhbBin>QfzalpyMK-0^^TJ;*W|s5>dY{I; z^i~p<-G~f-Xa2Ulv*ZqcwO#3QH={%kkMd{Ri|oF(!>VXEZ4||&)AMZAdJ1CngqM__ zFQw54UrR7S1z}jz9&c`LR&Q0?$uTU@E*Q`qMaOb}vOoj``bShjjI*hn`gd3M9CWJ` zCqm>3IExK?F~#)!I!3`Dh97a(N&B%lo1!40{Jtxmnlux0aQMNxUi!MurJ8l=<S`J^ zOZSHiHr?Rab1}!cZGYiOAu~mjIm}5FZ-iZOjNfC#60>Uuu|&Y4XHzmD7#p42t6MbE zxojf%jpKgfK^IT3u52!FatgZXu(;TR_oFd-|IaY$L0Rry<W+<_AqWAV@BA*P-z<_6 zA8&lqsunHL@u%*hcf%iEp`sU{>8yS_Z9^WIGj;^d=@72wAWxFL%1>KnA+dtcs}~>L zO%mu}y=aGH5c85NyL}(Mr%9)Ns^4>7GCY-!QE*BV^7Mz(fCFDlUpd%m`MH~fOC(%v z{H1nH4YxEzeLT4FJ^z8VVTe;WT$fd-FW!;0rVWF64#@8>z|!GIHQ=P39|Ib*$VDh# z`m4~N@qN6_^s!AIt4;c7zJ(G;r};|a&%;cNH=AyZ7c6E_sotq)+K#V;*0BibSY4;L zD>J{S&*i0B9r26&t?mUQRC><yE{&xK<{PTRQH(i`F`3CCPdM>bb3IGUOwuT47`AUT zjz9Y7Tt8GPEQFP&bItn#nRWp>>d9|E?jx3CDdE`)dZUvN{R-5YoN^^Ye~`m^-AgjT z^M(9Qu-nGIm`>MDTpe!Ot^3Pdy;w$u&ZY^*6*}im?Wby56HnPs5mqyuOD(*QznHRk z_Ox2->jumOn%=A_IvZ~AjdIli^3EFDZ?mk&Fud$}P33gW8b-`&iDmr8y1g~EQ?51j zZ~WCOTf_*L8Yy@*EZ^Q}Y=#$WSyNgbL^52=8ROx3p|@uqyUR8uSlJS4$m540F4X_X zGSf~TVSlQ)st)51J(`5AuyZ|P9*JPXmq-yRrHQDitx!GHsg&NMLOvH*4*`DIw1Rw> z*?^H_{oyCVl^!*9^%X)vHF^8<iSU-Ycro%p)pfB^mgz=;#=pW!oUgyEW1qT6dclN? zM>VHj8aqM+t=Vd)q$*Qj5!geir*HSv^c<*DnW^_O0(yv6qfr}LKIcI|Jz^a+^^3Zg z@KKiaIa56(T1^>z2wpO!1fFA-7wZP*p(uce(wgCmHadAKeceKc>IjV$lA2G_jysA+ z|46equulh-w|BgZ)x(mxiqB0n>)O4_64GW*0@}y4@NI(XE(F%;N77X3sH7hqrybZQ z3{d2#ca@EvFimUBR{EHQ?#;5Bg(x=OxjF~_Px9<CO7lra?;jaP>t(fmkM6A=X!u;3 zzFl`Cb}6|_YiJq6;X7!h-b}GMPkyvie19G=%spCo%Y2^;GMwwLiGX!r^ZST%Zs|Jg zdzB6P^*_Mwn)oQaMnMAYE3{R86huJD^I<@x;%D)d>x`i3vw@>?m!{8XZ`fPe`JI!y z_-T(nvLlR1V3$WNo7@y=e)@<K;ZqXqqDXtU-1hRYxyqo~zT&#CcayB;NnKe97h#mY zbIcHqp-_?;dX%p12(IrQ!R(qWNgTB}-G;D{c`jivl{Remb5SZk?;9x;W4)?-6Aw6f zx6eyF!5h1hR5#zb=sndd#SWd^QR^y&*r4(WI(t-VMpyIApCyIiIKBsX7$+;z1<HWs zzwZj=@44?~igg)9ai&6*q{-^@<``_g8l<F6S=cra847Fr`dobBnm$CVV96TgM%fe{ zSuN;bUvLc7UtEe^P}&2{oNWli-&3kQ<Nj(_RLMXti>?AT(U@O&NE5e67!w2{^xBy( zEIwC&R98(+w=F8q4ik%v?ei*rqKx%WB~=sajmwcA^M`%C_&ze!r@RMI7y5?Lk>}#E z>at>V#&N5X6#A4|&FCvzq@LRv@|(`|*0ST`yER1ZSdYoviJR_@x^_5^2Zh8l6R^8Q zLA>Ei+y#$?%Mpm_e<=9&Rcl{sciB*4_i(E6jI^z=I+@9g^-L||G|&8r#T?2nf=qpX zRnzj+D)=2rOU?&@zy+uvrdbWOtS)!<i2DO~GR!4MpHsu_pt}OrJzq9+ruM`TzRmSS z6S*=>Z33L>0*=pfeCHw%K`c4U-oB2=6+PP#VGjfMr`HyQV?3Zg1aa)k;xwaN3i<=f z!XgYe^XptaMhnx>XE(zbEipS5_^FuxrI({qGvSU%-@v$InMI}p(!7GM0n?r>V?dCC zJ@0^^WX@_%#p?6S%plF2qIXsh13l;Jal^<?V?FEhM7;wwKp|(GEYukTe)5mEwj}x; z#uMKkS1gS7_&hC0z&`m4@id9Wjn>o$a<<EnZ2OyDvCv1#+ZR3u;y)sh-<{PBG!rnz zQ%{ccQjI<mUHb1C-_GBPou)czO_b-zgy0VcN${tN!=tz3n5>}%cWi)~XBl4A>QVy6 zi!&p+0+q*60XF^;O|UHORR9~DVH#YHf<n4)SLej<l|Cs?7N!&-!#GnVD{rROl`F8# z3l3RlCMN-$%t;M!MHqI1+})wUMl%`+x|zRMoRR~rk<pCh1+YfMlni-cq(tZdcxYyF za&kC#OMG)q5n0A*6W$~rS;*45OW<hr%-~FQeca=0{2`Y-iN>nkTA4}I*?+2(cAjIb z0=2f*uqpVsBWD$qzNi@Ckr<mB=Zgd<-;FhmevN{SgpWdg8`6)T2nRAf9FC+qk))<b zh-EsFoXDPpe-&v_<eJz`*4PcZ#vaWhXc<cwT$O}gRC~?fzY7r|IrtFjXX!N=cI}mv zO1AU>HnV27VW!%=`V0EW+&=oTxfNoMoC{$b1S>F1Rtmof+3E?N#8iPYuiUxCY4jTZ z0zv5mZZhy%#3(6^&>hOahJE&I%|;j!(DHP1hCDbTq}iz53^lNxqBvhmws<|^YG<xs zjgkIzZr$=~yOYLK{E5F-_HCd(zKin8oN_FAeL_<{3YGBBe;~L+&pWKkvQmk8vFe@w z(i-#Tc>$h6(fdPrwRjzzjl2|CsR3to>9Tgu1(5)b+&aUq({o<8Hq2A|WM9;x@7dR9 zxI76L{L(BtmCRc3LIkDl{&FcFM_bwpO*+$`V95I+*=Tx6P0SH8WVe{J?MKODvb*8= z1>43`g>l7|Mx@F6A`kRh-5}GYFI@%&q;Kn3l3}yedG{u+Qk8=dAG!EH)0!$Kw<BcX zM0sFj$haF`zqB)n?AF%u_u@KC1gxk3zF#)+986q0<xz&gCa1Y0&(YRK1m}oj5`WQ> zS4@b^uteFuK^LI^<sPsn8OJo2^KQ+`#QL<03WW_9G<N;DHFd95m;9P{OFVpyk4c=@ z{|})U(zMGx1#vrp86wZIR3o|8>(gPN$O|xh^L{#muX9houqoTs1NV{YY1U%|xT~#S zkf<MDj3O}F4d&ByXBXcx_hUN?Z7dY;7?eQhJzMRy#($5vPus|)P?TM@jFBfqQH>fy zQ#8+Nx_QYeW;t^yL;Wkx6k$2HYQTk*NOpKk8*=mHnDnaox2UUqxe~!LuWZ4hA5cZ! zV4x0uwSa^rx4YTBkb09o(+*#kr;KpvyBJbkRjOGx&@Va-lcO2d@Sj#LJU;bt;q&L< zc1>zlgp{CY4MZJ&;>5=SWt3zdvV_}Tc7rX{m|qRPVe>;N#%faw;DW}x64h}X(OuYw z??N8@GeTQ!t){T;TKab!s13D|7II(J7ngwfg@uMQ`e@{8>gkOSoci?YT3Z%<aUhLI zx$ei!<@i?woPBes=8NFB8)e3LJ<Xz{VEM(W%e3csI)o{HTX}7cAuF7zK(NlX0=bKU z+sd&kb9psTrtTMemQH9laks0uf=9y~)RwqV_f}r`M*!NlQ+7A|`$(H4dG{ZSE|Wkg zbNWA&Vsw87$B+Ijcmmip|MSmUI%h>vw622JdhYL6p5&R04v^nmw7MPKI3U9-6IC6& z(JR7H9rb9>XS230(Qn&`{xDszE$0@kFVLY$>7C#-ISEfLb9hHH<(%zoE3x~68QkRK zc8mUN2RsSA9_tTZ9|E3Hnk~VHk#7R#hEox}soP@|JYsU6jo+uZ9-}FSpDYi<_;JJO zn-1ztJc*%q<yjG1;9-*(Zk_j1lNIxCp5XF{a3L-HsU46`hPIC7GL$G(wogP*eP5N# zWj_b985S1c6Io=RYhWkyK%F7G{pB7xI5U3z5rQ84kI(XYSBp!`QFq>(A3!ALjGKg& zR6_4Eb#9()V`tA*`;-yDUz_pv6n8{J)7EKDJRw0)(fD^YnwWS%uOe74>|>MMpS($! zAykmTpO|4Yw$YU^UU(1>59^*Gr-$)kPz0Y-2HTURZ>}Z49C%qh82{%MN7Z5cF0AKj z9KkkL7QeLc>9B5fVS@Jd>N6j*R`!Lg%7cDX8u-h)hCB~mrEX=BHEHOgRhw0>S+{ao zZ<#AU28$@f?ZrN-A;tEJp=;{ndWC8V9&f@bBz-Fp!JJo((ik%bo7;IX?%(zmk!P3O zSiCQ`Jo}17yS>h!!RqCIg5K!qCC9;*jMB=eN*^(fU}N605dt19Q7Z3H<z>mwCdxuC zelIh4v(IrYFHKMQcS+{;*9hG&Y`JtY_y$`IGX~k3ld<7(?O_kJlE`rcGu*rY$GtG} zv_ggqwL(n%8#<~tU~E>J&^smEo22e}MEj}(1*5y>5tiL`p0^%?5z1ZewuLS3j<+6i zQPm$+8lz<a-A8Hanw}e2EVe&EE@S;(HFK2hSPo@u^hn*69xDH>nw;)(H+RGr!8b4I z+vghLnv?-791Fy!U9y=BbEA87@*li?ZcRQul^4O^1sQ|8^xH><y$_GN#*~ATniv1G z+lCs_^D$xKtGF7*fZ!Cl@UOYH0yi`>8emHA$nnxdY{hD|pDf>T;CA3zPI=Pcli@KP zdGqxckwa%s_02P#v1^&NL@1U;ie45v4qD@(KqCmTYF|3j#W;BgC*^}SAthzxL9;vh z4-?N!Vg|eRu{bA{rzYuGe)i9tzE*z0(ve<yCMDe^%xMj}^jl9Jxz2f0&TX-4U_SR} zQ<1*NyiHXxfkd@pjmzp4nFeFgC$L|+tYw+1K&P`w*{940jqQ~K@hVnvwisGf$+JOP z`rK8ME}=;~$vS4HFmw6gOi3(Z_v+GmgaPO6>GA5w_oPJ1;HGE6-R<BA%YgPI^B4wA zx{@L1K>YTm*_^)XVLyn0A@0L9QF4c7i=aEG%*?zA;w3Ms)h2}_tLbdhT~&M@CT|)c zmbL6o(srU9FD8q5SLaz9wWMoFR7gX!^7q>|D{LFJIwa=%UQ2?%&L}sHnZIzo7moYo z(;=<1l%GHWm`Xw{oun6wmtpJ1?vT%f1{9Ko&H%c84kRm!U)vVn5%G5c_*hw(;4H8A z{!Pw|x?{Wz<)*GAdtgRS+$!5EBmZ=zJSWE&&nLN^hwKiO?OqeK<NOI=`b4n{59Q0! zD14XCh4|KURU!GkgN=1O7a|~3Fm!1DoPxQ_2)p<<Z<!2@Ho*d5ViD11);b|V(({#t zYqKUk!*STciINT9lJV;KA@(1s6j^1tN^&2CX~cs7>fDzTEPu_O5`*Tv{mMmNx?I<C z2B%nCJ{VAT4;gExEw01hLEUFfi`!8jfXXq`(A~5<$H3(4>b$^fWd^DMlcFE{qjjjG zi_S{p9g!rSk^U&%<4kSOU3yCP`A9Yt7xTCMo$hrYI7~Jmhnd)$;2XtNfV8{m_2}8R zfA2hH=J%vZUB2u^&^y${VD86KQWCdTH}Zp4amAqYJY9P6Q}Lrkr_vI?6BHk&UGan| z<<{w4wRXqn=30_+`vOdH@xhee0nlfvc=3dN!yX#8fMjPQG_AS*d`*Jek;Vd_u2$aW zbmGLPkJz!Mo*2}t3^`?Gw4~5qRwTdp=$tC+JDio1ags6oWTLxSy0UqqeA`t;p-a5@ zNU9X6<j57d_?Xl5nfR;!A=axap|r4UZqtsp-jWaHI)C^htaR*+9omTWi^qh(mdTah zrVMcAm=3Lm!sXF;&>mMo6N7p_!LnD)7>jNk#eSOCST{dqU5W%xOO%y+Tt*|`ZMwvx zyf05xN5j&!?ex0a+;QXbu{2Iv?2Ws7>e<cS0=(f;CY7d@Sl~Lj83Y}WO#qQyF~)=X zNL6+yrEJvP_88jb@;ia_ZKpN2Jd*R?9{{sAPQVzu%YSFSU*klAUYWBFH<pm0?5Bd+ zAev>E&JDNzm!+c2f6h?gR^x3!@-B6-G&`>(Mh6tR<$%2qvaQ7OH(b%+b$KRrsqZuj zuo-E%;~M!kAhpRDy4oz0J{DYNF&I95x=V0KqbvuMKRNu3H^cu_$_Y6Q=IAmH4zZlC zka3rIDmhG}ulx`qWh*NrE#ja9jZaCT@Zst$AOwF(qI3K^)rUKKFSg^ZRikFKa~q;q zQiGVB9GW|JjM(kjc@cv|XJ2(Td+CTDN?dQS#_#+0qRvaz==hoL<_y#E61o(NO|TcT z^1Y%Py-Js08wwyn9i|4HjOayVHhDGPHSn1Xshv<_gndW&_3&#sZy!25I6N_)G}V^l zQ4KdAb;!d>Uqd#b;K;B<K{gt_dj}IO?iL#%d-YkD*1;A}AkA+!+jit7JWD|p%{iTz z-i}l9TzFY{+Kh0P!9*=^(t;?+A><0ZE@2m?3w<ICru??6OEzDGDt$2{x2lu~`281v zoN++lDA%YJK$U`v<^ZVia=mu=u4$u_jC$M1_l$Pq5fGSGESVK3i2$(Z<3b^!3=vY4 zrKKaCGm5f#I*JC-R-(+<QAUoRKk+i~`ZHmz_<dX?V2`uHHx?_pa!`v$H63{y*sSeZ z)@Zg5Qoq*}4>NZ%wWrnmBN)A~{gevUD;GLjSnUXJJ&@Uc77Nz@EZ$HveY8+SccW%N zx@%|`OxY`AE5aUhnw-`CC$oRkaJT|g)mRQL>c1?-u6*P!>zP*n&#;Cqcd5x=!~i3o zqo<F!abk1YwMiMVPau)SsP|Zls*>BvaXmX1x%oxTo3E!>-Nr%4<C4!i>6hiYJ3u?9 zk<0JzafyVH8e{GS#j6u<$0FH8+59}ffX%lN{=ts*){F0@gUeo;bcGn=NdLAZROccV z;g0r0DVBCSC)2I{Ia}P9Lsm~16)%lI*~yc{w6nlL^W0mwHCf8vk|mE(DbB0V6!c_) zb#^hSgk~ZX5pq^$KqAg8Z!7s1K9{ZlBYPpQICI{3a7;fL%Y%-I4`h&OJ5ioPS}UxB zfK2HJ_K%Xyt%HtE+FT=u!8l}i8^T2`Sd@(og=S5~;@F518SKTJE|OR_+O8y_I_-wI zbLt$0{BLuQWUVqqRNmq(&X>jrT>?-vChVvC)|!q-^HA<NOP<^iUMNaIjE(Jxa{tp` znGf5L%nDQQP3h$_?7zI%e$maCu4b_zo?vr}V~I1^lToI+zeR9x#$7r`31DDic7zbO zo%b|zBNGFdmKNCBgmYQaXS-n(OMPO)ms0`zJ(tG8KK!fmt;XqT4jAcWxL{ISpn88n z@dlwa-#SprqgT0W`8T)hUz{@Y@5x_!Ea@t{UZ%qjL-{3Rg-qXP8r>%MVX6?ww?afh zcrQych97N$8Uo=3K<Ov<tE_G5*U(QVZu*xb60PmuXqBxb|F{-YU&y~T8DF_6ZUh_Y zV{<9;wfH_1))F+ivJtz}P9Aj9DYNN_eg$puqOMyUllxS)@z2t+(twzX2P{_Ymp;FI zd3F9Q&uZ-KfKHdeglA{wh{&%m=gR--1Ko^<``K7Y|LALJ#KdrRVPS2C`VX|sNH#JL z1+%*}4-SMCyJ+!H#Z1#R5k&WwnIOS{4Ux>H1<|U7@2MKuV6eldLmN_C-!{m$o&9z0 z>rQBeoPQ(e!w=pMRI@UuKX#A~ys~oxn6~G7klG+K1mO(ht2$-r&!0zIDlv1&Fg{>& zW9Q$$O@DtkZ1U?gfxf-IuCM>HBSD#BhQ*@x;ID|nkI6%S3eZY~;LqX}B`8Gk;qP~J zL09#$tU$rU+$VM?{5D&gje7Dhsj+x&v+Hwc0M+JQ_h)~!o&H%}*xlYhxTdLrVRdQo zXlf61PXlkcCY%8!aVIGt*$PNPHT%Hc`-!oep81v@9oSeneWA?GX$-ROZ!_YrSYj6K z--FG{xy$*IfnEO2sNTD-2-^E$Z3u#?4kqQA24UrwZ9p8}JVvJK+ZTrFgKzrM{t8IB zsQ3Ny+uoKV@Lw?d$vb5x^^X!JsNCAx`g{?6sW<tlgiil_LWgP$;n7;})C%0b6jAVJ zQt)?opmIkM=Km;A`$_!NS6$d8Fgf_{D|(}z_zB^mq5DoCH@5vC9#B#{&S>Fw`DV=c zojf=@i{j$%&g1~=UdV$S6G~Ce15eFg00Cd0$$<?or6L!rn2k&`KtJ%szwuM`fo%KR zT|o(*pB?xU-zt3ZJ#z^9gIpKD|JI)JKS}`LIAQL)9`8dF6gWqw|0*2wX&3=TO1EZ6 z`MF0->G|!Nni$H%yPnzcQ>C;_s)Wx1a(Rw`h4r1n0_e-<Z&4q>va>-!W&s(VDl3Hs z0pkHB0SC#c>JfZg3neU^q_VU$Mh5vdWvHa4`Mxp(R`(tpVq_#9r|g^k)V932n3I1B zXS|+>;F*9!@;6CueQIz7&s@(8{5Wref^GcxZaT|yv-=<Zyh<Hsz>A2&t%y$uJ(`}^ zvLJatQ{@N+6lqMpH{nQjBS_C!%<%Zq4$T3){`_j%Q@x{e_P(_g%-onr^}OV$aHJLO zApgiWr~Y^^2e|6+SddomD!Nt$h)DM~_J4|ICd){@QW%1!yg8a)pTe~Ddk!Fh+<m?O zj6p(xc64^|bbw$54EmoOw!<5}C?br{d|@L%fPFz8nLvL-9v!{HKhtyN1`P1<c>M%B zf3FZFrd-wk-6o0eGwR+B81R3%=e|1m#E-plWV!tZ?>1!J?HhRgjt*M?fdc==H2sMo zh=hO5=y3Y90Q8v<kSII{%uqr{;=k5+9-kWh$i{bc1_}IRBRe?E7aSqDaRjXg5(eyr z1zZdE{#@bTCNP>G!h9VWpPrr`?hkwZ`j5Pn;i~|d=i`Ui!OoFzfGKc~_Ul_zC1exK zA9<rM`4sdH<mcCWAE=TnI0Oa=2nY<wkv6tA&;*;6^WRPS-$4N(0TETQGj?EM;V|T4 zWMOi$^iWqr1cAm=9k=+u$ITNS1Qg;N90cV56w0V6SP*5H;oIQSn%LL8Z+zW@lT?(< z4=5SPaPrD~!I7m8g$gxAyA2JoGfLBJ4l~8NN#y@If(r#LF6IIRNdF1M|6>FP%m3d9 zAP6E4eNjpZl8A74aQ~ixC@m$X0s;bd4FUr000Z@}BhRdt0|Fw0=B=jXs$%Rx;`H0m z!rIQ9#MR5moW$JI+5!Z`bF(zhHv77xQUAvU!vh8)5<4OUyKjyi2<*YSuc$Af-_mp^ zb}LX(*PwzGyI$u<LG6D2`6S+ZBL2A}{!{YOt5R3nUAq05vimqXi+%I`^^pG)&Y$;_ zAMo6LQ~>xMdZ}*$ocUtDr5k>I@9BR40Kj&@&s$jE7a^bFNuN(~pPwhr&uhr@8Fb^< z68_g);TZk>=4t`A_s{dg>&GvtfLoiNZ=$<7_|1Utj~P#Y#)Q3u&!4ru0CIH=Yx7+| zl(X<b=NsT*cn@0e`$HhFkNpQx@xUzz;PzdM9U!Rq#&~_EUh?yo=%;(X`sZn<uQ%Xp zsQz;)c<k})V@|kM_3aAqzk6TEqTg%qJ{kZ(9nEu}5YP7zrXb*9C*WspkNLWN)8jU) z>l}7V_GC`}>qcQ#6Pwwra>>QN7Fd4oczWgi-Ti6p(MR3YdFzGzJq-*WSMVhb!}NX~ zM7lbR!KGTuJd984GtIr@-LqAUbIeWfN%=(Y)#`kI;&`^sCzMzG)Spb#8-MxCI$Odk z=muks3*vV1`Oyui`?-bxSt$VIFe&e!4n2)Ab<|ZHIOE>t{+yU!OTB(G*a*RYwhRA! zB0Gk9HHEz~xEw)!2>Ls+{(e>5@}89t?q+&;nTr$EA7k0BaJ}2eih)Jeb;<x9D-G(K z){r(N#vxwndHbpmT#JnJGBL4HZ3p#OFC?65USiJLn#T75LL{%n{3lg6a$YX%G-Pl; zDl3iu6BOn>$(60^JmG%1PgVO(t63>-boEqOd8%VmTie^(US686Yu(!V-1a^C0{U{V zyZheu;^%Y5&JWmrJK3$9^^hQ#lOj)GyR<qY^fM7+pAnd<X`b<T#$0O-3|H6Cx9_P2 zG_aQDx$l~<*|vY(ejD5FJ(MyBoKzcr?AHIZ+8!iqeLoZgn63>L=*L)=`|5w$uD$-_ zs1V?}bo!#d#1h8PHXNlf!r-{N&fQ|EMBnE6xc8Ci#_O56J8C$Mtq-&eVLo8L&g|`e zoy~r2eYmIH_wBU50<O1DR=)zSw+%nsZ{98UzDMc^?eZ<h{0%CQcY{glFB<RqKE5Ab z+<un0zia!>^g0F(6$UvMw`>in!)JnL9a9^$Pxx>6?U?)pzGf&(+J&s2I8MzhM|JUX zRPVas9@98`ZPU7XI{g?>@Y8z<e^)<U&_6i0qLi?NXYR7(r!Ns1`aXP~zW2Ixeav{w ze12{U-aPtWUyM>nn7(W{*4+E`>G(Wi=R39udavO1KG$)r?{2&^Wf`8=e8Gzbb26$U zG#HEV3O@OJ%Wsp^JGeE|UsVRl@2+oRpM7EZn?9`!)|i7)e2faz13IT(VK7>c(+2Uc zI%IS9UWWHqe1q(fuR70kSL17ja+bCxM-g|aQJ&B2D>^3GH+%QqAnOY2-~DT+H^%6i zk0Z9`zAB5$)U|~jECj&_v7<`Q*jyuYOs?0J_dKEiGQ37&*P_V2Sxv*od#@kwV~%DT zj-}&pu{f&{geYbkamXn|hW$>jodwUs&K{p-b(_#wzJ^+Fa$N$ov*rFl{BJV1M_b^Q z{r)n3SUv?udJtQz-u{1JS{be{PU1Fz`JfNgH4PqePZj~|XOX21qK<2OxAlDwt8;tF zXOWd|&j@4IE@zFy<=Qs$Uz<-&fiE;3%r&!1o9G$<uh#J|lzYv*z0m?;foE_kwC`xs z)AyUto_bv;mnc62+ZisZ(;+1FXQP`lzoC2i4S{LIu4r&_*qbZ+fKCB?0xvG%yjMqx zK>*PbB;Gdh^IBjv^^Wr|Qx@k26eYSw&LaGVx5gv>3}n?S;=WEerpO;-RmF|HD(td$ zaHM$)C@^#hSLQ+Eb4o@U<3m;Yl4J0|Kr4AyyJ>8fY(hz2t^VbgX>2);`VaY|p}hj0 z2!BlIwrAiLXgIHkTJRvAEwoVj);f7_P7K5X@PrwaxZujR6J%;#NTE~pO~TPBC!t}N z9|Vg9DtIcNww8rD=Ld^~AOHm0l|z6Xputqwz*Q4stMB-x5-<kB9eSR9IOfw{KMkqz z2lW}<BOpp6G)qr%uj`(^M*5AZ#uY=L85YH<2@}-i`$H(0ec*9+>^_Nv%(U-^JHW7y z+1v94D%2^p)9IHlKb)3UP6JpOxT>!x#Fq2g#|$y6O{pmv&c{|=r1N7aXh<y6t@kiu zA_%e$ILTDbOhDhFC83CGg-e;E*?*GWdi67kw`XAK{79V+$E!B|uy&krt=>Dt9e+oK zDlo?Asl<JY=aPt6>>^$f+74*L`s%)cyqS)-3mrtgp+|^ho{q!JMW@529j~LJpsnNB zzO{A7TSxdQKu)XyAX!V31nl+k2nlrWXlp`aoK<FibX2Ai7}N)*C*i3!^+3{jba|=| z8c*RTHi}fu%pKDMX*6*0CC3LOKXh(kSAn4>l(>Jm^pLM1J3ByRf-F`G!5Dza(aBGO z04#+AN|-<agCce_8Djpx*6^q>d&VIIPdUtciu&gJn3^MgbW6NGLkk)Y^uxCmf{hq~ z_F@g*Y859Db;NdxdomDXfEgkV@_|MbHUrvhJGknGO#*7;L%SF%AWOhQybWo<9Z>pS zs7y*&;9;I_)&4VR-9cY6`O|=v_^7X$pr?oDCTNO-9910J4~8G4>qOoYVyd@9@Ku{! zIV<^+uM*_w*UiMBwYZzH;0IDp>7;DCE8<E|+;&gmWuW{Tm!&vL1=Dt7$G?`#qH%pN zWsOviaS7ck3~)f^0rM<f<cb+{N0-lUC=JX+tY<(5J_$zLEUP&53bWLGqR0eY#&k@e z35caB8Ar|l?`r?iCdgxv(fdA{uW;6P+6`L<j+ZXEjqMe8`U%Q@VzIG<d{5&zQOffZ zP#Wl*!loqJuDlYl*J+3)*CTeK_NlPj2GPueOgnWO$0atYj`wO_eQooc^f)Xl=9s$4 z$H7ykh7sgoXM)T{&GNN>&2XU;`J#L7e(3`c)q{0@JrxqgU<QyY|3-(~Kp*5LfV86n zcRI0e0{M)4IU02AZcWQ)kA5OuM0-SI5?EJnvkZZ%erSUg@Y$bu$EMQNzoQF9HxBl7 zYl@4SSAP-9H`u2fNAPaWYX-Br1|w*1mIrr=f++7U+YZ(rPA2aP^lQ}cL3M%`tCy=g zg)2RZN$j(Xwi^d+gV2Q?CS|}D4obC$Iovr5XXY3eJAiDg73>r*9sxh=W6Q*}8MA}u z|0#t&qqhQ+(jHDX!iF~vYTPlR<%z}@ETlK1XhVdCAnZJe;=9zlX^&b%oy|AOb8;0M zLJ!Y?r92Y6#5OJ;hDiDEO}i)bUcntVCd?Eh`05=JwjYK1tsVj{>&`@axO9Bd88L@G zP<8n4q{SBd%Os+x8B?T#9Wm3}T_t<GJqL-qfOf*9NVWU8t_MiL$gDL6*gsHp#|=;& z5v;G{cjp?DQU7&TWXr%x^i^pO+Y8dLFbpQcx8K_cD6ftR(Xjs`8d<1=FXprVO>I-4 zv4E#?a&HlpVT<ANmBYF?@A82@Adt$`4E;WU+nj)SoX_}muAO-h*G@(O9u_D_>~I<f z!VD+Bdj;1YzE}s}4Iya=scm7}?|$vi$O`B*8`17y>?csM$3XlPGw6?8zxu6#jSmxn zFO#4*At=M}_7IKY$f>`VNWi!+fRaH{g6>42aGM|)K3bfOPSSh|N&$mfB0niDH-b(M zg@YjUk$i<_o3ELt8no~x#Um%(U4xqmAz@?@R%`K)QIpprnkHgp*#)W=Xcb=_LX&6y zZ=qtY<IdiQV_$sO5<)GcykT}wXQ&xU1W`vUmk1i{MJZ!&paZC>h4_xM@Igv~5Td1D zhtIgUxekPbS=F@}CJYqlE*2CYXoJ5R;sUxKbZL2f^87dU7MR5<cg|N;LKf0de^&z# zziXYp3yTY&9zL*-U1#=Ha$hB@_P)a;Q1(W8As(H>#~rn771)!{4OcnTgU})A2r}Et z-!pmePP^(4Z6M!&)iDLZ6tn8~Z&P=Mc-@H&qu0aX4Tfk!ZiZAdI_`kw{{`b4kPN)L zJ-EJ$#t8@$L`BbUU2o_@RY3Vc*@4!a7hq8xVz`$;eDLQUcO6T>1aaG?(nuw5K9%Of zx0!;@zZ;r;9+?}dIwuGnPzVVu2=p-`SOq2Tgw5)YrV2+ej_aRja2On`zzmM?57b8W z#mo4QL%xFt%tRJ^0m5o8X~tD#_8@b8m1I!h15BpS7&!-838Djg0i(psc`+1>q=uwZ zOwbcU4lK#Zm2n#3M^xO{R}6m}UtSk36$cQ^g)`CUp;a{<+3KZy$9;KW9`}l8=GoXk z@w>muSi_e~^Xh*AH9*S0Encu}RT|_eKbt#$n)jZeJgk#T1U+TJu=)%VWsH41a6rWE z&MB|mUW7f7`RWIf!{Y_u+pGgNLSR6ly#7A?fAcMv1tblriYTb>y;1TADP%K*j(wfs zLfSw0JuH%d7s0DMZXggHmD-ziPF{!D<1Kf5h%e}bii_YjaKchdEU7XsiB*F^PgFV1 z2mi)cU@HWXF&nHYl-;uN3NQ~qBWf!V5?Q*(ARvFiaponshrNh*x!1Liz1~13tR89! zk_Q$LrUrkL_`xm!0t6x4Lm5EKHp7pmjYtKg5_}c;qCcs5Bf=Uq<&&V$6Ab|v-3PTm zOCmmTUI%^<fbbaTQ-(u6;v0T}42UW;_HI93myENbl~(#)XG<_z826o6iv*OjI;f5Z z|H4VG$tRr+DO@|epaVi3PRqRmfiNRX6ASLIqH7tcSvH9!tNQAw5$-a-z^%mv!3|I_ zlMfxK8g5=r<lv5xwv`<%JM3*b7&VBqzr?Nq?_L>I%Y}ia^Afw!Lo>v~>k!*ez_E*( zygfpbMujuRjrQ(`F0}yw!EpH?fS5lJ2nqZ6U`8L@3kgE7sKCHXnP7vu!Ehp?S|i!s zFHk`+nnWkGA6{zSf_p=*6DH?^IDVKs*z=<lSn8ZHzR>&7_|*6)M<5!Y9UH@X6IP)R z6IyYf%vHb6en1A<L*xTeMA`IA!V;<y;<~{C%nBoa2XSu=*mWfwbaY`{3FO{p_x9Ba zAtir#fJ?9=K3STbH#ZDB8D@D3+$kl~?C3lg2k!E<`&$U7LbOPY*nVG7{Y9YBV~E-5 z=2llj@t|dKvWGa?OqIe1SaqNR0EsakVgsvTNx2CEa{~M~sGGm%Cul=3MFCNchD3G8 zN34>Qu=xl~_JD}9q1a#`BusHARcRL?1Bib%UzfUD{3Q(2!aE?la7e%bD@*YIj~HP3 zU~FV=LQ%mL*<vgLIKRL|SP3YKR!u0pkAP+RB0{9*M6(XVbA{VR5ZezS-01M!{im2h zvF3;!p}=rYHVpb7!E5N%CWs$BoytiUR181ANlQd=LG1EI=R({4q=$9ImhbE6=R){E zh!W+M^dK*ME#Db@k7lO$_^clXxW%(@EGWw&wmtp|AyG$X``L<?an|=KNGgKchZMx4 zg5HLF8&GRp<O2wCONdQD*Jn5n3x$0X2U!#dJ9`4qMIsBIMWiH}<DkfSBtGPxxDAVd zouGMehydR05yXQm8^$1UuJ1#x^P9jnvG_xex*VWAbi6E9Nn8Ny;WrzY-7>J5O$dHB z{6bbZWUvUma&aqYGeX*2h86b<LTBU)Y)~?%xPFIo2qtqL*erNJY=6xX)x@O&zwyG} zN8PL*27f*~@fj@V?yxmz^%wIE92u$uA&5W}^vNWG^Qz5{+Jb9dh&5yhLZX<UTBf{F zu21N%88j>)=VHd2;D)B>hZT->6CM#vP-^6{A~xkKaQh$``v6Q-m?nTT3wAsPHV<im z<bcfFDZ19!+r>VJ7-SUr02?7*zC>E=W+7<thYqQO9DF@;(O_3@W5^~j24wtzm_w@a zJuq^3oOzQtiLG2*B9L6mpo7^UVW5<_C3gMf7crWkNY6J|8-m3$?_Cu%BHbI%8%>;S zptL8j;rd_>U~C^C#zW+r1BVSa>UOE96pBy^F132{M6{M5YKicIx0sEaE0qWv;gjJk zvIX{lxQOMVJ^2Tu@i5^<qxS^r7CeaHee1y)C&xYF%`L=}9lAiqEJT(D-k}(<4xk?` zu9lwIEDJFR+Uy&Mj=kgg1lXnq=CfhG3E~pUwSpSviNYkW)K%D!Z=4ie@16a@#Wh*@ zub9rRxtwtGL?8+>FC0E!=oEfzwglWcM<r;gVZJ(nC-@;Dhp<`ij;SG^VBU+5fhrRS za>D|!PtQf5J$NHFh{=3&qBPljwm2VpyrTIEDLJx|9Yo!+4(~*9L~}|vJI5-r%@-tZ zWp1vUtDmo1RZsQ;0MBr*R!`>OStit8DAav~Rg=V*df&v`8_Ja~w0smh*~C6TfeH}% zzoH-lgQ1=PCrl5G_tf${E;=9dnSQ|0>N&iN>zb&TC58~ypnusjdcsI$_i=L2M#0mD z%oi{P00~ACn^zJ35v9I(N5b}HIfmx|?8xGSpwDPm78ff;@uh{J`EHEP11-SAHv)Mq zT3~62#`wnvU41TspeIF#Na0Fs@xVnF(f#B0qY0u#9BAWq{|1P{P6DL$!#Jb@@NTp{ zP&)z8(i?#f`3`Gf<#FbD1GdL6JVJ->y^|GBaHmcnB`gwH2uCfO0VK@D3&in|;TiA| zh<F|^0lgB}%SpSy?g9)DE!S&&+$ZVRL^R0~XJys05I8SseJxX!_N^DJgA-&xCK28} zPZ3Wb&|7E4$TkcOfCIS#UNvv-m6*%5T#%O=Scg->_h1}1jHh|9U*x_81`B&cdB9@{ zKl}#a0VWA{qNMZJ+jo*87^HB-l5yj3u;Pgh{GKq@-iYO40!z*R_Avv?-r>nF*bn8& zW1^+zo&>kHt`yX-QHpY}2J8drdM7-Q7j~0bDOZS%w5yo5fzXC&K?pPsqiZJS!@dNG z$UY{~2sVVOC%kag=*GfFA{NGLG95<>f<E|yf`;O7W!wsE013RmD;^<P0cL_Cmc;eN zGzcO^63<W5kn6Tz)W_TjE@rD?W}otu7{fX&#PK#+`Ct#F{LXdQRJ`x@G?t)<y$yDG z)-)Ad54%nz0T$P7OfwY+X)OB!v%tuSl}-<3)XYT7kYVE46b*v>!EHb&OrEInzD0Tg z!Fq3xV}`5Aa$oR9n4Vh6!UOK&<7SFQJu>BE*2QC5Sj#!sSUsZCuv&n{ngr+v5)wRu zq(F#0Upscd^;NSM-6|>ErveD|#(bbT^YJ}A?+3E)bo5f17Bj)?uiL}fdUEC|=0TL= z_s~xu7-1F4?a?-h0P5*E@_-tfeeRGoxEObaioG#6LN>M-JRe^O@7?i;qeVb{c#DTS zZ6Jalgpe@|Wf>OOGT8|9={(VL-t$jsl?iIxK>k%d3MuEbGG+*5<dYh}1&3Ejpl<@p zz^ZR!J9KXYP?!*S)NlMC@iuqDn92Yndw39O&*yP?*eLvA0(1^DqzO($4D1Ij7ak97 zfG}LugCOm+noj`M@J9k;pB1<VPzun3A>e{gknJfW1S4^G7y_bcnOnj_#syjs%-aEa z3+V`V@0}FD+$Ep+u{j-#?~u7hbW7F%CA<@rGf$C1hUu?)c>=jQ;WWq}t-NCC<;1cH zm>if4>rp4_Z|q}yU>Oi7<Pr1)LJ2cr?Jq18LWgBcq_m3qvs!FuiW~NTT2G!C*TEvL zbAFFIMI_fG(jebQfg7UTE|dcsN=Sxg9?QL9&ahY0BVkDdK5UakfM^C*X0?owRQzyi zYRkZhO_z)KhV>3n@@?@oy6lrfOnB6S0<oZ3xtZ>xu~XdUBOqzM4)>g%CctXL!uD7) z&({qUW{E6Kf+a*g%{+j78eK(rArfPmb7yM~5<!Y!jf6=^m}{Hhj1B6Ic|a~a)&*rf zjbTG!THz%o;Ge{pYT+XUfIwN~KA@C&r^e-?juvmcG8~($zBiaGvyr32i;L%8=5^<L zkZ-Wea9dgX8iB|s?`5rEc~>zzJK;uzxtKj9({|7gL}z%&Ik|WbVIq=1OtX~^U{1O{ zktiFOkH+|GW`a195ZRqhl@8{?3L$^r&!jEt6w~Avv5bAA$j~q)*7cYl?j9iBFm&lL zO2m}+Q(mAcZv32Uhk#&C=!6&gg|3Gum|0$p6#}i^04aw}HlQeg`D^W~5Zz<y@-YN| z6FdovSnj=04%<SKUd(>t74_wg-w@f)D&|1$T6jE2M2lp68(Rr@2<wcwp?A9lPfc$H z>QPTDP+H%OJWQAzD9C#vvOjP#!<=CVx8DCWa}ou;i`l7xf%*!KG8;o|PjM)b$2tAo zp5_3I9Z>Hew<)2NfOz;3?}iA-53hOIK<KzhvLM|DRJh2;Ba6qgTZwf*dO+q=VUrhI z07J|OhI~OeiPtY1G#glrh|Mlg26|thidgkRLHjwdM*Xf@l=t#FwhE2ekk95guRQk2 zqQY*tl3X*UhFH)?@{o{3?jUs{ofUKX>9-KIm1{4H%PTKhXpMbERs+cAk_>d7<FXuI zCbU9qSoqH~8we2K&*#TOml3?M*;4?~26Pny3iHQlQ68FDU!G>C^ui`F5fSuNr-v6I z^O$?vrm2m&-LysV01Gk#*<`W7%K~zoJWm2;OwWS|W*ylp?k2FXrFE%~C;*>%?{3Zy zC&Mf7v<Y*qP(Q>L@nf5u=;1^NXaKaD*xGK39w2M*UOpIjB1jot<qJpvD-)0<aJ1<u z1lI6)%!&CXGvjOxw6jB~Fu%~}4j?_w0}kG-96ARqzJ<uV*^*|?H($6iA<lxo^b#Qh z94vyCnhv1;tcF@ZsOSE&g0E*;Y$9eBL_nyTc8llS7ts@yT8O<P8Eps_k0&)Lnao2w z;&*Zmv=Y%LVLq8yA&bW@@noDjdC?a)Gsc70eJ3NqI(g<*^il&3b_6pwy;>r_CbMJ7 z&2QuE0rro5u|)5<cn89V%5qvgW$hGX`rY^wD(R_+-8q4Ob~FZ{k~fj@7M9=QMzfqH zHe{BJAQ2Z5lsse)jQPZ;$OZ|%pzj;qm!Hfk^<}r0xe(JtNFBD$x{0_?9uix9Q3+Me zhP_w3n#J|x1sL!I&mxoeey#iLif9xwF+^VR)|_v#&?F1nVQekDoy8S9;GQUeThzzj za9-#y!JaMfWR<t&&M^Vd0yo*|@cawOjBZ0<1Nb)r_7ogGM9UPBxDDRYv1+tfU**FE z){)rNg0~Z9x~F5r=?iWT?x7kAB3?d%b9ib8O7cP7vxvsVZcC4~;7KguUoH@1Bpfbt zy@Zp?k}|GH<H`xbg1X$&!FMg}leeyaPGh+3pjP}Wm4Ui_=Uj+5$u+SMSC6H&q?gv4 zAj|fZoYCr@0|7$W>P0rM60=}L2xB%jA+-sagQ%wrW@*_qLN+UDvp~OBg)&=0J2V9R zQlf@c<3p@kB|86&eOs_p2!|oy2o~B4Bj!b$=RTh?57q}!t|fl>rggA5BHUn_-~>P( zJ}-o?0l6oahJG>cUDw4;7bt?sdf);;LCj-Lcskk+dTU+5vm+#)xLuTB+Zs>+&Rsxf zKtE8qp7)#Tc|Bf>$Z*h$>&kdIN~3!EJWOH(`JkZ5G;0V3XbjX5Z`d$CmH<Os^JpCM z1VILo0W<<7Xu;xpUIkbJP1}3yXd8<%SH~j^fy>23PMq2b6eM1V42L}yV%claG*;D= zH`CJv;-Q$HEo_6fWC(aC5FLTj?&$GCv;*Nn211Ri^;pBhIsDM#ECTU_q~TAZZ9~t% z3C-$i<qt0=1mVk}=Ck6T=WFeSphXxw@NVIf=f5wc3<CS2Pc3Dth?U#K_Y>hVn1G}_ z4iCg`FCD^iq3jG@_{@|;K-pBP%M(NEqNS1D8qViFq7>!_!7qH_DaXxD<GC1v+yAO> z2$xSCA7N}lOb=1EBB@~!oomO{lGTLcIko?+6lMkXZam?XHnP~m1bDC2%q+Hd<8YRw zK_D#1fh}$2AF!GN5faN~a{+9`0z$*28)~_zAfa>BL<B^9-X_NLFqxGtK^5kCFL?3z zP7Z5LPuq#pr*b?NR6dFeUN^4~svJCXhb)hbpl}OvBy1GuDRkdl6A{CM@$6Y0=*32Y z>`QpZ^@k)s9;oH2CrH(!)p|=dtDV8c2rqCUGn>uZ#MV9l5>X1zgG~p8Apk@)2p7%| z{1Iu0u^pQ;4KO_CA6Y0DQ*UL--Az=^mQDi5D#vy*Shn;KYSIOo^=7qG^6ZTDz}u`< zCJGP|fzw&{7fbdy9xBL2Ez`b;CIdFoF(*$Lo@>J0-?~}fbc1JR{J<bA5gLLLfZz}# zPkuG12|WwWvR-LQF;9eC#wx}|7)>TWU>bydD~?MtKib{Bdb?>*q1JGZNfhl0XgGLi zA3uC7q<zsqNC@P3;2J@x01sCO19-&Dc~m51aj1;2FIW{O<+@a}vxV&m;ICCGUx=3I ziT$sKy|{FIQ#)1R3ebUy#|vfz`z>^1J6r&~5Yx;!J(rgAQ_zj~%NpGXj!%sYzy6Fn zkH?ZMdmU&|PYgj*)0R3Py8x$w#Lefdhh_X8+2yN0C_6lMf@KPpt{d_>{4;?FSoT+T zbkhu?=z=sd07g`j*@Y+tz=Q6~>l0rfY`hK18UivGw770?bM~-2E1Q-wLh4?RVIe!; z1a5U&{TU<A?J{{0iW<5;d;~BHLl2%S!pnvgm=*obHswCK8kSe&<sM5Y;_md)&=42< zQTV794$#<erJnxM^ZW`T)h1T;TSoC&Bg`GK>}o=Qp({2qjL~_cWNxGY-8eFE+2QF5 zx{;uJTwEh++23f<`YGn(b4*WyGkgZuD_%U$Wt-BpduHQl1iy1$0s?jx@6<71Rp=D- zj0fNeoB{NCO{swo3>J%E`n6tQZbve&aWVv31vD*SZ;4Pc@8MavFo;;6y5+`m`R^$W zwy+U27~s--A+Y(Kd!3pB?_u0fVzWhNp#veWLn5$Ukei=dZ290#<5zQq6SA3zfp|UK zJe$DvJ|9eGy)ad1hfLFSF6Q5B%a1yZMa18U0F@|cLEOicFUx!J%1fHxF<rv`2l0Qk z9RMPm%rQp*%I?ZvnYah@TnnQ@BfZ@s!fMF)2tBZof@xGUeo*LHYgD=rv!;zH6Q3fO zK}B%6;7L^*T*v?}%^h&1cKczE&665p`~#4oS!(m(3flpgZV1CRzIHPKM|B`$OgtF* zVXqGh2Qxfn5vA5}#Z%6M!G3ci;0I{UzYu!+h8lm%0h$E}^*(vh&jcmhF%sgjsku%q z@3`voqC;;uO=f4Ux=Gd;dPnA;;kdX>gw|NZn^R_mEu{0_l7$pR(FbgZ7gX8<vgOTH z)FTuK*0KC&ntHXQcRc`{1sltfU+ZwJkVxrXr?`T6yXIwOUgt9qi>~C$m3xMi&KcXY ztv#@=<#Ww&kjFG6oRZt{G|H|l;C;<-xg@6!;saIQ6u7<u$E+`?fLI}1*PF#gI-2*_ zUMt9Jfovc8PQ-5}L<7Rko@>>n_Y4C>b7bR(g@E*XJ-5EU%_A%e7JFqqg+g8zWiBsq z3U9bPb+#@aLf=gJ7v<mfxB-|)Un9-791&N5j!sa3$e{Yukx=F@p%1LCSDi%t*XlYh zGsE00`o?SHSIxg9Q5%9`m7ZpbZbnEzh@qBvX}5miR3lvmJ#OFQ)oGkxyr`RGTi{V6 zFh#Imb9&;wYvppf^(GG*)UwVSC1PR9yk6JQ1hJJ&IUvV+X+UR-5?ZVp&<gg)Kt8HR zo)57c-#4(FVmzet{_>5BMCo3AmvJArF~2}aQt)Od1(L{~z~rtI;<{9H_ivp1g?&5` zg%Eh7`aywh0JrwRBjsuDS+~5<c%?wt*7_7y-hP|n2SjY(CG1aWl!xSmBf^@sVYzm} zB`(YdEu#zA1Lmotz#lA@<#yqPs+m9}0w;k7q|SG;C7wcn_qdGu1Ho6`2BtptJwPRX zWj33QjgK{Ljlf*kA0%q_JaRy|nu*f;8nWH}gwsCOCf7NAN%N>B+sl$y!jbtNc2^1! zXIMUIxw(05G%k38cDrnvsx5f55}+6#0pJ5pD@YMc2aYz`GAI}x04mrK#_9nnNUaEl zSv$GyUd7h3#Wj6Y!zOILq-jJ}(%Jt!Yzu)wvO_k_c#IIa5);7Teeo@55zPDA($_2y zm{?2zE<zg_#y26mBX$qZH$E;Cd~lq6W0$A|kHjEU?DicjVz%%ze@G<=m1?$yeisXQ z*aAo>ZiUI)%#|#Yfl|mohY_d0YLBAA10^od3}nvMsNC_SYxsnAo1*@HP31ZTyy~^z zfZ+Az$iA9b_nhp7L&3U3zOvzxt<FgfdCGyUn#+Rr+loD9;QzFTvYC0&VpRp_$Pa>g z$||vx%N7me?t^N40ogR$NNhCsx)2C3qjY-vS=C$P0O^70Z=4qYV}w$;9xgZ#;WZ$D z?~P6!%_FHctV2X+1hxhgxjm*PykeB=X{UcEtRYq(L!I;aRgHmE-#R~K$586v=z^GI zH3B5pmU9A5j4cs1h5m+f+m{MJRfMxSxeIMzjY7Kv+Q6PhTn7n<v0Dxvl;x+O*AlY# zWXe*<AaN;x!njtf*FgB0*OLYCt}qU~5D=;6Qefq5@<;UY*vq0-dzO$^Zw!2$!NO>9 z9D0kJ`&c7eS_u=@0X<pEfMn=lL}}%NoqBjkZl?2J)2{pnB7xCt>#Epc1V_B?WgE#h z!)qs<C5uXOP$$^(TtPfLU)ik}pijkO@AXz#rhu4`_xn_+T?FN?^DoS_11kW3SS)WC zH_pQ6Tl#Vb3=zg@W~4vd^2Xx=)P8x^h&w<8u8DSPHnT$yEu$UDPU+7kX~DSFbGQjT zK@Q`<Zvc25BcQmk`Ouv0g34a41`MWKFA86=aQY_H;`zV!sl+0GAKYiCRiUlm?@nA8 zaD@Fu>w{{F?{|49csMj79bojp99*++2M}ZrpzB~UK#<M>tZa1{N@ISjC6rll7g9uu z;uYOq2~%}ur%<J`;GfgJH<x{i_5xdu-+xx_#B7HYG1dYxb|H`V^8T$@e~C0`BAa<; znno}+Z~~i9l2)Q3l57K1YkQ8+q&=WIlpUSYU(acW?W7<UvJ8f95o9d(Z{fRj;D@MS zPmBQH*Y&Wzs@XC6l;PPuTxfblOLYcVCFC(%Xo-`J<b&|+Npj+@S&v&)1gniUOd+9A z)(}HpetHDIn>F$(ObrqAlydjSHg($^yV@S=X*C+=Z#GE)g*B{F^J!DZ81Z+{<no2X z<HOc~ZRFsP#}{y`+J{%nw=FvcxB<8t%*FRQ+kzAVn3l!2IfcH7{qwfhJt3>&Ta`?J zp{G$0e=}L00Ki52ZKHsp5kxmnf>Ir*%GXn6(Bl#drJ|8NY(eV6vLc`EHLSLV$9Y6z z{Rj5MVw^%Ecq8UC3D7tfa`3iOJbPSkowH5T;RV@Qcc%xy)vYzMHtkeqvNp}bf@I<l zbNQ^pZLgaPalAscbLI3Y%?DVU*(1kKx$t`M1S2#*W2O5rgH3FI0_>-GhJwS|f&{X> zgd+q5mJN#nkR%$V0z$=R7Yj-(tPWrIxVxQG1q}E!P8N`K|0<O|B)&lWV8oafDWg&Q zgY{19>v3ZH8Zqc#SwBJC#0qau5O}_c9a##tZT&<ZpGG(=-UQS$xTSo1R*qUIXU~c& zW?doNA+S;T9+tHbZvayZLI9lZiQpBJxY<2Qf*%q-QOLR8_#Iy)D^OpL+e~?JYZWj% z`GMR#eRr(FCfM)LFBB~ZJ4`_1od|bTfy=|@T7-=`eD*Wr?8Kvmu7UBqsmux=X(up$ zH=*LXx&0R26GHC@MZ_%lr<nd34d>46+Zq)H|D`jj2dZg({jf2vc1xEbNc%z|f4no1 z5zsiL3va#Of$Ck56*Xb~Or-*kTp|QfzucvPjn&k8oDcib(gm7=(-6_vo*Cu`Je-!z zZ0`mP!uDCv5f*@+9k*qpWmg2m=LuhS20(qyA3=CdwBMKxDArG(yJH7n**9-!x)a-e z;848(7WQ}rvfQkl>PKaVsb6W>GT!YWS6_ZnmjmjFWKXPnSv1RfCL8^mCA(ZFJ7wG6 zmLR|}xS{1~7Mo?WQX20!maSLagLk%Vcq-V(s_YtOqq^v}>R`$b5zs1PR44`myV)1! z70v2>&|IQvT!=ruG@rq33>Frai5jsh!X&rl_An~XsIrH4>^#CW=F15oCQa~Q8}0(^ z&qC1mB(NbCRs)<)l#fN_v%+a=N+;^Mq3n*Q7*?@@IT^~s<-fsDAnp}sl=M%_W_zkI z?7=lQrWAq>Jk}xvAmp`0`q}9saJfJhKAW!N&iI^wf<^jR1j$+fp7Wf=qiJDfm>?#> z$KIx@R^Z}Z5Yn2KKKQL%MO3TvoI*tSHbLdd7$V5l1V`O~NuA)&QX#e=qh>QR??9wu z*WQy8Tpi18W-$XyTkAikJgeH=x1;GD1<|a2?QntbYu3#_L=046zQ!?;)75F~xCbO2 zPDPss%yiA#AHvnpkOwOg4KdY%C<Q9Sln4N-)(Zz~ZsKn!!E63)ni8^wB1x_I9sLis z)nJo&4FMW*V2Pk}W^4}ulgs77zXWW&X<7n09<=b|QP#<bZAXl-tREkdP5U%wQNSL| ziDH=!btuK0KZ1P08Clwi;A0O{wM_LjBbvD;Q-8xzP?#oQp1*hq8QL<0_w*1u!zQGw z*e*>#Rv8Av0w`qKP+$Tam+*!DidJ7tg|}2{A>T66|F+=P_B^N`*g$Y6mY2+zA0oXt zj>NQ0Nqe787bNH{zqLEKThVMKX(_J~52J#>m3=vbWiR4UGTU@FZWLaWo$X>7&xv`n z1RUrn5i<~2BM~*QA>W2<Lws`hE*oBQlvuQ7Z465`An34P2<PdwbSMIMxa=YX!mN&j zTsI^GRH|B4!273bv&VS<{G!Jl0E{_23=f!BtYZK}vS^O@G3^TO-mp#3=WS>}j}vZu zK3oP<Gs8|4u!+ao-nv<D!ZLcpB3-NMR)F9f%|hUOERW5$p;{jWc0)0)CJ1=KFcb~J zqLrSGxIzCs*1%NzyR6{>p$V%U0@k?5@5I|ZxM%xKF8iUZ@5B!ipor>RPbvF98;DPq zbe)0_>xM<X&lbXgF5vSYArn=o%C3?4^1T*-uiwFw?bpE`XgGomAi+Ie5KE+xHKd>x zz>v?m4I~M=3_?0ksobAk@5RpJFcH!gBj7ovR6Mw852oeePkYo7)$XOY@lyVmYpjZ6 z^gi}AY&_b^rATP_lI{bw+RmA<m<>7<CARJK{Mq$#+Qk!Qv+$|MAwgCoRry>c2tEma zTz7Y{6XCvi%z_a#z(q0Ysn`RHjOceOWJ*1a9au=ba3EaJ5fq=FhS``zMKsD$Y+y=k zoQGGpN0!{ZBR@Pq-G~Q_9;y2*IM!wFd<K%u(j%Ge9mo+ZJo3>T8bQM90q1leP*AB6 zvFfSl=gE!@HIPuCHt@T^(`&)l!hAo72jT~UGD^U93I5iKwrv_Rp$(U3op6U@07e-O z2h+{lrqj>zTMt=Q!qu|<;zK4S`fuVgo{YslXk}Ciuo%EPtL9HljDcXqR<3*wvg&II zyh=Db{tB)QO2d}#BVujU4?jlKRsxX0x2IbXhfg&y#d^qP%U1D7A8U!G3!qT}5b5Bh zgQTWxYn|4Qjldo8GyEn#qz}Y89$IeVBJ|j5(P^=HVjI)QcIJ1xuTNcebyk+;#{|k^ z>KSjwmb+C2*p*p7@cA9rW04l#OMD?Lj@g|UW^+o12TcoK2lU{9higT!fp<7B!+wD5 ziIc}`#5=rS_>Ojy*q+`!V0ItB&J{tID=YDWWJsN0vbIRM->lgu<?psP7WwL7rU)9u zd-#?o1|5wf!9h~tYL0F~;?AD!xkn9IvhhfkXM8Piw(%E$xvW03QR7ruf2ihCZ3cu` z=KBmCnGZpr+OA%UJNI}_I<qy!P)49z3b-q5Brg+H+8_Xss|4HTx4OP&Q=du!R70kj z^t+cy62r8o`s;aY%WqDt0(W<QolfIn*J-En<Z!5>c;x`fUl-mI`+#Fxl+N`#e#9e{ zW+a)z;Vw=x2+0&kv(L}t4}!TT{2fzu%8GQ)Os6A=4k34S+HHZxDWH7={PePB#j~?d zV<6}ie}wPj@~3AK=bOvg^}4yFja=2%J&F0P&fD0Q;6Sbf0r!N{{EH<*k4Pm%VaF*y zXjWCFB?#F@9%2mJ454b)leS;o04(G>V~FfJ0XYWS^jZH1I#}`Wog>iLPM12?@xBP| z*Nm$JL7edu?TSUO?HeiTYn)y&q50vIzN1bY6kw}D_dF0upX%%Bdcft)h!<iGA<o0Q z47TRaD<YyHdcMtX=QAS&L$cZ!Fqcp8t^;!-_<7cDaXD)s$&!%m#P-4E<G5D0Jfq1% zgTxYQm1Wa51A7F2WKuTc<JhdnQ@SJV%^g+AE^zM%A7mD5!ai-A-YtRQ+C4_~sE^;^ zv$6>T%Lv0cf#&X?yBq(ZUs(=l>s!4X+W^2oJQ0TZut00R9dt4Sa;)Q7NYrM>gXMvp zt@@k;vcStG^Y;vWjtc||%M!nGy1~nRvbJy^wOPi7x7}#@0SjEyyuM#96;7kRf(4dh z&Edsvnim=dkaY%7q5>=%w~Bo`5uw}6Xn{?X<q#_i!akzopitFC2{)SJLQCHc^f5oq zHjh+9M{`OKJa1aBM3gp5Y-O`$$k?*qh+Z?F`bxE$?Te=b$I{}haW|*BK_HiO2%^~D zVK&#py9&E`v`2#WjgL5;;QKYrS%2h^6OUnX4$D~w&H5{RX60c96S^F&9@HSrkVzwK z(#f_JLTyn%=rV-g=Mce!2NC87Y&+vqPP~XHY0z}YFksJR{Z1pINgNAN9PZYg1e!hg zbC6Ptec953Gk?`Y7`Tr$y;kso?df&~hf^3Jt)7Kj$@0CyxiU}5uzJKT!Qxs@2VAD* z9lXl*=NO80@6GyNox)y+Z6(lY2AW8pWE-RyOw4|(=b}WBj5>QlKk~tX{wZ~~Sm;Jh zVN|!-*3dTg;z40BD5TFZN$;2fYC*=d9WG0+9{u}fiA{IDr^Y(Z#Zo!v0<J$$i5`uk zMJ<iSCJ_0MKMN@cSrEh6AX@Pz#=uqv#`V0#`An}Bt-SjU#hMoLAaQIjd(W7Ht%+B2 zVkTY)uoKU}Y^HlAGF<ZiLG$~WB&l7$^Tb{D(W88o5;%ZpX%j;wkXngg%NTb#%T)pR z9;|t3B0RCb?O$Hsjcdc^tB9@Ogpk<hj3os<t6AW0gS#Mxbx&8Y*IYq>WN)5@+NeJ5 zS`EW;6Ekd%4>4cwna~U4fsg&Ia?m<kz^<1ItAnxFEGfP_vCH{L&cQ0M4mJ%H8BsDn zsS5PI9b(g;_*!Hd%=_P-nO&wTpE6p<=7!TWTV{>FQrCv5+3Sc@0jKTQbnpV96%Xvq z&19J^Xqtu$2TeL+n3adzRS8J}&56|(MNB6$j8T5~fde{G^s)aH_BME9UNuWY;g3rX z-lvt*Q%HQ#vRTl<!?ezw;(-`pgq6Y4@VzsD1l)riwBPI|XSLkl6_6-*ETIfS4E{Oo zq=8;II>}t)@@m3#@DadWEmi~(7ZS^c`foVfIF^~NxSMCL&}g(I@<pbORCO$mMfU7m z0(tG>z@88d&7=^(m2{<BNC8bCvDeLq0E4Gu&Z=g62+<L*)u?g+q@x8ACUKE5j?ih@ zgFe7lP3Cm7ku1_V-8-_l*>89rRw~<(FG{@kYx^)*IEfif6@6XZjJUsvHkDs<AgyzC zu6Y{8_;j?|w8vu}=#jBy%ky;wr2mr$hEK5)2h6GiMjI<Zz&16frQB9STfcw?=T&LW z?XW%@HarC7LcW;5rDefHaeuXb{5YHp-)A;D*|i29eUKTO3C-C!(9vswP}>~4YB;kd zEG&2-HBIi|l#tg!U$#tUNCYrNq=JlQPtpjMj(pfw6FC&tF|XDgCd;18m_Y2Z$!GDU zZyOw!<Bsfo%1#)(PF}*99#C3D^S*62(bI~0Y5JkiHbAAD2!D+k)525F_wH)F<mWls zzHoG7TD4vuMjg!`BwPJFVF$;E_73_Rrwc#z=4f7S(~jfMhDF%P?KWK9gL#&uTHc0| zc_Aku*OHS+A$H$i#~V+k5W`!JfJ)7^a9FFIS&wCEm*)lHzT@MZ8{0^6MaLm|c7JA0 zeP_(PCxsp$u8;uQIz7L9Jj@7~E2iq`0^S#PW>@iYHdfy@KR#wx|CAaICo4Kb)M}gl z9o^^%m*V705d8*Y_GJ&sNBsBj!YmkT=3t;~DoVy_>m9MA*HfJY!mrjW(yM4<8yM`f z<tE;%&N9G+@qA8#z#ivs;4R|K-g-Q9o(9np^b2m@eq(bkwuw5ZEqY!a(q$KrvE_Ao z?0U23Jp|TxW|o1l{cYCgY?Ct%ax-i@FRDw`km4TwItAdepcVu4;DhzKLxdID>9`1Q zT)G|EHmAZV){W-JQ9SCf$a7g7V^A^ExGv``Z!7MwHrSM8ADZJV<CF!aw~Bi0?u5cJ z9ZO}~UOfDrg?mwhcGV}-&~0Z=B2dBhL!rzNkrwP(Au7-%2j8F%)8}Z5nxT~*E*t*7 z1VyxByIl~J+kvf)qqDCFJh!_Re|0dKL$hu>Gz!-+KPw{6=-p)Hx}cL1bQ{LIu00_i z_yWodj>?`VuQ{M#+u1!3!vPRV=+6^8$S3IY<ldT%p6pp{&R4oD4Jp?BqPmC<++I3G zan+dZk^8dmGc@N6nX(1Sqq9a{e5w#DZ|iy4^~;ga1TBCe8Z5%-4k)*f{mcff@Pl#Y z=-2y<qjiwygIb8#Y9zKw+!O13VH3eNKIvP5*WNwwKHW1gLJ$rK|3t;bdK#e!8cqyb zcSoak?gs8t9IMo?^qqlx(PZs1iFv0p&=3ba@xIlU$iA#Hd(AnYgQj*05B*+okFC4B zU^kF&!16bU99RG$ce7gusgemS@J^@S@JmppdjNq>da)R3?qua>ANJEWVVU>DPO`I! zPsR0-j$<COM`#N#7MABZ3Wa5eyq<`Z59}ghN}}&8wel;A$W~KL8)QER0AV;pC4jj; zPI0gou6q`014=h1RjMPU%NvT1rO4N5{|ILW4r;pRGql=_c6Neo<3g$jPJ}~*1NNlS z!5eO<8A|kd?QUVc)>Ve}QqDI?^Q8Xc`qdtMCPgggo#V7Auuf=P=%f=dVLE`f%_$Lj z<Sebr*$ml<uI)6tK|2SlxzB;WEk6z?<I}e%?ES+Xq}p+GCnbCBxhJl<<O?jtH9hVz zfd-Cx^a0OuW`_koXAn(+iobxW<1sqccUy%=ob{L|+Zp%N%aZ!Hoko=|zk%x3ZE@R& z9XpZDjLU1w!K=>`13VgeOkSqb-DWo`-2QSvIC!zl4#so9L^!s!h$Vf_C}RTpkd!)v z#L{1Q3Ni6aoIOm@)S5G*%mKyqonjjY|6+tl#Z!ld_ADlY(?0!PU$%OPh%L}UxnEQK zg!)48GSWJI!dhtd7`gY@Vu77`HiDS6SpZ#B!Ab|6-%iJ{%n?fVS%Lli3QA|b99=$b zftlC^8|Zk5ZR+1<K-*V$J0+G5VMl8qs=#ii?|cEJQf!X|Z0q9~H9Ivuir`b`i;_4e z0>wPBvn&XYM33r}m*rTmsABY7hX`xn=o_*1g^P8p7AcrIz7GqCW!T!0p$ygJg`>97 z;|QYra~QrJ4kQ2AGV|?dX+lQ1%+MhUUllF1x0s{@Q9&8RGV%ag{IJ%h$cHC^fQrWe z;8_SZFk5;7eO(uOZgEBBvrJf+k9P(fUZ9~@3&N8lH`(jQ9Hvv$or1>Zr1AlYL}AO2 zE*slzlCgHm3m<Hc<FR&o9w?R*tWc4!JuTa(IV?y6$oAfZH|G`;iOf*LYKvn<OU&DO z`7SNMWOKWDJ#%Z1ZT8Mla<AVvpe0O|!d*hKj1G`<M8U;cf61|)by?!>us6gSCbAzn zt$hMrLHq7}3bUpxh3E$tajGz(To`Eg<=i{9uOkSIS(t~(x@X<(R8SVo)OM$Ms1p_z z?DNMS*bEcb5?-guBC}f0Ht-kE_bV!}<D9m@{FyaI_=IEF)i9mRTo$Y@m+ZmQsqFNz zMQkf<<dwOf2PQy}ZQ6CBbatxqV5c8@79j)$Eb@%1dCmuG{>**$;sCD-27K2U*NV`^ zMz>Sbk$Sj9v}PrszO!}n&j}`9bNZLe0fu}EfuPtgh;vep*BTBAJ?S#m2j1EV?WLQ~ za3F<AX2&I=`%$!MaZMhV_*jMC6a-$4dDL>*1&6oKvJZ22lH6+pD!}C!jOfs|^DvHW zqt42Zx{$-6)2zhpKvW}Uz8v$zWhaNEKW9W9l=T6$n|06@bDxH8@3@=3gKag#fCC(I z>+lV`J@0gR=4mXo2#w{2@LENOu3b(s#CHrYKQ?-XsH4GPW?x@+%z4OZGbXg~0)+1o zCHI;<YXK^HbOB|+4y=F#54<K&sCX_0-WBn(+P+<^qjYrRgYLf_HGf7@+8*t}rlofl zIX<3#a5L+U=d8tAAB!GMX3DFoGmM8FngCnH>eCx71!}`&K+~f<@PuQeLku9-Uzw0n zu6vzFQG_#3A)m=n_KXlCpnhC3$}56yY_7V@Zaur`dK&H2TUZCV9k9RcVTSic0QJ~? zwN*b^q;i40y?8EVqYoAuoB)j*s#l1}fSN7R+j>w-jFT)ou4o0A<Di@_N!$(X8a|7_ z{#Y9{EkX$Pc}J@?9G7}~?g9B!ioOXev#OjZ{5UqyIZpX|h{7NwYuSlLK5#*GU0PBw zoTakavs%gYaf{~}Czz9sUlK$CK-ujvE#6VDak2uRS;U?BkS4<A576>#KU?MCL|7<^ z^|&5)IlK&ufnH%EXq4~4ZJx_oXrDrG-<~ucVYZedotGyfL_+6u{2nG|a!qXFyAHo3 zKs%lCg=&x8u6_o^B?m`YDizpf4^&Qx%&!f%bkFU7Ls}kD;&!;MJ;ikth2Tr1c%gny znGLX-?qn^eZU07-Op88n;_bBf{%4xbhIrxjw@)3J>5OR@K1+hw|NP-YrlG+pz=F8I z%iflfrGHKbnLg$PE-=~}+uk2bj`3w^Pt8Q<k%qll$xOYS5hzNJoe1~0qwwr!uD4~B zKKfyaUyg_dkJ9TQFLcc;tIfe&#q~LMY*^dMCalkc<4O?Rwvr{5M?r(Ox`*x3IHkSS zc6QoiH5_asKSk7C@mYkz=G4+^m2+&?p?c;DggHeYB%gR88rd;_(I6+hBz2c{EXodK z%r$Q(^A;z=lnjB4j-@i2S~5mQR4b<&6xW|;)}_^&4x1(%DxC_z#2&7EDaw~qZD3>$ zo4xUUvqUxv146}40lCZ>SzH_9hPVoaaYhT5Z4oSsKi>;Q%H4Zr;Jgm#J)Yx;5a3?{ zSQbpsMlAFyO3t!MoD*ND!&#E183A4&d0{O(i()|@s6m7-&c~2AIvMU1KiCB|ov-k+ zLLTsZrcUR!kN)+^V(cOzyMgxa9l$DXlHax!%={HBtau_0&~Mv`Y&Nmo1ITo?oC9Wo zZ)9T0V64Yt4t%pG03d|Ae894YVQlQY1yEeux-Qy4kl-O$f_oBZ++Bl90tA<)kr3S7 zg1ZNI65QP#0t9z=cZXoNfvmOnKIhzXZq=)I>(#5>6kW_Y#{6Bre{>g<k~I8EQJ9zw zdNP=I_5*V7p+o!Td0n^8cez%3g+E)qi#IG0B#&I@Y(USO8-l-RM|<mMLD}7sBW5c% z%{$;z)^4DR$4sYvAJl(8to7^%*GlZ*Id_#T+GL1_px8R4f=*~92L|`^P`re8XW+A@ zAAJ~N`dbXNOHBIH1yazA{?(Sjq~V_>e;`pi0^=-3cV0@DSD|No2Ps+0&C4UuW@{|_ zh$cUKEs`v=s_VDb>{^e4atFGbn|g7?{Edq!HzkWoB^}3D-%Enz8%p`Yfx@i$0{8xY zZ<Yk6Q>t_9*9z{zQ*@|2haQ;9)+MrYuHI=)`Yuw{VdD?Z<z7)@l_VXen92y0%Fg@Q zl0?5xPnkZX%#~GdDk-Kk&2%Z_G7@wU<kwYNp-qj^{BBQ-H=*p+wES*Bd77bx1cg4_ ze-2B8`0QEGNxplu2{lu*0u_g{Pc$<}7FJ))Cyv6KNtNH$M8)AWm!3?fpe4s&HF&!H z=C1s|d`_|P?;U4z`An+^uC(LOT|$!2juZ}&cK}IWm&LE`rs~uPMNQhskeiYjr?mG} z;&d68#=0|fvOYRjZj|<{9KC(hb@z!!kr9U#_CPo(PK2_w&58597a2{SNF@~xy2aXd zud37rXDL6gYpdtH-W`HAaAKk?BQjMyG+1^vp5Wli@2`P~1Lvffk>%}M^@~&lq9u56 zzbj0329_cO;;OyVudzR_ThP>XT_)Ap#5-DGIQr~zyfxu^IXtXy{H`telb4&;v%w7p zkGw>|NQc9hN#B;$p-*y}DCx5-T!h$=;ZhWms61ggfl&M^?G>9V!~`Jw_ee#N>KtH8 zV8$g4*~+l*24<>UxnHxR=!~*)C*zrtL)HPOV(ce38`$)f*QC%rnZ^}}eN<<{fl6mu zRLch1LA^|!s_R@!QM~tH&E9Q{o4T4Zvl6EIKKXa<`fu9|;+2J)oX<fPi8*a%do7+v zvX=t%8Yo^GmD%F=rMR2*5%St#=^wu90Dz>9DODSJ5Tgutr`=)b_2{=GU5edB%RzV3 z#g{ge*Netxb<}~oTLbd+GDba3u3v`XTDVcJXtUhScA^gkjaNNjJ7(UK8fhd+uI(ag z$mgzJVpx%&w+GboNehKxi~Vf9hEMp|^Xig)I{{zp?uN2julIQbQ-&!~HDhh4lxlw) zvp7C|OpGM^+Xi!z*6kpJ#zV`?$g{brwD3CiT;^$VBgYJ<QO*M9Dq0++w$>HSDH*A0 z7%jm~j&YI6B#w!YgR-o5MqDKr3fexCVO>U(;b`y8iQP@|gt%%3M#Jqn_{83*P)<AJ z#s~o0a>`(aduF}^_rD--uxHJFQox-*+kY<MK*Lm9woRg3*}M?yIqAoxQQY%p5l?eh zx$n@g>fqJ(8o8SMcYoqBn7k?;Q?2#)?_bqj`=zZ30sEbGM6tSdUyaw9h+x_4&Gplo z<9@E1$MtQ5feK1J3vryv4O!_a%71wp+bfKV*W4*{-QX*7P53&|b8OXpS)MeI?Q)e( z@=9)Bsa^vew~10m_NR0;pMfR3Rga|l??k3O@Yo`1D3Bk|betl~kEh~IQ4>OT+nrDs zZ3Y)Y(4ZpT*9?(o*GDh73LJ|AT(~ZNqL+k)Ri||jqoa)@emF5EQlH@Y#Hb;++p%TU zuqcFiKrri@#C|;*S2z{(lg%V_&X#{Aq`%u+NMfKxrOpbW7#2p`!R5Wqg$K6nX4(!u z@R=C9XSZg-z{Yn+j3Fa-uql+As6&63p@_&ki;X%i{`DX&D`IZvY2Or%upE?7p|l<c z8FzYT16&Hc*&U~=sH$CZgOtNndn+33F+G<2s_BBC-ooQ+RvqIU`5nT$w9jpWn{vr% zbiRs)@c0mXHUC-96M^;ZIuRjtHy6C{wSrXt0FL2JLc3K&$tfvrNU5y)SK&*yMQ>X- z<1Eu_e8~;Gvd^*AYRA((M(xDs)Jjr>2j)@bFa!u(MyV6IWZXVk-JS>^udI<I_5ftg ze1_k(k&+Gc`}1w4n^{F8*7BSy@jOE{`^Zx@Ke^b><w#kihxqot?+ykl4f4bAbf+$P z@@LopJ&0ve$r|C5bJ3z*6@TG^UJm4|37*e|plp4!n-&7y*Pp0!=a;&!jvMX7>aTxj zzQNZjTX?2MupSOg$!7ZYltVhv2puVTX;kp$-So&aaSP2u0`47_(9tXOsHzd4<@c#6 zoL7cbcWv`6_l-;=&^T{Cf#QLda*c9h-&_#kbr_`l+?n1N&I3*M*1dKO!CjR7D`KQy zu{Fn0R=2oY^zW0mj^$@r={Sc%aOR5hTrE7Q5@20$x47ZQR03p7Z6<&EzaMbhD9M_* zBIVr0FkF0z-4Jd`goDjM&n7=R8!R=nMa26Xx{b@XE`-rAYkH3}-eB&NaAggCqytw7 zhYE@t&ZY|Z)?F=VnXBx>yraHp{l?Xci|zq^h2}LT5fjQQ=W;cADBaHAW$$}r98=I4 z>{*^A;1tTs=~%`ZRZ_FlZFm*pWdRLZJ885VyrL4`@baCx<erRL?qm)18lVHVySv^R zZsF}C2?%1u8eQh+&(ye2@~ZDJ?R{3pD@NpE1GVdCzw3k%Akkb3T|yQ(1Hp$}FgEQm z$pG$<XbWd4KWi_vTW3{XKl@>YzP&4rgq?CGhUh$rsb-QNx4t4<Q<jnYT8TVJF(qR) zihOPB`jT7*-X)n#T-cN9Ww!0tl(Vr8aD^qI%kJ#^Pm!OoVzz|7ZFX1~i?G91ht6#n zP3olJm+fcdU|D~{<n6adW%Wt)=#m+8tof!;xP0`c#nQ}4tUnT6_YPIN++ljU3vcEt zZ$2SV1LpYGz0;g9M{JQ5*<#qnC|CXjgLkN`uN`dzlXi$Qw~#=UsB*IZ-r9*f0eyo@ z@w(J{uuFL+g(K?c`j}VNLtRZT#Lr`RQHWrP;<vo1NIdYB8X1t6e~^o*0^KU$gtUwd zf?~jwN=K7ko5z`psU>S3K*av33Eo*UvyJ8SS1sG}>G}!LvYR7Gv~?d{zHIRZ<iIKS zY}B*6_L21e6v=)o+!K!XtO2g+5}#ZfhuF2U#4M|CbSI9AZUm9JQ6h55E#x+-%ZKGm zS3YDQ?fgu}2@aU3=rMTq0(&ZFia2wmFqe!kLJtwQe1Nkm9a9XSEu1&G#)0WJB?Ydh z;8si1JjK>;cV*V%cyE#jVe&vFI^S}!)H#IND@o6wsldUhWCAB(qu4a56+U~{F&Vn` zxb024L-X#*>pmx&lzOiijzqWqyvwxp11X?t9y_-kW~{VIl7QB2rd>hvrE~R1-hxhE zt#q%G%uj&;;@u$~=@ez%3n^Q3-?wD#yvG+EE!!woXsA7elvdAIW9yjwhbZdLjD}dD zb|MIVBVSM@TZf}nlxFVY6Y0b6z#6?Lx`Y1gA_ud(-0WVEi#=SlAY@6~tmuDof2h0C zbdC49DG_9KOLy=}wxk6;i~|6G`E4j9Bq#UT%-YQAvza-uxRB6a|0fCnuulwDoHLtI zz~u8cQ_sZaODzdO#R@D^lvk_4dtJ~8Cm#8IOYn6~-{iZ@ZX46r@)N9;BPNO|=g?-z zmoV<7@PuLZg0GR=&rA29%Ejdcu*S$Ud90`TKS!Q_%{4D9lCRU~tPU@7<Jhp{Js4u) z?^23ii4}jPJ%6mhk`f-868nwo6Up-d0jg8}tRGG?wd%Ccw4L6f<84|bE%R*f(>wQ8 zHlK2`V91jNjg@#@2#*ZiqjI<k(TL~YUmd<(5STsUUM8TW^iu}ee_NqxW5OpwW0&84 zqw_5=bE4wiGDZ6>6T_7;@(KRe3Nl&X_UqbTjvs9I;z7g8wX$;e11x5&sz;7TTgU5^ zq04olW14ndqv&phMm6H?bYzX|m#-+@u#Or!)hUAQ>G+T1;+-;Eue#Z=cjOO<=l!d{ zTzcooHGb}kqO3Ntbm-^J^+`0UWeec(#CfrhJ0cjqLB=1gZ<Vj*=d=@CGT21F50qM0 zb;aJvpx75RUl{4^^>adZ+nnBhHlU*XLtk_4&YL<!3)KpJ99X8X%Ih!OklM+=Katg0 z4dhr{A+c0r)L;t16ugT7!<G5fgrArS6?i4$#V7Py@vZV!yh|GxEzJF<*FYfbj2lA1 zoT}Z1yw9mz48@oo=8N1&VE#cK21Y7MZuDamu74H?Rd3H>&ArW{Jr*T@B97&~;lR?1 zeJ}h3>zCfUT^q!2BZPEggWRR&$<4ys$ODI8SelPi;s*}s%uSu1@G=iluMl|ts!4vY zg?W(gG(1@3c6xzrbRC{(NS$I2-`s{;9t(5yyNLF-nEJRxkhb2bY-bxoiaVz%XC~)t z6mdT<r@}A%H&2C6lcE^dR6lHpn*dWltiShtm@iH*v1Xf|v-6<&J&c2GP!)wvALqnN zLuIN>`0u_H>@!5-(F;+0(O7FpYxS0PYB4jm;+G1SpDsUK%3Nw*zS3QaFju)0uO@XS zQx8fSTiF1g?0Pz?jWJ5sY0A@o4=Pu46z`Fs6Dtzy_?a>aL=guM6OQiAb645d+XLYe zn;XW)&P&*fzN*5=z+%}8_yXC>Ozwn?h9!N(Kr^GLWh$l&?TN8iBgBDD9WN}z@C~Y? zQ>x)@$f`FgrIPMq5kCiE6<HC-a<b<AawHja;CFGHHo)1--b=Iyo~orgkdK;JV|LBW zRxdtnaaCcG=8$tJmE_r`9o!}^J|J#NC(3TQ0G6CMlAkQVv7h41tFVzyS;H(Ep`~6| zh>iQ&EtjQ0sk5iD&3Yg9%aXf79e%mKIC9f?Ri9wWl7M#DxPAFddu2ucBxOzCYDMz2 z3C_Ix21f;8VZRgZ#s&bO|1wliwpNyw;sl$S(1LW$bo6NLP0RrgFK#}2a}d}_&ze|A z&%n@>hxDMXiImt-mxok|MVemPTuAS;p_rqkp1h-s0@%?A%%Mxl$BW2q&j}%5qGt^v zwl^_0wc@nrA$_FF3HkfsHXSMP;}&Zp9#Um#IbtC*OFd#{T4q{$poqPpEh8x}A~Cn6 zu0H2S;rD+?K(2U5KU-UybJEe-+1b(BG0~b?8qhItaB$GkGtx0K0wFtqRt~1tAbX&x z71;xcCmO<fR$xm*b8AC0Q{snfkdB#+H4iB%WS#gg`Ap2ErT->xYW2qo5PQ(sgUsm| zXzA%pOz8gk2`g(6TkHS+2`dE$b3M9`dRAsOmS8;*TRl^2vVSI_3;z3ga~n(JM|E_; zbb7{mCXlUG5E=~s!t&vt_Wjo!A66b&{_}QGacQ}Kv6z9OiTNWFh_?T-)BLXn@LyB^ zd-*@Hur}2H-$?YZ@}IUt`2P16d))l!3r=A(u+4)R#D#fCA$MqX4Rtv=^qJUnSm^12 zj0}40KxTb5HlPj*NCyaJr)OlOXJZ1hv9kRW32{>^Ymg~e?=KRD5E9G``d|<fm<7lN zV$=aL>*(qMIanE(fNUHr>`cshOdMc6hJPX<YiS6HdXVw|BWZNOocd;#CLl<-7@B|# z^yth@4IURB+{P(qXs>6iENloNZv}}^9#S@D_W!V|@=vSmY)`8X-sKdK6Xzjiq^1AI z9XVr=^#e0Vej1wUn%P<XV@Ux*MBW<o-~$F$c4kH<Ms`*PW>!`P29AGh`lM(1#D|fV zfu5F$@p0wv0N@ldGd8o7Hq+JPA!YgxOAzcJ_XHhyNJaHb^(+m+#2-ZkiT~Vu-2D(0 z4>pBZ5@h|zhT$Lg9}>mb=Ha%YsUgHxjQ?0t{>K`GG5zC<j^W|`AA3~(`#lh^aSB=L zfvoj}A-@pn^bD*(21Xz~g8~CRCp{x4JrgxO1LuF-ZDy%pW@Zf02x1)K2b=u8EDb4R zx*%)NU*s5>IO$n98CVq<7&#f)IGI?fABg_beluM|eTV;P_e0Sl=6(u3F+(c|e}~6g zPnAqw&*JIo>C)Kn>4NyN7;%EYPs)QI)zl^Zmqo+>A{qXVBlvGBR%ZIvb|6bV0RxB& zc}N8wGMM-u_)+9f=^|!eqNOK(BMkx@nm#PO{Z}e>pY=@tI}gzPA1G-Bvi*-Lf<J>y z4fG(biSB<^otc51U5AN-9jM2^rUy}-Lm$Y&rq2X<<Dh2+v9N(znRWlKsm{#F%=Ujz zbw*ZpdN4Dj`Z4K(KtN_)c6K0#E{FvPxzE84)?s1NVPN@hRTqWyk;hyhe)Ffu{BM+G zWCGH&0RIkhW`@7i<EH!PXy&H-Px1b=;h!4!10JCJ0|+4ag6?mC@yA~OFTeiH<ljvG z&E(%q{>|jyO#aQ}|5Hp5|8Yd2X9__;cBFi~@exj!|HJ7fd+@(cH~)RQ`R~)s{~w=j z#uaZz0ssIw9Z6AP!2QEdYD3n;o#*CaDpmjhE!o2_l>K);TgXj#YjJ52_zhTeM7*~( zZlQ_*05L#ZSU|ykdUwu2Icn`U{NVxDbq|1P_qx#&+O&ExKthkUX3h3vsrt0*w0@jk z*2uo8-nzIXLm#v3_nf%w5Bu@yq;K}2ON+`{ejS8@P=s-{;e4*GG&VR%4t~}BI#2Sw zt|59~G=T<lMddPfzXQn5b1h8m6+|HMQugWTk=UKCKr*X8@-b0WjXzCkGAL0-Ktg-# zx3!Sh-qO-IlC*GMz@-;M`=h5b$Z7YJ@I^6Y74Y4=&NNTa%&Dmh3i%(>zaquj>vNG6 z?owwmHEIId&8q609Gt%O$6o2WGNJlg-MgZmOy!;>1B`VU<7$hG4>@^WCL~C`Eq?hR z1o|+jj5ClH2J)AnSWJvmOzO(=AO$hx3SlcgzhKgTKsq`_PTA_b;V{L?T7dK2JAabL z#g7p}&R2o91!uFVO&DntTK<Cz+?duew31zY+sv&pkECG_tA926AC0TcyR-~-w0U1> z&Mnk%SR`#B+NfhrK7SxYqf{#PbG7l_O(rWPjy!bbMA;(Pq@5lalXVxR1~$5EGvb3b z)dNG4y&zCnX0d+O2ByODic+FzpUX#vZBW&b`MTy$V0LEU1k{HZ+((s=NU+K(?-%3) zra0WZg?aeqXrcIj1#`vg&#`jz$I2=dgVSHwKI{zZ2Tn~S#gw1IisnJYTv4IX=LS5x zK86Cs6y+q?P~E1tgR~B4QuD+;k{(3xDi`-#S!`bM)Js^<TGU<H=+-(NSb)Dm$c3)U zRk^^KkmbZ`?zPtY%eE^NGd+_Nn&QQh4yN&Qa^YbtrviAtYfoB0FcSx#Q$OwyFS2Po z-`oCamDwx#hXt+&R0OGz7ay(Gs`@maDq{gh)sp3_OUJ|T__WUGoiD=A5Q!Y|wlRhN z63Jbzc{iD1T7M(rDg+c_J3IMpo|jSCZxop&B$3ACllFz>T2e1iZrJ-kJ6jU@(a&8G zyX);5=VMJ8e6+j-tlKAcv#gxc7AC<p882?X1Kb-#CE_c1Yy#4nAN?pu=-$`r5e}2d zM0c}FR~wCaGn{{P?2V5)l6#FmuZ0N5KYa8td$iWqbb(I-UnKMy?4xzjKWZI+jSJwo zq7w4mS2<`P8P%FBDA=FW>=)7XLzk!^^p%a`wY~=3W=3u;rT$^%uAAmQg+lxaK<X)y zq9Q)ISDLY18mkq`TTjzDl`NU0^XAF6)*8-)C%xreCO;ryw|doChMECr2l!1nWmeCf zb6C1#xvx)@%uJO|jF63$$UOx{*m?AB>SAX7Rldvl$jh}OXF}?E^vv(}RwCE{?R%o{ zgF9#1xIg;r=Ias=#y?^gsw=H@5}<HvI7piwto3lEM9L=VaALd$J;tM9Xjlhvj#=jC z^Bkg^uxNZnr#t4l4rfi1(``Z;FV9(eTSvYo=q%cDSuy>xSI9eRbHMc_va1&!t)z~p zf0R(B$%(CSX@Lal#XX|`Z*bm1ZMNJ8Dew#fvb?<3{4Bjm{<qN*G(YT%RMBu~t_S=0 zeHTAJTWpBA%(>ofl}}sYbLi7cn)M-bm<)c8nvFLpIlZ^|{*-OB<lZ$O^R@KI9s!uN zBXp>3szeUui9mQY{;rd=AI;G%tju{M;f)Be!9|_#?Ica=NBBf`t&p2m#7WgE7j7%t zMN)2l_Y)<B%N6Taa2Mgc=4xhajqp6B1W3V8@|R1M&c-(^dBTPiVJ0I6Ub{wbyw^f& zEMl<JC0j|gV|xMM&w@X{9ZJsF?V}4U$&z9Cll7c<aAE<7FB<Kchq9P2>^FZY8E`qj z!KmbwP^{8;=Fa0g)6}ps;7izuMyE8d;@JKtp{x-Fp~|kO#E-Ww?hsJ9Dn{HKn%;=3 z&%kX>A4hGUhwP=9W#XP!;;Z+|tqd^fNt@09#grvNxu4=OEQDri&cDvM&8d(GCj}Mn z?24-}0e`Q$a<7C;zQS(R@)dayTVkt$e~q*$S1SD9;Xe#jqQZ_&M4c3OY~{YG|M5_g zDJ6_<)jZaAF6-?K7cY}IDl5|Dk<kmwV`{=`jRmnIWk*)Ir>eC@Z>+m(hCNW>#&EB@ zIjGfmI*-0gwW;58n~>X(QOAT9id_CxHLuI(;DoR`$rouME*a~OjeY?+MrDgP-BO%f zBi%@?r-yM8zp05&>T`raH03vO>N;n<5a$4B&sB17TB8-l*vXlX56OG|36t(4hhKC| z?`Nc%qA^z;mNwik2=QnV^!LG~;TD6`t;~A_E5F5;j0akR>r|a9*IFueH4E#Twx$H1 z%1XOJ1OZl}O&$&x9gvscb<>g1g|w+mJ*wjQ3nI0d`4XO99bBK5;zl2g#3I{OKJ&VL zfmTMx=|5T<Dj|Djx_(HX%Ch@S!o;C_ev@Mx=ujW>%58hR<bX?c*mREoO8YE<wm72r z&@LB|Y9NNKw$J^u1v8K5pVTNvdP)u3GOJMUQ;zt}Dq2Qi%#oqcDFw*0{O>^EeqABp zwW!vdne{)aVP*lvwZq{z*Q!|;jisEyqm=sf`u_3wwjCOHv!3%1z+tO3*I_lX?LJ*= zh1xb;lbzN2hb&yg-Nyz~(6zMK{IX4tsgMw%Ty}=2++L@?&lo#!D{4b07xM6;?m!2m z;G~Ygq};J(4VmEQ$Rq!$bYv7|Q|tg@hkLk#;{zoJ(^HF$Yuoe4*W(k`51KAXanS=< z_kWpLlTetk&2u>B{%LB4tdKlF#d^#G>z)i&A*lAuh0&nWsFSh^Rt+an0K(}D?NM~< zH)D?Zca@;PE>nS4OULm)PdmH`cc0=hDBTPCwYpdw$#+S2fJ5PrbcO=}d>mH5wkafo zkNwdAu290*g#s8=t)}PKm(CyPIQfA$r$nC&wki<8lUPG!W<PMYvdjd^;B}fY$?*JY zq;}g|yxp8!Se_jj63X%*iJw0v*^fGeE0JiF_fyv*{-Q%8VNbCp#$$|)+TJB$pm{^V zZ@D6O*cvDM6Q^_vg)010XmQrUpz`QdLMcQJJ1z5PfE$B3m)U`l@te9bn1S%*@ITQG z08}!bvzhf-*_SN-l_<N^2xecLaNudZoZ;+BE6xP<4GbW$51_9O#SBF$6%>y{4OG${ zyH1KEFks=~dMXl`I}+!XYmN6KILZDFRDxLzC-p0qIbL(S+IX)>p8?dXbqsBGe;6Go z??oylHLn5iY*)!B3Tzb?W`gZJl7BpjGu&|qNuRsq`tN|l8|JzRLIUyx<6pO4zZEA+ z)IMpm*+2|(c!8nauM7Lmrui${{@9Jvg*FJ52mD6}BQe|3m3+;HNj<}(t-(tigGnG9 zy47945zBPionRpH?hn%gWs`1a_(|oG622NtCp0_>3%K*B)3hwwr<hW<oYW2*rIX;k zK9%8{y(ZJWyU7XY;3h;`g7PW8waYyM)#-c9wW@MK|1djHz7+u-slx-BThR{EN<W4+ zhNqXD()@U;Ur6K-I7F9d$i{VHFP4(w-?&36Bz)%R2>$?da$ddLwC=2+J-uL_6`e+@ zfQ7RiskF;yb<2fr+~-!W{m}_YG2aY=fp5uuPqxwFh`8l(kgNjQX(?HATHkaPaTb+@ zTi6Gid?s6I?v3`fj3!hn#KWmhBB(Z3Fb~sG@K3M<<~4wI#ct0-vgD;k%#wTc4(|l1 z0L^&4Wru5(^=OHEIr2d@FkI5)56Dw&N01Qyx-&GauiBA#@UEvZwd3Woi9QqZ$>5AP zJg$W5os5YHL7le@_pO0b7mshCbmak+k6MP37rG<Q;V(5iO?jhJQpaxzY)`cWmrTX9 zZ~kzoS0*q(#<#;nYpZ6cE9qb+g3Awqd9)<OOq!ssiDIH8p%D_K;F;T_b$q8{T;if) z#<1l5^){%~v|j#){;{ruOD^Jz=%##EYh}3bru*0UtkM~RQyyoBLU6H`n7rz2MIpqk zIe8`rpN;w$rtTJ8hMvm?6?X<HncYstceiBPC<Dr^Up+YGn4T1>%&A}ZDky(-G5aOg zjnY|gM0>?K?@XqA5Nv310>oe%FFXWy7Zz_{H$eaL6^e0xNLXpHbMy7P8r?=1r{AAv zJ{Yqy<pK|8XM*9OLR*rIfdP`#ps`<yGCR5Zm{w=s^srHa@U^}92EM`2M|DWKj&`ng zX%{Vi%)(_#fBhI{%+2~M{LcB->)&~xBJg~_;_$M_++ig2mAARZ#&e!C;RI6~mV{d@ zZncWUee@kQ`liuk3aO;`tIPa<VX^kzOYZd;iW34&8uk~Qr!jO5Y|pL`T4$V6UU-;% z=rWC?PKI7LI=GbOHN9!t!ur!;*2C3ro9NwIJgQQx)M;7LnLCunY<4$_aEU70Zh&PK zWP`;GEAwO>`WzuY(McLU{^1q%!0Q#*_{Y6b&>1Iy0iZK%njMqyo4plgCKaa+R+bxf zJEmioLtW<^7<W>B*jJNfT_92h61ZW76jR+HR_lEnsIbphOjaDYKiw3<cu!X6p#$VT z{$RR-^1giCdcJ1#W%JCD*`Vb+oX6aNrRXHoNtN9*cSuG(2j~w;{yhEc^&tNiBGDys z#Bb5Smof*ZZ4G>a>jO#Y%D+}#=`@GUN5t=)Iuf5W8rBs|s#+~B8OJim+iIAMx<Fuj z3*cvU!Fv(!`DMbUkiq#6px)>~YX7H7IvpDgX?jaibyGE6Lcj5+mg{&Qnw~b^Tlig0 z|K?HZFVF=CU9=db=$n1Mm9308a?r?o1btVyQ0~-!!Id!9@ZE!MwOSMJ>))*-5P;}9 z=8zN|)Mm5|S6MnO{zFtII_}0D5@k|2xnMRWCs8f5zuV{g70Y6?8-%GKqbAr|^(mZk z`&O|8uk~?Hr3rVK=B+5pNFt|%eETm;HoF9Akc9RND<ylXR^@V~tv(G)88J!NSV^dX zGmXPm8C7@-8Q<-O%M!BJn~D|~ZUfSoTkp(~+qCWZPAcv2N9Bh@H7)<t+x$bHOhQoW zMhNBasC9g#q$|s>w@!i{M?^b9*Q0PPjNi8;fzGp6i&n2@`$y9=%ZIbC5l*URJ0f#C zy2ep<e-wd3{V}C8m583iVHP0QwH-*JNePd}$G6e(z0Y<15K&!Oy)a3*?8v88r#C&= ztIvdhhRKh%xU0AFeu_uKezDktOGWjKB4?oUP2LO_bn{UY${vAq_jr77h7!pix>37Z zt+)0o*M+?SvcAEp*Ofc(og8K=Cs!<07RL>D8mPKYGpb&A6sR3V_3EJ$5_`#@CDs|o zLFNWQCs8)heMU#|k5A1Tz={V?Nbs3uWjGnoeYW6<(~nE-=HI73ZQ^EIS>exfmA}Q+ z;RUZSR#K(kF_P<_g)>Z3MbkOEN8rM9_4af-^U>SZdfg9wQ*xcFUfG_}dQ*0%o)r#~ ze9|Q=5U3D;&+9UDN;X=Nr1N>%aKvM-evcqS(978|?n#JRT{*N9ociMv9L<Si87~>9 zYmTlp42GFZ_(87pO8H+&QU%>~{C-6w##;Sycm#q*YFzJt=l(kT=OLa>f$&4U(T{OE ztoP6@?_YzNZu`Tv4^H@CoiBe9=NYbZeyat-D83%C3-~Z;xw!sQ1k$m$*hV{H&vRd# zpW?j^bm@<+YXGO1E+3ute1B9(xmMS}seik|jH5}(l9J|b2W^(EhTWW?&qa=hY}+n? z!>Rie=}m?0a!wu@jv%im*OV#*O{ng^{G9n}hD%k=ViQa1F_=pR(KO)1VbVLE8`xf1 z91x<!@!18;k<!L&$#wlKvf^$cWV!X~jQ7ua4`=HGLVxvfEOhSc&g9Ck+4-S9f6k64 zC`;o9$;jI^6<aHaea<=RJM3I8v_FJ~IOg}GR%B##^~bq-HE<T+&%q_>&^SO*SXJ4b zo}~VnbHe)RrWOL5tgj_P&%CpQy4+3!P7KCB?V>hqN-2o#wU3m=Nby;eRg(W;fjsTz zML=)n)U_%1S2}KGLMF8Y`j4z+D^>h4)J<@-gnX@>9-vqms~d(nqn*hzOKB~b{hb#0 z(B8#$4WLBtyI`bU4M-IvDNZPASXrFM_?whM#Gdiw4xeL(;fJHR;%XCWZZ^l7BOcBb z|Da7RJm?B6e!cI8bsgsH$gMZ9gKd{%61O}ko=t}DZR59SNQJzLt5{^6x_IaQg1nh8 zwQ<SM5MJ_LbbU%WzU~ryshO;IpX|O+!>8(*>zJl=y;8oV#BE}dg=+v$i@%D$ilex^ zuF(r=j~7VaAXAg7_~a=Z|C4al!qEB`vs7zLrT57GoF#2;iVI@ha*~{UX{nW78~mkL zoE_!e0a;tvn%LmZ^AN)R+0d;y_ovVcCwHnf=bOK5oGE?4uj8~9bDs@*!<Co)9oZ-P zgL&@kHg-BtN4GG+kfLQX!<Ec#HhmuAN_f+ITKUADfeVs}J{OU{>g%caEpIOty_q_v z8{74nuwD9x(jIci%%>UeBUUAy28-(gh=pudBG5H|8v>F>p{}Jbal$w0)7<Atp8C^z zgfTVPtxUJEEzp}v$oH<c#Xu-El(;@G(fK}mT86=aQZo!5uxrd=Ub2x|E#;fX7M#GY zDvtqPBHQJMz#}JA$WVl~4}2wMhDG^7=25_$m!oYk&x&qJ`%m=e{Ra)r_%^E5N%tKi zcYG$|ek!XxkD|7r<ntLn2N&&QM!L#_hi!e=pYN_49!zoxa)-<_N(st75E6^&(q96& zuf783Pu$)%xudPX_fXoc?JO;Qbdye82#o_R8&dB~n&{%&*P4I$F}frHS7B$2_Hi2% z%=j43){5Qz=ZRxR3zjO5I=(3g{J%os1K8rg%r#^YeqYF1Tbd-Ki6&>#<%6`w0<y5@ z-*zVM5%6ea%LhGIcuc3^@5RbuuhD@r?AIAY7yCnDS5{eXutk0RbbedEOv_gA-E%_P zB857%DH?gZUjK@#BeOCc(x(jf5MqlOGMcDt0vNilu{EF}hSu<i_Nuszepbif&?R(@ zKfheps1}wjI=3*8{01J7e@z=oi|tOhlpcRC)1d!50)r2Yw;F%3QzLkY<y7N)1(|l^ zdB_lml%YZO$#DhY_=_EGJJ->KJ4mwLA@_%R8w2?Tll7gfiMVDcMsJb2?r6Kbse5SM zmUNs(D`V;2<uG5})u_XP?gTean`?SIc?dNOz2?T_J(HIph@8DThWy*S{u6N^niIbM zg4c`ER}*M(HJNv>FZ*AT<-f%Ju{FOX2!$jsIt2iXn`C@APh+Tn$>QV*i!5TfVo;bU z!JB#8IpB!~$KPqf^6uR!_I)g*-BsGn8l|6yG}QTL|CNnXko2C~;d6aV??Fg<^RPMA z9&@W&!jI`OB-r7k=E?Hf$Q{aEaP^yYugBVd$p+ug{N%I^5A)_X<1NS1$P8(aaq7~N z9-aR{lm1uv@_op0M4Ue9`E51F`=UWF@3P&6mxsaE_DD$RUnx_@BgDTHfrp=uz@Pgy zj|UgSXc$2%V1?bO<ywR6f$$R%xOTzu5C{2Hrm~0RK5tl<juo>|SDU4i<}JWlRIEF$ z=iuz{QjmV#Fc~m(wEfuU+%&(|OmqEqIv&{~c!EYBfm6NF*LR(0v)>^2f}m<0IDukY zi7&3UudP$hqKgslj0k9`8?z0lv6TcL-*UaFHZNUCg+x@)Os7rmmIT?ZyTdfsIl{}2 zf5!b<&Zn&Jmzu-Vj<le^tbl+@EuFGB+o>42=GO8qlt|g8-Q`GG__N$T(DyaYNT7q3 zlF@a^M7gch!E28>{5=BSPBGEJI?P8GXvmiquv{lVz^r}FrUGPuWwSR!IK+Myr_%*- z!Gi5kca{s;&izsA<cIz7&wBw`nuX5hlg&vqz^He<ZZv&E^ChCOZ<6N=A0uW<M}UV^ z?(jI7uEBJj04=Ffw{eA0-Yz}0I|~j`4OQ7DqSeeT9=vQghH#Cw^8V*cdWw^Qe3e?z z+i9)<FHEY(DRc|t83Zf41y{tmUWgT6)XYH<1qW5c8~3lILC8SBAf4m`7<9fb*y}(A zfbKN%XnvUT*~&v4Xq)jT29$Gkap3#62fkI;D>*;3<BK^q4lZ*7u2v6eT=7U*DB{U1 z2vEpD`f-4{a?lMQ1EV`Tj;k>|JVu!upV0sY{DGzIt-Q|4VgY+^pHja+9FqFU3N*`> zai}&yq$JY3u<o%xr~R|47^R!0--dPx`V|2<8;)#tHB6RsI37HQqdLTe_h@SDW{KA6 zJIk+gi8n9PO2ij_7am}fZx4ls#!#j}d+t~Ve8@Q){4C{0kgLSaQW?_V=*6>FTieTR z3Yodtncs6p%r89|xjq7>;mXXVsR!)xa9BjtuzM3HHO=vjDXTk+-#RvXegLN^-ZhGo zyVxd4N1dPs{W<Pz_xQ4Fa-}4<DWsRo*G}B=oMs4#SP(zeM_P5%GP4`8sh}NrPj%V@ z6z2{9rSa#;ZPv9X*@Surxq1w&jHr_~jamdZc_%gjAY8b)ugDieirbSW1ss=$dQ{bu zR)@p#wtJ0yY3`&HkJ=`QlqLb4ZmEhm8&sSrnN6<|2ZECexkLM%1z)~b6(ZF+oT#zH z=TjP|AR66%9t1EyE#E2<@GAm&-Re+(8LU$!-~!OZ8isO-3KeVrXb?Z&Sm}2Poriu3 zkyKnb@di?1tH`R~-{$YBnL#a5*LJWs{kJdVKcsaH_y*8_>9>jchBv(oT!<Q>AX?Zi zMgnZm#x;UNB6)B^5K$2Ws4Z4PEY=7#3gm-0p4lH44Jm#m!moV>$*~{`>{8nsqx`<) zstvC9Z;d%hzM0E#Twz^qUvoQ`uoV5E4iIZ5ey8At6_{AJx-v^A5d@<cNU66Tn+3<s z&F`K+`!TU8-7AZ_sG|z)r0AXhmN41wRE_HHtd<v~Q&^n+fTO#U1eFe1f=`igRQ4EJ zo+&*h_s=#8r<&uC`jdK3-5xOOiZYFUB1Ph8T;Q5=83&F(AC_PNOHlT;(=mfnIuN6? zcSwb@r_$G>fxLO!7~ozB{pO*#pCO>3>$q9Iy^~SY8AVqKG&_LAH$Z)BF-d3J=ah`9 zH#M(peJCKfhJdpeEjT>L*-82w(J}B5m$$1E;Tq%Pz9yTiJw`FWbE9i9f~fwk0+nx< zx-~$WgI%$r8aa@GW{=k`7n%%S47BZE%9-@=frvoCP?|wCLgo1SeRg5;smk809)*sR z#4k(aP8n_++r?IaegRueSkt+Y=DD~DP_nPI_vsfJIQt{50MuK@fWK;YtVro>eA4e5 zW|5w+akfGoq~~&y>^XRL%*stXXgif_Bt^v-0OBfra3`)BH=i^V8qSDsP5oCy=Q9^t zUgZ?eRvn=tD<7zJsmhLPq(l$}!vaE+R1aJX7*_+{U8qY^if|HwNeU2m-P1yNu8TgZ zi^<3F6tl5qqHU6NUcMN|WmAWPhpiH7D&)Mb$9i-Mr-oc80_M%-9duS58N6~|x!23# zoildpd`u(O4V{aY<#_i|pq%@aJXS1YPbZDXinRm>?<FH1#AH5=EetRz6zeO22ggSe zUwN<xY}~~@C(EsV?&{dfjlavt>XB}|2bl4)8!t`+Sron`eF#;|P65E*zY~#&M+`+~ zzHLqXhC6)UJ&|-VKc*JXwh4@S=qq8iq>BtqQjYD8Gj4YS-80?E*Wnb2@*l)0SPy8M zd(14uTt@~$UITjctTH}0_j<m`OQexRk?%9wE}F2H_Qq7I9e0*AWUV<DJ?RcsM(*dk zA{<baW3|zE2g+L-)Z9}kixa@hlqp?;#YKRPqHOcKfS&BGg35}FEzUXJjW0)Sjik=^ zd22qWwa^W)hJ6k)FCT5CN;x&=;j|uXuoq|$9Mff0BUKNHUvFv&=OYb5*1dQ9al>*t z%lqvjt@dia;_}^F$4`kos+d@mucT4OP5ZsKL2*7HnBP5)_n8HNdG)y93*LcFH*9wB zJSJ?l`pD=c+UDC%S#cj!;u=^ieFv#F7-Wyz1BLGv9&^G41a+!nMR`hIKhHNZbsUu* z=dw)T6LOocUq&(bAe{QSks>kjQ(l*>Z$PoW6)h@3k;bBdwk*TCtfKa*+^b3Bk)q1q z*IE?HwUkJ{M4u#D*M%_eaN9|a0D+#RR(z>9t+MW#N@h&o;q13=os{btU-sf~tmKp& z+wv9N4OOu0a1xkPNx~?Jj*NSVK0_?Ia`R?S`7(>(;2x7EFZEj*<<!xoPU;OI3l$9C z?YzB_kR-~M4ayc-h*mvD?-s$gN9TSD6Ib>hkcuGEIL#Nzm+GnXo8OANsJJ{pyHc*B zz=`AV8PcL=K$3qy#azFK{?~T_7QMF+pV=cxxk^!dkDe^2COUBa7JPjbExlnKhm^^a z^>t&M09jsbn{<x>cKLAV4Nn<Ck7N_{eYPbXaAIYP?O=IKwzSx`1c{PYXU<f^<g3fJ zR-08!G$q>Z5>&wsCYWrcdBi&q&#pqOuF&*kLqx>8Q9$_sk))yUC;E^a`eOhDMc{At zEnLh8hM0nvbt7N-#2G)QI-8hc%%6)0gw#GG&RDO@<D*~X9LcYZko+f4lN4z+6qhoJ zN=vS~1QoUurXxI>vxwTmS6WIeofkjRG~#}8N&cES!;YCU3vKf|4Q^%?=abIySGCI~ zwEd+(J9YXmel`gyF$%44DZQho*|MCP0iy8TQjR8hTpi^<e0WD?{T@UXSE_K(9-z(# zVl7*`V+E?$3X2u>j#^Pab=1>pb^V3Ov`_v-jk~+cORY{_82vf<^%yhfm^y20H7sNW z_^kAf*;wn+AGALQjjnbnsN{6*dx|KRzI*w0OByGO$@#5t_)Fq*A_Si{vvXc$L26~R zSkInp|2MoxD9o?iSSKl&vY<l;8lKB;I9(nunBtCCnG|^klEJ^Kf(RNFcf-jwZ9!6{ zPgYbsys5dJb_acvs1OvzjMa%^HnY+T%)XTjDB>c5%pJ9>*C8qJW`@6|`_xWR9}f+F zdQ!~va>Qtg7uRvP<&uUBfK}RcD7V-~FD=yw$IS+WKIEkRm=Wl2`DIZV%ccm013wa~ zqYp{rsd06hnXtf*-wU_U)P4EIGE$xmFcd3Z>js*Dm^MWe-pdLMY2l?dxcq2gW!pD= z!NvsRG4JerRcO@k`()e?8JlFq_62}=&&S~t@*W|1yO~?`@(mUw9UF4xe|g)++Q&y~ zakUl}Z`Hn_{wZo+P)qjm5msfQ`Urd+FdsT!E8>c|*rJsw_Ocq@I-RsDe`Zv*sxz<@ z5s$d9xkUOafwU`A)L3eq;(K9J|F@;Nfzsj&u`MA&OjIutGGbIb*vf2^UWLhzT$7y* zJ^|@cm{di+tW4iqSaV)|L5{UV`9LD*d{;^BSYGPAma2)dJ86KhD?-7k@M&9`*Po4h z5PkAqM)8$mg#5_c9|WrM<9o?qgBcsLPetb8xA(4peegSqjub~A8(c958IZwIt>3^e zBE?P+-xV7w@qRMv?+C8*!9WgoZ}AErw+HzU)WSZOc9oKdM)l`gTiIios*W79RulR* zN*Iydjc$Ji*Y;(B(=p`N^U5Q$G}3$QfIDU1fW%X{nZ(9y;en$qzhG?em=2B?{A;^g zN3StBS03byT>;)7NrQMVlpB_FERu9?xG%K<y0f1$(go2_v-TRzM^SbW@oZyUWM5A! z9sk6mK4fU%l7~#LVTH6)Gr@MNdmH%V@`Potx^x&;XqGbjH9qO=eN#7{*8oI!(kJh) zbhhpKTXOTXV6!rgxEbrsep(qpxhT22zKQoQKx?%-crHHr%-nb`cs5}vu_GTbYAbi3 z!oec~yn}j`eUaMN$1gDadNXjJd2;<Qhf$b2+2>OE?YD;Y*=6yVmc|>n(3l(;C!4I; zCi!4I5}fBM2#4!rEJDFi)`|(PR~Zqwo~9nH%8vzPSg~Y^9eqNn)~18>Z~XBk7?tY+ z2ekG>9iPu^Q@&rved#tcmQ5r?6ker5Ew2^6Q@??*iSTVpgkl_f+^{vhZZ#<aStma} zGcrwb2?do;>VB*IvdzHGAy!W67=v=+lBd=8PkpHS+fF!gj*KNk#hMezZ4{GMmxz=h zQA@Y5GKZE%^Q%fFekf2W9ug+(^AO~~aP<K%l9v?{{>3WI6>49ySvWIlBfNe;NA}<; zFoAKJ6VKA9A@>n|`gB1ICyJ&@KZ}=7I=oc-$DCY=pUDfC5VN_F#k_-)qmFU)RRvfA zwO4o}qBDy%hKTlcN05+#6~R(&0^%GL4G4fNMk2+gEQ!Q2s5~|>?gr^Fa}%i2YR};_ z8&Y!Rdrc7<Xf|IMX}I58)j^piy+fpx3`KJ;O0WOglJLs4T7lM(xq9av^Bb-co+v~3 zG^L5090QByi*1-jC+2`q6X>Wbln|qtc~avUH7}JF<HPflkiPA_eMn=TMrreE<r|1? zln-(r5DW_iyxn@IUY#yzt=!v0?tO(+4Ay$_aX1<<y^kb%8xdPbP;$fLAUR?x_cWgl z!+v$F;%^BhqOq>!s&5*TlH|zAT>1Xcw(3wZ(;(&24h>^@s@qb^X%<e<V@q@c5{t_V zDF)z;MpEWE&LmiYW^}PuQBPon(J`+L*1M>rdAPM`p+O@QH;(L|b*LSe(Ez~PJZLKo zGjN!RK;#A4@@B~|K9mksY|Xm$P~>Qm)GwBWX{YT~gZf#}ziUPN_%Y9MA?<JcCUCG0 zO@U1|WAmpf|A=||t`8C7;aNZQuY`A930C;pbZ+KdNy$s;@y)Kcg$|q^Uhufk*9$ok z8PHCB?IW!FnDR~JK6Bp}>c2Wao5)R}di=(MGCowwmELj2_{_Z1(BC-B!jPi!rU;PN z*eCMECyjtOw0F_}1tX-GnUz&~0@KE}OTbzr^Qv+Fc~#}oro9+b{P---1yfwLC#9=G zM_1K_wvNn@1%4A9HI=d>g<NGF8fp=)-UMJ16k#d(vfRZKI}SWI=Cwq{>PhE>{|PnG zk28IvR{ZK5(O#wnB}Iww!=mgQV68$o3jY>=aE#9&iBS30gpgPESKB?0p083$rEh^v zTP%Hb%(H}hB?Q15rR@)&G@qCJEMH<KmGf&)K?>G9DzB{otJwwQs9}tZiB39+_~F|U zWj@uz_EPdXPRoJ%qkI>OR(l6--?nzOR&fm}CD5Fm!=<AEuS73O+g2f}I(bl4M<Ugl zbjWIDOx=`f{-ixo9@~cCZ5R}Pq2#m74=-CPPFyx`ziC`PUwg|Zq@-!kp4b7mkU?ea zDC>PZLGk9@Pm#N!B4Q%$I+3o#@Hk&tJA(EjYBsr?yjzTBteLMwzj3QAWibhFPCY;k zuiNO+ug*OOso>Ufn$k`OP*55b6cnI|T%tXr6D$v>jh${5q@0w+zrZ-O^L=Tg(^Skb zpq>$_R5%OB>a-0wvRw0QgEKYwlBTdVy<5aNI$knf+&J8Y1MK~c@aSx7TN>;LIN?CH zBIh=5Ji<4LX3sYip2p1*TS;2i>%7Vv9sY9MlOJ#BO{;&cHq=20z3q<}i(|Jey&*{n za`qD>@?_V2rVO3;W1xZ==X)2MfXfbZY95zPKR+%ve&cPHc3PK>m!#QJ)Eqr`!xw7P z4eUjQ-$3DOp8CjN<84_-do3@2(qt3l=$7H0o?f(nE%97j(e>rQVLBS0NNIKa34NIO zHQok@>jPU@0FT><%N?35mvuX@jaPwfZ?Na$e7t~P&oc1hB<me9Mk)GbXg}iyZFB-j zF<v7xE|*~c8Y999&hoAv1tcreW$i2y;Li&+F<!nP4ob7Lf6VWk?#%pl1FG(O<p*pU z?Pc-;I9O`+2b*%>*d5?~4HRx~jq1ujy0PYZc8v(Zqu=$SC#$K6Bq#LAsG3T<O{N%? z#2lsI7J!Jzd0Q`(^g2@>3e~&7{c-7*#Yy|rbaFfw(SeRG26Y6EiojPQ*EMa@AkUc^ zSmpRj>bt7UqYvj!4kDM<69??^mMGIb)8KEC9k>fkc={-TP`+UHM)|F(!y&f1!wx2} z_8Kxx|6qD{gxbmXB?0D(5jp!svY&7b2#u2Lrwq>_C>UjJ!;WpTQYxn_FGY9x)@I6n z!$FjrNgTB#OdxKUp3&`4`K`X}$JkSghcUJ@Ab9qx#BBF4vr*|TpZ9Mh^Yc=Sw_CZa z&v*6KqUAo>47@nRjf{D2!@RCM81x9|E5q<t+ZL`5a0nVYkt3z`arH|fLy`Z<<4_Ml zn1UHB&%P0x@g~QScR>JJn1mFO`p2T2!#kXdlC_PmkQN*aZob$<6K_{G&reFImrZ)_ zJuI)5TI=}C(Zu8}T-!?_TzXuLD)cCPRqug~p!elO@Sk;mZ>!0M*e|}hz7Nr8_PKRi z`Xpl_juHqO?3;n53nuiE8~EL2_wE)O+qD8Ig*+&ymI$lTTci03gJHgA|D>6BfBJgM zr<nJU<4~g&MXi`4>^v4){Nm`%-HuWAFe)qic`F8iru_loyhZ{F^;<kWiME*1NSr8r zhj|+`?Bxrv50-2&;;yR+*HM%zCoAS=pBpucP(xJV<CiSA4y*C?7qVME`S)ttom<<j zHyAzN$W+)WHjyRy<PsTJ7K7pu+y_mFr|S)wtNnJUSgsfpKW!h49CX-QiBQsNDzeo8 z+hPRqIS5IcJhZE&LvM^qKYp-WR#RA2FTiQ#s3Z&%=JV&*atj(JX!TvlZ_dr?VpiEc z9{6w`Oeft^I_G;hGes>op%N`liLrRZyA=C!fe2c&Ep*!l)bOdg9GTB6rOTi6?VVK{ z{5zgJ%4#F4!gTF>c%S0^>4GJjr9<MKd*sZ99~s1kDDO;DjB%xqcJ99~n^um~47B+1 zL%H&O3OG@Uve!*j?1iawn~~xEE)w|~@pye9KUr7i5g~|18Pjd3J5sdluixYZu=9pu z89b+owonVUSy%(zo;zb=;(bj>LcwE7DekC$i&)KZ1W6^1D=g)*DLEsJyRa6`5FvC( z4NXXleGcGELS5T%6Ta$b7|h$Y27|0xAkBV9Q=Va1#dBlMbmesH77ckIIESl;cQu%$ z0`!VMtd1<12rEz%DjBWbMIO{pm|Ti+gKL56i<Ez~1(c0io8@o0yCA`%FM_}$oIols z?tMLlcY)#8y%?#cTLXMegP+gXoztI{@JL@%6x4>?)`wFk`&?C>A#jZq-OCr5lE!E> z{rQsGa0@+hgrj$0C7s(`O}(9+#aGA_u36OOvHCH8Dlsqx4QnEZLDUzK!7Ud$lBk5W zx5uaJp0;f!uk3JVX!r-4t_2A)A(X`?nRcK_!fbguI}$|~tAN!8ergecxW4!<aR@HT zMwl}9fh`il_=GBE@=n0Hm2YGL7UKzuz<ZiS5?)T+fzSYN;mOm_O$^t86>q(Sws^_O zUC|QmtXgaiP}{T+2{pm$D)#U}xd_7^bm^<7wwsdsEVXkZX7d8mcf^srcVkI9cQP!6 z<XvOoND#1pdxMCHt<*Z5YeSMCq4PQ*Fr4@Jb?Kdu($~jUfuKWT)Fr=Sd|uD9z#w7T zR^lg~3Bh-h<#_-j){W(96QO${sL+<nhmoNc`a{~o@r*=)(6TJ7y^$jJzCPPrS0aUt zJGmw4v-yUW;`qC2`5#2@r)r4gR1y_8W^j<WH|WKj`uL;ru&^C8yo0RL6qjm#+kRhr zCwx`A)a@~Zi@&t6JM*fniP~--yl*gbxE~dci`n0bHdS@BAf+_g+1u$^M|pyQh~^5t zLxR*|h3Et6oYVCQKNqfPQw#aN#JkFS-n0h1zpku`Atr)SMh<h8M+tsEu}l|?+?J{q zhVGUO?3$94K;E9KtpI$E9`R}Y^SRCzAfjQ;UUc4}|HJVrc>J$p%$i;a=j7NxGdrA7 z>xM(iHPHDpHEtdO)S6eVKZChmJ0I$?vhMyA6&dN%Y`)lpwYacY?BPk6mC2$N>GtoF z(<6t$s<5d<)<XO+NIxkY(xTgi&%G6eLR=@^YIU~vt&h-PbWgRmsl3jo_^z{k2^Vu8 z9)P<M=4pY-F`2mK*KSO;`TF_ZJ@U?2wIv$6)GcECufR8xCo&B)>SFRFm04TZ%@~Nv z2&d~S!z?TxhZX&h8FV`2`JnE&)k2UA3($7Udko1)B88q1zF*Be`xHBUev$P~fJi^< zo#xjGnx#bM*95LN1-K6`-rOpUM_?-teFkZ^hm+dW#mYZ!4-05J9KcgNiM5l~NepdR z0;49#!camj%WQM$vMvYE60(%(q!+5UU5ZO6;-PO3k54;{2wxrIWR)A*v!3l0&iA&I z8C8OY+S&gXRqq(rY2&<qXKS;K&9*jdwr$%sH{055+pf*FZ5yAu>-v5F5ALV+q;t-h zW8TNioUh<c(5JVb6tn6W7ARrQuDA?MqYafyQSN%aigk*zptrj)m7@kUgzHgqY5tje z;a|^Yi1T@anZjN`$BV7bq}*r5|0ywJuu&^3_e1bWcp^CSMQC_XMQ*a4f@^)_vxO%< z-&T6)IgikGO>!N>g}o*ZyEHJrY}ZIkX-NU{S=ZR0r>;?ci_+G9lT|Bw!AwGrV;E3B z&ogYWjH>@_J^x=GXa4)LcrMqT;GSZF3J;mVU!L&jZCgMo-lhFPHiovYw9FV&6)y<Y zQ3T<+Q9%!F*)FZ2#oCwp3$*O-Zj6w@ko?w66-!7fAO|n3{5l<FOfQaP#BzRDkC@%N z<|Vpk=z3)Y%a)(_LS&4M0p8%v^osw}n@xd@k!(kDA3vw8?i4)~po*3FH9Zp6=hO#! ztW55a_R|@~5b=U9Q@N0s8UzV-eNM`05?LE8X7(yxaHN>z=IM;?!=nc0t;m_BFNDN^ z8Gk+8o4m^Io`VMND(~Qh!tyi;`q~D+g7v45AXKsX#%=L{Eo5|#OY4~J(PgRrmcjEu zrGv)?YL_^J{|AdmR%DiVJHz!2XA3EOUq5-#?K$9Yt9=JsO>qWaO(-NbNOLWUENBOu zu2{8}t@q!8rs$}%4e9;c{tx0dq;KLbxPX2hr%xb=vxe=^c?Oi5QYYIk%U{Q8iXpML z8bUtK)=7|lX#G*%+MmCtJaX`(2pMDWE$iDqfCKuwaC+0<CD>6*jDppiad|X>yz<pH zfxq1b$Culnkp;jT`+h=cp8z}ra`LZ5e(z`p@pBOnJRJ1-`*sP1e7`4>HKaw1NUX>o z^1ULLF_4`fa9@lNWjM%&2zLqcbnM~ZNh@e8`CAG6G2&$CVr|7A)>9MV@<?@ikr#eF zE6P?<f{ZZ=2b}~D-spdO%vqCoZM;^~%}hgGt~2N_3y~kA%idX&#%>(ACa@*1SY29U zqly2~PC_tf93pRG>WN^&OEjE0;=r-u_~n$pr=j=VPqikJbo1#&%?EA5zmPfcdEScJ zOOKTXfAW36&o9LQCpEf`LKz`}BSLO%5*Uk*UB6@w|F{?iDyb={@wxNiGpT+>py%O3 zy5SYnXygw8-h7<w@n(gbqYq{G5z3YBB&ffmicQK7&d)l@mZd|`Qj=6~$<g)qT+!g* zZt&XD2L{1?FGu}`KiG4YlLnQN?!S=Q;Qu|I#g|hs@chG0ue;wD1%*0U4S)|+&j~fC zXw&zG2t~vNTodDOnLNJ?D$D%Ycg=JxtC%;O((fmo1&lO$kG_e7GuVcM?1`#n6bAOs zC>FW_<~+st?rPAYpOHd%V8s7H)dba%vny}$MSPK<e4H<+GXZyW7X6pc?HyczjZylD zrbp)QO<%#|cEa&&*W?6u^Egl$CtwANd4#jB2dv!Td@AIRbOgm0puv9t4BAEu{PBR= zz@g)u^5A@nslLc9*GJi(S33AvjXFPCpn8d<yQC>Z+eZ4P%;aaF^#6t&)c^kfW?;kY z$|*V(zI`Y?dOt<aURiAzNtFg~lX2EV#s|FXgNVSgd4E@>D0e`Z#z_CmG`snvgXk-l z3#BWlyOVWos{0jM*2OALJIRVPHBytxC-k_+K=gaq;dNH!ff$=M3Ai5+-lwn9lftP2 z`OEr>c}o43ZN;wkFd}?-&6fGm7S*|twJu0nAvLfr`evw9UBk9T0PAslnm90jL9AHw zwBZ3ORaj8YKswYwoh<@}4f6IvO%=&PY!~_pZ4tep_7a>_Qjt!qPirjC-R}$axYO-^ zg8jcm@I(sk`Tv9X0d-jjhSmeu+~Lozf4`g`?vj_R2wCsMv)bgM8#NtjAC3e|8bi9F zo;`1G#)UP<vFSslEMEC%inrtpPts|=DiumQVL}J<+WS>t)*6muu}XTgnC*&OBHA{9 z?Tq+zQp$KNlPDS&5hq6{b;k+O@SNVcY})$#;_?vPU~yEK2WJa0|1GF_?8E3B235&n zMr};AX&gE!*wvzmb!=d+><hgwQ56?fZvx_)AxnG!x&9lfc5kz+|2wO~4;VIn<YoIu zWxsMZnSD9g;i~DVi}n<L^ITL$K<=R*z&%EDRG@Hn4cHW{cxA&VR)EtF90ZCPkYN1E zN)iaM3@hhld?zkmpVv;Ph-A~9*@YthzgS&p0~<qv$NW$<I&&nS#u!iE+mh*|gM|;0 z2+%G~QqoS-o?(^9C0^!j%GdU};BRH2?}n;ZA>TdO@n&En&)axBB2&ow8?<KT>r$0v z+u4(CkleG$mSr$&Yw>sKEXrd-E;P01;e^~_tv2TWPTgXM$hiM;QdaX=yLxV-{>IH2 z4z~nopWdvwHjXXXipQqDN8JzM!FR1EhtfA65misiMH4og?3LCwrLzA9mQ~Fjp?A^| z09UaY?WNG&3cV#ti!vmDGM@*#&djK4tfHY89=VB<+v0#ew&4C(6U2rTGSpA?&Is2y z(jRfzd_BdQMZ;TRdWb=y|C=})dl5(W{%o`AEg~L$Pi-|z<gFgI!{D!kY}pIvMaYS$ ze4sbD9%G2NWuu2(D=q9g8xsOgW^0SPY(&GE1(+MGh8Ns?V5fQitN8FvzZ6y2f0@_# zz3L_rUQ6yg)Y@!scXP?ubhqc^(@;$k3vJn9M2V_8d+_)cqVMAJg^aM2kRlEY{vMA~ z5Y+qo*}leoC}ND(nyHf`ysNL?htSXk3D_fr^1?K!ZSEJf-4gGAwxK40H=ps9ZF7MM z&RTMv<8EAMuF>At^R1N%HP<$eQT-I@D-)K&nMFZ?6mEL^Ky^2jbF*{JkD$EKI*U0! zLQ~n5NrtG3E_$2&iCnjRH7IHkf=ziM;e^QcA3@n{&JmMo8yo2r$EOwrJ;SukDF64} z91u`#Y~$CvVDsE`->i+PWTj~0eYC$214d8=Jk6e{T<EmxC@F;5`iu{s+B(Mh%uScY zP8nYhKw)L)*!;KC)HQ7s37u$%tugw7=1to+R$|FhAp55qB#&V~efBGo;^*h3M*Xb* zPzF6H(ixN=MCCna_*gXu+Q;{~Ys+gJ^fbNWXqpVpa)?sVQA{KDbSo{ei$XfqP6u;C zqoNA4O62h8e)_xSU(a(?T@nd<{sHpt&;mwjP8Er>c?&p_lN>JEf>eVuLRK-5FTE6R z!~Sm9+KP2CIP@o3M|c(F{1(j7g9by5TUAsyYmcYc7Mw$(&0Cts-%HUhR>ZA$H9w}p zTtHAe3PwG}D5GcII!(UYQ(faXgLG}C>DF^u>|tK>c>J2RrfGq>Lca<<T8BT4<Oc?d zHryOG;zuvy)~-vPwsumZX9{|tFwDQ%?=efjKZ>s-<hdp?wLeRu(e5bg`va^(?rjqS z2~}f_X!j9r&w8)_5yItWXn9>qdbp#7*Gl<Y)qI!o3kk)RJnjtkdaiwDE5|T6*WTP= z(9?{H2PLe^H2_OMw7-_^r|;OHtoB^xDpg`OAR}sAB<bR15|w}J>e<;sA4<pV-4HR= zKd^LpC`QGKD&(3QFe-#l1pGX={}T}6KgjN~pu{T-Tq~FTijG!>?3Sq;b^=Q7{8E#x zs1zQA7KXXi&0U0WseilIAU;Ff91uFB!gH|Pl1ogV&sLLBs~Gu3N#)#wn0U)~Uw^c| zpcl9+y@FoxS0<ex#~&=7&tsVURKVad=2s#$f@eLLywavBrwqm7m76ws%5c|>sP3BT zKhnI5O*4GnZbq(Wux^0Q&M0FjD{88=29$35>t|J7hcvu_U9Y$K>qnO6FD-d-o>(gX zN#SLxu@+`Y{&a()n6=5(D)blYIjhs>t!{yXrbb~TCkJ5;xn~-)_lOvc(_DWx>~V&w zz*wG`p(H1+u?XUsXz_k?zwQNUagmG)hw+YhE19DzMqDax|7ZACJx>|(<rfF?0zIDe zcA^o{IZTEg>eJ1u0>uFJHK*NH(^K^i1fwIxW8blMIj0V4I=$l?NQvQ0KucvDf<U$( ze%V%KVY2vnO#o*<U}jf=8`YsIB!^K?b=`2M9Vs{8WR=NRK*9I+0yU48^z3#dK;!OU zv;==vj(nq5&A`K2(Yz8}pV9zD5nhSY8P#J8l$i23|L%2CHhcW|XUM^Ew^w3Z&_xHl z&Y^);$6A@xh^VLCW48=uBS536M-71O60Q;zc1D2*X+&2@t&jVC<tQdfw$0ql!#Zi= zq2ge-ou>UUw)?6c#k|(5RC1#z?TQKgJ}|T){oV6dvqS&Lt4?2ylrO(Z65V^~oikt| z*xZYZ()*{fE6?QiaREtr473TH33qum#OZ4z{zB9h;ADf)?m^r+ItzZVAn^<W0(#8u zSSIWD@Db-kRv{zi;{t>3e@lJffLuG|eGW-Vf1R=~%zY>+RSvbvA2ayAt};mMvVrGL z8epND)<lv~?RC4aAP#b38L^38-?N=;RGq@5h&i%LeMYcXvcRiS1sv^x2GL$3B=`tL z(RYpY`?~Ju)(kL&%?nHld|xuSD*$6a(lu!CPHNFqtAkN;Dg9ya)sJ|SXokeWg3J$9 z*FXB$P4}hd1>k|<Ph`EDVM?0{#fa{6rtWz_BI5XYyPqSS^SJ<@hD&%kUV{}Oo~#)6 zc?g(uX6q#V*@+Wy^AL_)iBWv^yNXFaXF<h(Zt3mT?I;UK!PzR9n)&mKC_0m>|J?RI z>HpmVd~prj)z+<eb*>M{`Lb$Iq7xZV20DZbw!SYWdW3&tVv?Gg;Qv7!*G&dzJj7$7 zSN*%Qsg2v;>%wRkFEZD$+V<0K$WYd5<1Crt;Y|{<?-forK4ocm#jh)<AK&*9ePWh& zt#BV)njz5i>pdr^Wb+!{op0NYSi-?DHzVbf$8*|Ni<Z}ixS?MLp>7+UD*V!)#L>r0 zuKB?1I(|+1J~oNP)0Y?+kr%LG|2`^h^?u<dt=D{CqoY<dFjwAWAl3}@g*w&!xD=2c zO7m$>Wt}<EeV_z_Y{%fJ_*xKVW0s(vZP+mgOc!_c6Xe-Vc0t;eGr0xh*JPPvz(xvX z`o2i2qB;`#Vc~S&URTVNB%uyDCyVscaHbxiRt4F`N|bl94XsuM5$k4>x};}``|f*= zZ?nFj5-bamfM46|IETvW+oo#i<o2*9<yA)n$<?{j|NWKvv0VR^Y~fFPBIz*xspR~v z{c<&qF$76nJFpznY>T1GUSc;6N4q<n3p0b0mmIx~&oszQaw)9<G96W-o#Uw0qcfCU zhS!aUpFe3uZwoEA9b3`y79&OzQ#&oFAwpgZE=d5~^Y){y*hZEwK$vEZRe9Szp|S8@ z2wo|6cGerY6Ec-6iwqLh8Ve}0QPvk~ipX<);`Q^hwJ+bQIL=6!_C1Bdq~Kf*?SAS^ z!R-`5tj~tia}ed<K0iNA*TM<%WWi6J(xDnopKup@F9o8CBKrH<a&vud#A(8-4~wII zp;@JoFEl<-&fzEyji1u1d52qLm#iJgP_=k`JraUTqn!~I(>2;_>zlkgW!+^0dvVpd zA5==eRQ0P&h8xWL3QMmg%DHZ4FGRvjNln$9s^;;i|M^Dkf>=DmhugoQ{fU;X0wbmT z+bZ9~-t@i?8*s1NzlM*-X%B?5v4euY@%vfzXkBZ=!>Zk8_Md)x%Ocw?jC0H5dxwKI z`z)P~jpuC#zqPdQZ(pFmCp@F%Ii>Cfg~NH8FK7#3^}*7eB%m0v@KaWv2JBWMHN^$8 zF`mG>xII!I#$_C@oi(vl<`L(^_|g78Jv#|Uix2zy{tFc;AO7>9@ZK>AdjbhkYnSZZ zS%Uy%TRGmBCMf~tc4O}lO0b!_H*E%Wbf@NK7!4|Oc`f9JL10Qpd9yf5Q?DIzLsHRO z=}N`*vl`F4XAw?<iu2zBOSdrLgA5z83VGgDpYgKSF{(sT$o3I&3ekg0@?gkAd|AyV z_cZKOO!!6Y@XA^l((3xz&*dkAf3H)(TeNkL?x)(_PDi88LdBSh$Pvrecl$#53wyf@ z$uYYQt#E>Xpy?A$6_tbpSz5dd>Z%+kWNq-hX;lG1F;7VsIXi{#vk+e2aN_7;!$Iev zglo)mFaTO{dXBBBMa^Y9k5?-#BB!!1a&uBGqhTccS7rCKhe5mgX3_Rj;5hW`F+KYf zLiT~+Zwk`!$o;ue^&s@n;^JG04V)1&HYqhfx>0kpsQ3bG9XTAfsShCe?Hb6<!%mzo zwM*Z^k+%(pW7IAH0IUwy(sI4kiVY&<ji|~K=mW69N0Y%j$<*Jb5M{dP6^ieJ?`D4g z7r`@Arm*zqdNZsFARBm#x6Eg`(WUIku@$DpLlKl;R#BD*jqu_N#uSrS$(U$=oYMEK zj7by}luoy6-s$MF^lf?p>%0@T!F*#F9#lVJsVn<T(?K<7%F`)%wl(FE^RXJ`qSfT! zW#I1;mT_jGCqkk_KFZ-ldA5mH=GQ*ND}iFj&Ge(`iW(hSnqPmK4>`9d(A3qQcX&yC zk4%#-YuvI8JA0yUz08>C{f|)BmzjZ6#&8h%ID^TajgGE3oQUvN!&kZVJk!ADLhlC> z1$b$E0?bPlqBt$Pgj{V^X)w84`teOyH{RUzH(bQtCjEQz-Ki^eq*T**YC<8QZUEK4 zE2|8<rvt)@zsi{`2NtfPQY|ca@PD9CK}x(B?Hkp&ayRK1?QK>0-)-t(VbXF(J5V|M z5ix7OTwd=U6DGf4$crM{G0wt!oXr=kDN;(<arX47yU_9_2iKopPo~pk%E$|rFJu%R z<d>5m5_NgaYnyb?9QYzaokQquIEn<^@dEvteQ~M)yg*f%94@{Q#@sUoEfTU1%b<NZ zZS6FPuSaSonxDg>=Vxr_$3I%|<V>x1!O_V<3Qdw?X+SJ<+8G0KzK}?!JfVujCug?T zv(1-bq)o+C?<Nf~Sm<xzyq!ctpBqs89+)_aJvtwebppQsdyA;`P_5cHha^X-q^j~W z4I@T|3)<g?b%xB#)1JXO6szy+F<jJj^sS>{7BUtM-Y>TkwfH3^Dh5~jLT3YUwJJ67 z^VMMocWU3u%yBXy$h3b*aq3kQ#nqgK!hH|vIjqf-f9q%ntZJ?E*RDnzL}qGjZ}w_o zS)EUS2!C8Nw#i~1@?ygR$IP7we%T*tRZ9lf3m33f&fUhFey($Sow4!3ddsGr1&R;@ zvt}Tx&XPfGTG(Ix^x-_*^k$ct<u5OJSZ)3d>cy$(Q8kM2p0M4h#@b@}J>TEO7__k? zu_3@+QEaq%#npG_6zhFo4Ezqp=f|TON}p(b2B?`&bPqow8Ga~%iy$U7w!8^<ZY!C} z7x+qa774~s%vyHgiV4$XuJ45Y%6Y|8%M*h42PlQVfV^FQs36^9{ak45uRKV362jK@ zl}RIK2Q3`#_Gf!zVp~cJI^HYj=@5N0lxy(~h2FT5#R0}>Wo3#`s!4(FVKed7Kx2|* z0m=aNOe>jrlPhCQZ9n8*7Jt5O*xgIWf&{kP*}V++@xQc7uuJEgq!f}%P6=GVn9YUg z!5EpTZs%{~{<C`DrZqL%&s^T!-)A3q^Ld`->V~@TI?P}1J?AMVCg?{>`it;>v;40g zq23?WYPBEjC8}2suXC1H#D5ezP7A~S1_Vfmw%y1668lLM+m)f?Qh)I@Y%>~f1rrNo z|Hbcj3<u}qoXlx2nao#jyoR0{LNWbWlH&9w+~dE0tk2;uPc`u*27`^-J156hvgVC2 z@6HV%C2a$7%24@d@{oZ4Cg)klhPY1ep$i#csSx1J>{9^{a}ECKp_51~Ib75skTsu8 z@VygHee&BfYm{JWV^yNkG}K#J<w38Uci>!;10R2qs`DszMNnjY<9u&wZ-H3^mKYs> z?<#IVuTgcVwhN^A<-Ko1&-YT~G5T6JAl-7`0V_b9&!UfF42{E(a;R*LLCPfJin#Yu zN^<jHXN`Vr<Ix(y)BX%865@WloWiecK(OV5B-v0GHcUOT9hLGi%thUHa{*az2@r7) z_FuW8C!t(>MKjhEEZcZ|@@xKhfNOrCKIPfm@&vnCj*n`bJSvasMtSN99FMr^qPvJs zw+?<Vy~6E%)>+7v0o}M;QI~sCMKx~!NId^6v*3IQK&W2{5T12lFC&B+5H4HsE=V*i z9>Ze(*En*}E?TzY+YxD4Jc>25RoKfU!+NXICz$xBOxF;yeF)?eT~iRuMLtiM6{Y0q zxI*XcvcqqjF;L62IavaaLua%P4SVrjLoAq<gS{>=p0jpyoqqvVHRbFrto^V+Ox5BY zNmb`X$$-6&&&JMrn<L(gcC9?(HKb|7Hyfq~)FqPZ*2f(!{}Cj$TojLNQisF26ZEJG z#f|p0q~H8f6L)bh=6X5464UPidSwCU)v3@BMPEC|HQTr2m6w~^73NC3o!Uo8Re$@V z8N*&g(fz_ZEMq;CkFVx!NxGsw<oWJ4gc;8BCpJa<9-t?c&4X{lbMf`g8^X~S(HCw7 z!`&I652Qk~Ha^{Kcyi`oec`}J5fge;eK<1GpE_L}vC-6f8H_NN7Qu9$`~Xo-;h`j| z9I=_QL9Bevry%j3Rs_oZ%PA-vFgzwEW{z7k<=GQM6E(wiqTYa#cdF`ELM3Gd{$u%f z7_xI#p$g2Iq3x5_-D15pF~EDDpfQ9i>1@1WQ?1AJbI$I(0WG@#IhAKLs@0xP^&#Gt z2d+eZ6kLWpCBK?sZLn6<MJcYU-LaGL{1t|oB4O<7cX=c>a5Xql=!>@0Mw8w23!BLq z25&ij9nz$9fJ>pBx!$J9KJHRH_sYFi9K<t9bDp<}Xev(tpTFI|p^P~$$ldv%Jv8IY z-QH$j^1>k>6pzNi3mCN=?#~PhwJYXy>Do@HnnD4%2y@x%_h7Ghki?9#ijQ)=4e_bf zyG3V5e9zd>d@GWZ8GSe?dB(?j-e1^f2@Urb7v2jO@yQue{W+C~H{2l(o?BIoO_I2& zgvv(Qd3tM*jf)gT#~S#{){~MH@l{OGym{vK=h}VB?`;i%&vj-2JR1dDhZt#>X#Yz* z?TkkV$bX0*meDyrk1SW>Olb_ItV*ZvWW2f+vvv1xJhu@QDpp<D3izp)6NdF2&<JuY zZ=C-QKswvXR$MD05t9#Yr#L@c);6>X#xsvkYThBo92hb6^$?vSxCaW1m9B4m9iOd& z(Gx~)d=z4u+@yUl!p=t@QJ?FV0Y!cf?vlRyjg+9%ZB2%1DTJBz(agu4TfoO#z4bH0 zW4x|GwK-OmjaS<>r(4rFkvtCv8l-Kr5(9f{X$v(rNih5|qn{b)(N9LUx*vDL#z4FH zK0%@RJm=8|YkZMA=lT?KDh3^=F0B=m+dD7iZud<BQl|tLcKpG5MSaAT;Ai;xhw?3N zj^l%z%4^69PV1~)#-Eezq8k3(9~M~#eGAG*bY<?S$b|grFL3B&AniZp^U{BY1!eWW zwRyeWNc!K}#GRUI2xZZr!**ZMne4#Oel=VDra|AQC>7=>d;$}h>yo+3Le7WY2!FU} z-mx>-`ZSi=${C&W8}WmVE(V-1JwR0QEJ3J*+fFAO!Vo)xUk62ZAYpm?ogpyW{wu?X zs-uuTVAR1EpI<v{)#)alrEI-0!85JF4H3wjT!u&{sc-HK*?-gNp|MMc+N$RA;!qf| zFuH$b+SFlc_2wqn{N3%}>((_CK|FQLQ*$rP$Lt~zCQGns9`ETfQRxX16gTr<LiPmr z?n?`Yb|W)b_v^VN9v&Y;SA=t&t1fF)w1N|5KRw8^aKFiao!oiVz~}6JltqrBXdtmp zIx#b5<___0#gB^-isn01r?2IfK~!%8ShYg)1yA+MV0pq}4z5WR@5B8*F=)7_TvluB zcqz^iN>8l|XNkII`+J{<$b95sYxr$F^xP40|G+OZc1L!ccW||EdOH<6G;kMzA@1!= zHbJ|TFlnTGPl+j}Sm637rV^R=P9na3H165cykg2pOUqpA)`<R;eFN8iqy?y<YYcVN z7BT4T25gNtv7=Q8{eWaIR@Zko;0D2#zr6RiX4M1OpvTyXp88mJ_KP-9$QcAb6k~k) z6-S_azN}$_;pE_I_@={#oNg_p7~QQLZ5bXsAd!Q^C=WX>YBf|o8Shx{ICC#yj&j<< z9*OhR<e$`Jn+88X4#Df4{!N8=im|I}qtJ#v0~(#~ddwPUHm3b}IyfaRH2ee7+1q#G zC>`4O%a_wfhv^nZ`m03#(El-+{+m6SHK1aaKJeqKEI-;-*T|$=Z=y^=xMZ*{@L>m< zLL~6`wI`3LS!lLmb&WZf`NVojm^<C=+AucRM+V5N`4>Ve-y}FZ$}%_S6rP{7d=GiI zHOoPBs~PTk>$G%qQ?(DaK3)~A(=R&W>5ttm>aA34td?D*cXwmPi$Tk3a#5|lo3VYH zy@Osq4iF@u6Eh0m(_=^4KifIqXQk7ns5+&|MP6CtCdYF$eRty?7XLgzyAI#H{w4g$ zGbVz=5_5SPx?;AwQpmrXr*b>g*-VlocFe~Bp%4ukn)Yf%<VfBeoTr6;QF6W=bZw?Z zkX%)RSDnvnJKp?z2oYPD-xV@T5?aZ?ygD~OeV$JJ<u}jsiNqz&M$Ac|CrjBlLyQ+& z)@ZKYTBu76!e6*L$d9`eI91kB@5)pB(nBi^@EcPn>2&E91#J=~D}Fga!SLwVU*LIF z)kE+uS-|g#R?z=-ii2M;t=Dh+@;21`9+WjgayWw-mANu#XeK_(3jg}hG#+s&8}*4I z@%H=HIS6bBb{6v%9irkCi1fEy_21v-X!z8U$GZ7Ob{oOfg+)s)GL61kh#^COupb8g z{lP==s@79Ah)I3$*PC#Ae~>KDVqy7p;$Y;nlPbxQDp^<hbEJsanO|W`Ce>kT*{24? zF&H5%@6xD0e0;8>%^NR=-^)?TCNVkP;!PLh6{6&nQnj}#XX&QFnuYJOYi0b*I;)cH zuJ5<ztT_}f$UIN`z34m)r|pI-q=IIViJK9r+=*g#U)}?y%h63=rhwOr^utZK0^%wS z@lNo^1@3F#6@UCc;I+@t$4D!ucB3^tK=u#sRL%y|{4r?GFjT9zR`d!`vBXDRpGa~J z@5|G_FB<ce3E|Eeu$*y9GV7#MMWCK7@XHC#QkaM2T^v>QTtPp77i0bxS>@2jrkgmj zj_bcyg<nn95DjKzc~P$P-U>9Ld+zqYf_6otygDSbJm~H6-oPdkaVM9(nW9dCXlLUH zG>vIB%l*p4jx;wjzqsPF>@f}&?mYJ}5CgQ@6El*0>R+BR_U1EjMmR**JFHChKORAb z!|dKv=dwkYh!ws~cH2Gb=k*sKyc!$${A*m+7#;m6L{+n{>ogb{{CWYW90X;R$i}gx z+MTs2w*_?5k9!oy7WzEo{c+ME%}TVe%kgGvUqQO0>&Gn$q67_n!0bt&)T@{2f_&&x zSg)o&p|x!u?LIi4PE+(0L6!-3b{s#V(j|e=CsI=XYiG^jA8X1?v8$mdh$B?gyX|-7 z0fe)`ik;4k^=$lnoeJ=?1@;IynuVrpXi8ed^Cg}=^FqbQRJT>DTc;GC4Bemq!{?u1 z{#l>~nO$$kg};QlFDDV3lRYk8>w|)+S>9U;k@6?Z{%TU7#Z27p*e3AWD{N_;aDsYp z)Vn%!Km-OSj2yVs=Zc7G`Ld@z7dRYtW=tk~7s77{h<S7Q5%wl#1mx0e?PQx={076& zr6FqtO1-7y3UZE-zl((wu4SXhI{8>(M_L5#48glu{8U-xT%=R&D<gw-pK2mNDQ2D> z9uKynB@Bjv$DuBL+m)vRS?I8v%2KZJ*?DFwqN@k?&Y5|)Q$<|mUb&nx4}9rv?lS6x zfJ5`)2vy29#X6#24ws57=p2v-`26ke9ar%a&^}&-!nt1WL&kr1BAbJJBD4|CDYuwn zALYuepYP0>?}RT37*if&C%$RWq{vVlPb+r}53|W@%r7Y_*Y<li^2t3$CHZd1zWS{k z;)|R73yyP^vQ1dqCv-TA*r!Sg76vaNUg$JSv2Kf8>C`E`k!$N|I7j`{e00rTcn1#t z+1i=MD+jN#U3p&$*?$O<?Zpf#tpiFg-iqC7i#hZ@mdbL3?G6SD^C@=ErU&_xs{y8& zueMQdgNw;>r#+Jm9>mj;qUcb!%P8agUkVZ4`st&(taL?)vtQH}vw40X0nO;n6tUZ- z9I&Oxo6wHCPDQ{2^m!Zm>SPYU&f*8RgpuEmmhl^0Jo#R#=@iFRbd;+K1<s1Ca+Ewb zm&ylN0dIZgq*+vTeectr%XRLuE9GX>U-8+nT$GF3_0%>5-B6x-{A;(<IM@X}gW`fF zRX?n|YDZeBlVli2N<F@SB!H0c^tH?~i0jQQewhf_Upuj+JNq#t_@~Rq7K-({$;J+& zG*XaxWv+twkrRzZ;lUZf?N6%4Ng(WFioIN{O&+GX3?Tkiw}Z2p!F!l5;p@*+){r`U zeM)KpC$zumO?8J68WJCVE9I4Q#fDeFDil>wtz<VL_ftY3x5V{wf0u1}2&<fv1_P6j zQjkgFm{}=259#6hHA<=3XR1d5w>svWOii;0+7$#D5L%xeFgq%*$%;Q|j$8I493LHX zd<72g$*E~bnqbX$8hs6aQq@%(_^j#9%TWR`Th00|Kz>bUj5YEyA0!KJ-j<lMTScT5 zQP0f`fP!isA>nTJK}G%$b9iO=s;lTJ!kOYApz1oTu;4@3wtt~Kb|X%Eg-QYivO%JJ z&Z{wWGj|Y)z1%P|&9h<L0GsH@*#AqSEc?$R)s4PG7HdnfWAOpb?O+Jfe=+<=P@71* z7t&Jox_|JiyT+v~MN=qCiX684{HMVV47}!Jl2RqX>{wc>{iYPo(adfYN^|-Lhf*K2 zt<K@`2}DN$IF>@U-87mZRYzp&&$*o{hflFgt{73QRSW^*el2;Cm9U%|%*uSDqB^gk z`#%O_wGy(9u!Z89l)N2vlVHF7exLMuEuM_S`#YCs<v&FHDn>%H<@kw#%bRGJ17G>3 z!<u6E#E<UKgxe<~z4u1R>UiRmDcM9`!c+pAm37KBMVW}dVxoy7B<gx*sjjP~hw}nS z-<UV~+Q?dT8(UeA^kgSR%RQPtN=>(y`%<1d-42TwiDx%)!P!R=BdxL3c7@Vy*M2bX zMDo=(QE9DmS1S|JJ4MI-@aJ1H)daHM+#7`WCya3YSk4eI3~d=8`agYBqF(xMI-vOU zO3uT+=Gve^hP8oBm6Ty>wDP2ZUO5||Y>rpxtRnfRy+3gH>c;$Lpixsgc#ymcAU?*= zH=b9quJAcYg}A>-gjuJ^V4PDGdZb*^7xFh6J9NDqd$}Mrj#3%y_ru=oh&F3a&2p93 z$mXD%%rieEbT|m*!DJ#98OO*tE!>&jtX5T>V~3j;dk!y8qxdj$2JO4!3IvlC=%pc- zE@N6!S8OL`qizf9RDBj%Lak?IRtR50`}F2xuh_}K7?>VP&65_NEBM=5Qp6+8k!|%w z^Cd1vCS)ESciMi6n!dNylo&oX|8-k~X+!zmJ7oT2fH${##Yo1)k5gs-8cm|NfrUvo z>|BGrDg)$r=dToT>$Zvl_9eKH)Ky&I6I+q_KT~Uwgsf*8LwEXcH3|C<mv`FP#j<oM z_nGNS(ylj(K<*)^%|wEz(ooJO0COF7u1Vn--S}jrDR-}ZG+m#SCB58Yrwa%IWj(1G zkwhD{OKtPKNW~@gC4Hep@=Afp3JgR)wq0^?i=GeTkJjR_Sp5M1R>tn35f9}?3r{hk zd;uzflFWf_OdOTJ_3;QV&I`*fhwq-)@fLN}KVa3<1uK9FcJ86uK*W-&?%_kTD0?<@ zo@+m~1mWEm?=pFR80%9RcGn89Gx9K#mP{I6Xt`z*c;%(q-c{OC(C^z;TbIE!zTDRG zaWK)*{G>hlGG|z5D82b85bTzog3eVS0k|{^=(%C+K+DxDl;rCgU3|r<DSYGmS%aKX z*e64;zb^(u<xvhUh_s7n8F&esf}qaxgd1T>6Z?kJn%%vgHerD~-#ZQ}iNlnN+3&vM z^%XXy);uw=7Vj3En615u<=!fTJXKyMY+9>T<$*a{?ZZA}Lr_@{GKVdw$Y8A0TZOY7 zcj(dB&650~Tq_)H&^y|HV6eb2y!ER_Ow0K|X?hoG?vSs@b3}jkj>;3@Ks$N-EcED~ zFZkW0-4^sI3>>rBWg&_iug8nIe3otN9V5?&2PUNhA5>MXgca4s=lzIfjDR+{rc2Rd zxPHvh;wn^_0S-f9<0N{F9=AKe&r0yU5Rb;#hme%#f|V}Ew)Wa;%zqQxWqx|OXA%<l zs=T))Wl^>&$9`U{8UAr8<(@C7X~-1i(;Tchj^<&r|L1Hg+c+THs;&aN$SX3D|2*}n zUlCX1MS?8b9;7L{ESoc@&!iqJk@3i59@)5;mxK-Ev#Ap#V=GdKN)c-tE(me}y$Uiz zDe^rfu(7^?hmIw9U&8eToVRz7ixu_-eX-sA7@AkDM*r;9U5S^Rr>B_vHXZ%pz$+3q z=_Hj}PMrfhjaJ-PyQBjnOV5eI6q3<q?(x)Bf2_JJa_K0ZbFutaXbFF2&Sb4cm9iiu zML4g!{PpBx2GpPYt>SLbJDkRM>FK%<W&+N(F*?)~eTPpAdvN8W0nx=DF<nSU&wRPR zS6|F*{@}NfV~KJ;Z&ssu-x`%RIz+48j$@>GS;kgkCgMtM8;Z#fiQYd+MCGe(9alr~ zg)P(be*R<6!_647%_T$F@hSG<L!4EOQlTqIXIa;3bs$78mDx9E$h~vshZr&H#8aoo z3YyP#{fyV2UdS7m$fYov1)Qs5P}?DG%B|P^<MEFTodOpGHHT|yK*8NBm7i?|v0xHZ z&x<6Q^W>rhgW6A;+7Jiv!oNy?K;fj7oq{wx&lCR#FU@~RkzEk3&TcO#=png&yDIR{ zVV@e+s+rDe)oAt8bB8mm^_6?NDl@ZBhPG39{2@_<KbG^tn(EG(tm4P9TSqGRQo!w1 zis<l2Fc?>#Q#;jGU9i*1J^A2A(O3;#$Y5@MAy*rAGA6SA(CD2ll(y{|po!?yO=#H^ z>o2jIsuV6hdhE(l2MpJic}vIwLL857oRh2n@eIaWQ@`xSeFyo>n#PN%N&MgoDXObq zqnxCHVevEkC5Vo~QgrsiJU;*O9y9TvHzyLfnOX4%0K9>rZSbqWUflOIr@VbRe)q>5 zIeR&6aU@P=m!Of4N>2tszU-duw`kd?MT=ro6zK~8l$FNcw7OVXXbnnqIO5XwOUwoQ zlzncs*g|3Np@gWgKR=>VM)ED{80onzNS-bYj4!zJK%P1+6SSgAN>JS}e0+!x(*>&* z4D{p_^?pnEf3c0_(ITTJh<ez(yCwPP*U~PiBt9>!Ssqy8-@kd0pdBeyX+|#8(tEYO z<nf6?1hjESV07UpC1t4J8Phmq{J&cOOTMX&ECB&|Kz3xnC}_$ivwUdGuUIwxNiBI% zgTG4tZF_q2S;Hhx2$hEtG?<M?-|0*Ur55SoV)Ype8}{aQQ^j~61Lq9)!9=MD>0-Ka z2v9zY&XyD<N>I?xSSj1@S#kzxM|<QOFr0S;1IzFaKMZ{+|7lvQ=4SYCRbX;-^I|wB zPrWbAwHb;iZ5?+<L%DQ!9B_4vg+9*g8f~_?7xg%QyCGhA@w(CuMA>n12TgC9VI%fW ztXYhe--dQqSb?*)*^{l+Ysn5x{OEy{bP3{d9lPgpk8*c@!OTtfsNFARAo)MG$<X#} z529x8dU5(SJd(d*=>P5D5==+cTLk-W;lUG=H3gVSe@*7sZt`$!;ONrd%qZq4C_Hp@ z(}Wgo9qF6*oc~6j27dxZB)qH0swp|;0NZHg#dL^|YkSR)#t!820z)=-78R#d^Y^G| zPA2iCA;)Mj6}E*Cao*l&)D)YTG@R_a!ko)TncCn)_MK|m5G#TY-|5yw&}+)FbMQb& zcoVJv@S{Z?HW*SX5I8(^1g}ty9v8WJIUwGI<My2E<?7MgvOd%*3Yj{Z{8g#Ma&}YI zq*W?2l@HsU?-|-Op21bN5|fe>C)L}ObJlQ<YShR-Hjpzj)4W!h>{e!QaTV-5RBL&A zA-epVReLA5jG-1ySPz5jv?xiC?w!v)acvaw^T#w1$FCO?%aVi{vz=kuU>dcmotXZ` zIBj4|)}G+uJ+BtS0?mYkt`7;Oj7oi>sjdVW0}0U06DG8>Kl0z(jMCW~RhTfrsHKbQ zrP{#&!J2I{cDrU>a*~c)4v#|~NkzKtGL_ry7XKE`QnkBTt7KdLf!(dg+Jj{*7mDno zog2_rQzL?X1<#{wAbR!?my3Us2@5@y?3m||Gat7wANA-9z-KDU+#0(fGjL2J6X0jI z)hkk8;meuI@}F}Kc4kh)YDFakPQb#DwXI`jPIt=w?XEE^Ie|%i-_h!Vv#|zw-KU)| zpera5eE}P>nq)^%Y+^1uB~MRWJy(Yk%N>~eN-b+3F$U^c*l769s>ZE?AUF?s&X=8+ zu&^NE6#nDCT$1)&d;W*4<Mr=q*08=~m<lz%_RDLeaY7_l%-jxI(5AI6Vx(r&2YD8| zF@4F~zv$f{k_Yh&+x_mdhK^fv^frh*0n$l6vGrBGan8WYc@dgI&XyQ22!Yua(N?J% zpNr!QjRC1on!HTOaxU1MiY?$C&^?IlL!(X;htkBi;d@iTt4XitJ(nh2?*4c9_GP<k zqbz+U=8*da&_`<ug<~B2z8uP?k-*VL1pSTGD8Hl?;B}l>_qm?e_AT2TB@Oh5!^r{l z!j7(CW;6Gzi|TT6F=7+a%aONqyKLhMA7{!4E6Gcuor-LI?~25OO#LBG%}N{)(fYGO zofcLh&n|6zfzm)T+B8?Fp$dzb&)0R8bjgcARE~18f+NfkdY0XjO_uW$?8{|J5xB5c zJ{aqAj#Ap67&!k8=4~qe-#Fm;;Fr*r&Hs%9IJNo$&@_COwd4*|X33;R4C}pGT*E2o zCU^fRdULrKW%_!@kAz$d!ms~AF5tuKRr9C(BtBG-ULXey3Sl;4#J#yxJW(VDK&R>H zhub2!KJV`mH8-cMIB~@7-)pV9wf*33P_4ZE$hPTV_k@9rSFj8o>EJqRqKdsBz>=tm zflOghQAG)y5k7JOUg$wEWA6%~{LBkXlLhw~f2c-Twgs!`?zX|9P-IrSf8J;*Nm}}J zbFeLnxi&sR$dKN<(e8NOj}*x%E@cRuU`;-nOjqlayMz4`)37-9;n8R+R+l|z%v7;8 zSJiR_(!K)hxeE{E5+?jT_jrp*v43xf{sGWVSLza~L2iYkGsgb8lqO$Z#{X${D@|OZ z3+a4TFv=bO6T~y{sqTCD%o?MWNotwXGHlxPsFwolsT%6L*_?4ln<J*7Vq-FbO}jyn zr7yP5*|nzRHwZE})K<T@7ENjuxnIjc@M95AOjqAzq6h>8l5E;q!2wW1=PH7a1n<CF zw2mtEf?;_@l0+iEz<bc<2i~ejE~PzsccGw;;vLWpZnPNS+}ZoDPuE4$|LT$G=YDi= zzOT_wOP%zIgoF^H6!8^@b2uEttg;zSv{b%=Q0=s>nCzjg{8!v4^)LjzjWUP&p#0x- z?6`~kulC%-liCI|>uD`)kQHk>z49CF^TKv^uvYh+I%49vs~oi$08rdaQ};V(pFC|` z*~LPb3)5yVnwufc!JdT)H>wm^Cul|erg=L0p&DHR_|pSi+NOa2Xu07rq*1Y>^&Jp9 z6&~%9#rB!hH1=hHn>%XVzTB_rmQ3+QtT4XM0n?4C)3fK;^Aaw<f~%9sg=sF_)e*6d zH>AW^$@btAlU+3D$haw8e5pN;{GS1me_YHZx#Oo<I`U7b*9xlqJVPCS<`<@HIt3Z> zk;Wr$X6tI^%+Z}B3~EGyqh}#iuDAqMe180}_D-8_m+S{3Nn$DzB{iwXDizk#O9Y%p zC%m}|se`^U--Wm2+p4yEOSQdrQ+cJ~dkN_S5+1l;m|uu>d3@NbWXeo<H(O!QSOF%F znbw(uSyg$FM@vJhw4pKZ6l$|xM<*rg9Q0BBObYD2?FX4&D22wf{NggsyC;o<wYn!{ z{}-RDGp65G!69TW(7(gl@O{M;nj#5K+fMgVKmdKKr8+k7&R?p|Y)+?EWqg-yKs6x& z@o4uw&YT<eBut4AFL*G2+Ck3tr4J0Gzy<;@#Z8mNJXD}P3>f2JvqO~wa~`I&;0fQx z1j|jI{whP$(y+7-^{<%hlCrY9`TRC+qoN)vril4PY`*@Wb-TtVWdfV<`Wt0`PrrF$ zLVU0#Ti%L8jaOcA_P}ai0UF}0LICw5Go}py6YAViqN=DD>%jIP7}5Xwt#`h!AQ3q& z?NrI#>O{|HSv=EdU1Bv=Yfhw57+(mcBFp)eql!7zxh*2Pmy>3n=%LPjO;myX4k4L| z8fP-3Cz#9i#ur-c&TVYPsmD;Pa&pws+L8L*e5aUss96TzeX&fvacNjF{eHfaPkd_P z5vNi`T%<Wf!u&4EtC22dO4UM4y16TILBe0%)$R6~mv2D0bdXw?04ya{?ZuIgz9U84 zUj3^x%IJt~fG`}A8jkZ_xbX+Wp30EOiAMicF`QQj#}cTK(Q|C}MQ5xUl;&D0?7qrx z(USd?$%Sh%C|Hl9vxHf8`w3hsyq$XkdbVyl^q*;Xx_7_Co)5fwS|(Ru!eKa-h%LqS zO?sK~cZh!fO24k{BmU(Cx9CCHq20?0o5j5anx)CqQ4DA{#J5DFcnOc0C4o65%t#)< z0hd;RNrSSb;qgY($K+sbBFo2$R2Bg+Y%;aMGBrvBcp)shxA?;AKs_zuc@oKf@#HB( z25r=3s*d`HgkCjPKV8UxR)!Z(;TX$Ho?_&8*=dVH*VLP0Jjh;+Tjpc&PFsKb`nVt_ z^s4Ea(-aUVw8fkI=w6t^@mrHemTK~L>i31j)V#f{L3Nrfx#ev<(g&LuJx0TE$w9T` zqi5iY4dCL*JvnF0AUTpc3CdI?u+-zMG1M(wFSHQy99t0`qVi7;nCXHQhBF-PYNeD| zpthg}B1T$Rpa}4NhqqY&fT+(Q(^XMtA@f6X7c0%aT~Q5$#qQ;XP`n#T8gDA}81$fr z%^e~+azl<cYa2#$+zutdt)D4e`hYYt{_UMSg9=ONwFGM%5vKwn?>mm9gPYq~ZLj68 zD5;i)5hoO&S9nIIi<-ZCP|>MQxp^9^iA(<5P?mTj1jnFLwL1*RE+OYqRpuO=$3Z6H zBdGqJYmG+1`eLwK`d_dhOOyIuu~2vxJD<FM(evB7m#2m)>FOW8>B4?PsXxkM5JMOc zN=O^i6Fz|r&MB2lvvy3Rh~@IM<5htpTP3hra%tR)Q%`D6h`8tGjSn(b83L$%ICkhd zeFwy$W-KiFJDP_9pdNEKE=J3s_0)08^^^x<jix~NqbcQ0<dLk%P_EM$o4HM=6idkC z_B32tc?<`Ue43p&h(Dn+nz1Ng3_-6G`7xVht{;4wg}Z|O#hRd-fOn#<c=y`L-r_5_ z)F($me|YO15uNR-Qq;N8P(`L|;|9(QI7<3{(Zzn$@<#{n)mfRfV;iJ`EtvD6{ierz zmC4zAgW?H?x`lIi>ulXzs_zQIvMl*l%fK9L3iTgZDqE%+NXUQo3eZNDQK+bC*LL+y zO-+A2f;QHKBK4b7f_D|{oYAq}z2{p)QH1rXWesLaf66~t+KTzT=aYRxd$d2R-4|4E zLB9-5Y5I(rs_KkZZ08UdBlFy&`g#&Yfl`cKJ0;w%1G);V!i@If5u`8=A5#Jz;uT<Z zE0`1%RvExdE#clx^~on0Z=`%^8g<lCTEGdPV!#sc4ONJb&k!`@TAsIOJ<+>rb+`G> zZ>ZE#U`>ny(unY1yil_T;!6}G??>Co)gV)si(%&=2LHy2uVCf$0dgv~HxWOF7xzrR z>Ik8C(Wr@`R#r7M|11f6iF%X{qN7G?*slb^<qh@nvl>*bxo<PPVu-Uy3$}uOts^HY z6j}XspQc007N`RB?_b%NP1bC#qY`&XEGZQ=Rm%Mi=PkTrM<#XE#zt770BnvcKTHpn zy_9gw3`HsJkJs>~N9f^UnG>6TTdu~qZ(#*R1iDB;WdjR_#T9buYF2rDdH`;F=j6W% z;T+1Pk^2VOt?c;CN3dpAmWU?@^O9Dr5JO%A<Va*?O$EqJUrn;^yKiLWahK+p(>|;= zRi_41vsf+b1krxR;LBSa4!JX*A;@ya>~yDh0Y(Pam*6wGEKNSBopIi9!|C^Oa*S$> zZOuW2h?ola^wmah88D0u=tiAd%JZz*=jHe0L+&e*gv%0B(+*Q6z--~G>dwxpa#g6F zmp1m?takNOKJ61(eQ^(rEFh-n-@*t95HGQ2Ld603^3)Zz=+ao)kaDBOQkMi1pG^d1 zU7yi8y-OQu>w=bVCo+KWH@`Q$J{^DYp%*4JyiBJFkTYFd&YloZ3iZc(nvM-@4Al*- zDpuf&eyAgcMV5&@+!1VnH$8BOgfNU`K#&yG&PBJZAbFA<Q>{o>|6e<<`JF>Ino5z9 zFT-B{Wz#U}X~&{5<Z3SZHIlOwRNsu20}Pmh2g%p9HC=?;JPWLc=E|MJp_@HgDGCyq z^SUE25fnqinMc*`Z^(4k_1-)$lmzgnQ*EBEedrYZO$Sv_zdeV@NWXI3?Tp$L@2A(i zZ$m_VgEDCxdP?f^VX@bjzQ#IjavgLE(lIy&a69gKY48A_n=Hg`##7n(nr4GjG(MaO zs<);!c4J(RYhvxAEh0_?tb&$$YDTtFraHvqUKQI3;_=}+&vO`E0xx97fS2kKX=x9A zS&-KjG-C6^7+jsINgg(PsHd2dsqaX2?IESGf_K~j(9x~eC&qJm)4o@&220iR_r1L5 ze!M#d<g(J(L&Z2Q%9V4b*&;m(N8`mnu=JtV`og!)p%1oAc>AH=6l#x7xO_HIZ)S@X z=m~Tm<Hr!TtC`sBIWr7oHSqL4jre}9rm`aBNkG5PSJZfaESz6j%P-n@r1)}d?tAW7 zoTVhYL<d;&FS!H2!cfnK-%r8LQN$16F6Qb8sH%;F@GLaBSGfn?8~gR0+_}15h$BS1 zTZw&-q@a(&-=Uo>pV<Wi6E6muW4{HNwV+eGF9~PMgN@K(R_sZQu!&Xa)XV^Dsw1m6 zF33S*tdf3=(3dl2{bE9hx#RjNE<&{{B#&Dh6NyCs)1KMVhn2A<B`l_U(s+i7HrXRz z7OX($0tpN_{}E*97GxMvt6FYe-cUXiULaQ4Fj;{?UqG)SC8X4c6O8JCR>!wdaPm8h zd@Yb`dkHTtYdM)x6M8qcZ_gfQ0+Hm7`JzkIXy<1mJtdFl+}^ns8-wd!1q#sQYZTc5 zTbsXPsqrSg($x+FHfjEL5Q80S=y|_93VC(EVe0atgjT;v1Dyet950YS>{kBuKAyVc z@w|~`NPD@?<&Il3p<^|tyHi$9vkPf1_lz%XE*iRi4i}n0I7>R<5$*I_?=@0G#vm9c z<6OXNHqwp&^&Cb5w<zp6unN@1^~m?<UEib}vY9RDK85l$2e(u`U;ubqXJt_E@BS`O z-1D7WQfwn--@1=|X8YdM{p6<H@4HeIX|H_0Ch*4#SpB(a^+lf8wC`QTsj^*@#%CWE z)Qvv?ncpkTefi6OMh3{GB)lB`Fz1fCV}(*Fb3Jp4QRBtDMFCDy?xoRB3IF7RA4NCZ zabZ4XSlQI%U`%+7L`+^y8Al~GVI^#XNRj<#7_%_(=E4k*=<Y6>0?&Ee(f!1|arpnQ z^Q{8E*@nt8ddo>A3Bj9y+Vta2dBI#ei)i9Qw|Qync^^#nSFAgyR_C-r^1Ci&fGt+S zKwpV*3|HziriIS5K-^Abnk&~J*nL<<1s(9k33DuXcT7&Y(?XmP@VHSBoD%<Yy#|)J zT>Ie-uP4h>-cI!7+$>{(FqC3XT$-uxow2C@=Ufl`akM&-l@{;QfrwFrWQ~2F>9nvd zCywM2b~g}`_vB=$0cmWS@V8gh|0aNJ7x33fc-}h#-RIvI2?q}PR+c47Hra87Tb3^d zNy!aTmQCpi5`R@ODEPc6{rF}KmL<JMsTpn`Vl+M;?AZwAiX8txn%yzH&hB~tPST`N z!^U<R+qP}nwrv|bY|_|h%*M8D?;TrD?(gsUAIJ6TdbwuSoS&I>&P6`G)2&3|O>bs) zFw=SJ{(DZBl0>}FrWKj88{5Gc<hjG6Go5j`0fwHgw8NVF=`2$u0e(npX3FqC7R<IT zhYX6(p+tIo*eh33mhG&}G8QbWeY4NF&bt+E)qi|=Z^6Cd)e7i!2Jlt2TW+C;Jc!qe z^G;7*8@hFfL~ck2&0vzFkTdgEJHHMZvPl1NBYpxjo6wd?%c${=#`e?94w@|Ag{RX~ z3`n4@kzjs_y!`H|>#=@bImJCjb7|@&IAIu`mJyfFOOgSgKM*qoU?aJ+NVFU?ImmPK zoI%_J?4Ea&7`(sh>(Q$|O1f<oq>$9b^wOU(&<PnH_Y%ne=aQM3`RbYXtBdv1woYjR z=mi~IXd_|NZf1Tk5M=Fc?nUXfWT7UHdmYZp`mbrvw-v`L*$YKe+hRFyKcHQHG8`4! zM)Z8aoV5%IFpj9)->Dq(C+fdG(`{Xf=Yt(8jxA>3!qjw(yT87MnmP$eCOc<1l)$G_ zll^{v)EylB(a5R{7?w-Q`Fk8(OlTJr=$DIvK3i4os$Z-_^ZTfV!tm_Se6^C9HtG`i zggKi8Iw+70<EeDO_G5OugIm0dESs>B0tvy$(x(O2InOQa{8W3OKDm9psf3S8&^Y=d zd}BCGo<W0W-)b2KeH|$^F|n$Hgsh}Vz=Dnpf8?0(QP0>f_cuZBdV=>n!`0fFktD;h zzD&=w4skc&s|C8pOpQq~1-{RBvUh!$W`h&h&#CX`*34%=e=I}rzpM8riJn`Ap5$(M zs;Oo^TiKvYclrThb6%1qi(#lWbiF4<@%hn&s3`+(c?`?>Ug$>_%laaA(by0H66<I8 znu)L&!KvKlO{1p2eZc2>c8c3v1Ub4_{z99WZFpO8T~6jr<T}t+ua!QnaO?WWx;)|L z<Iz)ij4%FsS>qdix=jB@>tl@puFpYJrQ_)~D1MiW(?%YV%qh^wqQq`I-RYQ4t$&Fj zrje2TZ3%qH(@Ha4t0kdlVQ|^Lt!zNHd1z+Oi*>UmL}lXP8+nfG(z}_kF*9n6=jSH8 zuXA1eLk?PRFl8q;s<R(AE$Iu-@c%i%&lrlkc7bT?`aTVD$D2R-N??N-tN+haDzkJ@ z|HNaLrW2J=n)+Jec|EZ0Yq_jWtpDuoO4S$)HO}UHx2+qCz(qE;9wZcHlV4s&>a8xo z$R|?P>bhXBh0lhewxUROV?FH@Mi=FpDM2v*-e^@iw|N89D5*8vFA$}8I1Nr|uzJkO zsAQSm<VyBfwy%bGQVekD)Xg2CX%3f2#n;<MUZG)DaIs&v==|(;^^SmMKV1>H;Q5!l z{dl{m(g<_s-a}=yX<UC5K*N!gW-wuqusxc5oW6o8qw;j?jID&93r0GefL}w+QZ4bT z)E-q6`YMqJk(A{ir@V=tSZjH&S0BKcm08$t+e~Ct2&IyyA{!kaT)2dA@oZI0`*gwl zx%Ip9+rs+QHJ*dGdu#VSBBEk5%C_p)-Fu<gm{4xsU|(=slwfGOhqo#9EoNI7HLkC7 zGk}HHuzd3JK}ow^y}Pizmruw(h*Bn&Us1|;C#2sUd}LV-=nQJr0>HT)!?ublh~}pY z&w>bl3Al_PuIPCWlej(fRWXRoQdFoH7AZ6ClCd%MGsM(yY3CFlsn5p?5X$c4UbZ;$ ztMtdr53{ztZT5T5Qj$Ra85J%i5&%1r!yg>qe$(}8Q7MoU+r{^Ws?wPDZI{3v`8CDy zk|_X8IF6C?c{)4gTw`a}dJyk@Ij{65710^7a4GqtJc7;7l~cQ<Gd#zUH+I+^4-~95 zb4fdmVffb|d_?ztS`v6KEmd#WP7>Zl^7;cxM?i4zAf&CzdueT;ky{+W)o#{jWnNFb zLy!xT<wsG`+37-o6-%Bv*C5%sB2^ep@0Pc)u`3sMw^r8FpY7CzEzYq7yIbE{p0efC z{0vtq`Mm!rLfKMT7k}PdQR(Hqls5>xXO_CSNX@hK7!&9Dq12cEH9y=XgBnbc3bG{5 z<@of~_Y@yU_LZ5cy2i%O;k+N$LKtGj_aco0gU|pA7-fwB-FA7wLT9nX0-8Z+cH@z@ zP+|u7whXr&31r9|?t~r)<q1j1lMCIxFGBQg$7mU22V!IV=w%3?xH&l3Rr^WJCWim* zLWI=*d=sGY@d!_$qrm#P%yHFYVTE63@0P@+X!_4MXh_u8j?*)FI$(8juGE5UZT0Bu zY;h|Cj*aCB;E!c%t>+`Bb`8Hhq)uXvcK*Si%1~L=(yFtAF{pltLUJJa%FR^l87y>F ziaZ==<zFi|^dQnaaSwmO_5<KzZ=UnMId4~{(T-?x&1f%yRdxY2mzqML16$E+b9m9b zG9OLP6otLNf9~&(^LhT*1j`Qwk^-UVryO3UYgI^hrE2lu-l@FYMS-qQ;XrfIfaTRM zofwu+yFRq0+x|#ZXxoBgDzH1`W$n+FF!$c4n<~?&mCs$gp4y}RXz8vC;v<*zTN4q( zE-93ymS$z|l^pW9S%+bUs<<LZ&F2mzJ~u|MTTWGGB!+R!_MrE8Ioc~Nvs|>pB{-33 znGxJmVOeozjr!_nYR509@YYh&coH-*@5D0WxXGB+a#`}V120|P0K55mmku8{77+04 zZ~u}@jbX3vJE@HDcd9ShUFc={j}s;Z^++cqS1B?%d$asn@(=ogp7hE-8i=OlcKRhs z*-t%(mFJ!;Se9$M+VSM-n+U=;8V?-&p&xe@3T@XB8fOimFCyf(uu3yQN!0#ZN}_K7 zXLDK0EV1&^j@U#nE-S!yXKT%b?YaM`rKfuGuvz20&hp}T`~}kwuuyy`oYC%~eEg2h z0MYS<*!EuKYJD$&{~LK2G8iyuRZ5anmoeV%rwf1eFb%Jfi+c)S;s}nr*PMhDan3f* zRfh&r6e(eH9nqekTvug!oU_Xls+=TGNRu&{!6Gh=*Our?18w@QVWQhB5%i_5c3zBw zU?>AIsQM4UkNXh`r=OmsEvY34(Zu|0A#Oei1{{U~d-1!Ay@+VG?*KnQz`s}-pcMQG zU+OxF4!N%0?o&mQ{F<+7NNIu#v~?jhd<U{+OUX~~-nOw=A45v=VsSHtqBmp9Ar%+x z`V@G(&qMEJd3HAN>g%^xu1Xxdwxc_jt>A|ob)qjtOp0NneGBYc_a_-=Dd!lXDslc_ z(-#%5n3Qf+_To&5(mVgY^dpL^jW5FI$Q0FJksUeUdwbl?zJN>De+PG482;b{>Jk0l zi_-#KWfu_Q@b!ajc-!-nwN^^G{C}Ga%H~kxOGovV#p!t2rL_^2p*?aBd!s&nFgB%V zwZ42~OIS}|DA>|HQBvqHFR{0U5hWX><O8lEpWOeR)1gpKPpYwpwulMVW;g_K=Rso{ z9)N)&Zx%4hPB_n!{J3mK`gLfjvATWV{A!;$)Znl;*P)&FgujD@-<hCUD&tM~!jYR( zl}hKFTqwWdytyBs5q`Ah7As7VENs7)gxx<b*&qJDrzW+>Z7<Udm^$#+Xov3FtsVUS z*gUzMLB3l~2R?s|#$|^h34;8A?9or4+(ra{ICCrar^udd0N>acU6BQ@<@t7>JX3C! z5hG=C%^Vel@ZgZ%qLITE!JLk}Ao-)KKYEo850m5cZ9ymFzbGP1*ymz%-858FI>~6# zm$nTkUgGZEFQRdSm!dWrkMyUn<oD;ADYpsr*0(8Nt`Vq~DiW}zA2@QBkS&Uq06iRS zQR#D*50cG!3+<U=Gx(+cTk=DY<s?fZz6S-iabmg{aU+thLj7l<;dE<55DR=C5S0EG zDr~$fzin&(I65e&-mgFOo3y2>B%>XY!-FzwZIYUXs^Cs~8K)e=AfqJS9x%#4`{xLo zDp%Lh1`P>&lwrZBbMJoV+@5g1QhnqLt}*``as07h(8Dx@_9S=b_2{}+V;k_m)4rT2 z%`c6p`<>!9Y;!w1-`Qi28<QVd?3bO5xg_vpgnNxSr}e)FD*SCadplvk_o@!#_p4nd zPxhvuZ^kFH5ce|Eqa>d#VXX+^5J(CC&kNuWX(q|=D!?KH27rrQBwdFcJ)}dtFaoBQ zp#{68b`FGQ%gl=pcZ630(;W^SGvk$N0^c*j4=+m_-ri|=xaeKai^w=tg*w2vz`LD; z-wr)HBpqEc^fk&H*2VwNCU>Tu6j5n<_@|!V=i|9-+Y-~l>g)Q`Q8U%w9Q%IpqzYS8 zlkRtw;dT~|snXF#(EFll4NIfB3jcIhc2x6ke+6+NVARAQX2=m<3EuF}8_5NNGM+e5 zd@hXgMh%3EW+HT2SJe!smH-UDO}KI!FyP%5A)twV(tZ=3fltKNP(`pK_R>ImgtBSL z!)Q{X<>wY;`m9Yd*7Mr5`}vFPD^E<sD~B&ehCJg<SG7jf{o#0vh09^}^FWc2E6kOV zaX$Sr@WuVd)!?L*m=XY;U`*jNem$^<r@b$S&ZBUFtlW8b)%)$orEgE#pu&dSFj#&z z#*)B?6STy%{@(cT<&fH@;IceubOfclYCS22O>zpyo2}VqpPO`e&U(W2>|pWYo+mqL zJSS{>m+K1Upuq3^JL02Y?An>;+W;E=et2usNuww=dL*c5Z)Vh4o-B=}$YVaQD{U#h z8hqtl1UJJKH=rc+iG}<gG+&($zxj3^=#2zxKc%djOCI-KKEPo$V^w>fbT3=sOWrt2 zAKc><?R?Jx>`5N6t_e`aIwHlWDz3h5+T#HMBY%n};4tmpO?f%{v$^WG=s+UAm8V~n zd&w|qcI~l7Eh8g=OnGe|VOZ9yni^EVyUhgs>?ZuxgjYPgqmV5o2o_KB`2EdDxAI^8 ztF}aFvQE+Z%@FD0m^qqwrsEo&mS)Fu(*x1scIYQ)`$@u8sitJ9U8o@L7GFWKs?sE7 zoX`UP1lJ@#^SDTr(a$mA+}V%8297h)HR!?4*Aq0A)Y)#F;ubO($|Qgfu+WJx%P@z$ zR&~T#S0KAx^2mPPy9R`^IS+h(@kHslhchGBS4al-&K9r~lNEP2F-D5LA2z`Uo<?xo z@)$l111zw!>-~?J*?8M`c=S7MSjW@&Mwm1M*Sd7Q1TA<B6<UMjnbZxJ*|1kgg@HWU zEe#^E6(N}6o=7(`a+Yl3&W#AVW7Rvl)=;As<5An{#+b}13=4#`#ChJo{mp+J)^^Ni z^7Qy6?uj-pMgBrr5!)119tqpN!~-_p^ant?Tds>=|No|o416(K%>twKk2C0%ME$9W zxLflzP9#%irl^G^>aOE_ACBA<3mi$=6dvMxm_AiU*hcoIJjz^Dw_)Nko&*t)8q3FW zurlL51q<`MK+J5OR~gP}F6i`9hEsK#7k0oR-LNlv$lsJ<-dtVhUax=@K)!Lb?THyP zetN1=1xq|uic%}#0v=#1Tj??%Et26$I}~!nh%!k-Z}vb*GeSozM2+%vQcx}lS;1}Y z)zcMaaB+;tW2y6Z%XNHv=nLH}W;d`!|K4|48TtL2?pX17;r%L3UpHp)WdD7;Wd80O zH6;L#pDQ*{JnvXX#pmV;PDcvKDum&+vU)p=mM(!_bJ9gcg1OlO4SFgg#iZ=@Jc#*M z_)VxmMLH55Ll^OMCMb<1PhSkLBSky7rzKYUcV|7ph51bkZP{i~S<MZmsWfc&*Qf7H zLb}k@e12yh4IgI-FKcRwD=AaEqbxojl()})<5<cxpEoF4E{&A)WOD=?^;MnB=eNKN zR%bB@?k00_k9pMTF^8JNrOgg;o~-o<@@r=j^Gy6QJGf;s-8!HZw$5da8Phxu&z1ZO zk_K&9J0G;z4-p*O2NnsV`bM)vv(7m$#Lh4RxvlZeB6lUx<k<*(&5?<QiZcNpTB04P ztnZ<EzF5vsb)~v9iqbqduSo)Ybo0B-ZpUn$X#2C0Ps>iA1@swwEa6x29|UJE3`+CK z#JtGL%+x+auw<#C^LQva*j{1>7~1Qbrp=52{q!K5jS#ku1g#EbGn|PbII@Ozkyz>Z z_^Yw4ZLOE5AKXyS9A}vv5K98vt=W2%)Aa}Cnj5)`a=cp$Hr&%D?-3j}@AO9p*CQ5{ zUfwq__UCq!Tql?Mz1@ZFJXy@sh8>5u8TPU0*2O9lixhd@K9V+IKI4X|N)8kTHaosq zdGn)(7Xn&SK?q?3`+Y%w@K297c!$-f$jjc)o?e{n1iuQCOz{UK`yOw^gA>8i;8~}` zKuh6&Oqlqe8N`RP`t85nkZt>^gqC#g|Mr7}5C7W_4*d6k&QKAO{H4m~53CHjdPRGK zwGv<A^me{4yX4?t*hefBz0kpT#7uXzckz-U8RAn2;w2C>{L8jleRD|4L<|nP8Z}CG zpx<)tXUl2(sTAUC<Y13r+#}iEjcFe@##_B}S1vl7?O~e8(zJ`B2KHkRPo~}geTyw{ zNR*y3znLL385|M<8_deKhLrZmyDYAhMmb86&1$Yq7GYWzTOaBIOsu1)*JL22i3i(C zf@<R(3P{;4Y3jHyZsh=36;N-5v>s2{cvr5;oAu+IW4TCDgPM*bKjNr%?^;R(u+qYv zZ`5i*K&S^--SG`*nonQJA$WEOCmd3f@3%A9@AYQmPd|>N-Ea3rhlc_#@0kn5I39&| zPA8>Pr}dh&%@(0yDLu#6^W-WaQTt)Vi`QP0D5!sE*phPf{<W#%M<`@8UK%o;BXPqK zQtx`U1N>1qhN^x$2|5T?rl2m3$PZq1(|dp$|M(BkwYBNxlbae#y*?h+Qoz6QZWLAb z@pM&fOq|6%PkgHP!)E8#szRhlv@vl^MKFcv4#FD{R;Xt_8@UjFiL{Wo{Cj<L@EAf= zB_YKmlx$YxJ*YGuD@tWSvxt5%Dk5#`G)Nl1{zL1>%`ZU;U8GA_Z2bPUwQoFBMHpC7 z*0L9E1&JYQ{R-WhCTZm;<}T^*VIi=N4o_lL3=?Ma=;trtFRaF{-J$QVD%Q1AWgnOA zBIUfeKV3HajeR$Cv1aLltB0pmtJfVFgKB^flC75SH@^jXpliU~-w*fEKI)ODofwqP zW|Lg?NbJ;JvJsauKDrYoB~mnBRB7|*<tM#6)9F35RC+~jHLh0%h-J?#E{AK&j@_$A zc-3t5_Ov$LzCHY@WSBo!tKMvXvTKvwN*|YrA@Q;)LLcnnHHB<Ra-kaUU5!Bxji3f+ zc~#dv+J?q;DLRwZUx(=kd*da|V4>l3DarXGWroL@I33R-SLM+FPGT>QYe+LgV-=mR z8kpY)uS8N8W6cCaKvJ{yc^_r}V4?Js{RwHLZBwQyU6IG2VWZWoE+bU$7Q4KyGjw64 z&x>&^r-&Q&Rf~LPE!3|5HQ;@<QpT)oSJHPdLUmY7=;nrV=v*5LAY6MH68uP_YX2fC z+pSX(-WvcYL(b>^KA(?)krBB@5|=Mq<NF5!^x(;@wXnNA!a=QmMxx%3;A8l{(wQ_T z5Os!;EQ|G&cC3zOP~g&ie{%8F26@^FRoXa<oYs6O@jrLMyC-wL0DEo(rmw~(7k>wC zX&o`Urhw4y)bthJE7C!?QD9hDMu;cP#fBWzxq%)3e-nd-i*hZ`Hg1mdYwdR3@aDw- zZpQBQHvseRb#$G$i}m)n;LS^t(+6;Se31*oF2i+bNj?$ALyZUr@{*HG&bPH(V`g`Y z<v=&|%Whx<byH$#_unb+w}+hZ4fitAv=Y`$?()`DvmH_8HiVVzWDT+fu!kW(Ave6a zIajyyqK53J(_XP}GqSz*tSLz*I~!bl$8$6zvsu4pvcX{qf}Fi2xaLb^P?yhTQ|x?A z4a}`X|F;&%wv9k;Hf|@fnI7=w{M%p{`H-f%K;FDDY}*~P(XlPu;PY3_jm^pOWK^5e z)<n)ukT9`#>2fJwgiPk6{dZ{GENAT!(IfO=CV_7*LRtIoMR2P4(Ep7`+Z3QX<i6So zZEN#(1C0HyCQcc-Np*(e7Q+62^iFrC-ms!<KZv*h85ilVvAMm#aFNdTKR8=R`3yU| zk>OHp?tNB2l0XOoThsYn#;$xb8A5vNa}n=&722!5MofMrYba-zV%F|?aR?K5J&8ft z+EPh$Nd=ydn4Dn<Liq#=yHn4ev0f-`2A=4g_%u$#mfrybOsU=cE@<dsUbG*?VL5Q? znD}9_hP7brVvw_3Gn0rO*8Nq030pcSie5;&wWqz)-ksCzYG|zhqC7K&>ArQbv9MU% z*gzC=d<ed?feP_|joq=S6THsjawA|(9hBt7P@M~8C+x|9YP0on*6x+ohzN@KB0bA} zBR-beNN54Q(RY&<7CS}RTuGD*29bQ|i=2eMM><veXll(zEVhK`DwWhFu!sH9S_x+( zD0qU2hWG8Td!98GDn$rSW_FU0vSa5U)b!5+ixJ=w%?zLN<dELrK>n=LvL_fU67AWT zYFBa1FlxuPoM}Tf;pw`%xPAM5+uqs5$*RNd0SLmMPj#w$|32*RLM_Ul&eLrbxleg& zk~J#JbB2C3tKD%Qg_|;<jo_OQ{<Di-7HHbQ0Q$t2$|hj$W+CG_ZbfJCobdbY8&F=i zR<`;<D0*KD=l`}3mUVpmc#EZ`H;%LKE^N2||Dm1DO|0*`2?4x@rKDWT5I0Xbq`7<@ zMbgm!97YM!(sHyqm4|5xjlbxt1t7)tE<!|4qnR!thH}t`b3kVa+}5;bktmX>i$pYo zv7&*JrOM_n7PI3`Fa_kXo~fY!R$AEPpJ&SP#>Ao7k%f(qe3SW1B|^W?_osrh1-{SJ zyWR{#vt5zYknaA~AwrmzP#M}4sEsUexReX*Knj7_RfG>61e?H`OL<&U_vx)&_sOB8 zL^_UJ>{-tm6Vw``mqzrD8O}UbdXmr$606($T;;j!Evxt&_gRv0w*_DH4Yn&pRY_4$ zsND<`N|pAa;>k!vFKtmRqmU%>7aR$ZG>U4G)Ft_X=`Z5MEguTN%{x<y?C6B4uoL?6 zJB^FWI@j@*Pu?Tn^lPUVF)wQJJS3#R<EplI#4pc>7`e#}F+7I}tcgf0h4r1b?!Z+C zztxk02~Us~L4ASI`~8DR)uvA{ISa+!<*EGr;-6USg_eYa%16pXS{o|O+Wn`kP1%o! z$ZC#=;h}g(xGGH3oV{Emb{)<Pm!3~R+cu%u(fprG<jWP}aT==QSuYw-PeqQQhbD$| z?4*qZ0x1bjNBWcoI|0%Y6d3?Y6>hZADbqAJXQualVAq2(xeLyaxqs`|f7)w(ff9a= zUSmTiZ@!pVdKHnu`2|)LWT6WRlHR3YNhhdUcG{O8a1!nm(+8fIHWv^Ne)(oMdqR}B zNjvh=S#4+0n9zt4^P44?48JGwL5?$-v;lQl<JMPgutM%~P6#ggQpZhpbU5JpKJtS$ z5hPRr^AXuXFu)aYrLNCV8LA<u6+L$qSuh@+7L}^k>50U-k4-*`ZF(TLdr4M;23ozb z2<(~nx0%?uRA#pv!i2c%!Qt`yHO>YXOdBshA$l8s>i&Ayb{Hv7=)Z#*vufytmDGP< zi=;@o3vFFE=IS0Wq>7jeh{xC#S`uF&ZeY{jw<>-*qwbRmnSIYx^D<qWm!19NtW4K> ziA=aBRkkDzB;$#RwZ3u+O|>J-d2sl-!rMweeh6K;FHZUL&6)c?Hl)e?Q<iTiY7FtN z9qMnUPe+r<NBDMGH4EpUS26liJI$mtl+a*J!gbrRT#--|dwzl&ln_SXdn9#AfNy)& z7&o1Op7Rkvk;$hf+Rg*v@BoC*{;!b>TEjX7s^0h*MIFdJG>4r6bH^-<k@OtjK=IT5 z*03uJ!GO;2!RR%9J9+WEOiA|Wnf^hmj~o+;*%T!2qnP)IK}&KzYsKqefll7@H+cA{ z)>QeEKK63CZS=G0-VIGdHBm=-s3{ng^%y4*<UH2gzRUL%HZ;~m!XRVRGjZYFI52(A zvKaL}jgpY!u|>REnPNKOw?$WECOZWs4f(8AF%};#f7b#`k;Yp-l1g}X4)B84C+b|d z9q}PJ#7yoZWo|Qu06+E4wvwnkEp_Q1Dg<ws?i+dbiUm$Lymd|b*$K#sCzx<m8$7Q4 zm^^11zEtHPuKI4tJbnIsYMkAQJKRTohFvwdCn2&OmF<-yqi)6b&`^znl(g73;9`i} zX75jtQqAhZfB6zpk_fw$&@=1<^kE2fe|SXS{)%#wHU9Ry?$BE;Jg4v26*wlG;R!y0 zZ2rM?oj(BwYrzJnWbtgZ^-t{aXYS-+Wqg`OC>&ub@KOX@ATU@>p-^KzT@`I)Lr$uQ zAPD1Une6Xj1?AzV-?}faXr$<8pB8pV4){@K;Kj5JG_C{B+?l-N(W`d#1$0jO!lK+Z z(Q(nYVok2Dzc=kzc3B&qgQYYWD(m#ePf)C2jt2)?hLr0X0)fXer;CS2^Txbr%;9cU z{g1EmSx4`i!&r+Qd^V3+%~9_rz`Q@=ln0t^(7C)coP}ct`7uk1S{5O2=s3eCkO7@! z_qy%AVY$>YrB=%f0!+>eeso7wwQs;*+ZVija~71SCqP}_S!|rxv)%^^!!D5y$f-P; zQh6KiBMn*|>GhLiEbGd$WbSN^>R#{V8okJjqekP}(>A^9XOcaGXK2!3+FM7sF=_yF z06Eg#Y3~z1kcx_)yrn2Jb_13E;Lwp87&~Y!`!l0?TqVvBKZ|<M@~<OPWBf|lIReu8 zO3R|;I@W=F&NXY38uuA^Sau@F<9TlLtgQ7HHgi-Ujn=)Ysx`2}%c@}<dzFZhvj+X~ z>Abv#?Y`?Q+Ao5!Fb<Uw{Gt5zXC{Ya_=Y@we4YA{pW=9%Fa8Sn?vk3cg2C+C<}wvc zt-0^dI?z<dZHQN0Lb75@$>Uqgbx>!T{#5F2hL*!d^S%HS9^SdRg;}o`4b^gbhq*eY zp~vd|>Q<TJXtze*kG;!3z7mn5!6+>vf0%0)uUF4VFsiAoX}vCw>GqOd{k*J`39Cs= zYmz(+pT+KdpTxjF-x~tk&CyWF|Jga6Gs0<QN~sCg+Eb5GJ|qaOCW=~@{G(%{NOHfW zHL*1$h_Y7;h~&SzM{1z{ttu!kMfdIt9Bzfbai;y}EX}Ee3bsvwmMwxgo{4NkScl0W z#TiFBTgydZg+Gj>v#bde@%fWd@FU)kwQlL6$L7)ON;U&=BU<>z<kh_a>;ihe=ISEy z10%3&ZwJ%!KF|0OFQ%anko*Wg&7c)isvQz0X}Qc#i@%f<|B-H@tf$_4WT)fh69L;= z^Qk{r#1A`Jm6&O}SYzVb^^Tk`z!OD8c<epQHRVl^U&Z)`Hq6~<X=cf{!TB4Z0--`` zQS2$9t-Wu&{#uTFPsBQ_mKIm{D+fHzL~LpPPLgN8AOG4b+P7_%HlIe0A|_91=Y6i| zu}V+dEoW`2!wWvw@V0Yz_Vwo0R?foCjTQGBUeG3i2*ENd34@|%K`j&bDoe#0F4#qh z>o_ztO?j*8RAa4yxf3b+V2naW7-MzB;q#y|IB@R}k58q4^p@?eUh7(Qdda~>PJYq^ zl$x%oY>203a}S%A1QAE18P!X#37r^0g#}A-<<p#}(Gdv*y%N=JJiYdsA>4Isjjeh& zGqkOF>IJ4skgQzgFiaxI2zFAQKMXV09gDeR6{1uLXem5)bEpsc4F9W;)-}hzaCQqC z#{)=?)Q0%9Dadak*G{a=9z72aJ@GN1zPFK1hD&FmZwS0IGlfiFPZjz`OE<a7D%TxU zJJtZL`=LKE&mhhbFC4AW-w9Mv7S3re{g1$^Vv2sHMC=O~p>#h^G=rUk5p)qiL57pf zt@uC1dqVdlxhM|YJ3yW@7hrfKg<lJCRayE(FKg?)^ar|uCAA=JRyF6go@uIltdYx1 zd40AblS(G1tPG*{0#y(9BS!%?xsEtE;;t^fnP<NKf3+V$+zn|_55#vyJIFNAVP{yS z<Mwid6rs>_-D;VG&4ft##IsdI%D`s>{2ZY`>V4*Ey5}I+>T|}+q>n$8P6xYNa=qMv zb2Nb`2l}m26QzADZ@&Mys;)Nk_I=y#iDdF}B_l88AkPK=rNNsE^27uB_n%A;!-w`E z3R3_aO{J?cUU@M~XX))E-MS9mOW|@^8!$`Yz9h-3H>QO1ALXT7cDCM5V(1BzpW(Z? zIx2qT3H_^3a)Hk$#D1R7Nwc)MT!2ZJyu;p3OaRwk_=xGe;eZkNUq3GeElC~e9_$WT zPwb-T^3%k36kY1<!4eY$ob#*%*t^7iNa==jod)~HD!m+%t^-0yun4G%W^n3C*Lytb z^TF#lRvzFdMcFpUT;&<RRYO~sIbKa<uOo2HS+m_@E@lPYtK<2Vd)3)TYq#Exv8MF9 z?A*kW$6%ycuJ}}0<JB#*t!MEm)X+Nu=x!g7{ci_EKlvC02sl^dsM_h0C1u8&e4A=A z6Vfr+=}pGSAjG#12U(C_=exSHZFcZA<*MUr{eK-5e;z67mbl=-Ucn4>y}ys_zYrs@ zeNOyJ3I8pNV@#U-TY_w6URuBZONZKh(rzN|e}?J*1;Uv(P=8O{6c|BF=*(JhmFe9g zUK2HnivL@<Qlw8@$-gQ;&|=kRr8~T1zDNRBquZB-!B-U5GYIq7W*(#Yf>j_ISV7|L zcHKd~$=U26A+OIa1dM}LU~*Wqq?mpmT3Cw>8Tr$}!L{^T_y+v_JL1lKzCZJ=aQL<R zr(=ir-S?}`_%?-&VL*PjMGcc~*PSVbN(w3-+@W93C7F!>>h$rnJlVqXcsYAsSLSH2 z*;IMECZ`)PSo6+peqR{%=gG7`X`P0ONinG9bA-yB?c=O(e>3Z5<6AN}3yVF{WjPo# zmuFLQD-5y9QSAX}%Fff)Qle1I`MW1H%Fhd#&;;CW0%ud<0uc*SB|ln?^ShN~nbh!N z#e6gET`uo4@nraW%_k~Y!7R+%BTr@b!oX#9?7)+~<GI#S6*y91xknS4>xB(^5H*u{ z-0oxq-!&NAM6zs{@CePEqIS*T`uvazMarB7GA##%BYW);Nr@j47b_?7dc~;XE4!2` zyC@ta2OVrDd*u*qJ7`Km!K)byFI-&4KK>T$t-ThaI{x1lL0=le%_zN#*ovOHl~2n4 zAqxj>>_^3c<V~o@2lh>U_RX|G@$JDgPF|*8TwS+?=L67IRpTrYF70Y5*6_dD5sg%+ zYq%Mt*IjY6i&?X?w2PL|lXnPK1&{n9O6+<oqLHL9Sb%OBUE6%3%^ZYLE;x+5EzB>) zIsO)Udw28kEyQh~3>SBP$yvo3R_vj@ygjoE!#7hh`ArTDBmXz@9xWngKbMa*8at}| zt2i6<GFuLB+qSh1G`G$o^3{)olAc9<n@7DvbrczB56Rx)&7w|Kr9Tv;wOAa0)9x|< z*A+xfj<Up@F?NkESVPcAv%657SrJdXkw=zT<zq$b0TEVKmUp<A0MKl-@h9x9NBXkC z<c8UlG~-f|jx|IQ>Y~y5@acrt3m}K4s>yPDLXE-<&`Mk#S;w_Memb{$_eRg>97c7k z!Q3hWF(3Z$J@rTTD<Z|6<Zm5UFk<~N^MBqMt&$OyhI3%!zM=i44zdUX3>&did-#1} z3zm7<hvStF6plLxDIw2iEoqrOQdF=AQKij=2inaw_A_peCb3Cb%9_S!E(WBM0!}qU z^aIxOqZeDT*7Of@f|a5!_w^*|1P$**=7dyc^{bb-UJU0p6a4BSz9%!r1J(PzAIaIy z3`hGYxa2$sSwVV%n`TFZ3Q;>5PW_z(Z4Wxi=L>PLmxzQX_cQrja`*S%>JIe9+ePrM zSb(Y0Z44!qN()0IkM7T3Sur{(p3hN4Z+?0)vg{`6-h2W;>QZ3c?Oy`lyjqUb!j_C> zDkYMe1n>eZy-{>mwQwnU0}ZKrz@)s`h$#f!M>017{G_p3N6JLx1X&^AEG>WxKITXL zTC!L?{tspSR154)#JHj~F2AMm{O%>N>k2!1>G{xku;k#ZBxfbe`cdlwE_*@Ud0#dF zp-8*7oeKWGD*%My7csE0+}JhP%;pn+dk53l=`Kf?b;Fx&sE30p2^^JeWWO&>$fd4t zwxj}As*a0SCQA_?+Px%FueX@?=l3y(*!`fB>YFqgBAq%bmci!sXO79ki;EB*${BT! zZ`{d-L<UlQg+0^pXR9piwHxS}uRaAdTF>jGU{I=KUMcYEiMj6K)J2zO+;Gcw;<}vA zndi49YNUO831&P&GPgMleOr=bp6p$S=wg|R=irz+ty?DM@E$}{Ym}Cx&9Z|{h#IF7 z#zjssl6i0*IcK8iVpWGab=-9E4!G5%*v?^cVOh{d{K%A8A#KBW<y-oEp~^uGTlHzE z&WgqG_pY^_-oM0^?YXpfF?qZHewfG8-rnYl|6iPYw-UjwgWDJ)y4AgSy+&F-<35;a zHF4f798}fy`5b6R$QwSjhTiw#I^tD#59trerTlX~xq|G*jaxtE89pv}-*n8154Fvw zr-!QjsQXKFk1oVs4eWy~kV$G8%WB1SJW*WbNQFo^UWtTa5$gpdC=;BwZ2f``?G%`J ze}jdcOt(N*+`;#uuA4j84?K|NrFjja(zd|YQ?CQ%$H2zvY#7jtE8kR{;@$eJ(3rO3 z1<uKrnQ4=e!N0d4H4EXQ%oms_RN6t=DyMBU`1}6$fQEm6bJ4i9{Au;9MZNlAfNR)= zplYsp;<G(ZwLpPBL?5AxJvQthd)ylg%PYVc1O~my>HlU)@=aU2gd&ukiLO$V`*vK; zm(vU_WNk&gwZr!&bXD^^>KQSs&9-CVq;Jar(JLgJnITLUZWj@(2h!<s;p^YUd_BI4 z#@aCFapW3#q|=PrWg*O+)foW)%i{m@0!)E+H_)jqZ}7G`W;xZN7fk_rL)#j%n!hun zsqr&vv@5zy^Q*0k`Zt!h|3a9{M@9W$<CH9&yO0t2KB&EP{zTQZWpqUX483oo2C$y} z2##QBz1)p~QI?<I=aQ+LBCW>u`3A>?09*B)X0MAdry8!><gsNr(w}78R)^>h&xR%u z?IO&|Fv4x#NmiO(;Cn644ut!|=>_}!PS(oH1)p8M_rq==2U)U!faj)LYqApyb0mRd z`m(?nX^WzWb7zi%c|=lE2Lil4JY{#<#y!|d{m<hHZ02VYem#ZTqhY9pm24g;5>fwZ zWJ$i6jN<~j@rK*qQA%W+VLGKwa+J^o7-5RzWxc%VO<a>aOqiCJ*OZu$ir(|<%$6es zvO0mqh>Kb>h%zmfpA`9rOV#~V8|S<Yc27)gUh41LY@vz;`>+oiQkBM11G6j}?3wUZ z=wWV&ez)DRI^r>~_qT-(>sT>%l^%p9rbsFc4K*jIO<JY2|G0lwvMyuD7ODK+_@bYS zM=%4Aj!w7RJVZDc#|pmE+O#YIGL9d?lR)biC2=|yl^5)p@Z=x2`@-eS{d&sf@8@bu zR$OMm_42nF_?x9O|6DXPGUC}<-b={x2p0C9Xx&n^>c=lm>+`pl8QuBsqS)K~k5C?- zEVUXR>5<f!7cU-fj^Q}Xj$gHt^!qZ^+^5{?V(+2td?}&Bl9=ZAhfq<?n1?d`Dl(?! zj|<2TP1oBL<kG@TI%2#m2dF@qdZyPs9vYCyF5fs*bSsEy3_?1TC6`SP?TB&x8Yc#! zpJFmQvadRNHjf*hs{=ysZf}q`F&Ko*($dj!Wwfr`z%A&px@l3FcpWn^=P94(dpbJ) z12(^|JapU`uhV`!XSl!dCYsC)q0$b2$pMxz^y?lln{P^Fh~fZ7tb)FI+V3S2Br`v0 z)mVr*Bf7VWBcWc_%Q(^on&81$$m4P~Vw8Rw!h)TTb6OTp%@J2oCBpxR0-G?yWN<A1 zi-dx)29o<JA2A5cDVti<9SY=us}l4lxqd)&MlzO!!(;EUSd@~_a4X7Ku8w+)1+GWw zl`^n@Y&l=>+8B7J-b2eKHrS5$T(`ZN!TUMbDP^6K?czr%H{(IBHyXqn9ObNDw)DIL zVjYLm;%}v?pMa*?G3%En{O~pUdy@KG7V(58VinJv&1UL_nSi6=@>|X#=68XqWp?A* z3bos(K7*@bvyJ_u7Zp9vplCw%LWGN;2B2cmRyc3LOE7%u$BP455bVNnzQe|6Y(+XW zsQX_;X~zgtnUo@`QCiIcztTU24r)ocN;6fFj}Gz4A#pb>kG+X_rsFyeMe8X8=Q?hp zbmvc2t{7Z3&1gvg$?nN3xGNkQ4nwKYXD!smb&gjNcc4qeH_m3V7^xUrrM(S63u7uJ zG_^fM;!nnlYxSZk=F>Wc&uO#tPiXOYnBN)=XkNML;{a><ykABUxx+7;W>OOu&LOjI zCVh4toLmq=f&bO>9Ei#J8tiqb6$g)XTtd3dhar}KLi^!f2^cVte;gvjb2~K0OKD=B z_Fj#tD}ERa&j>Ol#9i-SU;BqbO6!td_BPy{dHMMx8oVh6FEPnWoS-9SX}hY0SuQ@X zy%!aX{z?W3W2{02X<5oyFUVg4)y6V=b&XTmTC8f}tkChHGK0#-!%|ZWg*=onbzG)8 zkoPz5SZHq%46!nSI)c{vZ129CbiF-aC4JZ&jzaC&T+_1ho9r1D2<%||G-m@`c`_IJ z8{Lt5`QV+jwOD38rj}Uvakcy(v-MHeJz)sNL#$T~4F~Wga7dEI$o3KZICU_RcZ868 zgM|EJfpf%JeA&SoRSV66_Gdc}-+Z^Xhkl%`W~WW)p_ap+5wO*6h9+Sp+Iqu332RI2 zOu^DLVn!G{n-G_`nidbM1o8&o5OnY!N+-s@IXO`*4g$)iYlmF!G$PqnQ*EC)^xyM@ zRkUouS03?eJ3$_`!;Ate>X6XztGPg%0?2RN@gU~8)=n|a4lM*}CJYq!rugu>fe{|G z%#1$f(t!cdv8!t|CEb!kYk7PWV&!bZ)=$5nx{--C{!E$U?zY68DKOTHI$|2G9Wz2y zK60`TmaO`DR^5?`(%-rfs>FTU60(|Qnb~dTw21en=Vy)(!}^UY-Torr=Nzmqj>2Fa z{0JouCviO22>UaP^h`-}DqK)Fx<?QfEyus3pWRmQ^Tq{o&~dPSQu*AwTc)U29uMOm z`u^=qtbUaveBjUB%;X<UfCk-&)4E^J;jcctqrcs5Yvu56|IkpSl{i3;Zf1qoTV;D? z!j3`}^9?|g5<%8U!_9zi8VThlfEh6<Gav>T1MRkZx{1}JN>{xODu{c3ARHSsDNoi* z7$tem@<Fj@i#2-~{MtJu`)R0=fvy$w$%*<_gm}pWlx<&3mjqcJYNC=b^W%(L_5@+v z8e<BS9<Kl8M!=zq6f+i`oH+eTawb0>ZM0LZ#$!$gK39f-{Ek8=9lIl?gQQ%${368e zQP}<RD;qf>M?WeW4uWDu<No?uXtMjVO0o^6znF&^3^$;xYT6w3P=;-T0Ga%JTqo-8 z*9V>t{;dk(O2ydGVr3PZd$^^tbI+TUMY2$+n}9!Sw_{u1uW}UB0pVo0YAThD)6Di$ z;x)wPTP!BDwWafl`bzN99=zm%0}=ivA4AQ22FkhL4k<l|TbpsF`4dQEPC|*cZ?t%w zKrd8G^|`!3B)`*>KIw|z1o-2KIu2xE131R0OI$NJq^Z@>mXi$1hliK1@QSji231Yf zIL7c0Wt)9VC#aafyN$WYMpvEcqUTSW+`)K8bY2}nAvno-joO>im9__?IxCTk=?biE z7{(k-QP;+(4%ZyCzq<(8cn;o<d)hji3%sDI%@PS2`0;wn2pY1Fcv(ePa9MA7D5zL{ z;@h1SzR=*Ip$nY9uyL9nHSuHPAn>0v;Hr5>ewv};`1UgT*;EW=`R2zcH%OZJ=jHv; zX~dfqX02mf=eNqLIp)uEh%K#D1+^v<xaeLwumaKl^2KhJ{FM+PUlPp@B#tr<9W-zU zz$lRTHS@E!%Gg(tUXOQ-4i(11BgIQgVo<FJeK84djWNnbvcnM87pS6HG%z?QR6&(f z!JRAf@2YGl(k~@+zO~F8E;qHoPNifqc0K-Kl5tqHTWKP;zifWfk%f{=e<{g-a>f|0 zM&EFCx`Xxvw?F*HetE~bveyygd96ChZKRp?=dT!ltX0x51^*4X+@V0`#^|xKDz!g} z(q&BQr_`@NlLI8WCLf?d^xLUYV=WcTQaRV(eaVyo9h*wHtNoVh_2;{Crva$5Y)<ZX zl`MC6D>Jsz+JhN-YDfnUa;<Xe9M}OK=%qn2*YoLEdw()7D=sHb26!ZnyUKWmZa(3J z2PapTU|3BRjp@5E8%z9)X_@_SqL~AZfW(?eEf;oU$K4Rv$iJP_E*(pZPIeS2`8oEk zw8gO?tbXFv$_0i`%zMo4zOGM|kw5KN+WTgJQYFPgu|Km08arZmXH%FVj9|A2fIB5i zt&djB<O$~?zBy#q#M|0e^tku?$ygU&f8<_-dd=QL8#h&TD<_YiMxZe-?L$w%H}?QS zl+kOrZ-yF+%zyL!FxjuS6q(=5Vm%LV%H1E6Z;#$2%{Pmm@`G5s%5ZBxD8n)JtM@Nf zwUt@UsGv=i!3pe*gWt(S!=kV6QTO-F9jfkBRZo>#VRbg*zstRa!}#>rgZMCM8MM!` zCcm;x!2x1rwJq0pGr&AN_2Ck9y#k!838Acfvh*UZ450o~v&E=I@i+PU$y0zrU?=8F zfZ3i9FE+w(^xudg;?`-hyaGcbeMx52(Erp@_uAv>5(zI=@Qf98Bz@Nz@-l_!R}%4! z!9vfJh^zwDuAZ_N?j1MM5G`OGFQ_^9Nz2cogpt#7!%gh!yJIYW6|0fS<{HN}HvSQ# z0i9frG;}%hVN`i@-4O0q8X{CGQ#PSoC|fQK;U0nqE2dKSkCA?xY1Y+luW@sB2PPfd z$lD_nnqCmFWT!@6%9hu)-D&-7a~R-%iQoCz#iXmP5mnNFT;I_{7Z5Raam(9bf`41` zm)97f&TO1Lou4oMsZOwLy76gyLhBCznYszK9aElg*^|%h0oHrs`H&*e4UBk{uYEqz zp9YP_Q9)0xxZUW2*(+ceT^)&odhCQXa}L~WBrbnqt=&6Mzcm~tfKVSl05h0E-;Kyf zU#{R^(tO4Wv><297LG*n#EVxPH1n!o@n0wMvMveoEF1+^5<%P`vWAFqHfD|x+F~Uc z{o07z4C`7J7}5g=hrtH>b*QCp<&_PRT4vAwvA(3qC`aR3APOwBpQMy@)!_?&wY}Y( zNf~N)agRi#Q%|wF^c9={r+U}781qvjCLXHSfBzMFKRMmRB4IKtI`Zntxz{5CR3i<3 zhyEs_0-~Bey$LA-HdLfb36#0-EzKq3;**ULGFZ+z0}8VGEh<;LD`HhQxEyK2L3F>I z3K!3~Ok{WD*sTwcPCy@wjDu{I9bm8dOK8sjUalWKYyB>tXQn>7_tr_G{+6f@w`5Cy z5i#*_T-YyBVJxPZl+%<q?7887wyR0sizR!i!@*C}q@=|kP-18Cf+QjaYN5?f(eGA@ zr!gc>jM1V0B2%|8P|yH^5eY?kPC;!y?&!oR7Cr|hep{*XvX!FJ`A34;i4mu(3F4_} z@_s{5PNJA}N5_mgJ1I+rXv%4+NM9>%GLgHIIkp}2eq;fLye}`VO-3+#)<@WB%X$sX zQW)~l(}Sf|^sYF&XbiX)?yPj<(}BI_HDW&ZFnMHw@hHBmOFV7gwqIvp8@4+KHf)R! zZ19E9JE<SoMa34if>mVI0c<#{n5!XquX_E+LZMf^R$b+TKu3{=%Q7KWoS>fhA!QG1 zn)$e>feJbaE)KE^*i8GK;>vS2-VRGT;_keOJkEvhn$SAFkE9i{d9U6r^(Tt7QS4w{ z6Td|Mths(){O!0$=1AU?nVgS7{1}wg7qgI|L45ty8x;5uwcq3nZI`MwE%#WToe#D5 zUw7WAa=RdEf7lG+)=ywNc<BqU2r#gBgV!z3RHkGH;Vi;PT2&F~=vLU_c@rw27}p27 zJKYTVcp$pLMn!p$Qgm~XRqpR3kiV(_*xhC3Zc<6cdg?)cm@jKOI9_zQj?UV*TEyd5 zpS-bqC}T;>8JU~q+j{m<H!CYwI*&q3**P@2V)W}8R9?OSL0klgujArVtUliS6p|$X z@(BMzi*3cnabr@M{Evj+I*g^q5L9#n6Cy{Eo^B3AKgFwcGFF>|jS*b<ClCJ|iY;)2 zAd?XT6T>M~++4|D+NGgio5TRFm<?q$FcZ;@lCe@nUqXhBn<|3~z4+rZ8Uq8x99&E- z1HPODPT@Bv&vY`uEMC~)FLbXJ+3G7#btoj!Cm}!VQaX7I!44vchM=^It$>t9GT@wX z#k0|&dgC^}=F1Qm_lxwbI%b{kpz=|Pu<oz224H@-p6f3u6rr3B>qz_a`>V~ZpFe=9 z0}8`Gvgp<}8c$rgLxqX^0^Q9)lUf_EUD9CzsLy9AkYf|bnKRkt)3VKpYc^mNguYh> z=@wZ2P|(oLFuVo~C*8CAe}g=bTTJZs8;h-;zK`&pU_kSzfmv{72qZoW*bYq3$8k_> zhA95BoW1AwEF+8&SRdQv1jy|u>aG4}atW@7-_&AcP70vY3iGhVjaET|uuE#y30AdI zBxy1ad{@<G+rPYS`>>c(`Nv~We3fv)?M#DEVI*Y4?3>kTAxz-O0#IO)zvcwFI#gQB z4<(C#xGwY}-&qmM$venJfJ@riaeA$pv3YlG#s4(5Y8tdgEL~30&{R+=CO{&j8Xc8R z7NOIKSE%Y9iZP!W4s<e_@Y%{Yoz{6LpI1?;A*X4Hzq`|xFVS#uwLm|g&zWYCJOznJ z!bbrS-nSKln*RxZ8-#DT)stqT@BN@;OiDC>esDE--u(=tULT~%>%m_unm>Iu^ME3( z{bhRVfX+H#-a$^2`SDv|Kf;SNt$hrVv!TCSjrY@@y(6A8KXIS$DqodA$Lux$A_~vT zRv^_5Bz%Eye=X3a7z4xi2z9`+(F5iXMPsu~p$`Ms92;F(lUNLjE&V}nP#+uVVfS-E zcCI9ujHX;tO$b~2Z3az;GG_>N*XYx47Q>>R@wKEQn%#<NarJb<u2UT^=4eAqg7jUm z=*LbHmBR15#+mY0?DdwP4!*Z4`<HI73OB%s9ySQ~z>59t-B~YM;TGh6>F|O<%fI1; zdhm@TnVT=ljmv8u^dXnE%~jAJ%Z8gXrTXSH7}WBZi^)}~-;6gV9H*lfzXVSGrZ&Ph z&@C6^wl;ET>An#C?FXKE?!KrQw6~Vyq0OqhVFG}qC8Bhj<AdH#Fy|VkI<S$IEJ{0# z3V74f&q3OzC@5GKYo2x!W3%Fde1bUIoN9alDIpuU36}5MIUpJ?IWkc$kyc<|vK5iH zxqaj~d;yXDiGL*tS*d^1<a5cRZkE(gk@aVo<n+LurrVI4-8XY|M9hrCw?rL(Bg&zm zp@A)+>-rpniU*K;ndPDzd4goSl~?FsE(h<~eqq`1PbYoIcZ*(sc6WNKWKS7^kam*t zVe0lrwl_eoM~x^0_G$f{AMc$%K4g3F_R6oDzRsS3`Oi}QRkrY3d-0sz1XP5f-U)WF z&o(7pa~k0jgp{Fgir;3t>_9-DF|QBb8q8AINfMmv0Cj~YKXb_9D5cjgvSFwtd_V`% zC<d--nKYXq9cDEZZBqB7e;%o^3Ei}N8zh@zPQFQ-%_R|Db-G1KrM;932jN(6JIHFu zETutlIf>7fOvszrUpSz2D!}8Ij2Dd}RYO^;-)K>-@SB{UhF>3%s+LBfxJ|f-O+2A+ zMBul>Emn<t|Ig>~&YQ()+1QUifo=#DcdXs(Z5bH?>w{cPfA(G7|7qm5DHo^@=pb#! zjEIZ<IeWuXLAAHU+GWOFPI;Pb;Si*l&j20jYSC#6>gkPzJM`=V`@!^{Y?nlNvtX`7 z_t;)ODAFtjw@@&8ruEC-bM;mKKc>wxD6TH*(zpgq@Zc8Q-3b<);O_434grF@ySrOx z+}+*XyYa>u-kJHP=KrlaRcFgu&p!JSMw;mu@G!ep!FOV2?dNA&*S%!MPi7Ymo~*uK zQ+5~-8Vom7!gMK${yb7z?iObTg$l!IT&Rj3dtz-=)H+;;9`!y4i1-1XM7ga~1{`)? zV19E^IT(o3ZGAU^T06(lr7Sn68rG^qSfBA<!gz?W)!D<``CIpaVQcRM@OfMRK(OQT z$y<go=)0ULD=e+lY-<R|B9JbtW}C>V?k|=l01X=(`&{3<3H*(r-`65+JU+g<fBu~@ z>m{;O0dIE+lH4;FCT>oB$RA}bODtmo4t0FYs}Sji*31=sAw@?($H&q)fnwl=xdYQ2 z1@`b495mNJIuO+-vXVed{Qas+QxhCO+epS~kXOgvt@j<*WH4XtFs?XwjbBDJcDDW< zwQ0ec$Dz#9b-uk34wGqcG(tbTjWHK|RMo7au9QvD+(!O}kIcL12&_8Q0#mP-Bzyd6 zHe=_@wCK~$)S)#Li#1WZ;GS!<y$2ctICt%+re8`h5L9z?6z<FKJt!y@9hWo~i#>Qa zR(&0j@6F`=(D#FGGP3-aPm!xu9Mjm;ot{ocl}zkjmddwACICYPD4AMcmZtS4OnO<V zh5dXHbLlmfSC+?q=D$7{W}j<{4U<P)TjrsUMZ`oyBpa>@V=Q9?63R_h$tn}c=nNY$ zuDPIw+~M*5Y3sCBEPr6WP8N`xnzvHKt!3I8Xxe?lOGEEHY|yG%@~kg%BO%kAw+D<! zqqY?3Na|(--4Rw0PPu5(;6aM4AiZD;L#cqYEGU%JnhHxo(njbN21-H#NN+&aWCtyG zww;>K=raRAWi0P0g?%7NMDWgGzTP7kPiiY}w9k=f;)1MXURa+OCB&Qv+2}=m8TYPb zRzNRhx~7yL_r&w|g|aw|kNs-y>xO4ta6*mkL6gjH^si*3BkCa=M=lJd-Z<_FTS_cu zn*CWyLnY4mygZt+<@x?Uq3FS&?aAt6KrK>g8$`$WJ33V|f*&5oz-=bj{7(xia!Qvs zU(+w$(*2Iy@kbAF(ia64f?bM@&E?=vhl#s1J#R^Ls6Tt>C7|u5e%1G~nkDUAmCYFE znP<cG-E=M+?jDxy_DmqOU~yh<wyCi@&&HW6IjoCSoP658zx7R^Ey5)VWz00(9z!~Q ziUVPpWmjC{kD;FM>2F7rwK*s{yj~409wi!;gUe|PX6P2IBo%dKmsM7+T+A~P(hk;4 z;wtD1-LIz@XP0fX6)5HhIa_t}qNgPR45#9E=Z0DXT$V7+lxxdV-^j1YC}EdMIQ<t{ ze0jAX9u}f(lALIM*Ow_h)SrzY`TXgOSx^suzOar4D?ZKhg-d)ya`f#;^wi9rXx!Zr zEnNu8Yc`MK`QDF5w<U8ge?4EaHR@eRshCz_b6-V!UB-)Jy3TVa|M=eZVMrdCgKK-+ zR(UL+E}+f&4b%8uwmPPkDXohDr$vv{+k+mXuLN~7zOV$ILQQA<R>rU8^m{l!>-O-1 z#piJne@RO~xf5=?e=)HGcfOQ75zd7Rf{C2yV=u&3l__5Zl8nYePGK?~x!J|05O8R3 zwWllMWBbtITM(2Lg!FrQnHP42fcs)cCq&nEgw^Q{m>_2Mz@c-zuc`XlSxUNxcC|O> zlykCYtycGIq$eym?b!`65=DVidwPkjZg`Rj6W86HThd!tEG-0r%P_LrA1t_oHZEIf zv+UF?|8uedsXuEz&cO=m0*D3``|rP;Np0a`SM;$tO6mzZ{rVObJ{Uy$-@aDkxdxyj ze6aHG4`xQvXOF*+>pzG~6mF=gejnj`!mDZ3nD#C|O=u=5$T@SwK<znzn2{{Ss5?gG zjbb6<+Jo27Im)?jP#}$k3T{TY^4MgB*Z%4ZowQsTypSwIY~+PXgc#{rSR60%&-qrz z?F1-hNn3vNnr)}6vZWX_Pe@l6{sTK>E0YD?oL-5;$TbT^oQ)|xzAZ|6xegBLOsQba zL^HkdiG?s0!6$|EgOms>4qEftfnyO@$zu}0EZ~VtnQgOO1n%>DD(D~8aEYkqn=_C2 zT(=c6iFe>zCFtebT=rXlp5wNC&NW*-p*yB^L@U{N3W<>LusE!0lDWIx{I`9<I$<g% zsBA=d#|Ms1MtkHUrVbM>_mJUzHs95=CrfiPEnkM4sifhwvST#$?Sz@)ow%;pAS54M z{Q0(kwofrQS$tL{^~57J`u=7$(50fM+ZpOPp7E!H;s+^}A{3AjNvSDSW@2CyBD{@G zOJT^1nlDI)dM6dKs6f2rXLrbprIZAc<Ks=NqLM|2?d+CAHRKCLBYX-3LS-x29rqr# z`e*|};fwR3Fgj5U!BHvKb+w)?A7UUX`$x$*E;x!WGFs`m@f5!eHei!nQKGcxTu5-g z>Ck(jCHWStp_bo_xYF6FBh8Yc5I64EEss;zXphr6j9L>>IlZ>|P;O3)>ajnqSFBvS z+-R#0TUerBa-Zi6c(W9QrPSi3qItZ~-!-|k>kn(}`)`M$IHz`Z%QE%q)GK58h!5f% z3ghnp>0|60LN|szdE~`~VtO9qF}=m43hS9QdS#@8wJlG54u8uw2Le~G$yVSU*S4b4 zNCa|<OVn)jn`2EvK-$1#3$}L4g+Qoy^hldS-$j?2>vtia0V{0?Uv1rOEiYk}D%15I zsYpwR9^MK%WPHd!k5tJrxa+NjgP`1)EK?Qx@uZxF&B!kT*kA;p8WeGI_iG{^$Zupy z8E59qB|HS`-%tq4{*)Wcy63E*enS*F?Yy)^{OSi8d4Fvo7HLz2BhkU~OC~6D@W6AO zTh;RKl^TxTZU8$##J@F8cZ-x@4htCuS9VNlifvIzO%7T~l<6bH{Mqo4eYeSV`P|U< z;i`H1djwvyxJsXYR?*Yr<8%BsLh0~YzFNk&m=0db>lIxA+hCu3+db9G<o=TihV0dS z^A9dn1_F<H>gjd(&CtOX8kXx>R+yf_N>>Z^7Tv^W-o(U{)8)HCgp<8VdgbXlBZYY{ z?0izHtB!XS6fFN9kiH_0|I&2qK_r)G8V5rZY5i3H#BXu~@Po~okfF#Ptp9!cAeP|= z;pC>=<K{LHy!yHn73Zf%RIo0}*I6YxzI-n8-*n3|73FKL3Yo!$BGYHhm%5vCE%)$c zB%R+^y_bii3Qg=v%ir1<d9Hh3U9dt1CPIe&%W6!r^Cr$EZTzwNDq)-@<8?(Y2<T>- zKgxVW;Zs)qmaM*ee2U*l@bf~?%*jjm%x|l)z|RHMQBRQc2kUp{>pnE%mV?4ixUkT- zE#b{2uC}DkxBYefZ%QM2E*DbQ@YwJ+I;APCLgJN9+$T{~)SY4&^WaiMuN<;qVQI1P zdWQzCHP-z6SMW>0D6d_T$DJ6<4vJM*x~)3AZsol5qY-u(liBKHElgQySz8j#tvco| zsJ~6G{(DEvi(rnX&6cM;vAbCE=mdvk+U#ItyJVEg-wSen{&R#kZ};9>#@yzx>WU>d z!l@G}yjs6|^25dEiA-Mn2o2d<(w`^)jKvF`X8Q&sS2E@T?TA#XR;=3}ZXScd^Np}{ z@K}q@vf14U@1ynnf>p7bZ)68nQ|gf{18dQ7cQ<~t4-A9V`xX@wNtJFy&)ZUiEeh;2 zTKGxQHc)PSNw~$LQa*HemZ^(bor*HjM)MS-J8D$5UT>Nl%_H>_M)9n>D8xq-oZQUg z=E*m}GLi|+cUT^?z*K$#|A9OITq#O&GVLzWg89?(syWhc0bwY#@-{^mCTd&y+E+cW zEB2k2+8P3)|Fa7a9h+k3eVe|MSKkkiM1~2P{geXv;>9`#Qw;rTy8MbEbe?d86lT{f zV&&l{%oA$IXaMy1RORvJ^v&ZzCRw6g1L4=F;R3qxzLzPS_&-gK&-f??o8B|GQa{)7 zES$MG%uz5s)oaY=@>Q9ugI?RR%)<$-TzHoVr4DCF1$3cZeo|4_%Ry)72ND_8@NETZ z=pPGpN(=oQ@GBkUkv+bg8}sWe3ZhHpwrQ^RpSGycKh=^RPGU5`YTgFyC*U!Z^iJi` z;)*6z^CI1w7M1Y&tHvvioNN(3n#==-Y^@)@AK#i&aemU~7&+Zc%AunB{fcXI&3S+! zfR{fV5GA|ydSqUMo#N137Xs$`ZpRXO5>A_#+9hOIFSmc-SQ4V3U*t-x&F#YnCaQPb z4}S7A!UWZ<h$)F<-4gplln*>cwTH2}FEM*fvkdO3mQ!cU6ajJhlPq<$c+i%t7i3>f zw7sZW_R4o-_7!OCu(E17VWF%TFA8pEoB&~6NM6~n2I{&`+Z658O$p=}{l%58D$6H| zv>8D|K?x-dF(^xn^73n@9Hn!%&<`^YIbTR}2_Y(-R&Uy<$we8|B@)9PSq<DG42hkd zUc-rN@xOA)%#EknrZn;Hpbnw{hPli#Xi;z)&PLkQrjxC$YQ9;OmoEnE2#0q^4S4We zuKx(XamnFP)UzzR&W}U1slj!(sziTxd#u$3_lrlgtLDU|=}UgO^Ev3NjR>^trs(7a z66KapeN%ZP&y*-MpHwKm^S^?kA)osXZ7T2yq5pN%yNP^DZKb{*OB7+O1NJ<8FE0W= zy7U3L$6sp+16(7ZOv98sP`n^@#epcnt`Oj<l%Su;oUcPCf+<ZwAaJ%=?Q#d)85{$D z1F5uSN&Z$IUk;|UhKwFYI@9J})zqxVmK5&_Lt4@9!DtD4DdaU5=cMGo5a#j#^ycWS z5g|#jZPsbGP|4AHPF5pprfPV7i&EzrIcFlp#0cGys61)DV99-GhB86<I6ssZAwq~0 zIq$x}f#ZhJIxj!C4l-Di_eB#sR+>r_N_UTJmD!s%SAZ=L!T+a!`d4!ojz#%EpnvS8 z-IDrbEjN3zor`&2l7F3x4^GFhYz}+G8=C80qP;&^X<L@(yaaioM$j))3s!G^yng0P zbM&j8&Y$UAtb?cZWfiKo2g8*oGrU>;8$x-jZ}86<2;v-;>*f5fD1!ZF<k!(+HpSnR zm5NJC9>5A7sZuaa5%God>#+@)<GgShJe!w$nZNk&UG}4K@YR;A@OVffFIUwr?_ABN z#;M+4t?iE*ccmyJ1t$jFJ>d8z+@d4V-+;a<@w$`VAQO^Pmp?_jw0{KSd-v^+na!01 zol~)x-IWBHx_p!4W6Q#U8Dl?*Q<Zj16ajTBbzXVRY<F)R9pI<&ed*-|FJ)W%fZCIb zs4(ccTyJ)RI$7H9K78!7)ZIDLYB<-Yt>Oo`+ky&Qq-dMR{mO~2zoOzhB(`P`)T&KS z-3I|JB$;zJW@Hgt7;WzO!Sodb_nya@0l*_Udzf=#b{_d3$>eu2!s=FWp4w0AN-fi# zf1b|WIV)^UaFXjkUQN9yo83@0P||As<1|?aDkG>F<5C!KGbJyo84?h@FEXCV+%B58 zRzeSU2qw0j(DvTBCor*4TK07?g1zBqct;m*`ZL`cYuCBGo-)W6ow_#bng>(wZ(WQP z!(jYa=rWqTz$|78_(M&xvQAM@5#LSM4S(<n1}Ivj?U`UeJD#h?)D*<A2;#ZiS3$(X z*t>HD`D`k!LC&G{yoHZ_bA(@MvV%@Ed!MA4*=&@tFI_X&H`kRO-U{a4DyFW;GD5Oy z3Ku6)YWw>2A}mZ}x?AmiqPY)K(94P5sod6H5pN-*73Vd0xb`Sfx$w|Po;25HZL*t~ zKpf<8Y{|@V##`dw@TVx;z)Wyw;~P#ja~t2Hxqm*btAHRF5VOLz!mMXR6MmS-0=YSV z+Uz3t^!8O@otl<AT}{SHi$Q?5Z584ohWr8rY&ZQZh&@<3JazTR89)Yy^22Cod^QS1 z4;vi=*x*IA;ZRQeMQ3n8LGbSqkrd#%3`$2UIXtG+{PL#oD>6n)P$>BD_Kn+tI}12j zJc$dPv6K)Ky**iDhX#q(@yQr=BQQ{IZkClAFI$oM#cv($LT(*R*5G()K|Q4bu(otL zmtX1H(3po)fe_mEad1cGe-CN&Z%z#MK3T(D1TvYP0U;w=;NH&uxA4w>h;@vcqX6Cj z_gzGlb?g;^sq+|WnpNg;+|e1fok7nL(>aMA)T_;$uZ%r@!BjU7rJ001TMTQJgU69E zQ7|?T50D~mi)LeNY*iKcP|#W!p8e+)PF^n7$h0zyZ%4YR9$oGbf+8#vHZXVTvbmix z?Tx?^{W45fQ^;{OM$`PUtgU@O^yT_2R2_)F*yt#&S4vFuEIOYjzmEVswV&B#hN&Rd zMRbu6!p3o=5?Qkjv7vs!J@K+_PkpJ?70<-vg6X2qq`}3Op3r7tnz$I<+O^qt2rv@# zbNYg0=`6$bn~bb)RN1t_;+E*0&r~H6*w|8&Q;J=a?^;LPIJC7|AXp{X9AD9>ebssF zDn^u|P`$zjC6|9{%j3Me1o80fB~UtN&F!>?E&`g97jXhWMGQb-D`OtkZMhB3|KlaZ zQvG8tOJ-MLVwB)k<%rN;;yZ_WA3o1-O^?G2zWj33l7|946nZ@x`97)cWSfswq<(dJ zL)Jy7Qg_xZLc#e6ZN>4C;gqwC$|*o)8ixjLd`K}gj&O}B>MB4DPPtv9bw(T~^8$cG z-ZJ%2A<cC=4N;ZHZ2j~21#}!17ooWfklGF22E2XMx?g;x%!P=rZR5qXRI5z~hkgrc z>5b4B7YWk`&HnuIs|ebwtpjc=@YKc2Z$oqHqcgX^J#x~bbiC8iS_o6TFK?(ooB{g$ z4_X%b$+50%?3%#DyDLM#gxp~o>#SK{cFSGH;TzPVl?+FaZYh(ZqS~*3RO_nR^$=jw zC6XM%fmj0W$_*AxZXS9jhWCpV8?St>z`V)%*UO-GJUcfNAF`u}x`24>`Q+X%X$e8* zC@?<HJgwOTOSd!hhhB2@rYeH>5)Efi8oEE@(Kk-s>{O?}9(Of4KL1whvho<F#Y=0% zel*^{BK@dJb!e852oc@fb5p>dN&cu=4^%5P|D;pdljSEc<hh&8)EPrr!_AY)vqlo@ zDMM$@KfQjo$S(4U=}dL%4LO+~IWm5$3YSmpJ|JJ{_)Pu84;j&Q4Ty)gVY;XFAKRG^ zyg(tn!CR1-^PLOInU~C1t}I!eGaoFd8&}$!9L&#AZJD%@Q)C=GC^i-sPRiDilc7b3 zl-Z-)|A(^OC+Fz3v(yD_WZ>@Z<?dFfPQa6&!<DI3*+@SIlVsTw*Ob32Kw#jzl!aS@ zqK0|6+7wL=yfIyh!atgj;v#IVh|^^Q;GP&rElOY!rUw^j?)L7%E<153{8#!}&7HG` z3BI-b7z5jqFEQvyu;g}O62-a|rn_TgU9Vkf4buIQUoV)<#x#V8h(VGTagnLO5u`{C zdJVlE@7zOW?PCx9Uk;ddgc9V))?;|Cs8s}1-<j(Fzy~|w5-A#_g>*B^_8G?O$qJxp z(b0O{KUJ$-Sa)e;eO~Z>@4PJ0Tt7!0*Og^-v?a3IU&fFYs%I~#FunJ?W=Olsipho4 zI^W3q-(KGZ`t9WxejgA_e9f<$p%v{q)q(sJi2N^dX5;gVUo`9H)#z)lnHF7jyw_&7 zCUpL7A+!v@cy-*KWOw32@(B+HntI%4+JV1=%q3WuNZ<agZE>=OEJWEX0eNN-Rz7eH z-a0`oPMmD1q4UGLRH>VD=Zn@&6B+<)e>8W!T=pt)gSSMvj#V%IXrQs4XsGP~)xCA7 zr;gWjeJ1&3S<U?Q8bD|30|1e|g^mYWkPu0AgER0ua6$Pj^%ZwOhTvDms{xo`Hb>sh z&q!ks!hQMv*i!E#pH)lAQT+#axoP9qp<wr;&#kLDE1sPHB$=MNI6A9Mk;X94h)-4g zGE<_OQm8iPc9oacO=)j_;u^kt%w%T$2*WYa*y%deM~@x;JXn+)3=+o7%x?|%#R5EQ zLM{KE!$%e%Y%em*3pRQAgV3R3^s)LkIw>2F^0KV@*Addqocaf8H|p7G*G<1>KG1gm z+w?Z7?VQ!U&6?)aFdfp9tG%hQVdPeJ(trPtLc4o%F=G9jXd&cNo~%M^SZ!!czi`cm z5uZcfNC+c$Y80^KKwCl~Us$RRIyF?ctgdQiLtMrvt=h9mE|<@#DajfO9{)1xA+KR3 zQg7{GKhvkBImQCza*6MjJ%$P_`hpNZcto<%wHDP<P(<_N1YdGO&KR$4zSUeCyQbM@ zdn!^~1&k_+2s7Yr4k9q5-*yTQMY##gkC*K##EErLV*Pk3W{~HHZEG|p1HJ1`pVIMc z%rd4d^}a)34<=hNT{uCkz!ojG6)pu`@TL$DeP2mVmsxhEX^mUsMJcT{`2ZTc1%q0h zZ+>Iv3JMUp4>G`=YcYJhUU>6=b9%qO5@4v17jS=*f5`3}IA)`|F%Csg%^@V&`)YX2 zx39G+2YKE(q`R}SieH2YSu2OO_aq6OA?C2?%KMoY0bD{;`}_8P(IfMkL?wrsc?<gG zDzRY)TPO)9t91d8b-D7j&Cn}@O(4>+CN1Hq1xvq;d6{49ORNP@;tVh*UbJJ)CWlM$ zIeO!xcUCdLDkI<hvw$q<VayZYNztL|L<7V*(5IgMdw=!$%D=4(?|FfcDg`J+*M|oa zC#vp?L8JXAe?g_;3C2lixAcYg+r{>5(VOmsx7VK#51zM2?PhB5NBcC-XV-{+@OqwP z7InWJy(!|czga)}$YCI>W5-)AxT=o9%Hjk2mC>HplZu?u58?d|hkonjWXid98OurJ zOQHh_he_-=kpoA1hsPK-xFiT+ynxqCJ0Q|!=3M&=xjtj)TMzKx1pI76qjLU#n4R+H zE(8R3HM(wZC0{Oku3-u7=2k=Q2sqOB3$wm3KMpl`^+vWf`TlwX9eR9tXTJX|6{*G| zOGHq5{=??#!>wFRb9nEGjj@<AH1Wqp+DNLDBGQ&AnxHS73x}(Vi{q3}abR7Y*%Ksf zt!L|d`tLhj#EIltv)0xNP`xEr_CvS#dE=gsr(n!vc7Ff5ZO}lsaFONq)>UeNY|GPx zn=Jnp5gp{)n!JxwTYs<`;X!-2K|^CCt`~lJyqFfSX0X`oMO)d#l|+62S^P2C)uj2! zQH#!n7gN@(<#DOG2u6<(3PV$Ea~cX19MwZmb(xYY&==femwVrY%YBP+VFpS)nC}mn zw=z!T0~!%@3k!=h`VS{~r}WE?u2!vDYH9oHS*;l0*_vGJt-I0aoUA94%mFJce18L@ z7gafQSd10BUb1p;4K^Q9k965)r{J0r+1YA2i4BQoCObj!GRQdZrjRdDcx(j$KWk1G z`yNUtMwYwZVs}u%s8<;f{4RX#XNp!F#0*R(_eXOQMEW{ONz_!2x8T_>&dSL42@~~( zGY@bhKXxr`3!T8?qY*6S-l{VzX7`ENv^7B$!4S1rg_-mThnHt+vjrybNb`?|!QQ|E zj%mP@r-q82?m50gs&1;TU`w>pxI9EW;B`ZasIC{1cDi#Z4V?f7I5qiW5es7{IJP4p zK^i){U~fkq6`~`+_i$_3xB8*FpZha1n}N#oeqOI2xFsB$$LP0X#>U6f>(5BE-g*7s zscz-`ZEw;GdSn*#xmRaSYu6jBsvG1d1m-)!l4zI-SuvvjLYLZ{T~2oyQYc=YYuvvV zz<Y^RzkWZ4m7;`NnusLh$$uhIkuC`0xGgww(C6hPd~IvY!UzUTKy(<R@}(6KD)1=& z{RQAk5|62CkDqh;|My3d8Gyk_KtVBYZatJyZd>eXqTQdh!i{enUd;PzVctzP&AN%Y zy_Ms#v+p(4gx=Km60&<1s{X=gV8ot*Zh8ZEIi{nW7K8aWcdzQ_ox!-Je33bK`!LSM z3Rj<w(Ks=$yC~8U%5ObakU5_{csNdw=ymme*S`4l-m3*vdr*wl$m3FhhfbFgs22;~ z!HElPbw7KR>-|Rr`3W>hr@QGeQXI=1h{&)G{=!6bx1wds$e9$GoaT6*;x)bQtFD?B z7ID|LvRi@<$uEUpt1xxXSK9k2&T+91T>B&Htg-_x2fIAnGQ~z8roVvfbg?oTz7OcN z6#nxvaLy<0f7O1kioMv1A+M0V^AfNn3-ZUQ>vEX4^W*akq@0!?7?*RDsV$v9_4Hhg zRjE8r<8x)lj2}7O*VC_0w-zt<d0uFvil`I4JE;@cMo1FG4tQ%idxm`ZG)jf@{nqor zSy1OFDOq_t?|hvaFEV)B_B6)V-Lfi#GSX3<2;R4IF-Hn{#?q0ERL8xJL@u_4dAbRo zb`Mdc>yzj~e)&gq>}pCs>O&qydN}*17rm|0SJrssb#2`!mEm+at0AJ0DF)@x5Wep+ z^>^r)ccX^?zFtP9{hMqjZR@IfuiuXL@CP;`w)4uup!e?Ad;fq@Z{0fCn5*h!U$VH* zyDrP1sn))v#K6I97eCKzZW%KTW23z(mR3p?&E90J^ACHfHqr;{Q2K(ei^r`yY$n(V z0V~)+_s4O6D0Zplm^qnKSs*>RwLIP2Fo}-zN4TP8W*AE+OuG{!Cb}5BmszMizQnpk zQi#zM0onrOv|DcV3cchZz|FTEKpE3=Q=eSoktHL4;n;tw><B3V^^fYSK!xiLFiOX; ze-5FaZou0Xa1_vNg?#3PBICcgZBsl=0DGSM28h*<E&bmOZQH1>X8GLH_K8ZmvLc=9 z5|YB`SU5qVazDA&uc)XYL*e42*ZVJfl2zuE07u34jJg)pFMA=y-lTd4f6lY>`|muu z!D3&gh1Q&|`#&-<d)D;FelRZn)~~gXdeoxIUIQkMC?ZO?2LQ-WiVwB;DwqD>#>IP$ zz<fr=DUpsn<u^2EtLZ<qtVfS=KRDafeI=iJIs0Gg-)*r#&C(`j`Y-JCa;gH_T-eMm zEspeGnZ-`kO)*<&1EQJ~3oe2j`-{|7FFl@k$uw?u7dM{$-zgzqCN$X^^!yLAyLI|Q zq1+yT7cH;BAIR09j4GcqH;Y8Q+T+wsEFVBY_+)o-AscUnZX(uy2ItWmKqyVs{zblc z@oK4$U+rUIVpxSllxP{P^#NQ+(<S<}HTbx3&x+}Pd^bMX>-D?RBIk=jVYT<|C_6)X zNar9vuXmDj-3D^JJ8ni_q&)cN-AAMQ)~=GOHnE>Mt3cw`&j7`Q8NLu&l5hklBq%5^ z1{`n5TG)=D%e6r3pBMxMBqVurML#VdMMV+HixRfj()GH8sM1ZOsM0CE2^k2W#ZHZ; zvmIYJPi=wpysNj7uG+7eH|o^V*-5g{;QMbm6uS)j?QI<5ba_2)U?jYosuWl?cPv7w z&yk>|mVYp7!MN#ZYp!TCje1u>C^?`uu3FILxy;JQHm`>2RHqrF=MOIPlv#ThOcghB z@aAh8*dtffu6ZU2#SY(YvfW;}IZySkVr%FF%m|)LlYJgmCg8A?2}K)52O_s^Ma-FR zx+OuPdpq9wPAH|SMttx=yoP*>j+u^x?C^`TAe;5VeXV0D{=_N~`#R>lFu?3}&2Lkq zbw6v^j&+HS{hFq*GeHg_Ph@o8l8jyGB$R+nr7s=ABzX!US%vjh^11WOR1J<;rE?2M zhQ1fv#D7rZ*w{rSO5MmdOrdC<n{Bi*htIXG09WJF&aF*!=f@o_v^ss&*;$qWs?Oyh zSn#h;cSrvaRa3R0H8^WRU_0{B>MZ=ogcR<NoAHS5klaLUniO@cNEl=!UoEjf)tx8* z5<btalAu!lsYdDIlE=KS1$}X5R<ZFXRC>Sh7G>FV+iNp)psgKgc~fZ9`gk2VSfYbY zw+8X@t^tXB+xEv{BnM@YsrEjMDJEp2-R;4sw@<C~VB3d+8N1d>Q)QOA;3PFqp`|NS zejkB&H{Opv33BvbGbO~uXIHHraz2aY9`|d~MOYm|M@xLiw^l_&>Pma21R<asCK9#7 zBjLn<j$b2nPOvc@_Iuk5tBKTxrgNr^59yv75I2YFFcLldjlyr=vP1@m2mNel9)>M2 z@;JDFhb{z8u_!B$6~>%9oDMDh`(25%q0=3dEswMx0*>5D$8)1}l|{0}Lo(%U2X*iL zHO4lA_`|Kp$9tDYUaQZD+S*l{zswBr^!Wwn4F?zCrr?9)&AT^4M#M)-(G=`iear$H z66Py-jg+&u!Z|(Bwh~hfSn$fa(^j>fx}L@38CwR}8G=F5BC7j?s<a_uwP=l%OAPS{ z*AEW)O??Bz-j!#N-nT3l2GPbs_?1+G;^z=6p?7!{A!}`S2$bMEW#+c9s;9UV1H?}F zb~Zx;)SugB*FOGfWB(94)7LZpTGX%t(@`>)wS*XbFTMkoLsO|c_NcKSjEFw$Va(x| z$Jj(SQbf({Xk4DDtvD`U#QxIIaRqztA8Vc)s#|BkJwOVW%n3-UE?Z7}`D&<$QJ=;P zD!?{na*R5c2$Q6FGU%wt24yfUC0*U7u(I=3@(DC$r%8eyOy6bgeE@bvKiEw@L*d@R z${4vm>LE4hh#lN*Xk+j0q=*-0>m_oL1!pH<kF5uMBhV3?#Q9r1){s&&SXqsqHCn{* zH~s*M-kwNX>u=cAVV0(z4n|BQ&%K9CJAM+bs(Y&Y-QCh$(~EXz8^LeW*W4&-5r{m7 z7}@FkP1OCt*_mQP<w>t<=p&ZN1lT<mmOedP1XTtkNwkjFU+NES%l0|BATOZinvf>U z&|Bi%pWRVKNU;i+@HE=@nWv|5{eSH~l?n{6qPu1!e+K)!22k||)8p^|vaS~L3uuBt zRlU{2rf)wWN4mfHQo^2@=9OrUS9w$IxT`v>UN|lox}4PN81K!gSU-nHucDHUuky_{ z(pE^rG}sj)d2J%*r>a{I>Po<ysK{o|j_emcVbIkYx7#q5LO<0X2d5uR_S8eu&4+n} zp6(>$Eh%+*66C&{f`rZ=i}<cwq^(=?L`!DtE%d%L(Zx)Q;HcIGEgWTi?cJt-cm~~` zWlk58%jLf(IOJT6F!-pV-SlrqBYWSo`J{04k(Y~>Gc~&lgQoo%j~t@@nT-T$Oa8ka z;3uYvb+nI{2i{wRDX88)H}Ja=+fu;{ivI;HQzQvclP0aFCN38diMhT~1E@L!N9c+) z6+xv{CQU#R5J+#hA*?0~W@Br`<S*(4#ZHTQ8RJ+Tw!D=@<XijcewLnBw@rz1{BI3s z{{y>_Ct3(L&vx-7a+pNC;#9QDWQOxTS{a!(MO%pwyz~y7O98tBC!MKX$|`UBob#=Y z!EKeykPG^ILtjG@+C*fn#<-Fj=B880@)c`_E1=->uZ^(jQk(Nk4hnm*RBvoc2ZgZh zj~h`0g{EoCYfse6r3iug(F^|M6^NDfo2{Bv_aJ?=ti6uV+bgg`$Hm*gFaa1nH-0=- zVe8TbgQ{76dS1VpdS*PE61;NWm`NX3nV3+XoLCc|SmZ|eldg1uWXOm`3G1HWPl5}; zUf)Rj?JI&V`iMZC#aSQiUIKd*{zAjw@%u<JU7N3x?bmCp`PpG_OYtb{>dIeJl(c=n zW+6uedPS7d#27A5>W@Kuv~+44gRX*%m(GeZ-OFiSQUR(QL>qmbzjQ5&&R_XoA{xHd zZBfq!=f8dXa!ym~O^uihJ^0w(%6PG)x|<dDR?<6`zHA@sb*Y(@+bYx7_u`|R<2&OY zq(YYE@L8YoT{&3YDOZ#Kej`a&5r&m!#=VqkCrb5;7H=>Qt5tK>AH}ljX{RWN{F?VV zU?jR!M9m6qGNuTU*s#ku@GX<Cs_*+}&KDNP_%)-wzctPq%9$rSWzbnjZ*`BhL!SB? zxJKx6{rFvv0Tk6&N~e)`wgNU_U75Nys?-msEX)f*YEB^{gvwU?+xD%5QPyY)o<o|f zcYpO`PIv=_(&uUmd{Mb+d9gVl3tCAiyg4VJD|ej?k?Trz{Tgf!`2Im6vpk}ykJ}UI z#1x`2qnYJ>q*A)HN>z{y-_-*GGF6Y(Qdx&<ANDd`XTGKPgX|fut+DEa*d4jOjS^{U zs!H;z5+InsoZYR~Xjw-0TNY{zSz+DBhhg`onP80Ugi$VqNk^?^-QwBngVgR>nwhY$ zQiVg0<e)FnStiXvw_32`UWl0ac%<0uW;oh0frB;$P9Mi<3&kFCUeNg~Ta644r+)>H zi!N_Z#atr;JKfv9muvK-o1pM^t}@1SYUAMHpgvfz{?RSvO4PR@G<HUgj)v+eEK)8@ zbmLDg=>UMF3yu;9E60EMvwJ7gf6&H?TN5C2#k06&RWg(a0t!RiAjvk0Qm1${&JFDu z|7@x{zR?cqu=Oya*V#KTJ^caaqA?PEEzk0=)>+OWU!s_s?4Yw*+x8_l;dhK>x-Ico z-RrW`*iT8w-w#d>t<uuBlIe3bnVTY4e8`+F8rDf{f?q6m^^nus2-nHFhhLLv;>S#w zBmq}&qLkR;g?z;PI_U0xn^afWlJnpb8bXj>)jbO?c=4bR*(?)$<NH&fBC8tO*7jsv zG0~d+AxYrIVkpdoI#7CZF}BT;F|o11m4!x>wN%hYW83hY2)&(w6ktSb7ISZ`Z`(ZG zS#F{LlJcfTv#b~~Rqvc`e16>W5P63*V@Bpy*&SR9f^c$WjlyQ0Z#b4EsesQgBR}jA zYSI41T8YGRu98;%d-Q*H0Z^TIVA29kkhtJJjh=x<YaGPJ!S4!o-mWdbwB;jNn|be! zcf~K;Al{)*@y0wk^jm$2VEW)4$!|P<GVA@mkumGa#1cL_Gs2^8X11u%O>%QC?>PN5 zK%wo>8#F~fpaJT#WE^9uOZ$=pdWWgo;kd?vVMH-LpbXq~>v;#0VkvCSv#K{~&>I*q z@q`&K_}tlI)bg9<#_rd+7(SQ`cb&v`F*HOsn_B}8uvDqOZ~$sl5Hi2nUx6|95A9IO zN2liJ1yAN`_lgPW&DPNF`F9{i*R+6&*i}2Bl)8`8bY>M5lNM1VDTr~uU`L8YhwCiZ zl~t^YibkX)0t4rqzN&gvh7>CBA$I;7Il<oGxB4pv#h)Zft70}r8|C52{VpFya!sx2 zxt#lZ;=|iOeFP@+cmvoB?4E{0y}QTO|N5&)mG-NU9qs;YZX}QU7OxCWq`{GxLQdLo z{|L6%_Zlv?Oa>c1#X;-woA6&2UYZIduKms1*(3eKq)F_Xhvn0kMZ6F00IKeY5w-Mb zq;^q*B1xLqu!9{M&K6H*+i?=W{sE8RN?l}a4j{A6pt5T9OE=U*s%K#<0=nm)9hM`S z7i*afan&S_>awzijEw{&w=CYUdb5MIubC6?Y~`Pc^g6b!m`VOi3fv`N2<lo>BkM9? zzl6>@A99+XFB=d1E@rZGkAYgaboxa1OrHo3w#ke1<)~I<GIWk7)|Pp#3+Si#U20G` z{zK*dhW!gHN}^O{j9=`q#c+^8u9>?@w4_g@zqiUXqm4j(PfnYO9l=83BIt6czrJe2 zF~lBcf^ubjzXAM}&i%Wgxh&Z>W12ZNmZssi`26_zPk|^<iz`ryt8DB8D5}c?^+9BI z%Q&NP-Yi;G_pTY2i6~lQAAZF78_=<{3Z&?qezm&%m!;b*h}E}b{!Ks9;+=nM-grVP z+q=1IMG7z~^(Ratqa*dm(G*q9iK*2P{p^giq5WR6^z52i57ywg9$k}xxlo&Y=(AxU zSkg0?)p~KX-BmHIEG8rn&Q}RfRavp|kkhQm$n|3|>;2nsgoeL6=*|T1@G(=O?yv?M zUaolBrf6V+x$>z4*UhSH_7E>Z+XcL#;b?#xi-40rye;KW(cT5?U9+qx_1lY=_AKtg z5-sCPlC`Huj{`emqKw0zdAVr>OCj)O6C;0J2Las$abssCk{I#&xMP8h@h#{3-|r}F zN}nf)Jrwk!A~U;D7B+RGCJ-m~<+}@HIMZ58(YL(F0%N&=N9U!$5*fv8IL9&_8NTuq z7u)^%(}GCp;BN4`Jny5I?!g<MuWLYOj;AYvDdtLr36V6zehY+oQ_B5-SZ>Yv6}3z8 zn`;C2{X;F^iW?bZKsx!0{-Sfe#*RrcpEWYnFO?3XmH<RUf*5lVUpKl>2qQo}BV603 zYH^^Q#6K&L6Ig+%L;k@bt%w)$WAF$&yT89R+Tc6_W=s`7=gA8?SCGGO5OjG|=vcLa zJvdf+JTtX?`<Vzr7lK12h2|cI@nPI0x8%(_@(pXr$h>%Pkq{9*QL|)q$iG<2$7$A| zu^Z%nDskrjn}=9(r5$qvM6Ps@+mREAk~sKuGwE$k&{<{wo~V1T;Ro9b32JB#Ou(kg ztMUmX78x$}$=<;sGfjZ^7c@~iV#>m0=2k?!ly{k%m*`~eU?09Qv_`wxuZ|K-eoMw5 znVS2Wnn(H&l_8)_d-fMy*JfYT!*c=41iCQ(p3W()9RSOF^UIXqK_4$O2h{icBptT1 z$|x)=nh}%b1Krt2xLqsKdC;&aStC@O_MzSbBs%~(_9u1w+&I-Wn5#cUE|1BD%Pd?? zsl&duRQF-4@|%UzDQxYJH#ri8i*Y4LWi}|AF9P1gA-h2pHg5WkFOVKl9tb$<$F4(_ z`yZm8cfXamH841-l~>#$I{1}z)kW2U@zh`~MdWdM|C)ZYDb_wG=jU<HpIxFxs2k0c z&H6xUWp~n;znwCUh$n&NJxFe0Q#r@S$M1s~Z?5C>l8JMp4CN#%!~18OHuY%6l08dh z8Hi(}^w`l?g{!1Wx+A&w5&%ALed31XUp%2ULg@h-2Yum0*`FM*f~UKpwl_Xh0O4Y0 z80-*%%@$mNuvnivV=5lpex3DAKQuhmY_o5HvN^~Fn|;(fJ}lPNW5b<|@78X40Xthp z(%*gqi<Nd!3og{%=GyyZxZXqX<CbKbUm)zkPcIdaJChD;VtHs{Wm;tU?c(oWGICDH z++Uz8rF?2Cd}$MW#@~A^s;P=Ct}G38EI(f4+@IHE&z#0ux<lEEi0ys?ZT+I$8`1n( z((~&E0=gB(16@Xggxv_$9BD=R^YCZ@?_v<sZ|k)p+>!G3M}_v08aJMSa^1e4AL+eQ z<myVQ3{Y8}uFI*Rtz-_D=<QCa@-M1o{`kQhmy%EVo|SUam|V4W31A%;n0DVwd;&h| z=7U!>DvlxyX*eS!C6~<INN%BIzi%lG92I$eokyGZ=-~^>EgAm~#b;1DHJ`T0ui|<8 zvi;515qjk#@aPbDvtQ`!6Vvsq(c=-S!~L#h`TEs-0q|xDsqLn21W928`SXQV<5`;d z&3j`;-rfm)?h`{ggVa-x5*+g_nWBV`0td_bjTekZc+s3Ms+Efi1^gj&<>9b}ckp9` zzx>JS_t@^jO`pqL_d)VxeuQGpKTP=Pu5I8uUeD&!atJ|(GvTOlXHg`{Gv0Wa$nMHh zTD}4n;<wif86giZ$UUDEDwrysZ!|_XXS=lmq}P$2u`9?C`l@zRb@_&gEMS}uCz)WX zLgUTJCTS?iQ?=}6+!-tKt-4<4(60l~B4L4DmI3pI*r_gkiq$)<eGoCKUStq=DJ=}v z7IOt<F`BXEd!n5<I>KTWlEChAE~dAuFx%Vs0T&2BGLp2ans{}Eu@L7camtr(XuIm| zzlhgeJJ3@rH)!2;R#RhYbPe*30#87jC4PMt7;%Nk3Hiy+ddBx@=2nL)xZ)!rRP+cx zB0e(D*gCGd-WVM2^VcE<VU$%#i?vhpPFOIOw_5qo&Q-;eY_)^veQXlr?3dIE#v_{F z$Ay-6K-Z&Mc0@}~2C32^-}Tm$ms1aKXIsSq|JZW}a}VeFbnHqgoT)T}dl5t-0nFR6 zl*mx=(jlBuv7fz07_(;@&%j-j=8qLhA{<3yD<uwA{y|Q@v>n0WP#UCDkZx@rTdh_< zbpLM+-`S(kNWR+xbdQskTaM+u-sM^tbQ;(k1hQKjO5_rA#SXZZ=VG5607sJ4@)GpR zNMH?HjU@1i8roYW7h(0tJqPi^{Y4{|r>ApSx{z2<b#h%FyY4c8qxTmh*44<SApeKG ze-N}?NGH3gX1iC)hvLA^;$RB}i6j-`X)OP%Sp{nCfbT+~T+ctmpJP_iXs@ob4~<KZ z{ukDOrNW?004o!LODpUW7h%MHq!8N8WKapbZ~aUkMJ^d9&XciNI3wSmzi+v_JcbyU z{?=uY!oW~*<LF;H&9?}VW?M$kZUK{$(^n@4@#-opM@F~jE6FV1%atNW_cU7ml5S>_ zxv?Q$-*506cg#HTdQ8d}nK)9g5UQt#z*B$ea7wgn3=k;ZdR4=fiV%s~A{!7r@9nEn zFXXL<vps{P|HBKBAblu{x0ZTb8ZAcFA{cA^kb592QDd9CjXGF&HN^sWPvi(6E2tgP zh+mfK^T@6q2b-%I7)DNA??&{mdT^)EM#l_fL6suK+6txjly-v*2bJCVbT!*ray9O1 zHBVmuHS$i=rl;wVr~kmxy4PSgd*M{i6fgVgu0+_12O5>h(lcaNJ5p|OMXd2H$v<(d zoWC@rpDwm}(dO9Bw74`~JUnrhFPx74nVAc-ILQ6GqM_r+gM$mr*?O^&JQ>0B<H-Ps z3+i<S9Xqk=^_Rn(3#|(pLH56lKUpX-_dhQynb;1_w^1+zdoT0M_+*D0g0=?nE3=bo z`i<&I(AjTZJN~BQB6`Pi_(ciE6K!lL^zQgM{R@@0AfDl!e2_7P@1AZByB`tW6TB^L z?SNorWr2F2f>d#!UlcP@z!4T6&LOJWUQb6fwhrtHnl%3+hKkjSzk+phu1s@841e)E zVyE`B)uZaoLP_y>2V(SP`M2?ZIriyi%d6*#RS-OVYS5+yPnIhvyUz#dv5~!FD>Pm; zA>rlOtFsx=N8`Zhf30I9mR3f)w}kOLnHr}03B7|@&kS@0?_j@W_stBw1qoWB!I38c zH>GBhjs#@Xp_jObVh$^-!!+6*7zwj9<a5u|2U3juUD8X-xUYEhTDwA4YAY{6M8-Kq zKI_^L7AO)>of{6xzsi=h4zHyvDpqk)`xxFjbUWcicgI(H>uQHgyJ$IchdbN{4RP## z?Cxy+`yM>}4CgH10+!*@E@emCU|nD=zj9iI%}$CAeZQb>{u9kZH+q8pdW%^mSP%Ep z@Gs#CEIi!JUUnhgB6(A<yIJ&^J^V#xY>wgay291bnQa=wlCjEnt-$F6F2Z-<G;A*e z+yexYyU(WXCruw^UWPq+yl2Y+Kip->i0$f*GT5=Z)U08>5b^MN@U-xhe&KKf4$=6B z8H_^93Hs=f*Sr!U0{Run<!%HkjF<K~JXsj+reGCu$C(scE*X-b%}8V0R!>`I%!U=~ z-D$|C(JPF&lwA+_N_#fqF9mf5k<pqNLToks)eHPk`VHzFs5Fh$QJOy~yIy1FhfAbR zm9(*Es4K*&?3a$zuy9lnqlTL=MP_G&Ba9t04Bxonj7y)HTUxWacAfh8!Yz;Ie~*eG zt1e<6)bx!*yYe#VGu7g-2{MNCG5MT@?jf9RD8O;7UC#c3JJDR0FEHTJ^VJ&N$}s*e z$0<q>K$vG-_t-z7(|^kq@HVEc!skC*jze_A<mFQXqKKDbKGm{1SP?_1^~;#feW_wu z%CQs8`L`S!3VzzV^en_LC$CgVf4m0&#`e!qaMYZ)Ze`TFbR=Mh|Mdci03-T|(MfOj zRAZ2h@$R-2R_1tXxO7!AVO?^HpedNFmz<yk?k-Iic&4t#2#YDqOrgNKhXns`RkcFj z`nmXG>a2G8MYCj8kmF9SM}-DLp@nu_&&R{x{;epa1$!GW0_t19!vtVvPX~o1!l?So zM$)spMOZhAFF+xL0)>S;B1@CW6KQIAXFb<<Sk4u}dlQwBW@5XC&oF-~=9R0vDKJeW z_0nAyn_Fvl)IJn4>;F8VK&<YKwy(;%UP!Pb@-bVVC#>m+8A;p$hxRm$uT*%u{J%cC z@9#%@|EO(&(k#{*k4ZdE<89)~jL}HMje0^%o0JIY8+z7*<c*ALvcl8V(N;Tj><h4~ zT6Iq-<jCiau~D#L1y#RfV%=l*%b<|4HaW3!I3+9~{pLWrx&N(GM}nzQ28fdy1!8%` zc%v#QqBSv$L@pK)3A^6l0H``6MmBk_IFihiy54M)egYj={PF2-XO9O8riH>7g&^4v zAN-l5EuWxwu)_z~aD5+W)=M52WJ=8$v5|3SlzRhmCc%)uBjW6`O$SOXeofA;x4iIZ ziU8EpqN@0zuW7X4dl(JQ&O2uTj5aMuWxo9xG;|yZImOg0s&Xzt83NXH;Xg-bm38q^ zI4mpi=<e<l^h|C17GDb5JV`O$4ipRZ8hMqb-A67U*tpATg5AD(EYS?`4lUW+OJWnz z3Z$lc`_c^RsA_#fTH$hvJ3ouXhGl7MJx^TL+AlFV@$l6Yv~Eo?hTPBzr3XyMniJo3 z6dk72azrXDUG<KMs@XHz4>6GoFWpn=yiC_A^RSfvrP+L@s(CBn0^zZKGyDN-F|BMo zk(8}9_1?tZ<>`gGWk*JJ7kI*LF-GalVc@&ji`(_`@}m-a!c|KZsw!Dw{^5eeVXiW* zvxEI#EC57kVZ^1yHw7@#%Mj>AU5TYMP0&?2atYcvtjm+vMcfyQmfg3MKZ-3*3`SI) zTlI3RC+|D)iC)HK%b4(a7>0x(%4ElEKbWiCO2!j=Rk|4d?2b{`BAFC;kY5hl%VItP z1gV$gg*NB=BPH#k4}eO(*_mSz;<5xwVZ?5PmEfAJy+~@a_0P)WH6yo!Hs|4=@=njz zSl!o&tTBAA?$>MtQCMXMrrq+~fi~)L`dj8L0pN2~VCS*YJF^=lrIJXE{9n9E*2pcg zCYeWeDAjhv|HeDhj?<)wXR`&)b2&m$XOC9a@vT&S0T)2=YtJ!vK-l^fe7r0EpZW`^ zf5`Q?NC`7o6agg#a$qeoOpG03;d*ubf%n}sb}W@#jbMsAzQ2OX=<V=IfCtC*ci6$9 z$_K{#h&m{5H9JD#XI|usUDg(&vOU>^KYaF%aYAI6oHWB03+X@TKb?9xIn^(@I~tBk zcfQ|}N{-J#=_6M%#GHjR74R4Ff>B6z+%#y>iVz%_v69V6N<w%`q7o9ixC!K*;o<U2 zs?iIwgj(5n=?mA*U(OiZ-(Ifni@!Om25e5MwgCfAx7N3{aJkoXPg$R}tQRi$1!M%7 zc3z^3apg!75j<>a(3pfUcT`^2?=2(>Lm9kjJ)AuS&3|V+lp&Z9{dnFEwSL5X38D!o z|CiKIZNIm6?)Ghy5Uage9$Kf4c}n{yWL=_7%WE^FwDW)SHGbX06Q}7b`S0lb3A4Qk z{$Hv-{(Vq<0<_(twOyc*jP2pPeNNUS0TyAo12ZZu{D$eL-4co!nx|$@YxBy7BS0N) za9B&L1o!-aPFsXOe}i<R!g5xB8LCK8b2_R0C)NZ1(z35riwO9%)tcg_E?2ikXETDS zcPr*9(o5Jdn3YcbP`K-9Viodha;_It6RNPTpjKh2+PWzKhj-O{MB2UWQMli0+Y2rS z26NWr7<FY?lsu$h5l)hZKbM{I*B(X^Nv2^7I3;ApX_<18k@0LmgLK!5R}#j2E}7b) zM2p&=G5WqNEV<F%Y?#dlB>#+md34P}ZTayn3&)g-T`z@8y<S5sw6Rrv>xSY-k;0u6 zU*&G>*dsc6#6<^l6v}tz)wZ?ErNqR-iGBIPnDeX=Aaj5wILYxT>aug8Mox`JGg+Hv z=dt%V@`c?F_|r5XD5!O}#8rH<Ss?9!`+Y=Q<I%K}wyPsu9Um8uEA4gDR+@^c<(_C) z&VdO-{iu~Zu+q#q;kJ_Bn7s3<UDksXoG=4lHRC5M6N3t1Jd@fCGKqq<&hkpgxLw>) z-@jz~%dp#m<+{vTFS!r?O@@I<L`z93H{8x{o47}?|L0${pS}3(haJSrVSQP+{2XCq zE~>@<0<u6&zc+i5*GypMwbq!0B?jJGQOK8TO3)cBh+N>|S>C+%L;xYzNs*S8T7Hp% zuYM`!qg6#V?RiHg4(Ne$&}<}u-5dS8NmEYQ*2T!XO+e9el0#7U78$rVFqhkWO8_&6 z$NI5zZxP97VtMqQnP_wd^0Jcn^ot$VujLjHn^wTU4gq+HuP&^w*>}QLwmit&c|{BR z%BTL^DJf)4eo&*T9YUc9p-)%LC02R6Eyv<`W8Ne?VBd1|3{OlRg;;d8R*GZ{?B5UK ztlH|)(diV84{jiDW-88MmF-g)V>({jMaMLH17B~mYF;jwHU^PP+r4dSlaRkleOO-@ zK$S^^)-0?6s@9oFQ-Lb_XSC-JgQ?DQDOb2MbL0S?o;<Wo6?NPBdNQJWXAUKtw{2T@ z@D#7ip1}O&zgRbzjp%aEA`R~8@Hn4jb>xN6rW4Ie^)Boz^(98-MutXCWrv%gY!fF^ zv&k+DvP}SV*)dcc{2H$bFJbiV;#9GrHo<!42`Zz$!E55Hh`j8J5$TK4(C41PP?(Iq zAPIDhRChHy@70!wTre0-Oc>CODUrSL_f(QyR8Cr6F{yb)L?xv2%f6Es&CbQ~sAGOZ z=<1ERy2Q5aY>M`(0DG-cOzq^)Ln(B+2$OTtj%K!elEt(Y6>UD(q4WH?tMlbaN)`Fk z19nPS73I&TH($gw?qd4Z0y`C)E3gpR*}|zmix~K9e!U$7xo425$#zRf(-EKCG_a2t zsJQNwVlF$di$(01G}?X5Cocy3ckUovd@VL&MU{z<zAa?w55=g|)(FlylRa6oAds#d zrQEQFcKB2^?|hZd*8R;aX$f4A_nd@lpDDP=9fy9HwUv}@U1AN9=`*!aQ19bf$&>A~ z=^(4`!54B+?~9MPh!O*QwfZ-{YH;)vo?n^*__6reyO|oQxGJ!|dQUWK_Mc$Y!g)@Y zEr-S{pHA{AVs*abC34rEw^4P#>bx*pK&LmLluJ=*tZi4OQnM#EnOg^TziQ7=hp;Y$ zaoQRdlbb|B#V|&D*bi9eQ|q9O!QBYI#>3Zt+I^gos%m<53~F<ct8|T=^@RZ(DEC5m z36e;)*)dd~_!VPm{TOcn9ox0zwYx?$uxrRAYlm5*2G{}n&Qpmzd*{ta#UgYy@={e% zUn8Bl%u&a~zH)C~zzXcuCIP!jeTlAgCqpBr)F^H=R$tL)I@Ph8z@$f)6N@yYAG(}a zD)xU?li=OOsq=3OtXtKeKF2NcUUZo!P@P<hz913w)op51xkOCQ4uSOV+MXfd9SQdK zU{7o^pZ|4$LE#<9C@kea-)uy0G_~n>EJiIN->&E{0`>_b-LCliRI3!DH(2=Mjdl#} zr*Jx)HKLOY0g#rh$7r-Ttfx|%+B~d}9p}T)0dj^$$mrBggu6^YWs#0;8wy#p);fm1 z_jD3RpYF`gC)_SQ*hwYaHWgNHv3^|oSUR0ncI4qvvbvBSk(j>YfZf)QKYpLb?$brA zPO?ALcYpX1+|)!TOvbux70s?p$fVa_Sn=fo_9%aEmxKlP`6WO1px*?EL^$DEY&^Bb z%>RBW=KXI9DXX-0Qd7pd^Y+3(`gD_X!y2~NFMpQt=4bij<TvfX5xV)~HfS!=&`5`6 ztZlHaQ(0j>G!kY18Fr8^6_}aoTg1IV7r3Zi1{RBjch~MDF{hkO?>tFWaVC>KsMT@q z$%oGlW1zpB^1^IZe!PjT6!FH#o2h(g1S@~OvatTc?qmFRFoy4+xd(qw=LarFl~3J8 zCWg3IaHPVsf#jY(F9FrD??5O9vo)#b%dLl)GNc#3)GMU4KI-&U1$GyYU?vB{(p-Qd z4yIQ!x?lZCot6{F&)PoC>mPDWhr^Vq)cm;TIAHazx5f-+0f#EQSXU6h1)U6|1<Y-z zL~1tbsgC&#P2z4W`nt)vNGxIefS$ZEV>C+nrN1j9dUPhp+nu~pYqYG+U}W>rGu%Hu zk`*;85T?pJ%sLf9snUV(Q^=€)P`bPULi3}I_KuneS*6OPQ7b^BG$Mcp&c4|zQ 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Â|MG?ZogBo@r#1Ea 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ŵ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 literal 0 HcmV?d00001 diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip new file mode 100644 index 0000000000000000000000000000000000000000..67376cc4e7c23771f151564544f4d925008d679f GIT binary patch literal 74486 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%0ASu<KQA3OH_+rn`Jo_hm6 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 literal 0 HcmV?d00001 diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip new file mode 100644 index 0000000000000000000000000000000000000000..09d7a9b189c0e32b92b5012a561884c8682a25b1 GIT binary patch literal 355610 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%0ASu<KQA3OH_+rn`Jo_hm6 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�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 S2L|H1X?+)2@qI4{$o~TYww>Jo literal 0 HcmV?d00001 diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip new file mode 100644 index 0000000000000000000000000000000000000000..fa2ef42be74503dd7fecbf34fbb62eb770b00f0b GIT binary patch literal 289625 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≺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 literal 0 HcmV?d00001 diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api-soapui-project.xml b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api-soapui-project.xml index 845969a7c7..06d4050130 100644 --- a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api-soapui-project.xml +++ b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api-soapui-project.xml @@ -719,7 +719,7 @@ Validate XPlanGML or XPlanArchive</con:description> </con:method> </con:resource> </con:interface> - <con:testSuite id="9472cb1c-cefe-473d-ae66-d51e65516d44" name="XPlanValidatorAPI TestSuite"> + <con:testSuite id="9472cb1c-cefe-473d-ae66-d51e65516d44" name="XPlanValidatorAPI v1 TestSuite"> <con:description>TestSuite generated for REST Service [XPlanValidatorAPI]</con:description> <con:settings/> <con:runType>SEQUENTIAL</con:runType> @@ -4023,7 +4023,240 @@ assert json.version != null</scriptText> </con:testCase> <con:properties/> </con:testSuite> - <con:testSuite id="fbcc2ddf-cf69-4842-a5b4-79a8897bd4d4" name="Profiles TestSuite"> + <con:testSuite id="917c7101-374a-400f-a157-7696a5c2508d" name="Workflow v1 TestSuite"> + <con:description>Worflow-TestSuite für die API version 2</con:description> + <con:settings/> + <con:runType>SEQUENTIAL</con:runType> + <con:testCase id="5fbd433d-6196-4e85-80b6-10fe0bb9365e" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat)</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlan" id="6e279b2a-b7ad-4d2a-9f90-ffd52e5ac9a9"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/xvalidator/api/v1/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.name"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan004_6-0.png")].name</path> + <content>[BPlan004_6-0.png]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.status"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan004_6-0.png")].status</path> + <content>[AVAILABLE]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.crsStatus"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan004_6-0.png")].crsStatus</path> + <content>[MISSING]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.imageFormatStatus"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan004_6-0.png")].imageFormatStatus</path> + <content>[SUPPORTED]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-validator-api/plans/BPlan004_6-0.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlanWithMissingPNG" id="3b944394-cfd1-423b-9dcd-cfea3137a80a"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlanWithMissingPNG" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/xvalidator/api/v1/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.name"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan004_6-0.png")].name</path> + <content>[BPlan004_6-0.png]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.status"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan004_6-0.png")].status</path> + <content>[MISSING]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlanWithWrongCRS" id="6467149f-2b5b-4a22-bf57-38f048d9a5fe"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlanWithWrongCRS" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/xvalidator/api/v1/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.name"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan006_6-0.tiff")].name</path> + <content>[BPlan006_6-0.tiff]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.status"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan006_6-0.tiff")].status</path> + <content>[AVAILABLE]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.crsStatus"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan006_6-0.tiff")].crsStatus</path> + <content>[UNSUPPORTED]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="ea1e9aa3-fbc6-40ca-aa79-d819f45463e0" name="externalReferencesResult.imageFormatStatus"> + <con:configuration> + <path>$.externalReferencesResult[?(@.name == "BPlan006_6-0.tiff")].imageFormatStatus</path> + <content>[SUPPORTED]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlanWithNotSupportedFormatExpectError415" id="c0ce4281-f762-40e5-90b7-61670fafc371"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlanWithNotSupportedFormatExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/xvalidator/api/v1/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>415</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:properties/> + </con:testSuite> + <con:testSuite id="fbcc2ddf-cf69-4842-a5b4-79a8897bd4d4" name="Profiles v1 TestSuite"> <con:settings/> <con:runType>SEQUENTIAL</con:runType> <con:testCase id="5effa7bd-cd10-40e2-9190-cb3d8fa2025b" failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/info TestCase" searchProperties="true"> @@ -4226,12 +4459,12 @@ assert json.version != null</scriptText> </con:property> </con:properties> </con:testSuite> - <con:testSuite id="fa8cd647-1575-4886-b599-51ecc10029ea" name="XPlanValidatorAPIv2 TestSuite"> - <con:description>TestSuite für XPlanValidatorAPI version 2.</con:description> + <con:testSuite id="fa8cd647-1575-4886-b599-51ecc10029ea" name="XPlanValidatorAPI v2 TestSuite"> + <con:description>TestSuite für XPlanValidatorAPI version 2</con:description> <con:settings/> <con:runType>SEQUENTIAL</con:runType> <con:testCase id="8ba01cec-aea7-4882-b1b0-8d9e4647f2ef" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/ TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/"-Pfad.</con:description> + <con:description>Tests für den "/"-Pfad</con:description> <con:settings/> <con:testStep type="httprequest" name="GET XX X.X XX openAPI" id="f77d6853-198d-4e77-ad18-72cbf741adde"> <con:settings/> @@ -4382,6 +4615,15 @@ assert json.version != null</scriptText> <regEx>2.*</regEx> </con:configuration> </con:assertion> + <con:assertion type="JsonPath Existence Match" id="83b62a19-de48-47c5-a3f3-73df0c915dc0" name="ValidationReport"> + <con:configuration> + <path>$.components.schemas.ValidationReport</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -4424,7 +4666,7 @@ assert json.version != null</scriptText> <con:properties/> </con:testCase> <con:testCase id="ea696cef-8d32-45ec-9cbf-65b2c190cfb7" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/info TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/info"-Pfad.</con:description> + <con:description>Tests für den "/info"-Pfad</con:description> <con:settings/> <con:testStep type="httprequest" name="GET XX X.X XX showConfig" id="2b3bc64c-6c0f-4af1-87d0-b486e93aeccc"> <con:settings/> @@ -4509,7 +4751,7 @@ assert json.version != null</scriptText> <con:properties/> </con:testCase> <con:testCase id="6bb3bcfc-8b50-4786-ab61-966e4b29dfb6" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/validate TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/validate"-Pfad.</con:description> + <con:description>Tests für den "/validate"-Pfad</con:description> <con:settings/> <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlan" id="12aa68bf-5824-4401-bde6-18535f69548a"> <con:settings/> @@ -4655,7 +4897,7 @@ assert json.version != null</scriptText> <con:sourceType>Response</con:sourceType> <con:sourceStep>POST BP 6.0.2 XX mismatchingContentTypeAndFileType</con:sourceStep> <con:sourcePath>$.statusLink.href</con:sourcePath> - <con:targetType>hrefStatus2</con:targetType> + <con:targetType>hrefStatusMismatchingTypes</con:targetType> <con:targetStep>#TestSuite#</con:targetStep> <con:type>JSONPATH</con:type> <con:targetTransferType>JSONPATH</con:targetTransferType> @@ -4804,7 +5046,7 @@ assert json.version != null</scriptText> <con:properties/> </con:testCase> <con:testCase id="1ac50e96-08c6-4f7f-b28c-b0c00453a683" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="/status/{uuid} TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Tests für den "/status/{uuid}"-Pfad.</con:description> + <con:description>Tests für den "/status/{uuid}"-Pfad</con:description> <con:settings/> <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="f6b97694-bf15-4a53-8b89-d854f9bd8680"> <con:settings/> @@ -4995,13 +5237,13 @@ testRunner.testCase.setPropertyValue( "reportPdf", hrefPdf )</script> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus2" id="3bef223a-0426-4f62-8d72-85dc566f33fb"> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatusMismatchingTypes" id="3bef223a-0426-4f62-8d72-85dc566f33fb"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU pollStatus2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU pollStatusMismatchingTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus2}</con:endpoint> + <con:endpoint>${#TestSuite#hrefStatusMismatchingTypes}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> <con:configuration> @@ -5039,12 +5281,12 @@ testRunner.testCase.setPropertyValue( "reportPdf", hrefPdf )</script> <con:parameters/> </con:config> </con:testStep> - <con:testStep type="groovy" name="pollStatus2" id="8ca0b5da-0bd9-44d8-aa10-5ee9285b7b34"> + <con:testStep type="groovy" name="pollStatusMismatchingTypes" id="8ca0b5da-0bd9-44d8-aa10-5ee9285b7b34"> <con:settings/> <con:config> <script>import groovy.json.JsonSlurper -def testStepName = "GET BP 6.0.2 sU pollStatus2" +def testStepName = "GET BP 6.0.2 sU pollStatusMismatchingTypes" def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") def json = new JsonSlurper().parseText(response) @@ -5068,7 +5310,7 @@ if( ++context.loopIndex < 20 && json.status != "VALIDATION_FAILED" ){ <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> </con:settings> - <con:endpoint>${#TestSuite#hrefStatus2}</con:endpoint> + <con:endpoint>${#TestSuite#hrefStatusMismatchingTypes}</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> <con:configuration> @@ -5167,7 +5409,7 @@ if( ++context.loopIndex < 20 && json.status != "VALIDATION_FAILED" ){ <con:parameters/> </con:config> </con:testStep> - <con:testStep type="transfer" name="Cleanup Properties" id="b656d8db-6a71-40ff-baac-78f023b0205e"> + <con:testStep type="transfer" name="CleanUp Properties" id="b656d8db-6a71-40ff-baac-78f023b0205e"> <con:settings/> <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> @@ -5203,8 +5445,8 @@ if( ++context.loopIndex < 20 && json.status != "VALIDATION_FAILED" ){ </con:property> </con:properties> </con:testCase> - <con:testCase id="9fd4d5d4-1361-4668-adc4-d026000695b0" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Cleanup Properties" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:description>Gesetzte Properties werden wieder geleert.</con:description> + <con:testCase id="9fd4d5d4-1361-4668-adc4-d026000695b0" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="CleanUp Properties" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>Gesetzte Properties werden wieder geleert</con:description> <con:settings/> <con:testStep type="transfer" name="Property Transfer" id="50852410-a76f-4519-9e59-556d1486eb93"> <con:settings/> @@ -5218,11 +5460,11 @@ if( ++context.loopIndex < 20 && json.status != "VALIDATION_FAILED" ){ <con:upgraded>true</con:upgraded> </con:transfers> <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" disabled="false" entitize="false" ignoreEmpty="false" transferChildNodes="false" transferToAll="false" useXQuery="false"> - <con:name>hrefStatus2</con:name> + <con:name>hrefStatusMismatchingTypes</con:name> <con:sourceType>empty</con:sourceType> <con:sourceStep>#TestCase#</con:sourceStep> <con:sourcePath xsi:nil="true"/> - <con:targetType>hrefStatus2</con:targetType> + <con:targetType>hrefStatusMismatchingTypes</con:targetType> <con:targetStep>#TestSuite#</con:targetStep> <con:targetPath xsi:nil="true"/> <con:type>XPATH</con:type> @@ -5244,11 +5486,1361 @@ if( ++context.loopIndex < 20 && json.status != "VALIDATION_FAILED" ){ <con:value/> </con:property> <con:property> - <con:name>hrefStatus2</con:name> + <con:name>hrefStatusMismatchingTypes</con:name> <con:value/> </con:property> </con:properties> </con:testSuite> + <con:testSuite id="8dfdc53c-57e2-43b8-9b28-7719af1e0486" name="Workflow v2 TestSuite"> + <con:description>Worflow-TestSuite für die API version 2</con:description> + <con:settings/> + <con:runType>SEQUENTIAL</con:runType> + <con:testCase id="2e12a2b8-97d5-453a-9013-0fef0768e2b8" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat)</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlan" id="ba1f9de2-0f2b-4cf7-96a7-e619c0348310"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/api/v2/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a14750a4-b6ee-40eb-b83b-6905d92e26ed" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BPlan004_6-0.zip</con:contentId> + <con:url>${projectDir}/xplan-validator-api/plans/BPlan004_6-0.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 XX validatePlan Property Transfer" id="da5d6efe-aacd-49fc-9257-e1a048c3b579"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 XX validatePlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="d778a6d5-2baa-479e-b888-b10561f83fb6"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatus" id="b45f4717-f1aa-4d28-a9c3-a4c9dfee58a5"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatus" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 20 && json.status != "VALIDATION_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 20) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="3af238b0-a5df-4e59-b686-73681e073b18"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c47301d5-d89e-4a17-8345-4329bf534b29" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[0]"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[1]"> + <con:configuration> + <path>$.links[1].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="transferUrls" id="6cc91dc4-3ffc-41e0-af64-d850b98f8cc9"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def response = testRunner.testCase.getTestStepByName("GET BP 6.0.2 sU retrieveStatus").getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +def hrefJson = json.links.find { it.type == "application/json" }.href +def hrefPdf = json.links.find { it.type == "application/pdf" }.href + +testRunner.testCase.setPropertyValue( "reportJson", hrefJson ) +testRunner.testCase.setPropertyValue( "reportPdf", hrefPdf )</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReportJson" id="d25ec578-3f39-447d-a7d3-29b807050c2c" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReportJson" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#reportJson}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReportPdf" id="343048c3-5487-44ed-8929-cd78f9bcfad0" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReportPdf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#reportPdf}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlanWithNotSupportedFormatExpectError415" id="262e71e3-f67d-4a5b-990a-85a6b9386a15"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlanWithNotSupportedFormatExpectError415" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/api/v2/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>415</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_NotSupportedFormatJPEG.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="CleanUp Properties" id="a51a8305-62a8-4755-9788-70e042323e18"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>reportJson</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>reportJson</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>reportPdf</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>reportPdf</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>reportJson</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>reportPdf</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + </con:properties> + </con:testCase> + <con:testCase id="16d14cbe-3147-49ef-b6bb-72048dd3e6d2" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation missing PNG TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat), wenn die Rasterdatei im XPlanArchiv fehlt</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlan" id="d52d1b99-6718-483b-bd85-b8d92bedcf1f"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/api/v2/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a14750a4-b6ee-40eb-b83b-6905d92e26ed" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan004_6-0_MissingPNG.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 XX validatePlan Property Transfer" id="41c101e3-9b78-4773-9afa-6ece076af9f4"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 XX validatePlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="aa06c4cc-565d-4734-9c25-37ecfeba9ff6"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatus" id="c58ef3b6-14e5-4b07-99a6-43a277359a0a"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatus" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 20 && json.status != "VALIDATION_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 20) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="19cfb596-4385-4b93-bc11-b6e0db42c72e"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c47301d5-d89e-4a17-8345-4329bf534b29" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[0]"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[1]"> + <con:configuration> + <path>$.links[1].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="transferUrls" id="fad1c8e9-5999-48fb-9447-4ae5537a896d"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def response = testRunner.testCase.getTestStepByName("GET BP 6.0.2 sU retrieveStatus").getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +def hrefJson = json.links.find { it.type == "application/json" }.href +def hrefPdf = json.links.find { it.type == "application/pdf" }.href + +testRunner.testCase.setPropertyValue( "reportJson", hrefJson ) +testRunner.testCase.setPropertyValue( "reportPdf", hrefPdf )</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReportJson" id="d6e14efe-c31b-4bff-ab09-1c34ce324bb8" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReportJson" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#reportJson}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReportPdf" id="473c7b3e-29ad-48e4-bcad-2bd315e41add" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReportPdf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#reportPdf}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="CleanUp Properties" id="21692de8-ada8-4504-a8eb-66c78d205573"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>reportJson</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>reportJson</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>reportPdf</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>reportPdf</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>reportJson</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>reportPdf</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + </con:properties> + </con:testCase> + <con:testCase id="cb8262cf-45f7-4d41-9192-0ddba2c7575a" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Raster evaluation wrong CRS TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:description>TestCase für die Validierung von Rasterdaten (CRS und Bildformat), wenn ein falsches CRS in den Rasterdaten gesetzt ist</con:description> + <con:settings/> + <con:testStep type="httprequest" name="POST BP 6.0.2 XX validatePlan" id="5dc15a8b-ce26-44f0-bc04-9ca0c9234809"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 XX validatePlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/api/v2/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a14750a4-b6ee-40eb-b83b-6905d92e26ed" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-manager-api/plans/BPlan006_6-0_WrongCRSInTIFF4326.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 XX validatePlan Property Transfer" id="7ef6fa32-d6c1-4627-9bed-84b1782f4b1c"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 XX validatePlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="9d3cf8b9-16e9-4105-9cf0-dfc923b9db05"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatus" id="39705c61-7c2d-471f-841a-e422491a3416"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatus" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 20 && json.status != "VALIDATION_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 20) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="8308fdc5-5dbb-434b-8f38-7915e4b6c0ff"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c47301d5-d89e-4a17-8345-4329bf534b29" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[0]"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[1]"> + <con:configuration> + <path>$.links[1].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="transferUrls" id="7b7786e0-e57c-46e8-90f4-782b592da882"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def response = testRunner.testCase.getTestStepByName("GET BP 6.0.2 sU retrieveStatus").getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +def hrefJson = json.links.find { it.type == "application/json" }.href +def hrefPdf = json.links.find { it.type == "application/pdf" }.href + +testRunner.testCase.setPropertyValue( "reportJson", hrefJson ) +testRunner.testCase.setPropertyValue( "reportPdf", hrefPdf )</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReportJson" id="d3b9c445-a0e5-4a07-b2f3-39910147df20" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReportJson" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#reportJson}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReportPdf" id="3fc6fbff-9fc7-4cfe-928e-33f80c5f38da" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReportPdf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#reportPdf}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="CleanUp Properties" id="16c372a3-6efa-4f2b-ad15-7a6e7439d61a"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>reportJson</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>reportJson</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>reportPdf</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>reportPdf</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>reportJson</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + <con:property> + <con:name>reportPdf</con:name> + <con:value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + </con:property> + </con:properties> + </con:testCase> + <con:testCase id="1bfd6579-e83c-4ac3-9a98-65312a4c42bd" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Profiles TestCase" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="GET XX X.X XX showConfig" id="5d393073-1844-4d96-a38f-c8df26b0ec65"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="70d479ab-c344-411e-a79f-167f3f70c0a9" name="GET XX X.X XX showConfig" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/api/v2/info</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="0cc46e02-cf98-4922-b9a0-70051141ecfd" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="04006561-4031-47bd-9cd2-fb1215076b2d" name="version"> + <con:configuration> + <path>$.version</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="GroovyScriptAssertion" id="81fc7cf2-d170-45a8-ba3f-26d3c82a741a" name="versionNotNull"> + <con:configuration> + <scriptText>import groovy.json.JsonSlurper + + json = new JsonSlurper().parseText(messageExchange.response.responseContent) + assert !(json.isEmpty()) + + assert json.version != null</scriptText> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="d1a2a299-a358-4dcb-b245-b5ce405449b0" name="supportedXPlanGmlVersions"> + <con:configuration> + <path>$.supportedXPlanGmlVersions</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="GET XX X.X XX showConfig Property Transfer" id="83eb9a99-b65a-4854-97bf-452c04432b92"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>profile</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>GET XX X.X XX showConfig</con:sourceStep> + <con:sourcePath>$.profiles[0]</con:sourcePath> + <con:targetType>profile</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="POST BP 6.0.2 pf validatePlan" id="33d789c3-4ae1-4572-933e-c4194716e00e"> + <con:settings/> + <con:config method="POST" xsi:type="con:HttpRequest" id="aa5ee7a4-a529-48ac-ad3a-eb3064f75a0f" name="POST BP 6.0.2 pf validatePlan" postQueryString="false" mediaType="application/octet-stream" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlValidatorApi}/xplan-validator-api/api/v2/validate</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="047b0265-8e8e-45c2-b4d6-1c67ce5c4a7c" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="a14750a4-b6ee-40eb-b83b-6905d92e26ed" name="uuidExists"> + <con:configuration> + <path>$.uuid</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="statusLinkExists"> + <con:configuration> + <path>$.statusLink</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="cca268ea-ed94-467c-9fee-33c8215bf396" name="hrefExists"> + <con:configuration> + <path>$.statusLink.href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:attachment> + <con:name>BP_6.0.2_valide.zip</con:name> + <con:contentType>application/octet-stream</con:contentType> + <con:contentId>BP_6.0.2_valide.zip</con:contentId> + <con:url>${projectDir}/xplan-validator-api/plans/BP_6.0.2_valide.zip</con:url> + <con:id>292d515d-99cd-4aac-99f1-c05d1d4a5851</con:id> + </con:attachment> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>profiles</con:name> + <con:value>${#TestCase#profile}</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="POST BP 6.0.2 pf validatePlan Property Transfer" id="e2e94f63-7dac-4a47-896b-340a9f1accbd"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>Response</con:sourceType> + <con:sourceStep>POST BP 6.0.2 pf validatePlan</con:sourceStep> + <con:sourcePath>$.statusLink.href</con:sourcePath> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:type>JSONPATH</con:type> + <con:targetTransferType>JSONPATH</con:targetTransferType> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU pollStatus" id="cd24cbac-1439-4305-849e-ac23de9de2fa"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU pollStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="statusExists"> + <con:configuration> + <path>$.status</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="9c15ee46-6bc7-4cb2-bca6-6439ca6fdd4f" name="linksExists"> + <con:configuration> + <path>$.links</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="pollStatus" id="6e1486d3-8ccd-4992-a813-ab082a4000d3"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def testStepName = "GET BP 6.0.2 sU pollStatus" +def response = testRunner.testCase.getTestStepByName(testStepName).getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +if( context.loopIndex == null ) + context.loopIndex = 0 + +if( ++context.loopIndex < 20 && json.status != "VALIDATION_FINISHED" ){ + sleep(1000) + testRunner.gotoStepByName(testStepName) +} else if (context.loopIndex == 20) { + context.loopIndex = null + assert(false) +} else { + context.loopIndex = null +}</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 sU retrieveStatus" id="d14ec70e-8753-42cb-b530-9ae90a6ed324"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 sU retrieveStatus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/json" xmlns="http://eviware.com/soapui/config"/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#hrefStatus}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="ae2299b3-55a5-4171-b298-0c0fbf353fbb" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c47301d5-d89e-4a17-8345-4329bf534b29" name="status"> + <con:configuration> + <path>$.status</path> + <content>VALIDATION_FINISHED</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[0]"> + <con:configuration> + <path>$.links[0].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath RegEx Match" id="79d9689a-c545-4733-bf8d-4b8da83f53a3" name="link[1]"> + <con:configuration> + <path>$.links[1].href</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + <regEx>(.*).json|(.*).pdf</regEx> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="groovy" name="transferUrl" id="b3d5dfe6-4ac7-4abb-bf5c-1d28214b479c"> + <con:settings/> + <con:config> + <script>import groovy.json.JsonSlurper + +def response = testRunner.testCase.getTestStepByName("GET BP 6.0.2 sU retrieveStatus").getPropertyValue("Response") +def json = new JsonSlurper().parseText(response) + +def href = json.links.find { it.type == "application/json" }.href + +testRunner.testCase.setPropertyValue( "report", href )</script> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="GET BP 6.0.2 XX retrieveReport" id="66128a72-ae53-42f0-a542-7f818b216ed0" disabled="true"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="80a79ed8-fcfd-4604-9220-f7c650063d0c" name="GET BP 6.0.2 XX retrieveReport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#TestCase#report}</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="84472359-c38c-468b-b28a-f03bbd016181" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:preemptive>true</con:preemptive> + <con:authType>Preemptive</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> + </con:config> + </con:testStep> + <con:testStep type="transfer" name="CleanUp Properties" id="e480de55-58e7-4664-ab9d-06212315320a"> + <con:settings/> + <con:config xsi:type="con:PropertyTransfersStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>profile</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>profile</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>hrefStatus</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>hrefStatus</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + <con:transfers setNullOnMissingSource="true" transferTextContent="true" failOnError="true" ignoreEmpty="false" transferToAll="false" entitize="false" transferChildNodes="false"> + <con:name>report</con:name> + <con:sourceType>empty</con:sourceType> + <con:sourceStep>#TestCase#</con:sourceStep> + <con:targetType>report</con:targetType> + <con:targetStep>#TestCase#</con:targetStep> + <con:upgraded>true</con:upgraded> + </con:transfers> + </con:config> + </con:testStep> + <con:properties> + <con:property> + <con:name>empty</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>profile</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>hrefStatus</con:name> + <con:value/> + </con:property> + <con:property> + <con:name>report</con:name> + <con:value/> + </con:property> + </con:properties> + </con:testCase> + <con:properties/> + </con:testSuite> <con:endpointStrategy xsi:type="con:DefaultEndpointStrategy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:endpoint mode="COMPLEMENT" username="${#Project#username}" password="${#Project#password}">${#Project#baseUrlValidatorApi}/xplan-validator-api/xvalidator/api/v1</con:endpoint> </con:endpointStrategy> diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api/plans/BPlan004_6-0.zip b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-validator-api/plans/BPlan004_6-0.zip new file mode 100644 index 0000000000000000000000000000000000000000..1c2ab4bdd0e5fd0ff24669ca9efe7e9e87cdc8f3 GIT binary patch literal 389980 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�>pX2&@gwkM$4ij1SDD?AaOu3vro};Sv%C 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%0DqOk00`2Lv% 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%0AEu6vhlDt<hx?y~Y@vG2Fem$`zS*z8N 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 E0OV5AFaQ7m literal 0 HcmV?d00001 diff --git a/xplan-validator/xplan-validator-api/pom.xml b/xplan-validator/xplan-validator-api/pom.xml index 42812499ff..986c39c07c 100755 --- a/xplan-validator/xplan-validator-api/pom.xml +++ b/xplan-validator/xplan-validator-api/pom.xml @@ -307,6 +307,10 @@ <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> + <dependency> + <groupId>io.findify</groupId> + <artifactId>s3mock_2.13</artifactId> + </dependency> </dependencies> <profiles> diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v1/ApiV1Config.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v1/ApiV1Config.java index 2352c5ed00..ff2410c2ae 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v1/ApiV1Config.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v1/ApiV1Config.java @@ -79,7 +79,7 @@ public class ApiV1Config extends AbstractApiConfig { protected void addInfo(OpenAPI openApi, ValidatorApiConfiguration validatorApiConfiguration) { openApi.setInfo(new Info().title("XPlanValidatorAPI") - .version("1.3.0") + .version("1.4.0") .description("XPlanValidator REST API") .termsOfService(getTermsOfService(validatorApiConfiguration)) .license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html"))); diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v2/ApiV2Filter.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v2/ApiV2Filter.java index 1311ea46ca..22f35faf96 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v2/ApiV2Filter.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/api/v2/ApiV2Filter.java @@ -1,9 +1,15 @@ package de.latlon.xplanbox.api.validator.api.v2; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; import de.latlon.xplanbox.api.commons.openapi.OpenApiFilter; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReport; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; /** * Filter to keep only v2 Api elements. @@ -19,4 +25,12 @@ public class ApiV2Filter extends OpenApiFilter { return matcher.replaceFirst("/"); } + @Override + public Optional<OpenAPI> filterOpenAPI(OpenAPI openAPI, Map<String, List<String>> params, + Map<String, String> cookies, Map<String, List<String>> headers) { + Components components = openAPI.getComponents(); + addSchemas(components, ValidationReport.class); + return super.filterOpenAPI(openAPI, params, cookies, headers); + } + } diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java index a416556599..39bde8783c 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java @@ -50,16 +50,13 @@ import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; import de.latlon.xplanbox.security.config.SecurityContext; -import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import de.latlon.xplanbox.validator.storage.config.AmazonS3Context; -import de.latlon.xplanbox.validator.storage.filesystem.FileSystemValidationExecutionStorage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; import org.springframework.core.io.ResourceLoader; /** @@ -73,6 +70,9 @@ public class ApplicationContext { @Autowired private ResourceLoader resourceLoader; + @Value("${xplanbox.raster.evaluation.skipped:false}") + private boolean skipRasterEvaluation; + @Bean public SystemConfigHandler systemConfigHandler(XQuerySemanticValidatorConfigurationRetriever configurationRetriever, SemanticProfiles semanticProfiles) { @@ -114,13 +114,16 @@ public class ApplicationContext { @Bean public SemanticProfiles semanticProfiles(ValidatorConfiguration validatorConfiguration, - PropertiesLoader validatorPropertiesLoader, - @Value("${xplanbox.validation.profiles}") String activatedProfiles) throws ConfigurationException { - List<String> activatedProfilesList = activatedProfiles != null ? Arrays.asList(activatedProfiles.split(",")) - : Collections.emptyList(); + PropertiesLoader validatorPropertiesLoader, List<String> activatedProfiles) throws ConfigurationException { SemanticProfilesCreator semanticProfilesCreator = new SemanticProfilesCreator(validatorConfiguration, validatorPropertiesLoader, resourceLoader); - return semanticProfilesCreator.createSemanticProfiles(activatedProfilesList); + return semanticProfilesCreator.createSemanticProfiles(activatedProfiles); + } + + @Bean + public List<String> activatedProfiles(@Value("${xplanbox.validation.profiles}") String activatedProfiles) { + return activatedProfiles != null && !activatedProfiles.isEmpty() ? Arrays.asList(activatedProfiles.split(",")) + : Collections.emptyList(); } @Bean @@ -140,13 +143,13 @@ public class ApplicationContext { SemanticValidator semanticValidator, SemanticProfiles semanticProfiles, ReportArchiveGenerator reportArchiveGenerator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, - semanticProfiles.getProfileValidators(), reportArchiveGenerator); + semanticProfiles.getProfileValidators(), reportArchiveGenerator, Optional.empty()); } @Bean public ValidatorApiConfiguration validatorApiConfiguration(PropertiesLoader validatorPropertiesLoader) throws ConfigurationException { - return new ValidatorApiConfiguration(validatorPropertiesLoader); + return new ValidatorApiConfiguration(validatorPropertiesLoader, skipRasterEvaluation); } @Bean @@ -159,11 +162,4 @@ public class ApplicationContext { return new ReportWriter(); } - @Bean - @Profile("!s3execution") - public ValidationExecutionStorage validationExecutionStorage( - @Value("${xplanbox.validation.fsdirectory}") Optional<Path> fsExecutionDir) throws IOException { - return new FileSystemValidationExecutionStorage(fsExecutionDir); - } - } diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ValidatorApiConfiguration.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ValidatorApiConfiguration.java index c21f74e294..e0ec97c1cb 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ValidatorApiConfiguration.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/config/ValidatorApiConfiguration.java @@ -26,10 +26,6 @@ import de.latlon.xplanbox.api.commons.config.ApiConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Properties; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -39,16 +35,31 @@ public class ValidatorApiConfiguration extends ApiConfiguration { private static final String VALIDATOR_API_CONFIGURATION_PROPERTIES = "validatorApiConfiguration.properties"; + private final boolean skipRasterEvaluation; + public ValidatorApiConfiguration(PropertiesLoader propertiesLoader) throws ConfigurationException { + this(propertiesLoader, false); + } + + public ValidatorApiConfiguration(PropertiesLoader propertiesLoader, boolean skipRasterEvaluation) + throws ConfigurationException { super(propertiesLoader, VALIDATOR_API_CONFIGURATION_PROPERTIES); + this.skipRasterEvaluation = skipRasterEvaluation; + logProperties(); } - protected void logProperties() { + private void logProperties() { LOG.info("-------------------------------------------"); LOG.info("Configuration of the XPlanValidatorApi:"); LOG.info("-------------------------------------------"); LOG.info(" API URL: {}", getApiUrl()); LOG.info("-------------------------------------------"); + LOG.info(" skipRasterEvaluation: {}", skipRasterEvaluation); + LOG.info("-------------------------------------------"); + } + + public boolean isSkipRasterEvaluation() { + return skipRasterEvaluation; } } diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/AsyncValidationWrapper.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/AsyncValidationWrapper.java index cd5bfe0848..bc46d68876 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/AsyncValidationWrapper.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/AsyncValidationWrapper.java @@ -22,7 +22,7 @@ package de.latlon.xplanbox.api.validator.handler; import de.latlon.core.validator.events.EventSender; import de.latlon.core.validator.events.ValidationFinishedEvent; -import de.latlon.xplanbox.api.commons.handler.AbstractAsyncWrapper; +import de.latlon.xplanbox.api.commons.handler.AbstractAsyncValidationWrapper; import jakarta.inject.Singleton; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @@ -33,7 +33,7 @@ import org.springframework.stereotype.Component; */ @Component @Singleton -public class AsyncValidationWrapper extends AbstractAsyncWrapper { +public class AsyncValidationWrapper extends AbstractAsyncValidationWrapper { protected AsyncValidationWrapper(EventSender validationRequestNotifier) { super(validationRequestNotifier); diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2.java new file mode 100644 index 0000000000..bec7c59d05 --- /dev/null +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2.java @@ -0,0 +1,63 @@ +/*- + * #%L + * xplan-validator-api - Software zur Verwaltung von XPlanGML Daten + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplanbox.api.validator.handler.v2; + +import static org.slf4j.LoggerFactory.getLogger; + +import java.io.IOException; +import java.util.List; + +import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; +import de.latlon.xplanbox.api.commons.v2.model.SystemConfig; +import jakarta.inject.Singleton; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Component +@Singleton +public class ConfigHandlerV2 { + + private static final Logger LOG = getLogger(ConfigHandlerV2.class); + + @Autowired + private List<String> activatedProfiles; + + @Autowired + private SystemConfigHandler systemConfigHandler; + + public SystemConfig describeSystem() throws IOException { + LOG.debug("Generating validator config information"); + return new SystemConfig().version(parseVersion()) + .profiles(activatedProfiles) + .supportedXPlanGmlVersions(systemConfigHandler.allSupportedVersions()); + } + + public String parseVersion() { + Package thisPackage = getClass().getPackage(); + return thisPackage.getImplementationVersion(); + } + +} diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v1/ValidateApi.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v1/ValidateApi.java index c044f113db..991e0fe1ca 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v1/ValidateApi.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v1/ValidateApi.java @@ -45,8 +45,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.ObjectMapperContextResolver; +import de.latlon.xplanbox.api.commons.ValidationReportBuilder; +import de.latlon.xplanbox.api.commons.handler.AbstractAsyncValidationWrapper; import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; -import de.latlon.xplanbox.api.validator.handler.AsyncValidationWrapper; +import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; @@ -86,7 +88,10 @@ public class ValidateApi { ValidationExecutionStorage validationExecutionStorage; @Autowired - AsyncValidationWrapper validationWrapper; + AbstractAsyncValidationWrapper validationWrapper; + + @Autowired + ValidatorApiConfiguration validatorApiConfiguration; @POST @Consumes({ "text/xml", "application/gml+xml" }) @@ -189,7 +194,8 @@ public class ValidateApi { final ValidationRequestedEvent.MediaType requestedMediaType = detectValidationEventMediaType(mediaType); ValidationSettings settings = createValidationSettings(validationName, skipGeometrisch, skipSemantisch, - skipFlaechenschluss, skipGeltungsbereich, skipLaufrichtung, profiles); + skipFlaechenschluss, skipGeltungsbereich, skipLaufrichtung, profiles, + validatorApiConfiguration.isSkipRasterEvaluation()); ValidationRequestedEvent event = new ValidationRequestedEvent(uuid, settings, xFilename, requestedMediaType, originFile); @@ -208,8 +214,10 @@ public class ValidateApi { byte[] report = validationExecutionStorage.retrieveReport(validationRequestedEvent.getUuid(), reportType); String filename = settings.getValidationName() + requestedMediaType.getFileExtension(); // xml not directly supported anymore => parse and convert - if (APPLICATION_XML_TYPE.equals(mediaType) || TEXT_XML_TYPE.equals(mediaType)) { - ValidationReport validationReport = createReportFileFrom(report); + if (APPLICATION_JSON_TYPE.equals(mediaType) || APPLICATION_XML_TYPE.equals(mediaType) + || TEXT_XML_TYPE.equals(mediaType)) { + de.latlon.xplanbox.api.commons.v2.model.ValidationReport validationReportV2 = createReportFileFrom(report); + ValidationReport validationReport = ValidationReportBuilder.convertToV1(validationReportV2); return Response.ok(validationReport) // .type(mediaType) // .header("Content-Disposition", "attachment; filename=\"" + filename + "\"") // @@ -239,9 +247,11 @@ public class ValidateApi { return ValidationRequestedEvent.MediaType.JSON; } - private ValidationReport createReportFileFrom(byte[] reportAsJsonInByte) throws IOException { - ObjectMapper mapper = new ObjectMapperContextResolver().getContext(ValidationReport.class); - return mapper.readValue(reportAsJsonInByte, ValidationReport.class); + private de.latlon.xplanbox.api.commons.v2.model.ValidationReport createReportFileFrom(byte[] reportAsJsonInByte) + throws IOException { + ObjectMapper mapper = new ObjectMapperContextResolver() + .getContext(de.latlon.xplanbox.api.commons.v2.model.ValidationReport.class); + return mapper.readValue(reportAsJsonInByte, de.latlon.xplanbox.api.commons.v2.model.ValidationReport.class); } } diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/InfoApi2.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/InfoApi2.java index 07511f5bb3..278d9d0c29 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/InfoApi2.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/InfoApi2.java @@ -20,32 +20,32 @@ */ package de.latlon.xplanbox.api.validator.v2; -import de.latlon.xplanbox.api.commons.v1.model.SystemConfig; -import de.latlon.xplanbox.api.validator.handler.ConfigHandler; +import java.io.IOException; + +import de.latlon.xplanbox.api.commons.v2.model.SystemConfig; +import de.latlon.xplanbox.api.validator.handler.v2.ConfigHandlerV2; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import org.springframework.beans.factory.annotation.Autowired; - import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.Response; -import java.io.IOException; +import org.springframework.beans.factory.annotation.Autowired; /** * Controller class for handling access to the application info resource. * * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> - * @since 4.0 + * @since 8.0 */ @Path("/info") public class InfoApi2 { @Autowired - private ConfigHandler configHandler; + private ConfigHandlerV2 configHandler; @GET @Produces({ "application/json" }) diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/StatusApi.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/StatusApi.java index 802a4a2f17..c4aafc048c 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/StatusApi.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/StatusApi.java @@ -20,7 +20,7 @@ */ package de.latlon.xplanbox.api.validator.v2; -import static de.latlon.xplanbox.api.commons.v2.model.Link.RelEnum.REPORT; +import static de.latlon.xplanbox.api.commons.v2.model.ResponseLink.RelEnum.REPORT; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import java.net.URI; @@ -28,7 +28,7 @@ import java.net.URISyntaxException; import de.latlon.xplan.commons.s3.StorageException; import de.latlon.xplanbox.api.commons.exception.InvalidValidationUuid; -import de.latlon.xplanbox.api.commons.v2.model.Link; +import de.latlon.xplanbox.api.commons.v2.model.ResponseLink; import de.latlon.xplanbox.api.commons.v2.model.StatusEnum; import de.latlon.xplanbox.api.commons.v2.model.StatusNotification; import de.latlon.xplanbox.validator.storage.Status; @@ -89,12 +89,12 @@ public class StatusApi { .errorMsg(status.getErrorMsg()); if (status.getLinkToJsonReport() != null) statusNotification.links( - (Link) new Link().rel(REPORT) + (ResponseLink) new ResponseLink().rel(REPORT) .expirationTime(status.getExpirationTime()) .type("application/json") .title("Validierungsreport") .href(new URI(status.getLinkToJsonReport())), - (Link) new Link().rel(REPORT) + (ResponseLink) new ResponseLink().rel(REPORT) .expirationTime(status.getExpirationTime()) .type("application/pdf") .title("Validierungsreport") diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2.java index fd4e1232f4..afcd343b02 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2.java @@ -24,7 +24,7 @@ import static de.latlon.xplan.commons.util.ContentTypeChecker.checkContentTypesO import static de.latlon.xplan.commons.util.TextPatternConstants.SIMPLE_NAME_PATTERN; import static de.latlon.xplanbox.api.commons.ValidatorConverter.createValidationSettings; import static de.latlon.xplanbox.api.commons.ValidatorConverter.detectOrCreateValidationName; -import static de.latlon.xplanbox.api.commons.v2.model.Link.RelEnum.STATUS; +import static de.latlon.xplanbox.api.commons.v2.model.ResponseLink.RelEnum.STATUS; import static de.latlon.xplanbox.validator.storage.StatusType.VALIDATION_REQUESTED; import static io.swagger.v3.oas.annotations.enums.Explode.FALSE; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; @@ -44,7 +44,7 @@ import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.exception.InvalidXPlanGmlOrArchive; import de.latlon.xplanbox.api.commons.exception.UnsupportedHeaderValue; import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; -import de.latlon.xplanbox.api.commons.v2.model.Link; +import de.latlon.xplanbox.api.commons.v2.model.ResponseLink; import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; import de.latlon.xplanbox.api.validator.v2.model.ValidationReceipt; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; @@ -176,13 +176,16 @@ public class ValidateApi2 { String validationName = detectOrCreateValidationName(xFilename, name); ValidationSettings settings = createValidationSettings(validationName, skipGeometrisch, skipSemantisch, - skipFlaechenschluss, skipGeltungsbereich, skipLaufrichtung, profiles); + skipFlaechenschluss, skipGeltungsbereich, skipLaufrichtung, profiles, + validatorApiConfiguration.isSkipRasterEvaluation()); validationRequestNotifier.sendEvent(new ValidationRequestedEvent(uuid, settings, xFilename, ValidationRequestedEvent.MediaType.JSON, originFile)); URI linkToStatus = createLinkToStatus(uuid); - Link statusLink = (Link) new Link().rel(STATUS).href(linkToStatus).type("application/json"); + ResponseLink statusLink = (ResponseLink) new ResponseLink().rel(STATUS) + .href(linkToStatus) + .type("application/json"); ValidationReceipt receipt = new ValidationReceipt(uuid, statusLink); return Response.ok(receipt).build(); diff --git a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/model/ValidationReceipt.java b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/model/ValidationReceipt.java index 001d627314..f012cf0f69 100644 --- a/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/model/ValidationReceipt.java +++ b/xplan-validator/xplan-validator-api/src/main/java/de/latlon/xplanbox/api/validator/v2/model/ValidationReceipt.java @@ -20,7 +20,7 @@ */ package de.latlon.xplanbox.api.validator.v2.model; -import de.latlon.xplanbox.api.commons.v2.model.Link; +import de.latlon.xplanbox.api.commons.v2.model.ResponseLink; /** * A receipt for the submission of a validation request. @@ -32,9 +32,9 @@ public class ValidationReceipt { private final String uuid; - private final Link statusLink; + private final ResponseLink statusLink; - public ValidationReceipt(String uuid, Link statusLink) { + public ValidationReceipt(String uuid, ResponseLink statusLink) { this.uuid = uuid; this.statusLink = statusLink; } @@ -43,7 +43,7 @@ public class ValidationReceipt { return uuid; } - public Link getStatusLink() { + public ResponseLink getStatusLink() { return statusLink; } diff --git a/xplan-validator/xplan-validator-api/src/main/resources/application.properties b/xplan-validator/xplan-validator-api/src/main/resources/application.properties index e7648d4e7c..43d945c960 100644 --- a/xplan-validator/xplan-validator-api/src/main/resources/application.properties +++ b/xplan-validator/xplan-validator-api/src/main/resources/application.properties @@ -46,3 +46,5 @@ xplanbox.validation.fsdirectory=${XPLAN_FS_DIRECTORY:/tmp/validation} xplanbox.validation.profiles=${XPLAN_VALIDATOR_PROFILES:} xplanbox.validation.s3.bucketName=${XPLAN_VALIDATION_S3_BUCKET_NAME:validation} xplanbox.validation.s3.bucketPublicUrl=${XPLAN_VALIDATION_S3_BUCKET_PUBLIC_URL} + +xplanbox.raster.evaluation.skipped=${XPLAN_RASTER_EVALUATION_SKIPPED:false} diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/SpringBootAppTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/SpringBootAppTest.java index a3aad0032b..951004612d 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/SpringBootAppTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/SpringBootAppTest.java @@ -20,14 +20,19 @@ */ package de.latlon.xplanbox.api.validator; +import de.latlon.xplanbox.api.validator.config.TestContext; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextConfiguration; - -import de.latlon.xplanbox.api.validator.config.TestContext; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; @SpringBootTest -@ContextConfiguration(classes = { TestContext.class }) +@Import(TestContext.class) +@TestPropertySource(properties = { "spring.main.allow-bean-definition-overriding=true", + "xplanbox.validation.s3.bucketName=test-bucket-validation", + "xplanbox.validation.s3.bucketPublicUrl=http://localhost" }) +@ActiveProfiles("test") class SpringBootAppTest { @Test diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/ValidatorApiJerseyTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/ValidatorApiJerseyTest.java new file mode 100644 index 0000000000..f6b9d6db36 --- /dev/null +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/ValidatorApiJerseyTest.java @@ -0,0 +1,63 @@ +package de.latlon.xplanbox.api.validator; + +import de.latlon.xplan.commons.configuration.DefaultPropertiesLoader; +import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; +import de.latlon.xplanbox.api.validator.config.ApplicationContext; +import de.latlon.xplanbox.api.validator.config.TestContext; +import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; +import jakarta.servlet.ServletContext; +import jakarta.ws.rs.core.Application; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.TestProperties; +import org.mockito.Mockito; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.io.ClassPathResource; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public abstract class ValidatorApiJerseyTest extends JerseyTest { + + @Override + protected Application configure() { + enable(TestProperties.LOG_TRAFFIC); + + ResourceConfig resourceConfig = createResourceConfig(); + AnnotationConfigApplicationContext context = createApplicationContext(); + resourceConfig.register(XPlanApiExceptionMapper.class); + resourceConfig.property("contextConfig", context); + return resourceConfig; + } + + private AnnotationConfigApplicationContext createApplicationContext() { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + PropertySourcesPlaceholderConfigurer pph = new PropertySourcesPlaceholderConfigurer(); + pph.setLocations(new ClassPathResource("/application.properties"), new ClassPathResource("/s3Mock.properties")); + context.addBeanFactoryPostProcessor(pph); + context.register(ApplicationContext.class, TestContext.class); + context.refresh(); + return context; + } + + private ResourceConfig createResourceConfig() { + ServletContext mockServletContext = Mockito.mock(ServletContext.class); + Mockito.when(mockServletContext.getContextPath()).thenReturn(""); + + try { + ValidatorApiConfiguration validatorConfig = new ValidatorApiConfiguration( + new DefaultPropertiesLoader(ValidatorApiJerseyTest.class)); + return createConfig(mockServletContext, validatorConfig); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + protected abstract AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig); + +} diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/ApplicationContextTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/ApplicationContextTest.java index cf16d38509..6e7ce7cc19 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/ApplicationContextTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/ApplicationContextTest.java @@ -20,12 +20,8 @@ */ package de.latlon.xplanbox.api.validator.config; -import de.latlon.xplan.validator.configuration.ValidatorConfiguration; -import de.latlon.xplan.validator.semantic.configuration.SemanticRulesConfiguration; -import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.mockito.Mockito; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -33,8 +29,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import de.latlon.xplan.validator.configuration.ValidatorConfiguration; +import de.latlon.xplan.validator.semantic.configuration.SemanticRulesConfiguration; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.Mockito; public class ApplicationContextTest { diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/FakeAsyncValidationWrapper.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/FakeAsyncValidationWrapper.java index e15f4876a2..b6d66838ae 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/FakeAsyncValidationWrapper.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/FakeAsyncValidationWrapper.java @@ -5,12 +5,12 @@ import java.util.HashMap; import java.util.Map; import de.latlon.core.validator.events.ValidationRequestedEvent; -import de.latlon.xplanbox.api.validator.handler.AsyncValidationWrapper; +import de.latlon.xplanbox.api.commons.handler.AbstractAsyncValidationWrapper; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage.ReportType; import org.springframework.beans.factory.annotation.Autowired; -public class FakeAsyncValidationWrapper extends AsyncValidationWrapper { +public class FakeAsyncValidationWrapper extends AbstractAsyncValidationWrapper { @Autowired private ValidationExecutionStorage validationExecutionStorage; diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestContext.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestContext.java index b06bb65e2b..a3e9f8573e 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestContext.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestContext.java @@ -29,13 +29,6 @@ import static org.slf4j.LoggerFactory.getLogger; import java.io.IOException; import java.util.Optional; -import org.mockito.Mockito; -import org.slf4j.Logger; -import org.slf4j.bridge.SLF4JBridgeHandler; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - import de.latlon.core.validator.events.EventSender; import de.latlon.xplan.commons.archive.SemanticValidableXPlanArchive; import de.latlon.xplan.validator.semantic.configuration.metadata.RulesMetadata; @@ -45,6 +38,13 @@ import de.latlon.xplan.validator.semantic.report.SemanticValidatorResult; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import de.latlon.xplanbox.validator.storage.filesystem.FileSystemValidationExecutionStorage; import jakarta.annotation.PostConstruct; +import org.mockito.Mockito; +import org.slf4j.Logger; +import org.slf4j.bridge.SLF4JBridgeHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; /** * Indented to register the JAX-RS resources within Spring Application Context. TODO @@ -53,6 +53,7 @@ import jakarta.annotation.PostConstruct; * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ @Configuration +@Import(TestS3Context.class) public class TestContext { private static final Logger LOG = getLogger(TestContext.class); @@ -77,6 +78,7 @@ public class TestContext { return Mockito.mock(EventSender.class); } + @Primary @Bean public FakeAsyncValidationWrapper asyncValidationWrapper() { return new FakeAsyncValidationWrapper(); diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestS3Context.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestS3Context.java new file mode 100644 index 0000000000..28c7c3e583 --- /dev/null +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/config/TestS3Context.java @@ -0,0 +1,68 @@ +package de.latlon.xplanbox.api.validator.config; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.AnonymousAWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import io.findify.s3mock.S3Mock; +import jakarta.annotation.PreDestroy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.test.util.TestSocketUtils; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Configuration +public class TestS3Context { + + private final int port = TestSocketUtils.findAvailableTcpPort(); + + private AmazonS3 s3TestClient; + + private S3Mock s3Mock; + + @Bean + public S3Mock s3Mock() { + this.s3Mock = new S3Mock.Builder().withPort(port).withInMemoryBackend().build(); + s3Mock.start(); + return s3Mock; + } + + @Bean + @Primary + public AmazonS3 s3Client(S3Mock s3Mock, @Value("${xplanbox.validation.s3.bucketName}") String bucketName) { + AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration( + "http://localhost:" + port, "eu-central-1"); + AmazonS3 client = AmazonS3ClientBuilder.standard() + .withPathStyleAccessEnabled(true) + .withEndpointConfiguration(endpoint) + .withCredentials(new AWSStaticCredentialsProvider(new AnonymousAWSCredentials())) + .build(); + client.createBucket(bucketName); + s3TestClient = client; + return client; + } + + @Bean + @Primary + public AWSCredentials credentials() { + return new BasicAWSCredentials("accessKeyId", "secretKey"); + } + + @PreDestroy + public void shutdown() { + s3TestClient.shutdown(); + if (s3Mock != null) { + s3Mock.stop(); + } + } + +} diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/ConfigHandlerTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/ConfigHandlerTest.java index d9700cee00..db0319ad6f 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/ConfigHandlerTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/ConfigHandlerTest.java @@ -25,22 +25,23 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.IOException; +import de.latlon.xplanbox.api.validator.config.ApplicationContext; +import de.latlon.xplanbox.api.validator.config.TestContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; - /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { ApplicationContext.class, TestContext.class }) @ActiveProfiles("test") +@TestPropertySource(properties = { "xplanbox.validation.s3.bucketName=test-bucket-validation" }) class ConfigHandlerTest { @Autowired diff --git a/xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/MemoryJobContextTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2Test.java similarity index 57% rename from xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/MemoryJobContextTest.java rename to xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2Test.java index 45a7a39c11..f14fcaec70 100644 --- a/xplan-core/xplan-core-job/src/test/java/de/latlon/xplan/job/validator/config/MemoryJobContextTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/handler/v2/ConfigHandlerV2Test.java @@ -1,6 +1,6 @@ /*- * #%L - * xplan-core-job - Modul zur Gruppierung der Kernmodule + * xplan-validator-api - Software zur Verwaltung von XPlanGML Daten * %% * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH * %% @@ -18,42 +18,44 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplan.job.validator.config; +package de.latlon.xplanbox.api.validator.handler.v2; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.IOException; + +import de.latlon.xplanbox.api.validator.config.ApplicationContext; +import de.latlon.xplanbox.api.validator.config.TestContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.quartz.JobKey; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @deprecated XPlanValidatorWMS is deprecated and will be removed in a future version + * @since 8.0 */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { JobContext.class, SqlJobContext.class, MemoryJobContext.class }) -@ActiveProfiles("validatorwmsmemory") -@Deprecated -class MemoryJobContextTest { +@ContextConfiguration(classes = { ApplicationContext.class, TestContext.class }) +@ActiveProfiles("test") +@TestPropertySource(properties = { "xplanbox.validation.s3.bucketName=test-bucket-validation" }) +class ConfigHandlerV2Test { @Autowired - private Scheduler scheduler; + private ConfigHandlerV2 configHandler; + + @Test + void verifyThat_SystemConfig_IsNotNull() { + assertNotNull(configHandler); + } @Test - void checkScheduler() throws SchedulerException { - boolean sqlDeleteJobExists = scheduler.checkExists(new JobKey("sqlDeleteJob", "xplan-validator-wms")); - boolean gmlDeleteJobExists = scheduler.checkExists(new JobKey("gmlDeleteJob", "xplan-validator-wms")); - boolean gmlImportJobExists = scheduler.checkExists(new JobKey("gmlImportJob", "xplan-validator-wms")); - assertFalse(sqlDeleteJobExists); - assertTrue(gmlDeleteJobExists); - assertTrue(gmlImportJobExists); + void verifyThat_SystemConfig_ContainsValidationRulesMetadata() throws IOException { + assertFalse(configHandler.describeSystem().getSupportedXPlanGmlVersions().isEmpty()); } } diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/DefaultApiTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/DefaultApiTest.java index 7212406d62..772e813446 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/DefaultApiTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/DefaultApiTest.java @@ -23,64 +23,24 @@ package de.latlon.xplanbox.api.validator.v1; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import de.latlon.xplan.commons.configuration.DefaultPropertiesLoader; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; import de.latlon.xplanbox.api.validator.api.v1.ApiV1Config; -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; import jakarta.servlet.ServletContext; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.mockito.Mockito; import org.springframework.boot.test.json.BasicJsonTester; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class DefaultApiTest extends JerseyTest { - - @TempDir - static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-webservices-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } +class DefaultApiTest extends ValidatorApiJerseyTest { - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - - ResourceConfig resourceConfig; - ServletContext mockServletContext = Mockito.mock(ServletContext.class); - Mockito.when(mockServletContext.getContextPath()).thenReturn(""); - - try { - ValidatorApiConfiguration validatorConfig = new ValidatorApiConfiguration( - new DefaultPropertiesLoader(getClass())); - resourceConfig = new ApiV1Config(mockServletContext, validatorConfig); - } - catch (Exception e) { - throw new RuntimeException(e); - } - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; + public AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV1Config(mockServletContext, validatorConfig); } @Test diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/InfoApiTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/InfoApiTest.java index 3f64edca45..dfa69f1fa2 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/InfoApiTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/InfoApiTest.java @@ -24,49 +24,24 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; +import de.latlon.xplanbox.api.validator.api.v1.ApiV1Config; +import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; +import jakarta.servlet.ServletContext; import jakarta.ws.rs.core.Response; - import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; import org.springframework.boot.test.json.BasicJsonTester; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -class InfoApiTest extends JerseyTest { - - @TempDir - public static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } +class InfoApiTest extends ValidatorApiJerseyTest { - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(InfoApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; + public AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV1Config(mockServletContext, validatorConfig); } @Test diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiJerseyTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiJerseyTest.java index 48343a8cde..b244ae1829 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiJerseyTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiJerseyTest.java @@ -36,71 +36,43 @@ import java.nio.file.Path; import java.nio.file.Paths; import de.latlon.core.validator.events.ValidationRequestedEvent.OriginFile; -import de.latlon.xplan.commons.configuration.DefaultPropertiesLoader; import de.latlon.xplan.validator.semantic.profile.SemanticProfiles; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; import de.latlon.xplanbox.api.validator.api.v1.ApiV1Config; -import de.latlon.xplanbox.api.validator.config.ApplicationContext; import de.latlon.xplanbox.api.validator.config.FakeAsyncValidationWrapper; -import de.latlon.xplanbox.api.validator.config.TestContext; import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; import jakarta.servlet.ServletContext; import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.io.TempDir; -import org.mockito.Mockito; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { TestContext.class }) -public class ValidateApiJerseyTest extends JerseyTest { - - @TempDir - public static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-webservices-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } +public class ValidateApiJerseyTest extends ValidatorApiJerseyTest { - @Autowired private SemanticProfiles semanticProfiles; private FakeAsyncValidationWrapper fakeAsyncValidationWrapper; @Override protected Application configure() { - ResourceConfig resourceConfig; - ServletContext mockServletContext = Mockito.mock(ServletContext.class); - Mockito.when(mockServletContext.getContextPath()).thenReturn(""); - - try { - ValidatorApiConfiguration validatorConfig = new ValidatorApiConfiguration( - new DefaultPropertiesLoader(getClass())); - resourceConfig = new ApiV1Config(mockServletContext, validatorConfig); - } - catch (Exception e) { - throw new RuntimeException(e); - } - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); + Application application = super.configure(); + AnnotationConfigApplicationContext context = (AnnotationConfigApplicationContext) application.getProperties() + .get("contextConfig"); fakeAsyncValidationWrapper = context.getBean(FakeAsyncValidationWrapper.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; + semanticProfiles = context.getBean(SemanticProfiles.class); + return application; + } + + @Override + protected AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV1Config(mockServletContext, validatorConfig); } @Test diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiTest.java index 3173ea9053..744bfaa6d1 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v1/ValidateApiTest.java @@ -21,6 +21,11 @@ package de.latlon.xplanbox.api.validator.v1; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.nio.file.Files; import java.nio.file.Path; @@ -28,13 +33,14 @@ import java.util.Collections; import java.util.List; import de.latlon.core.validator.events.ValidationRequestedEvent; +import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; import de.latlon.xplanbox.api.validator.handler.AsyncValidationWrapper; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import jakarta.ws.rs.core.Request; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.mockito.Answers; import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; /** */ @@ -68,17 +74,22 @@ class ValidateApiTest { private List<String> callValidateAndExtractProfilesInValidationRequestEvent(List profiles) throws Exception { ValidateApi validateApi = new ValidateApi(); - validateApi.validationExecutionStorage = Mockito.mock(ValidationExecutionStorage.class); - validateApi.validationWrapper = Mockito.mock(AsyncValidationWrapper.class); + ValidationExecutionStorage validationExecutionStorage = mock(ValidationExecutionStorage.class, + Answers.RETURNS_MOCKS); + when(validationExecutionStorage.retrieveReport(anyString(), eq(ValidationExecutionStorage.ReportType.JSON))) + .thenReturn(getClass().getResourceAsStream("validation-report1.json").readAllBytes()); + validateApi.validationExecutionStorage = validationExecutionStorage; + validateApi.validationWrapper = mock(AsyncValidationWrapper.class); + validateApi.validatorApiConfiguration = mock(ValidatorApiConfiguration.class); Path tmpFile = tmpDir.resolve("my-file.xml"); Files.writeString(tmpFile, ""); - Request request = Mockito.mock(Request.class); + Request request = mock(Request.class); validateApi.validate(request, tmpFile.toFile(), null, null, false, false, false, false, false, profiles); ArgumentCaptor<ValidationRequestedEvent> argumentCaptor = ArgumentCaptor .forClass(ValidationRequestedEvent.class); - Mockito.verify(validateApi.validationWrapper).sendEvent(argumentCaptor.capture()); + verify(validateApi.validationWrapper).sendEvent(argumentCaptor.capture()); ValidationRequestedEvent event = argumentCaptor.getValue(); return event.getSettings().getProfiles(); diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/DefaultApi2Test.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/DefaultApi2Test.java index bdacc0f9d1..4f8e9ea9bf 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/DefaultApi2Test.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/DefaultApi2Test.java @@ -23,66 +23,25 @@ package de.latlon.xplanbox.api.validator.v2; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import de.latlon.xplan.commons.configuration.DefaultPropertiesLoader; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; import de.latlon.xplanbox.api.validator.api.v2.ApiV2Config; -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; -import de.latlon.xplanbox.api.validator.v1.DefaultApi; import jakarta.servlet.ServletContext; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.mockito.Mockito; import org.springframework.boot.test.json.BasicJsonTester; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 8.0 */ -class DefaultApi2Test extends JerseyTest { - - @TempDir - static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-webservices-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } +class DefaultApi2Test extends ValidatorApiJerseyTest { - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - - ResourceConfig resourceConfig; - ServletContext mockServletContext = Mockito.mock(ServletContext.class); - Mockito.when(mockServletContext.getContextPath()).thenReturn(""); - - try { - ValidatorApiConfiguration validatorConfig = new ValidatorApiConfiguration( - new DefaultPropertiesLoader(DefaultApi.class)); - resourceConfig = new ApiV2Config(mockServletContext, validatorConfig); - } - catch (Exception e) { - throw new RuntimeException(e); - } - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; + public AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV2Config(mockServletContext, validatorConfig); } @Test diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/InfoApi2Test.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/InfoApi2Test.java index e3443994b7..35d19c897c 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/InfoApi2Test.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/InfoApi2Test.java @@ -24,48 +24,25 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; +import de.latlon.xplanbox.api.validator.api.v2.ApiV2Config; +import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; +import jakarta.servlet.ServletContext; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; import org.springframework.boot.test.json.BasicJsonTester; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 8.0 */ -class InfoApi2Test extends JerseyTest { - - @TempDir - public static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } +class InfoApi2Test extends ValidatorApiJerseyTest { - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(InfoApi2.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; + public AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV2Config(mockServletContext, validatorConfig); } @Test @@ -76,17 +53,11 @@ class InfoApi2Test extends JerseyTest { assertEquals(APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE)); BasicJsonTester json = new BasicJsonTester(getClass()); - assertThat(json.from(response.readEntity(String.class))).extractingJsonPathStringValue("$.rulesMetadata.source") - .startsWith("https://gitlab.opencode.de/xleitstelle/xplanung/validierungsregeln/standard/-/tree/"); - - } - - @Test - void verifyThat_Response_ContainsSupportedXplanGmlVersionsAndProfiles() { - final String response = target("/info").request(APPLICATION_JSON).get(String.class); + String responseEntity = response.readEntity(String.class); + assertThat(json.from(responseEntity)).hasJsonPath("$.supportedXPlanGmlVersions"); + assertThat(json.from(responseEntity)).doesNotHaveJsonPath("$.rulesMetadata"); + assertThat(json.from(responseEntity)).doesNotHaveJsonPath("$.profiles"); - assertThat(response).contains("supportedXPlanGmlVersions"); - assertThat(response).contains("profiles"); } } diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/StatusApiTest.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/StatusApiTest.java index 0c91bb0dc9..3be8477d69 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/StatusApiTest.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/StatusApiTest.java @@ -23,49 +23,25 @@ package de.latlon.xplanbox.api.validator.v2; import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.UUID; -import de.latlon.xplanbox.api.commons.exception.XPlanApiExceptionMapper; -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; -import jakarta.ws.rs.core.Application; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; +import de.latlon.xplanbox.api.validator.api.v2.ApiV2Config; +import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; +import jakarta.servlet.ServletContext; import jakarta.ws.rs.core.Response; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.glassfish.jersey.test.TestProperties; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 8.0 */ -class StatusApiTest extends JerseyTest { +class StatusApiTest extends ValidatorApiJerseyTest { - @TempDir - public static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } - - @Override - protected Application configure() { - enable(TestProperties.LOG_TRAFFIC); - final ResourceConfig resourceConfig = new ResourceConfig(StatusApi.class); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - resourceConfig.register(XPlanApiExceptionMapper.class); - return resourceConfig; + public AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV2Config(mockServletContext, validatorConfig); } @Test diff --git a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2Test.java b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2Test.java index c5b4250347..c75d6b1456 100644 --- a/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2Test.java +++ b/xplan-validator/xplan-validator-api/src/test/java/de/latlon/xplanbox/api/validator/v2/ValidateApi2Test.java @@ -28,71 +28,27 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; -import de.latlon.xplan.commons.configuration.DefaultPropertiesLoader; -import de.latlon.xplan.validator.semantic.profile.SemanticProfiles; +import de.latlon.xplanbox.api.validator.ValidatorApiJerseyTest; +import de.latlon.xplanbox.api.validator.api.AbstractApiConfig; import de.latlon.xplanbox.api.validator.api.v2.ApiV2Config; -import de.latlon.xplanbox.api.validator.config.ApplicationContext; -import de.latlon.xplanbox.api.validator.config.TestContext; import de.latlon.xplanbox.api.validator.config.ValidatorApiConfiguration; import jakarta.servlet.ServletContext; import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.http.HttpHeaders; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.test.JerseyTest; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.io.TempDir; -import org.mockito.Mockito; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @since 8.0 */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { TestContext.class }) -public class ValidateApi2Test extends JerseyTest { +public class ValidateApi2Test extends ValidatorApiJerseyTest { - @TempDir - public static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-webservices-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } - - @Autowired - private SemanticProfiles semanticProfiles; - - @Override - protected Application configure() { - ResourceConfig resourceConfig; - ServletContext mockServletContext = Mockito.mock(ServletContext.class); - Mockito.when(mockServletContext.getContextPath()).thenReturn(""); - - try { - ValidatorApiConfiguration validatorConfig = new ValidatorApiConfiguration( - new DefaultPropertiesLoader(getClass())); - resourceConfig = new ApiV2Config(mockServletContext, validatorConfig); - } - catch (Exception e) { - throw new RuntimeException(e); - } - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationContext.class, - TestContext.class); - resourceConfig.property("contextConfig", context); - return resourceConfig; + public AbstractApiConfig createConfig(ServletContext mockServletContext, + ValidatorApiConfiguration validatorConfig) { + return new ApiV2Config(mockServletContext, validatorConfig); } @Test diff --git a/xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/v1/validation-report1.json b/xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/v1/validation-report1.json index 3a90816e2e..d3731a7cc2 100644 --- a/xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/v1/validation-report1.json +++ b/xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/v1/validation-report1.json @@ -1 +1 @@ -{"documentSummary":[{"name":"Nr. 108 Holstener Weg","type":"BP_Plan"}],"version":"XPLAN_41","filename":null,"name":"8147f2f6-5e53-4fc7-a795-75a6ea4b3190","bbox":{"minX":7.373668092967802,"minY":52.33234200586314,"maxX":7.377600099759094,"maxY":52.33376312995529,"crs":"EPSG:4326"},"date":1721376349423,"valid":false,"status":"Die Validierung wurde ausgeführt.","externalReferences":[],"externalReferencesResult":[],"rulesMetadata":{"version":"unbekannt","source":"unbekannt"},"validationResult":{"semantisch":{"valid":true,"rules":[]},"geometrisch":{"valid":false,"errors":["XPlanAuszug (Zeile 1, Spalte 1): 2.2.2.1: äußerer Ring verwendet falsche Laufrichtung (CW)."],"warnings":[]},"syntaktisch":{"valid":true,"messages":[]}}} \ No newline at end of file +{"documentSummary":[{"name":"Nr. 108 Holstener Weg","type":"BP_Plan"}],"version":"XPLAN_41","filename":null,"name":"8147f2f6-5e53-4fc7-a795-75a6ea4b3190","bbox":{"minX":7.373668092967802,"minY":52.33234200586314,"maxX":7.377600099759094,"maxY":52.33376312995529,"crs":"EPSG:4326"},"date":"2024-07-19T10:26:13","valid":false,"status":"Die Validierung wurde ausgeführt.","externalReferencesResult":[],"rulesMetadata":{"version":"unbekannt","source":"unbekannt"},"validationResult":{"semantisch":{"valid":true,"rules":[]},"geometrisch":{"valid":false,"errors":["XPlanAuszug (Zeile 1, Spalte 1): 2.2.2.1: äußerer Ring verwendet falsche Laufrichtung (CW)."],"warnings":[]},"syntaktisch":{"valid":true,"messages":[]}}} \ No newline at end of file diff --git a/xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/v1/validatorApiConfiguration.properties b/xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/validatorApiConfiguration.properties similarity index 100% rename from xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/v1/validatorApiConfiguration.properties rename to xplan-validator/xplan-validator-api/src/test/resources/de/latlon/xplanbox/api/validator/validatorApiConfiguration.properties diff --git a/xplan-validator/xplan-validator-api/src/test/resources/s3Mock.properties b/xplan-validator/xplan-validator-api/src/test/resources/s3Mock.properties new file mode 100644 index 0000000000..93570b0759 --- /dev/null +++ b/xplan-validator/xplan-validator-api/src/test/resources/s3Mock.properties @@ -0,0 +1,25 @@ +### +# #%L +# xplan-manager-core - XPlan Manager Core Komponente +# %% +# Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# #L% +### +xplanbox.s3.accessKeyId= +xplanbox.s3.secretKey= +xplanbox.validation.s3.bucketName=latlonvalidationtest +xplanbox.s3.region=eu-central-1 +xplanbox.s3.endpoint.url=http://localhost diff --git a/xplan-validator/xplan-validator-executor/pom.xml b/xplan-validator/xplan-validator-executor/pom.xml index 666341e8a3..816043c7ee 100644 --- a/xplan-validator/xplan-validator-executor/pom.xml +++ b/xplan-validator/xplan-validator-executor/pom.xml @@ -162,6 +162,10 @@ <groupId>de.latlon.product.xplanbox</groupId> <artifactId>xplan-core-api</artifactId> </dependency> + <dependency> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-core-raster</artifactId> + </dependency> <dependency> <groupId>jakarta.inject</groupId> <artifactId>jakarta.inject-api</artifactId> @@ -185,6 +189,11 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>io.findify</groupId> + <artifactId>s3mock_2.13</artifactId> + <scope>test</scope> + </dependency> </dependencies> <profiles> diff --git a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/PlanValidator.java b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/PlanValidator.java index 050d26c26f..29965a8e77 100644 --- a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/PlanValidator.java +++ b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/PlanValidator.java @@ -13,8 +13,8 @@ import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; -import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.EventSender; +import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.v1.XPlanboxPublicV1Event; import de.latlon.core.validator.events.v1.XPlanboxPublicV1Event.EventType; import de.latlon.xplan.commons.archive.XPlanArchive; @@ -23,7 +23,8 @@ import de.latlon.xplan.validator.report.ValidatorReport; import de.latlon.xplanbox.api.commons.ObjectMapperContextResolver; import de.latlon.xplanbox.api.commons.ValidationReportBuilder; import de.latlon.xplanbox.api.commons.exception.XPlanApiException; -import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReport; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplanbox.validator.executor.handler.ValidationHandler; import de.latlon.xplanbox.validator.storage.StatusType; import de.latlon.xplanbox.validator.storage.StoredValidationReport; @@ -48,10 +49,13 @@ public class PlanValidator { private final EventSender eventSender; + private XPlanRasterEvaluator xPlanRasterEvaluator; + public PlanValidator(ValidationExecutionStorage validationExecutionStorage, ValidationHandler validationHandler, - EventSender eventSender) { + XPlanRasterEvaluator xPlanRasterEvaluator, EventSender eventSender) { this.validationExecutionStorage = validationExecutionStorage; this.validationHandler = validationHandler; + this.xPlanRasterEvaluator = xPlanRasterEvaluator; this.eventSender = eventSender; } @@ -145,7 +149,7 @@ public class PlanValidator { return new ValidationReportBuilder().validatorReport(validatorReport) // .filename(event.getxFileName()) // .wmsUrl(wmsUrl) // - .build(); + .buildV2(); } private Path createJsonReportFile(ValidationReport validationReport) throws IOException { diff --git a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/config/ApplicationContext.java b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/config/ApplicationContext.java index c223b5d3e5..d62cabc3ef 100644 --- a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/config/ApplicationContext.java +++ b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/config/ApplicationContext.java @@ -50,15 +50,14 @@ import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplan.validator.wms.config.ValidatorWmsContext; import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; -import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; +import de.latlon.xplanbox.core.raster.config.RasterEvaluationContext; +import de.latlon.xplanbox.core.raster.evaluation.XPlanRasterEvaluator; import de.latlon.xplanbox.validator.storage.config.AmazonS3Context; -import de.latlon.xplanbox.validator.storage.filesystem.FileSystemValidationExecutionStorage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; import org.springframework.core.io.ResourceLoader; /** @@ -66,7 +65,7 @@ import org.springframework.core.io.ResourceLoader; * @since 8.0 */ @Configuration -@Import({ ValidatorWmsContext.class, AmazonS3Context.class }) +@Import({ ValidatorWmsContext.class, AmazonS3Context.class, RasterEvaluationContext.class }) public class ApplicationContext { @Autowired @@ -115,8 +114,8 @@ public class ApplicationContext { public SemanticProfiles semanticProfiles(ValidatorConfiguration validatorConfiguration, PropertiesLoader validatorPropertiesLoader, @Value("${xplanbox.validation.profiles}") String activatedProfiles) throws ConfigurationException { - List<String> activatedProfilesList = activatedProfiles != null ? Arrays.asList(activatedProfiles.split(",")) - : Collections.emptyList(); + List<String> activatedProfilesList = activatedProfiles != null && !activatedProfiles.isEmpty() + ? Arrays.asList(activatedProfiles.split(",")) : Collections.emptyList(); SemanticProfilesCreator semanticProfilesCreator = new SemanticProfilesCreator(validatorConfiguration, validatorPropertiesLoader, resourceLoader); return semanticProfilesCreator.createSemanticProfiles(activatedProfilesList); @@ -137,9 +136,9 @@ public class ApplicationContext { @Bean public XPlanValidator xplanValidator(GeometricValidator geometricValidator, SyntacticValidator syntacticValidator, SemanticValidator semanticValidator, SemanticProfiles semanticProfiles, - ReportArchiveGenerator reportArchiveGenerator) { + ReportArchiveGenerator reportArchiveGenerator, Optional<XPlanRasterEvaluator> xPlanRasterEvaluator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, - semanticProfiles.getProfileValidators(), reportArchiveGenerator); + semanticProfiles.getProfileValidators(), reportArchiveGenerator, xPlanRasterEvaluator); } @Bean @@ -152,11 +151,4 @@ public class ApplicationContext { return new ReportWriter(); } - @Bean - @Profile("!s3execution") - public ValidationExecutionStorage validationExecutionStorage( - @Value("${xplanbox.validation.fsdirectory}") Optional<Path> fsExecutionDir) throws IOException { - return new FileSystemValidationExecutionStorage(fsExecutionDir); - } - } diff --git a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java index f7b49c38b9..a7c511a257 100644 --- a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java +++ b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java @@ -20,6 +20,21 @@ */ package de.latlon.xplanbox.validator.executor.handler; +import static de.latlon.xplan.validator.web.shared.ArtifactType.PDF; + +import javax.xml.stream.XMLStreamException; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; @@ -27,7 +42,6 @@ import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; import de.latlon.xplan.validator.ValidatorException; import de.latlon.xplan.validator.XPlanValidator; import de.latlon.xplan.validator.configuration.ValidatorConfiguration; -import de.latlon.xplan.validator.geometric.GeometricValidator; import de.latlon.xplan.validator.report.ReportWriter; import de.latlon.xplan.validator.report.ValidatorReport; import de.latlon.xplan.validator.web.shared.ArtifactType; @@ -35,7 +49,6 @@ import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplan.validator.wms.ValidatorWmsManager; import de.latlon.xplanbox.api.commons.exception.InvalidXPlanGmlOrArchive; import jakarta.inject.Singleton; - import org.apache.http.client.utils.URIBuilder; import org.deegree.cs.exceptions.UnknownCRSException; import org.slf4j.Logger; @@ -43,21 +56,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.xml.stream.XMLStreamException; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -import static de.latlon.xplan.validator.web.shared.ArtifactType.PDF; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @@ -82,9 +80,6 @@ public class ValidationHandler { @Autowired private ValidatorConfiguration validatorConfiguration; - @Autowired - private GeometricValidator geometricValidator; - private XPlanArchiveCreator archiveCreator = new XPlanArchiveCreator(); public ValidatorReport validate(XPlanArchive archive, String xFileName, ValidationSettings validationSettings) diff --git a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/messagingrabbitmq/Receiver.java b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/messagingrabbitmq/Receiver.java index 4441caeaef..edb62ffab5 100644 --- a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/messagingrabbitmq/Receiver.java +++ b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/messagingrabbitmq/Receiver.java @@ -23,8 +23,8 @@ package de.latlon.xplanbox.validator.executor.messagingrabbitmq; import static de.latlon.core.validator.events.ValidationFinishedEvent.ValidationFinishedStatus.FAILED; import static de.latlon.core.validator.events.ValidationFinishedEvent.ValidationFinishedStatus.SUCCEEDED; import static de.latlon.core.validator.events.planimport.ImportFinishedEvent.ImportFinishedEventStatus.VALIDATION_FAILED; -import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE; -import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.MISSING; +import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.AVAILABLE_AND_VALID; +import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.EXTERNAL_REFERENCES_RESULT.MISSING_OR_INVALID; import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.VALIDATION_RESULT.INVALID; import static de.latlon.core.validator.events.planimport.ImportRequestedEvent.VALIDATION_RESULT.VALID; import static org.slf4j.LoggerFactory.getLogger; @@ -36,7 +36,9 @@ import de.latlon.core.validator.events.planimport.ImportFinishedEvent; import de.latlon.core.validator.events.planimport.ImportRequestedEvent; import de.latlon.core.validator.events.planimport.ImportValidationRequestedEvent; import de.latlon.xplanbox.api.commons.v1.model.ExternalReferenceStatusEnum; -import de.latlon.xplanbox.api.commons.v1.model.ValidationReport; +import de.latlon.xplanbox.api.commons.v2.model.CrsStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ImageFormatStatusEnum; +import de.latlon.xplanbox.api.commons.v2.model.ValidationReport; import de.latlon.xplanbox.validator.executor.PlanValidator; import org.slf4j.Logger; import org.springframework.amqp.rabbit.annotation.RabbitHandler; @@ -99,7 +101,11 @@ public class Receiver { validationReport.getExternalReferencesResult() .stream() .anyMatch(externalReferenceResult -> externalReferenceResult - .getStatus() == ExternalReferenceStatusEnum.MISSING) ? MISSING : AVAILABLE); + .getStatus() == ExternalReferenceStatusEnum.MISSING + || externalReferenceResult.getCrsStatus() == CrsStatusEnum.UNSUPPORTED + || externalReferenceResult.getImageFormatStatus() == ImageFormatStatusEnum.UNSUPPORTED) + ? MISSING_OR_INVALID : AVAILABLE_AND_VALID, + event.isSupportsGetPlanByIdAsZip()); eventSender.sendEvent(importRequestedEvent); } catch (Exception e) { diff --git a/xplan-validator/xplan-validator-executor/src/main/resources/application.properties b/xplan-validator/xplan-validator-executor/src/main/resources/application.properties index 61cd9f4955..15bc8cf5fc 100644 --- a/xplan-validator/xplan-validator-executor/src/main/resources/application.properties +++ b/xplan-validator/xplan-validator-executor/src/main/resources/application.properties @@ -48,3 +48,5 @@ xplanbox.validation.fsdirectory=${XPLAN_FS_DIRECTORY:/tmp/validation} xplanbox.validation.profiles=${XPLAN_VALIDATOR_PROFILES:} xplanbox.validation.s3.bucketName=${XPLAN_VALIDATION_S3_BUCKET_NAME:validation} xplanbox.validation.s3.bucketPublicUrl=${XPLAN_VALIDATION_S3_BUCKET_PUBLIC_URL} + +xplanbox.services.crs=${XPLAN_SERVICES_DEFAULT_CRS:EPSG:25832} \ No newline at end of file diff --git a/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/PlanValidatorTest.java b/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/PlanValidatorTest.java index 24c7f8325a..742e302a0e 100644 --- a/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/PlanValidatorTest.java +++ b/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/PlanValidatorTest.java @@ -38,10 +38,10 @@ import java.nio.file.Paths; import java.util.List; import com.fasterxml.jackson.databind.ObjectMapper; -import de.latlon.core.validator.events.ValidationRequestedEvent.MediaType; -import de.latlon.core.validator.events.ValidationRequestedEvent.OriginFile; import de.latlon.core.validator.events.EventSender; import de.latlon.core.validator.events.ValidationRequestedEvent; +import de.latlon.core.validator.events.ValidationRequestedEvent.MediaType; +import de.latlon.core.validator.events.ValidationRequestedEvent.OriginFile; import de.latlon.core.validator.events.v1.XPlanboxPublicV1Event; import de.latlon.core.validator.events.v1.XPlanboxPublicV1Event.EventType; import de.latlon.xplan.commons.archive.SemanticValidableXPlanArchive; @@ -51,6 +51,7 @@ import de.latlon.xplan.validator.semantic.profile.SemanticProfiles; import de.latlon.xplan.validator.semantic.report.SemanticValidatorResult; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplan.validator.web.shared.ValidationType; +import de.latlon.xplanbox.validator.executor.config.TestS3Context; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage; import de.latlon.xplanbox.validator.storage.ValidationExecutionStorage.ReportType; import org.json.JSONObject; @@ -63,13 +64,21 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; /** * @author <a href="mailto:guillemot@lat-lon.de">Marc Guillemot</a> * @since 8.0 */ @SpringBootTest(classes = { SpringBootApp.class }) +@Import(TestS3Context.class) +@TestPropertySource( + properties = { "xplanbox.s3.bucketName=test-bucket", "xplanbox.validation.s3.bucketName=test-bucket-validation", + "xplanbox.validation.s3.bucketPublicUrl=http://localhost" }) +@ActiveProfiles("test") class PlanValidatorTest { @TestConfiguration @@ -125,8 +134,8 @@ class PlanValidatorTest { List<ValidationType> validationTypes = List.of(SYNTACTIC, SEMANTIC, GEOMETRIC); ValidationSettings settings = new ValidationSettings("edfd613e-b85d-4ea6-9b97-bb33712b1ba6", validationTypes, null); - ValidationRequestedEvent event = new ValidationRequestedEvent(uuid, settings, - null /* filename */, MediaType.JSON, OriginFile.GML); + ValidationRequestedEvent event = new ValidationRequestedEvent(uuid, settings, null, MediaType.JSON, + OriginFile.GML); validator.validate(event); @@ -150,7 +159,7 @@ class PlanValidatorTest { List<ValidationType> validationTypes = List.of(SYNTACTIC, SEMANTIC, GEOMETRIC); List<String> profiles = List.of(semanticProfiles.getProfileValidators().get(0).getId()); ValidationSettings settings = new ValidationSettings("8dc3163c-a361-49b8-9c53-3733f7d61274", validationTypes, - profiles, null /* extendedOptions */); + profiles, null); ValidationRequestedEvent event = new ValidationRequestedEvent(uuid, settings, null, MediaType.JSON, OriginFile.ZIP); @@ -167,9 +176,10 @@ class PlanValidatorTest { String uuid = validationExecutionStorage.addPlanToValidate(pathToPlan, VALIDATION_REQUESTED); List<ValidationType> validationTypes = List.of(SYNTACTIC, SEMANTIC, GEOMETRIC); - List<String> profiles = List.of(semanticProfiles.getProfileValidators().get(0).getId()); + List<String> profiles = List.of(semanticProfiles.getProfileValidators().get(0).getId(), + semanticProfiles.getProfileValidators().get(1).getId()); ValidationSettings settings = new ValidationSettings("6463c72f-4a7d-40d0-a129-3de95fdd0eb8", validationTypes, - profiles, null /* extendedOptions */); + profiles, null); ValidationRequestedEvent event = new ValidationRequestedEvent(uuid, settings, null, MediaType.JSON, OriginFile.ZIP); diff --git a/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/config/TestS3Context.java b/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/config/TestS3Context.java new file mode 100644 index 0000000000..2c7d7d17ce --- /dev/null +++ b/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/config/TestS3Context.java @@ -0,0 +1,67 @@ +package de.latlon.xplanbox.validator.executor.config; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.AnonymousAWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import io.findify.s3mock.S3Mock; +import jakarta.annotation.PreDestroy; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.test.util.TestSocketUtils; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Configuration +public class TestS3Context { + + private final int port = TestSocketUtils.findAvailableTcpPort(); + + private AmazonS3 s3TestClient; + + private S3Mock s3Mock; + + @Bean + public S3Mock s3Mock() { + this.s3Mock = new S3Mock.Builder().withPort(port).withInMemoryBackend().build(); + s3Mock.start(); + return s3Mock; + } + + @Bean + @Primary + public AmazonS3 s3Client(S3Mock s3Mock, @Value("${xplanbox.s3.bucketName}") String bucketName) { + AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration( + "http://localhost:" + port, "eu-central-1"); + AmazonS3 client = AmazonS3ClientBuilder.standard() + .withPathStyleAccessEnabled(true) + .withEndpointConfiguration(endpoint) + .withCredentials(new AWSStaticCredentialsProvider(new AnonymousAWSCredentials())) + .build(); + client.createBucket(bucketName); + s3TestClient = client; + return client; + } + + @Bean + @Primary + public AWSCredentials credentials() { + return new BasicAWSCredentials("accessKeyId", "secretKey"); + } + + @PreDestroy + public void shutdown() { + s3TestClient.shutdown(); + if (s3Mock != null) { + s3Mock.stop(); + } + } + +} diff --git a/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandlerTest.java b/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandlerTest.java index 5287428ec0..d7e81232df 100644 --- a/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandlerTest.java +++ b/xplan-validator/xplan-validator-executor/src/test/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandlerTest.java @@ -43,34 +43,32 @@ import de.latlon.xplan.validator.report.ValidatorReport; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.exception.InvalidXPlanGmlOrArchive; import de.latlon.xplanbox.validator.executor.SpringBootApp; -import org.junit.jupiter.api.BeforeAll; +import de.latlon.xplanbox.validator.executor.config.TestS3Context; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @SpringBootTest(classes = { SpringBootApp.class }) +@Import(TestS3Context.class) +@TestPropertySource( + properties = { "xplanbox.s3.bucketName=test-bucket", "xplanbox.validation.s3.bucketName=test-bucket-validation", + "xplanbox.validation.s3.bucketPublicUrl=http://localhost" }) +@ActiveProfiles("test") public class ValidationHandlerTest { @MockBean EventSender eventSender; - @TempDir - public static Path tempFolder; - - @BeforeAll - static void setupFakedWorkspace() throws IOException { - Path workspace = tempFolder.resolve("xplan-webservices-validator-wms-memory-workspace"); - Files.createDirectories(workspace); - System.setProperty("DEEGREE_WORKSPACE_ROOT", workspace.getParent().toString()); - } - @Autowired private ValidationHandler validationHandler; diff --git a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json index 98e35f8add..a211c8cc39 100644 --- a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json +++ b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json @@ -1,7 +1,6 @@ { "date": "-fixed-for-comparison-", "valid": false, - "externalReferences": [], "externalReferencesResult": [], "rulesMetadata": { "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.9", diff --git a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report6.expected.json b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report6.expected.json index 847c3dbb47..b5f7ce090c 100644 --- a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report6.expected.json +++ b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report6.expected.json @@ -1 +1,1711 @@ -{"documentSummary":[{"name":"Nr. 108 Holstener Weg","type":"BP_Plan"}],"version":"XPLAN_41","filename":null,"name":"8dc3163c-a361-49b8-9c53-3733f7d61274","bbox":{"minX":7.373668092967802,"minY":52.33234200586314,"maxX":7.377600099759094,"maxY":52.33376312995529,"crs":"EPSG:4326"},"date":"2024-07-26T10:16:30.191+0200","valid":false,"status":"Die Validierung wurde ausgeführt.","externalReferences":[],"externalReferencesResult":[],"rulesMetadata":{"version":"1.1.9","source":"https://gitlab.opencode.de/xleitstelle/xplanung/validierungsregeln/standard/-/tree/v1.1.9"},"validationResult":{"semantisch":{"valid":true,"rules":[{"name":"2.1.2.1","isValid":true,"message":"Verwendung vorgegebenen URNs für das uom-Attribut von GML-MeasureType","warnedFeatures":[],"erroredFeatures":[]},{"name":"2.1.3.1","isValid":true,"message":"Angabe eines Standard CRS","warnedFeatures":[],"erroredFeatures":[]},{"name":"2.2.1.1","isValid":true,"message":"Flächenschlussbedingung","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.1.1","isValid":true,"message":"Relationen auf Text-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.1.2","isValid":true,"message":"Relationen auf Begründungs-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.2.1","isValid":true,"message":"Relation auf Präsentationsobjekte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.2.2","isValid":true,"message":"Relation auf Fachobjekte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.2.3","isValid":true,"message":"Relation auf Basis-Rasterplan","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.1","isValid":true,"message":"Relationen auf Text-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.2","isValid":true,"message":"Relationen auf Begründungs-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.3","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.4","isValid":true,"message":"Rückwärts-Referenzen auf Präsentationsobjekte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.1.1","isValid":true,"message":"Spezifikation des Textinhalts","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.2.1","isValid":true,"message":"Spezifikation des Textinhalts","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.3.1","isValid":true,"message":"Konsistenz der verschiedenen Höhenangaben","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.3.2","isValid":true,"message":"Verwendung von Höhenangaben, die sich auf eine auf Bezugshöhe beziehen, die auf Planebene definiert ist","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.3.3","isValid":true,"message":"Konsistenz der Attribute hoehenbezug und abweichenderHoehenbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.4.1","isValid":true,"message":"Verweis auf Dokumente.","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.5.1","isValid":true,"message":"Konsistenz der Attribute ags (Amtlicher Gemeindeschlüssel) und rs (Regionalschlüssel).","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.1.1","isValid":true,"message":"Spezifikation des Fachobjekt-Attributs bei nicht-freien Präsentationsobjekten","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.1.2","isValid":true,"message":"Konsistenz der Attribute art und index","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.1.3","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.2.1","isValid":true,"message":"Einschränkung des Raumbezugs auf Punktgeometrie.","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.3.1","isValid":true,"message":"Einschränkung des Raumbezugs auf Liniengeometrie.","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.4.1","isValid":true,"message":"Einschränkung des Raumbezugs auf Flächengeometrie.","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.1.1","isValid":true,"message":"Einschränkung der Relation bereich","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.2.1","isValid":true,"message":"Einschränkung der Relation inhaltBPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.2.2","isValid":true,"message":"Einschränkung der Relation rasterAenderung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.2.3","isValid":true,"message":"Einschränkung der Relation gehoertZuPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.1","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchFlaeche","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.2","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchMassnahme","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.3","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchSPEMassnahme","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.4","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchSPEFlaeche","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.5","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.6","isValid":true,"message":"BPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.7","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchABE","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.4.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.4.2","isValid":true,"message":"Einschränkung auf Flächengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.5.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.5.2","isValid":true,"message":"Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.6.1","isValid":true,"message":"Ãœberlagerungsobjekte gehören nie zum Flächenschluss.","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.7.1","isValid":true,"message":"Flächenschlussobjekte auf Ebene 0 gehören immer zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.8.1","isValid":true,"message":"Einschränkung auf Liniengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.9.1","isValid":true,"message":"Einschränkung auf Punktgeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.1","isValid":true,"message":"Konsistenz der Angaben zur GFZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.2","isValid":true,"message":"Konsistenz der Angaben zur GF","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.3","isValid":true,"message":"Konsistenz der Angaben zur GFZ und GF","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.4","isValid":true,"message":"Konsistenz der Angaben zur BMZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.5","isValid":true,"message":"Konsistenz der Angaben zur BM","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.6","isValid":true,"message":"Konsistenz der Angaben zur BMZ und BM","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.7","isValid":true,"message":"Konsistenz der Angaben zur GRZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.8","isValid":true,"message":"Konsistenz der Angaben zur GR","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.9","isValid":true,"message":"Konsistenz der Angaben zur GRZ und GR","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.10","isValid":true,"message":"Konsistenz der Angaben zu Z","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.11","isValid":true,"message":"Konsistenz der Angaben zu ZU","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.3.1","isValid":true,"message":"Konsistenz der Angaben zur Dachneigung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.3.2","isValid":true,"message":"Konsistenz der Attribute dachform und detaillierteDachform","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.1","isValid":true,"message":"Relation abweichungText","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.2","isValid":true,"message":"Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.3","isValid":true,"message":"Konsistenz der Attribute besondereArtDerBaulNutzung und sondernutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.4","isValid":true,"message":"Konsistenz der Attribute bauweise und abweichendeBauweise","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.5","isValid":true,"message":"Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sondernutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.2.1","isValid":true,"message":"Relation baugrenze","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.2.2","isValid":true,"message":"Relation baulinie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.10.1","isValid":true,"message":"Konsistenz der Attribute typ und sonstTyp","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.13.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.13.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.13.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.3","isValid":true,"message":"Einschränkung der Relation eigentümer","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.4","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.15.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.6.3.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4)","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.1.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.4","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.2.1","isValid":true,"message":"Konsistenz der Attribute massnahme und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.2.2","isValid":true,"message":"Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.2.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.3.1","isValid":true,"message":"Konsistenz der Attribute massnahme und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.3.2","isValid":true,"message":"Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.3.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.1","isValid":true,"message":"Konsistenz der Attribute massnahme und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.2","isValid":true,"message":"Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.4","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.6.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.10.2.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.7","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.1.1","isValid":true,"message":"Einschränkung der Relation begrenzungslinie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.2.1","isValid":true,"message":"Einschränkung der Relation begrenzungslinie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.2.2","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.3.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.13.1.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.13.2.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.2.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.3.1","isValid":true,"message":"Konsistenz der Attribute startWinkel und endWinkel","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.3.2","isValid":true,"message":"Kein flächenhafter Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.4.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.6.1","isValid":true,"message":"Notwendige Spezifikation einer Textlichen Darstellung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.7.1","isValid":true,"message":"Verwendung der Relation hoehenangabe","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.7.2","isValid":true,"message":"Kein flächenhafter Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.1.1","isValid":true,"message":"Einschränkung der Relation bereich","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.1.2","isValid":true,"message":"Konsistenz der Attribute planArt und sonstPlanArt","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.2.1","isValid":true,"message":"Einschränkung der Relation inhaltFPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.2.2","isValid":true,"message":"Einschränkung der Relation rasterAenderung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.2.3","isValid":true,"message":"Einschränkung der Relation gehoertZuPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.1","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchFlaeche","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.2","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchSPE","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.3","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.4","isValid":true,"message":"FPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.4.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.4.2","isValid":true,"message":"Einschränkung auf Flächengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.5.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.5.2","isValid":true,"message":"Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.6.1","isValid":true,"message":"Ãœberlagerungsobjekte gehören nie zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.7.1","isValid":true,"message":"Flächenschlussobjekte der Ebene 0 gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.8.1","isValid":true,"message":"Einschränkung auf Liniengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.9.1","isValid":true,"message":"Einschränkung auf Punktgeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.1","isValid":true,"message":"Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.2","isValid":true,"message":"Konsistenz der Attribute besondereArtDerBaulNutzung und sonderNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.3","isValid":true,"message":"Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sonderNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.4","isValid":true,"message":"Konsistenz der Angaben zur GFZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.7","isValid":true,"message":"Einschränkung des Raumbezugs","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.8","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation einer einzigen detaillierter Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.4","isValid":true,"message":"Einschränkung des Raumbezugs","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.5","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.1.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.7","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.1.1","isValid":true,"message":"Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.2.1","isValid":true,"message":"Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.5","isValid":true,"message":"Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2, 3)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.7","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.8.1.1","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.8.1.2","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.8.1.3","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.1.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.1.2","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.2.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.2.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.3","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.4","isValid":true,"message":"Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.3.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.4.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.6.1","isValid":true,"message":"Notwendige Spezifikation einer Textlichen Darstellung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.1.1","isValid":true,"message":"Einschränkung der Relation bereich","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.2.1","isValid":true,"message":"Einschränkung der Relation inhaltSoPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.2.2","isValid":true,"message":"Einschränkung der Relation rasterAenderung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.2.3","isValid":true,"message":"Einschränkung der Relation gehoertZuPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.3.1","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.3.2","isValid":true,"message":"SOPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.4.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.4.2","isValid":true,"message":"Einschränkung auf Flächengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.5.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.5.2","isValid":true,"message":"Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.6.1","isValid":true,"message":"Einschränkung auf Liniengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.7.1","isValid":true,"message":"Einschränkung auf Punktgeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.1.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.1.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.2.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.2.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.3.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.4.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.5.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und besondereArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.5.2","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung, besondereArtDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.5.3","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.6.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.7.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.7.2","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.8.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.1.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.1.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.2.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.2.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.3.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.3.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.4.1.1","isValid":true,"message":"Konsistenz der Attribute gebietsArt und sonstGebietsArt","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.4.1.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.5.1.1","isValid":true,"message":"Konsistenz von typ und sonstTyp","warnedFeatures":[],"erroredFeatures":[]}]},"geometrisch":{"valid":false,"errors":["XPlanAuszug (Zeile 1, Spalte 1): 2.2.2.1: äußerer Ring verwendet falsche Laufrichtung (CW)."],"warnings":[]},"syntaktisch":{"valid":true,"messages":[]},"profile":[{"name":"test1","description":"description1","ergebnis":{"valid":false,"rules":[]}}]}} \ No newline at end of file +{ + "date": "-fixed-for-comparison-", + "valid": false, + "externalReferencesResult": [], + "rulesMetadata": { + "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.9", + "version": "1.1.9" + }, + "filename": null, + "validationResult": { + "syntaktisch": { + "valid": true, + "messages": [] + }, + "profile": [ + { + "rulesMetadata": { + "name": "test1", + "description": "description1", + "id": "id1", + "source": "unbekannt", + "version": "0.1" + }, + "ergebnis": { + "valid": false, + "rules": [] + } + } + ], + "semantisch": { + "valid": true, + "rules": [ + { + "isValid": true, + "name": "2.1.2.1", + "warnedFeatures": [], + "message": "Verwendung vorgegebenen URNs für das uom-Attribut von GML-MeasureType", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "2.1.3.1", + "warnedFeatures": [], + "message": "Angabe eines Standard CRS", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "2.2.1.1", + "warnedFeatures": [], + "message": "Flächenschlussbedingung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.1.1", + "warnedFeatures": [], + "message": "Relationen auf Text-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.1.2", + "warnedFeatures": [], + "message": "Relationen auf Begründungs-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.2.1", + "warnedFeatures": [], + "message": "Relation auf Präsentationsobjekte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.2.2", + "warnedFeatures": [], + "message": "Relation auf Fachobjekte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.2.3", + "warnedFeatures": [], + "message": "Relation auf Basis-Rasterplan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.1", + "warnedFeatures": [], + "message": "Relationen auf Text-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.2", + "warnedFeatures": [], + "message": "Relationen auf Begründungs-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.3", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.4", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Präsentationsobjekte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.1.1", + "warnedFeatures": [], + "message": "Spezifikation des Textinhalts", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.2.1", + "warnedFeatures": [], + "message": "Spezifikation des Textinhalts", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.3.1", + "warnedFeatures": [], + "message": "Konsistenz der verschiedenen Höhenangaben", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.3.2", + "warnedFeatures": [], + "message": "Verwendung von Höhenangaben, die sich auf eine auf Bezugshöhe beziehen, die auf Planebene definiert ist", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.3.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute hoehenbezug und abweichenderHoehenbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.4.1", + "warnedFeatures": [], + "message": "Verweis auf Dokumente.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.5.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute ags (Amtlicher Gemeindeschlüssel) und rs (Regionalschlüssel).", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.1.1", + "warnedFeatures": [], + "message": "Spezifikation des Fachobjekt-Attributs bei nicht-freien Präsentationsobjekten", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute art und index", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.1.3", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.2.1", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs auf Punktgeometrie.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.3.1", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs auf Liniengeometrie.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.4.1", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs auf Flächengeometrie.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation bereich", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation inhaltBPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.2.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation rasterAenderung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.2.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation gehoertZuPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchFlaeche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchMassnahme", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchSPEMassnahme", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.4", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchSPEFlaeche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.5", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.6", + "warnedFeatures": [], + "message": "BPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.7", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchABE", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.4.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.4.2", + "warnedFeatures": [], + "message": "Einschränkung auf Flächengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.5.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.5.2", + "warnedFeatures": [], + "message": "Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.6.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekte gehören nie zum Flächenschluss.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.7.1", + "warnedFeatures": [], + "message": "Flächenschlussobjekte auf Ebene 0 gehören immer zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.8.1", + "warnedFeatures": [], + "message": "Einschränkung auf Liniengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.9.1", + "warnedFeatures": [], + "message": "Einschränkung auf Punktgeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GFZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.2", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GF", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GFZ und GF", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.4", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur BMZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.5", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur BM", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.6", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur BMZ und BM", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.7", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GRZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.8", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GR", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.9", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GRZ und GR", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.10", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zu Z", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.11", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zu ZU", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur Dachneigung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.3.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute dachform und detaillierteDachform", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.1", + "warnedFeatures": [], + "message": "Relation abweichungText", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute besondereArtDerBaulNutzung und sondernutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute bauweise und abweichendeBauweise", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sondernutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.2.1", + "warnedFeatures": [], + "message": "Relation baugrenze", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.2.2", + "warnedFeatures": [], + "message": "Relation baulinie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.10.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute typ und sonstTyp", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.13.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.13.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.13.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation eigentümer", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.15.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.6.3.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.4", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.2.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.2.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.3.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.3.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.4", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.6.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.10.2.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.7", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation begrenzungslinie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation begrenzungslinie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.2.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.3.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.13.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.13.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.2.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute startWinkel und endWinkel", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.3.2", + "warnedFeatures": [], + "message": "Kein flächenhafter Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.4.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.6.1", + "warnedFeatures": [], + "message": "Notwendige Spezifikation einer Textlichen Darstellung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.7.1", + "warnedFeatures": [], + "message": "Verwendung der Relation hoehenangabe", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.7.2", + "warnedFeatures": [], + "message": "Kein flächenhafter Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation bereich", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute planArt und sonstPlanArt", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation inhaltFPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.2.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation rasterAenderung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.2.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation gehoertZuPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchFlaeche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchSPE", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.3", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.4", + "warnedFeatures": [], + "message": "FPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.4.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.4.2", + "warnedFeatures": [], + "message": "Einschränkung auf Flächengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.5.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.5.2", + "warnedFeatures": [], + "message": "Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.6.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekte gehören nie zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.7.1", + "warnedFeatures": [], + "message": "Flächenschlussobjekte der Ebene 0 gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.8.1", + "warnedFeatures": [], + "message": "Einschränkung auf Liniengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.9.1", + "warnedFeatures": [], + "message": "Einschränkung auf Punktgeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute besondereArtDerBaulNutzung und sonderNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sonderNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GFZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.7", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.8", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation einer einzigen detaillierter Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.4", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.5", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.7", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2, 3)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.7", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.8.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.8.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.8.1.3", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.1.2", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.2.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.3.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.4.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.6.1", + "warnedFeatures": [], + "message": "Notwendige Spezifikation einer Textlichen Darstellung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation bereich", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation inhaltSoPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.2.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation rasterAenderung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.2.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation gehoertZuPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.3.1", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.3.2", + "warnedFeatures": [], + "message": "SOPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.4.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.4.2", + "warnedFeatures": [], + "message": "Einschränkung auf Flächengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.5.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.5.2", + "warnedFeatures": [], + "message": "Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.6.1", + "warnedFeatures": [], + "message": "Einschränkung auf Liniengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.7.1", + "warnedFeatures": [], + "message": "Einschränkung auf Punktgeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.1.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.2.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.4.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.5.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und besondereArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.5.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung, besondereArtDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.5.3", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.6.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.7.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.7.2", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.8.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.1.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.2.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.3.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.4.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute gebietsArt und sonstGebietsArt", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.4.1.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.5.1.1", + "warnedFeatures": [], + "message": "Konsistenz von typ und sonstTyp", + "erroredFeatures": [] + } + ] + }, + "geometrisch": { + "valid": false, + "warnings": [], + "errors": [ + "XPlanAuszug (Zeile 1, Spalte 1): 2.2.2.1: äußerer Ring verwendet falsche Laufrichtung (CW)." + ] + } + }, + "bbox": { + "minY": 52.33234200586314, + "minX": 7.373668092967802, + "crs": "EPSG:4326", + "maxY": 52.33376312995529, + "maxX": 7.377600099759094 + }, + "name": "8dc3163c-a361-49b8-9c53-3733f7d61274", + "version": "XPLAN_41", + "documentSummary": [ + { + "name": "Nr. 108 Holstener Weg", + "type": "BP_Plan" + } + ], + "status": "Die Validierung wurde ausgeführt." +} \ No newline at end of file diff --git a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report7.expected.json b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report7.expected.json index 0e22c169b5..b138c22b5d 100644 --- a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report7.expected.json +++ b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report7.expected.json @@ -1 +1,1724 @@ -{"documentSummary":[{"name":"Nr. 108 Holstener Weg","type":"BP_Plan"}],"version":"XPLAN_41","filename":null,"name":"6463c72f-4a7d-40d0-a129-3de95fdd0eb8","bbox":{"minX":7.373668092967802,"minY":52.33234200586314,"maxX":7.377600099759094,"maxY":52.33376312995529,"crs":"EPSG:4326"},"date":"2024-07-26T10:16:25.697+0200","valid":false,"status":"Die Validierung wurde ausgeführt.","externalReferences":[],"externalReferencesResult":[],"rulesMetadata":{"version":"1.1.9","source":"https://gitlab.opencode.de/xleitstelle/xplanung/validierungsregeln/standard/-/tree/v1.1.9"},"validationResult":{"semantisch":{"valid":true,"rules":[{"name":"2.1.2.1","isValid":true,"message":"Verwendung vorgegebenen URNs für das uom-Attribut von GML-MeasureType","warnedFeatures":[],"erroredFeatures":[]},{"name":"2.1.3.1","isValid":true,"message":"Angabe eines Standard CRS","warnedFeatures":[],"erroredFeatures":[]},{"name":"2.2.1.1","isValid":true,"message":"Flächenschlussbedingung","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.1.1","isValid":true,"message":"Relationen auf Text-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.1.2","isValid":true,"message":"Relationen auf Begründungs-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.2.1","isValid":true,"message":"Relation auf Präsentationsobjekte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.2.2","isValid":true,"message":"Relation auf Fachobjekte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.2.3","isValid":true,"message":"Relation auf Basis-Rasterplan","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.1","isValid":true,"message":"Relationen auf Text-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.2","isValid":true,"message":"Relationen auf Begründungs-Abschnitte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.3","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.1.3.4","isValid":true,"message":"Rückwärts-Referenzen auf Präsentationsobjekte","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.1.1","isValid":true,"message":"Spezifikation des Textinhalts","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.2.1","isValid":true,"message":"Spezifikation des Textinhalts","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.3.1","isValid":true,"message":"Konsistenz der verschiedenen Höhenangaben","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.3.2","isValid":true,"message":"Verwendung von Höhenangaben, die sich auf eine auf Bezugshöhe beziehen, die auf Planebene definiert ist","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.3.3","isValid":true,"message":"Konsistenz der Attribute hoehenbezug und abweichenderHoehenbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.4.1","isValid":true,"message":"Verweis auf Dokumente.","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.2.5.1","isValid":true,"message":"Konsistenz der Attribute ags (Amtlicher Gemeindeschlüssel) und rs (Regionalschlüssel).","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.1.1","isValid":true,"message":"Spezifikation des Fachobjekt-Attributs bei nicht-freien Präsentationsobjekten","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.1.2","isValid":true,"message":"Konsistenz der Attribute art und index","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.1.3","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.2.1","isValid":true,"message":"Einschränkung des Raumbezugs auf Punktgeometrie.","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.3.1","isValid":true,"message":"Einschränkung des Raumbezugs auf Liniengeometrie.","warnedFeatures":[],"erroredFeatures":[]},{"name":"3.3.4.1","isValid":true,"message":"Einschränkung des Raumbezugs auf Flächengeometrie.","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.1.1","isValid":true,"message":"Einschränkung der Relation bereich","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.2.1","isValid":true,"message":"Einschränkung der Relation inhaltBPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.2.2","isValid":true,"message":"Einschränkung der Relation rasterAenderung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.2.3","isValid":true,"message":"Einschränkung der Relation gehoertZuPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.1","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchFlaeche","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.2","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchMassnahme","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.3","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchSPEMassnahme","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.4","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchSPEFlaeche","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.5","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.6","isValid":true,"message":"BPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.3.7","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchABE","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.4.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.4.2","isValid":true,"message":"Einschränkung auf Flächengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.5.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.5.2","isValid":true,"message":"Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.6.1","isValid":true,"message":"Ãœberlagerungsobjekte gehören nie zum Flächenschluss.","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.7.1","isValid":true,"message":"Flächenschlussobjekte auf Ebene 0 gehören immer zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.8.1","isValid":true,"message":"Einschränkung auf Liniengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.1.9.1","isValid":true,"message":"Einschränkung auf Punktgeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.1","isValid":true,"message":"Konsistenz der Angaben zur GFZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.2","isValid":true,"message":"Konsistenz der Angaben zur GF","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.3","isValid":true,"message":"Konsistenz der Angaben zur GFZ und GF","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.4","isValid":true,"message":"Konsistenz der Angaben zur BMZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.5","isValid":true,"message":"Konsistenz der Angaben zur BM","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.6","isValid":true,"message":"Konsistenz der Angaben zur BMZ und BM","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.7","isValid":true,"message":"Konsistenz der Angaben zur GRZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.8","isValid":true,"message":"Konsistenz der Angaben zur GR","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.9","isValid":true,"message":"Konsistenz der Angaben zur GRZ und GR","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.10","isValid":true,"message":"Konsistenz der Angaben zu Z","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.2.11","isValid":true,"message":"Konsistenz der Angaben zu ZU","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.3.1","isValid":true,"message":"Konsistenz der Angaben zur Dachneigung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.3.2","isValid":true,"message":"Konsistenz der Attribute dachform und detaillierteDachform","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.1","isValid":true,"message":"Relation abweichungText","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.2","isValid":true,"message":"Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.3","isValid":true,"message":"Konsistenz der Attribute besondereArtDerBaulNutzung und sondernutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.4","isValid":true,"message":"Konsistenz der Attribute bauweise und abweichendeBauweise","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.1.5","isValid":true,"message":"Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sondernutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.2.1","isValid":true,"message":"Relation baugrenze","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.2.2","isValid":true,"message":"Relation baulinie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.10.1","isValid":true,"message":"Konsistenz der Attribute typ und sonstTyp","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.13.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.13.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.13.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.3","isValid":true,"message":"Einschränkung der Relation eigentümer","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.14.4","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.5.15.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.6.3.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4)","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.7.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.1.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.2.4","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.8.3.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.2.1","isValid":true,"message":"Konsistenz der Attribute massnahme und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.2.2","isValid":true,"message":"Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.2.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.3.1","isValid":true,"message":"Konsistenz der Attribute massnahme und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.3.2","isValid":true,"message":"Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.3.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.1","isValid":true,"message":"Konsistenz der Attribute massnahme und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.2","isValid":true,"message":"Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.5.4","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.9.6.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.10.2.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.11.1.7","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.1.1","isValid":true,"message":"Einschränkung der Relation begrenzungslinie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.2.1","isValid":true,"message":"Einschränkung der Relation begrenzungslinie","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.2.2","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.12.3.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.13.1.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.13.2.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.2.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.3.1","isValid":true,"message":"Konsistenz der Attribute startWinkel und endWinkel","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.3.2","isValid":true,"message":"Kein flächenhafter Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.4.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.6.1","isValid":true,"message":"Notwendige Spezifikation einer Textlichen Darstellung","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.7.1","isValid":true,"message":"Verwendung der Relation hoehenangabe","warnedFeatures":[],"erroredFeatures":[]},{"name":"4.14.7.2","isValid":true,"message":"Kein flächenhafter Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.1.1","isValid":true,"message":"Einschränkung der Relation bereich","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.1.2","isValid":true,"message":"Konsistenz der Attribute planArt und sonstPlanArt","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.2.1","isValid":true,"message":"Einschränkung der Relation inhaltFPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.2.2","isValid":true,"message":"Einschränkung der Relation rasterAenderung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.2.3","isValid":true,"message":"Einschränkung der Relation gehoertZuPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.1","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchFlaeche","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.2","isValid":true,"message":"Einschränkung der Relation wirdAusgeglichenDurchSPE","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.3","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.3.4","isValid":true,"message":"FPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.4.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.4.2","isValid":true,"message":"Einschränkung auf Flächengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.5.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.5.2","isValid":true,"message":"Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.6.1","isValid":true,"message":"Ãœberlagerungsobjekte gehören nie zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.7.1","isValid":true,"message":"Flächenschlussobjekte der Ebene 0 gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.8.1","isValid":true,"message":"Einschränkung auf Liniengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.1.9.1","isValid":true,"message":"Einschränkung auf Punktgeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.1","isValid":true,"message":"Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.2","isValid":true,"message":"Konsistenz der Attribute besondereArtDerBaulNutzung und sonderNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.3","isValid":true,"message":"Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sonderNutzung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.3.1.4","isValid":true,"message":"Konsistenz der Angaben zur GFZ","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.7","isValid":true,"message":"Einschränkung des Raumbezugs","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.1.8","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation einer einzigen detaillierter Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.4","isValid":true,"message":"Einschränkung des Raumbezugs","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.4.2.5","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.1.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.2.3","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.5","isValid":true,"message":"Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.5.3.7","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.1.1","isValid":true,"message":"Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.2.1","isValid":true,"message":"Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.6.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.3","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.4","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.5","isValid":true,"message":"Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2, 3)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.6","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.7.1.7","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.8.1.1","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.8.1.2","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.8.1.3","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.1.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.1.2","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.2.1","isValid":true,"message":"Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.9.2.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.1.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.2","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.3","isValid":true,"message":"Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.2.4","isValid":true,"message":"Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2)","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.3.1","isValid":true,"message":"Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.4.1","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"5.10.6.1","isValid":true,"message":"Notwendige Spezifikation einer Textlichen Darstellung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.1.1","isValid":true,"message":"Einschränkung der Relation bereich","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.2.1","isValid":true,"message":"Einschränkung der Relation inhaltSoPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.2.2","isValid":true,"message":"Einschränkung der Relation rasterAenderung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.2.3","isValid":true,"message":"Einschränkung der Relation gehoertZuPlan","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.3.1","isValid":true,"message":"Rückwärts-Referenzen auf Plan-Bereiche","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.3.2","isValid":true,"message":"SOPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.4.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.4.2","isValid":true,"message":"Einschränkung auf Flächengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.5.1","isValid":true,"message":"Nur Flächenobjekte der Basisebene gehören zum Flächenschluss","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.5.2","isValid":true,"message":"Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.6.1","isValid":true,"message":"Einschränkung auf Liniengeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.1.7.1","isValid":true,"message":"Einschränkung auf Punktgeometrie","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.1.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.1.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.2.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.2.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.3.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.4.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.5.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und besondereArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.5.2","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung, besondereArtDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.5.3","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.6.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.7.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.7.2","isValid":true,"message":"Flächenschlussobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.2.8.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.1.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.1.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.2.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.2.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.3.1","isValid":true,"message":"Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.3.3.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.4.1.1","isValid":true,"message":"Konsistenz der Attribute gebietsArt und sonstGebietsArt","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.4.1.2","isValid":true,"message":"Ãœberlagerungsobjekt bei flächenhaftem Raumbezug","warnedFeatures":[],"erroredFeatures":[]},{"name":"6.5.1.1","isValid":true,"message":"Konsistenz von typ und sonstTyp","warnedFeatures":[],"erroredFeatures":[]}]},"geometrisch":{"valid":false,"errors":["XPlanAuszug (Zeile 1, Spalte 1): 2.2.2.1: äußerer Ring verwendet falsche Laufrichtung (CW)."],"warnings":[]},"syntaktisch":{"valid":true,"messages":[]},"profile":[{"name":"test1","description":"description1","ergebnis":{"valid":false,"rules":[]}}]}} \ No newline at end of file +{ + "date": "-fixed-for-comparison-", + "valid": false, + "externalReferencesResult": [], + "rulesMetadata": { + "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.9", + "version": "1.1.9" + }, + "filename": null, + "validationResult": { + "syntaktisch": { + "valid": true, + "messages": [] + }, + "profile": [ + { + "rulesMetadata": { + "name": "test1", + "description": "description1", + "id": "id1", + "source": "unbekannt", + "version": "0.1" + }, + "ergebnis": { + "valid": false, + "rules": [] + } + }, + { + "rulesMetadata": { + "name": "test2", + "description": "description2", + "id": "id2", + "source": "lokal", + "version": "0.2" + }, + "ergebnis": { + "valid": false, + "rules": [] + } + } + ], + "semantisch": { + "valid": true, + "rules": [ + { + "isValid": true, + "name": "2.1.2.1", + "warnedFeatures": [], + "message": "Verwendung vorgegebenen URNs für das uom-Attribut von GML-MeasureType", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "2.1.3.1", + "warnedFeatures": [], + "message": "Angabe eines Standard CRS", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "2.2.1.1", + "warnedFeatures": [], + "message": "Flächenschlussbedingung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.1.1", + "warnedFeatures": [], + "message": "Relationen auf Text-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.1.2", + "warnedFeatures": [], + "message": "Relationen auf Begründungs-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.2.1", + "warnedFeatures": [], + "message": "Relation auf Präsentationsobjekte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.2.2", + "warnedFeatures": [], + "message": "Relation auf Fachobjekte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.2.3", + "warnedFeatures": [], + "message": "Relation auf Basis-Rasterplan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.1", + "warnedFeatures": [], + "message": "Relationen auf Text-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.2", + "warnedFeatures": [], + "message": "Relationen auf Begründungs-Abschnitte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.3", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.1.3.4", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Präsentationsobjekte", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.1.1", + "warnedFeatures": [], + "message": "Spezifikation des Textinhalts", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.2.1", + "warnedFeatures": [], + "message": "Spezifikation des Textinhalts", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.3.1", + "warnedFeatures": [], + "message": "Konsistenz der verschiedenen Höhenangaben", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.3.2", + "warnedFeatures": [], + "message": "Verwendung von Höhenangaben, die sich auf eine auf Bezugshöhe beziehen, die auf Planebene definiert ist", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.3.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute hoehenbezug und abweichenderHoehenbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.4.1", + "warnedFeatures": [], + "message": "Verweis auf Dokumente.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.2.5.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute ags (Amtlicher Gemeindeschlüssel) und rs (Regionalschlüssel).", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.1.1", + "warnedFeatures": [], + "message": "Spezifikation des Fachobjekt-Attributs bei nicht-freien Präsentationsobjekten", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute art und index", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.1.3", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.2.1", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs auf Punktgeometrie.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.3.1", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs auf Liniengeometrie.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "3.3.4.1", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs auf Flächengeometrie.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation bereich", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation inhaltBPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.2.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation rasterAenderung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.2.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation gehoertZuPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchFlaeche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchMassnahme", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchSPEMassnahme", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.4", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchSPEFlaeche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.5", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.6", + "warnedFeatures": [], + "message": "BPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.3.7", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchABE", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.4.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.4.2", + "warnedFeatures": [], + "message": "Einschränkung auf Flächengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.5.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.5.2", + "warnedFeatures": [], + "message": "Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.6.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekte gehören nie zum Flächenschluss.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.7.1", + "warnedFeatures": [], + "message": "Flächenschlussobjekte auf Ebene 0 gehören immer zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.8.1", + "warnedFeatures": [], + "message": "Einschränkung auf Liniengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.1.9.1", + "warnedFeatures": [], + "message": "Einschränkung auf Punktgeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GFZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.2", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GF", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GFZ und GF", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.4", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur BMZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.5", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur BM", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.6", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur BMZ und BM", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.7", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GRZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.8", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GR", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.9", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GRZ und GR", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.10", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zu Z", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.2.11", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zu ZU", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur Dachneigung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.3.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute dachform und detaillierteDachform", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.1", + "warnedFeatures": [], + "message": "Relation abweichungText", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute besondereArtDerBaulNutzung und sondernutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute bauweise und abweichendeBauweise", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sondernutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.2.1", + "warnedFeatures": [], + "message": "Relation baugrenze", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.2.2", + "warnedFeatures": [], + "message": "Relation baulinie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.10.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute typ und sonstTyp", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.13.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.13.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.13.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation eigentümer", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.14.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.5.15.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.6.3.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.7.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.2.4", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.8.3.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.2.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.2.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.3.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.3.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereMassnahme2und weitereMassnahme1", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.5.4", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.9.6.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.10.2.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.11.1.7", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation begrenzungslinie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation begrenzungslinie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.2.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.12.3.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.13.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.13.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.2.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute startWinkel und endWinkel", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.3.2", + "warnedFeatures": [], + "message": "Kein flächenhafter Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.4.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.6.1", + "warnedFeatures": [], + "message": "Notwendige Spezifikation einer Textlichen Darstellung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.7.1", + "warnedFeatures": [], + "message": "Verwendung der Relation hoehenangabe", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "4.14.7.2", + "warnedFeatures": [], + "message": "Kein flächenhafter Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation bereich", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute planArt und sonstPlanArt", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation inhaltFPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.2.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation rasterAenderung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.2.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation gehoertZuPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchFlaeche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation wirdAusgeglichenDurchSPE", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.3", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.3.4", + "warnedFeatures": [], + "message": "FPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.4.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.4.2", + "warnedFeatures": [], + "message": "Einschränkung auf Flächengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.5.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.5.2", + "warnedFeatures": [], + "message": "Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.6.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekte gehören nie zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.7.1", + "warnedFeatures": [], + "message": "Flächenschlussobjekte der Ebene 0 gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.8.1", + "warnedFeatures": [], + "message": "Einschränkung auf Liniengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.1.9.1", + "warnedFeatures": [], + "message": "Einschränkung auf Punktgeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute allgArtDerBaulNutzung und besondereArtDerBaulNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute besondereArtDerBaulNutzung und sonderNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute detaillierteArtDer BaulNutzung, allgArtDerBaulNutzung, besondereArtDerBaulNutzung und sonderNutzung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.3.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Angaben zur GFZ", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.7", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.1.8", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation einer einzigen detaillierter Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.4", + "warnedFeatures": [], + "message": "Einschränkung des Raumbezugs", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.4.2.5", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.1.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereBesondZweckbestimmungi und weitereZweckbestimmungi (i = 1, 2, 3, 4, 5)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.5.3.7", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute massnahme, weitereMassnahme1 und weitereMassnahme2", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.6.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Maßnahmen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.3", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer detaillierter Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.5", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2, 3)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.6", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.7.1.7", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.8.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.8.1.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung bzw. besondere Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.8.1.3", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.1.2", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute für detaillierte Zweckbestimmung und Zweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.9.2.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.1.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.2", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer besonderer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.3", + "warnedFeatures": [], + "message": "Konsistenz der Attribute zweckbestimmung und besondereZweckbestimmung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.2.4", + "warnedFeatures": [], + "message": "Konsistenz der Attribute weitereZweckbestimmungi und weitereBesondZweckbestimmungi (i = 1, 2)", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.3.1", + "warnedFeatures": [], + "message": "Verwendung der Attribute zur Spezifikation mehrerer Zweckbestimmungen", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.4.1", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "5.10.6.1", + "warnedFeatures": [], + "message": "Notwendige Spezifikation einer Textlichen Darstellung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.1.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation bereich", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.2.1", + "warnedFeatures": [], + "message": "Einschränkung der Relation inhaltSoPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.2.2", + "warnedFeatures": [], + "message": "Einschränkung der Relation rasterAenderung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.2.3", + "warnedFeatures": [], + "message": "Einschränkung der Relation gehoertZuPlan", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.3.1", + "warnedFeatures": [], + "message": "Rückwärts-Referenzen auf Plan-Bereiche", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.3.2", + "warnedFeatures": [], + "message": "SOPlan-Inhalte dürfen nicht gleichzeitig als originärer Planinhalt und nachrichtliche Ãœbernahme in den Plan integriert werden.", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.4.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.4.2", + "warnedFeatures": [], + "message": "Einschränkung auf Flächengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.5.1", + "warnedFeatures": [], + "message": "Nur Flächenobjekte der Basisebene gehören zum Flächenschluss", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.5.2", + "warnedFeatures": [], + "message": "Angabe des Attributs flaechenschluss bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.6.1", + "warnedFeatures": [], + "message": "Einschränkung auf Liniengeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.1.7.1", + "warnedFeatures": [], + "message": "Einschränkung auf Punktgeometrie", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.1.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.2.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.4.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.5.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und besondereArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.5.2", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung, besondereArtDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.5.3", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.6.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.7.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.7.2", + "warnedFeatures": [], + "message": "Flächenschlussobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.2.8.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.1.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.2.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.2.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.3.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute artDerFestlegung und detailArtDerFestlegung", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.3.3.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.4.1.1", + "warnedFeatures": [], + "message": "Konsistenz der Attribute gebietsArt und sonstGebietsArt", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.4.1.2", + "warnedFeatures": [], + "message": "Ãœberlagerungsobjekt bei flächenhaftem Raumbezug", + "erroredFeatures": [] + }, + { + "isValid": true, + "name": "6.5.1.1", + "warnedFeatures": [], + "message": "Konsistenz von typ und sonstTyp", + "erroredFeatures": [] + } + ] + }, + "geometrisch": { + "valid": false, + "warnings": [], + "errors": [ + "XPlanAuszug (Zeile 1, Spalte 1): 2.2.2.1: äußerer Ring verwendet falsche Laufrichtung (CW)." + ] + } + }, + "bbox": { + "minY": 52.33234200586314, + "minX": 7.373668092967802, + "crs": "EPSG:4326", + "maxY": 52.33376312995529, + "maxX": 7.377600099759094 + }, + "name": "6463c72f-4a7d-40d0-a129-3de95fdd0eb8", + "version": "XPLAN_41", + "documentSummary": [ + { + "name": "Nr. 108 Holstener Weg", + "type": "BP_Plan" + } + ], + "status": "Die Validierung wurde ausgeführt." +} \ No newline at end of file diff --git a/xplan-validator/xplan-validator-storage/src/main/java/de/latlon/xplanbox/validator/storage/config/AmazonS3Context.java b/xplan-validator/xplan-validator-storage/src/main/java/de/latlon/xplanbox/validator/storage/config/AmazonS3Context.java index e8880b26da..696ee17de0 100644 --- a/xplan-validator/xplan-validator-storage/src/main/java/de/latlon/xplanbox/validator/storage/config/AmazonS3Context.java +++ b/xplan-validator/xplan-validator-storage/src/main/java/de/latlon/xplanbox/validator/storage/config/AmazonS3Context.java @@ -43,10 +43,10 @@ import org.springframework.context.annotation.Profile; * @since 7.0 */ @Configuration -@Profile("s3execution") public class AmazonS3Context { @Bean(destroyMethod = "shutdown") + @Profile("!test") public AmazonS3 s3Client(AWSCredentials credentials, @Value("${xplanbox.s3.region}") String signingRegion, @Value("${xplanbox.s3.endpoint.url}") String endpointUrl) { AmazonS3 client; @@ -70,6 +70,7 @@ public class AmazonS3Context { } @Bean + @Profile("!test") public AWSCredentials credentials(@Value("${xplanbox.s3.accessKeyId}") String accessKeyId, @Value("${xplanbox.s3.secretKey}") String secretKey) { return new BasicAWSCredentials(accessKeyId, secretKey); diff --git a/xplan-validator/xplan-validator-storage/src/test/java/de/latlon/xplanbox/validator/storage/s3/S3ValidationExecutionStorageIT.java b/xplan-validator/xplan-validator-storage/src/test/java/de/latlon/xplanbox/validator/storage/s3/S3ValidationExecutionStorageIT.java index 65497458f6..132fbdb13f 100644 --- a/xplan-validator/xplan-validator-storage/src/test/java/de/latlon/xplanbox/validator/storage/s3/S3ValidationExecutionStorageIT.java +++ b/xplan-validator/xplan-validator-storage/src/test/java/de/latlon/xplanbox/validator/storage/s3/S3ValidationExecutionStorageIT.java @@ -34,7 +34,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { AmazonS3Context.class, AmazonS3TestContext.class }) -@ActiveProfiles({ "s3execution", "mock" }) +@ActiveProfiles({ "mock" }) @TestPropertySource("classpath:s3Mock.properties") public class S3ValidationExecutionStorageIT { diff --git a/xplan-validator/xplan-validator-web/pom.xml b/xplan-validator/xplan-validator-web/pom.xml index 9a21c9af1d..3a387e529f 100644 --- a/xplan-validator/xplan-validator-web/pom.xml +++ b/xplan-validator/xplan-validator-web/pom.xml @@ -258,8 +258,8 @@ <scope>runtime</scope> </dependency> <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> <scope>test</scope> </dependency> <dependency> diff --git a/xplan-validator/xplan-validator-web/src/main/java/de/latlon/xplan/validator/web/spring/config/XPlanValidatorWebSpringConfig.java b/xplan-validator/xplan-validator-web/src/main/java/de/latlon/xplan/validator/web/spring/config/XPlanValidatorWebSpringConfig.java index ab823cbe9d..fca58c3d7c 100644 --- a/xplan-validator/xplan-validator-web/src/main/java/de/latlon/xplan/validator/web/spring/config/XPlanValidatorWebSpringConfig.java +++ b/xplan-validator/xplan-validator-web/src/main/java/de/latlon/xplan/validator/web/spring/config/XPlanValidatorWebSpringConfig.java @@ -20,6 +20,13 @@ */ package de.latlon.xplan.validator.web.spring.config; +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; import de.latlon.xplan.manager.web.shared.ConfigurationException; @@ -39,12 +46,12 @@ import de.latlon.xplan.validator.semantic.profile.SemanticProfilesCreator; import de.latlon.xplan.validator.semantic.xquery.XQuerySemanticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; -import de.latlon.xplanbox.core.gwt.commons.server.service.ReportProvider; import de.latlon.xplan.validator.web.server.service.ValidatorReportProvider; import de.latlon.xplan.validator.wms.MapPreviewCreationException; import de.latlon.xplan.validator.wms.MapPreviewManager; import de.latlon.xplan.validator.wms.ValidatorWmsManager; import de.latlon.xplan.validator.wms.config.ValidatorWmsContext; +import de.latlon.xplanbox.core.gwt.commons.server.service.ReportProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -54,13 +61,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.core.io.ResourceLoader; -import java.io.IOException; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - /** * XPlanValidatorWeb Application Configuration. * @@ -143,7 +143,7 @@ public class XPlanValidatorWebSpringConfig { SemanticValidator semanticValidator, SemanticProfiles semanticProfiles, ReportArchiveGenerator reportArchiveGenerator) { return new XPlanValidator(geometricValidator, syntacticValidator, semanticValidator, - semanticProfiles.getProfileValidators(), reportArchiveGenerator); + semanticProfiles.getProfileValidators(), reportArchiveGenerator, Optional.empty()); } @Bean diff --git a/xplan-validator/xplan-validator-web/src/test/java/de/latlon/xplan/validator/web/server/service/ReportControllerTest.java b/xplan-validator/xplan-validator-web/src/test/java/de/latlon/xplan/validator/web/server/service/ReportControllerTest.java index c05024e48e..593072045b 100644 --- a/xplan-validator/xplan-validator-web/src/test/java/de/latlon/xplan/validator/web/server/service/ReportControllerTest.java +++ b/xplan-validator/xplan-validator-web/src/test/java/de/latlon/xplan/validator/web/server/service/ReportControllerTest.java @@ -20,26 +20,6 @@ */ package de.latlon.xplan.validator.web.server.service; -import de.latlon.xplanbox.core.gwt.commons.server.service.ReportController; -import de.latlon.xplanbox.core.gwt.commons.server.service.ReportProvider; -import de.latlon.xplan.validator.web.spring.config.TestConfig; -import de.latlon.xplan.validator.web.spring.config.XPlanValidatorWebContextConfig; -import de.latlon.xplan.validator.web.spring.config.XPlanValidatorWebSpringConfig; -import de.latlon.xplan.validator.wms.config.ValidatorWmsContext; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; - -import jakarta.servlet.http.HttpServletResponse; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -52,10 +32,29 @@ import static org.mockito.Mockito.verify; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import de.latlon.xplan.validator.web.spring.config.TestConfig; +import de.latlon.xplan.validator.web.spring.config.XPlanValidatorWebContextConfig; +import de.latlon.xplan.validator.web.spring.config.XPlanValidatorWebSpringConfig; +import de.latlon.xplan.validator.wms.config.ValidatorWmsContext; +import de.latlon.xplanbox.core.gwt.commons.server.service.ReportController; +import de.latlon.xplanbox.core.gwt.commons.server.service.ReportProvider; +import jakarta.servlet.http.HttpServletResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + /** * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -@RunWith(SpringJUnit4ClassRunner.class) +@ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { XPlanValidatorWebContextConfig.class, XPlanValidatorWebSpringConfig.class, ValidatorWmsContext.class, TestConfig.class }) @ActiveProfiles(profiles = "test") @@ -73,7 +72,7 @@ public class ReportControllerTest { @Autowired private WebApplicationContext webApplicationContext; - @Before + @BeforeEach public void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } diff --git a/xplan-webservices/xplan-webservices-mapserver/xplan-mapserver-docker/startupWithConfiguredMapserver.sh b/xplan-webservices/xplan-webservices-mapserver/xplan-mapserver-docker/startupWithConfiguredMapserver.sh index 54b0bc187f..378b8e9d79 100755 --- a/xplan-webservices/xplan-webservices-mapserver/xplan-mapserver-docker/startupWithConfiguredMapserver.sh +++ b/xplan-webservices/xplan-webservices-mapserver/xplan-mapserver-docker/startupWithConfiguredMapserver.sh @@ -37,18 +37,15 @@ echo "[$(date -Iseconds)] Default CRS/srid is $XPLAN_SERVICES_DEFAULT_CRS/$XPLAN sed -i 's|EPSG:25832|'$XPLAN_SERVICES_DEFAULT_CRS'|g' $MS_MAPFILE sed -i 's|25832|'$XPLAN_SERVICES_DEFAULT_CRS_SRID'|g' $MS_MAPFILE -if [[ -z "${spring_profiles_active##*s3img*}" ]] +echo "[$(date -Iseconds)] MapServer storage type is S3" +sed -i 's|# CONFIG "AWS_ACCESS_KEY_ID" "XXX"|CONFIG "AWS_ACCESS_KEY_ID" "'$AWS_ACCESS_KEY_ID'"|g' $MS_MAPFILE +sed -i 's|# CONFIG "AWS_SECRET_ACCESS_KEY" "XXX"|CONFIG "AWS_SECRET_ACCESS_KEY" "'$AWS_SECRET_ACCESS_KEY'"|g' $MS_MAPFILE +sed -i 's|# CONFIG "AWS_REGION" "eu-central-1"|CONFIG "AWS_REGION" "'$AWS_REGION'"|g' $MS_MAPFILE +if [ ! $AWS_S3_ENDPOINT = "" ] then - echo "[$(date -Iseconds)] MapServer storage type is S3" - sed -i 's|# CONFIG "AWS_ACCESS_KEY_ID" "XXX"|CONFIG "AWS_ACCESS_KEY_ID" "'$AWS_ACCESS_KEY_ID'"|g' $MS_MAPFILE - sed -i 's|# CONFIG "AWS_SECRET_ACCESS_KEY" "XXX"|CONFIG "AWS_SECRET_ACCESS_KEY" "'$AWS_SECRET_ACCESS_KEY'"|g' $MS_MAPFILE - sed -i 's|# CONFIG "AWS_REGION" "eu-central-1"|CONFIG "AWS_REGION" "'$AWS_REGION'"|g' $MS_MAPFILE - if [ ! $AWS_S3_ENDPOINT = "" ] - then - sed -i 's|# CONFIG "AWS_S3_ENDPOINT" "s3.amazonaws.com"|CONFIG "AWS_S3_ENDPOINT" "'$AWS_S3_ENDPOINT'"|g' $MS_MAPFILE - fi - sed -i 's|SHAPEPATH "/etc/mapserver/data/"|SHAPEPATH "/vsis3/'$XPLAN_S3_BUCKET_NAME'/"|g' $MS_MAPFILE + sed -i 's|# CONFIG "AWS_S3_ENDPOINT" "s3.amazonaws.com"|CONFIG "AWS_S3_ENDPOINT" "'$AWS_S3_ENDPOINT'"|g' $MS_MAPFILE fi +sed -i 's|SHAPEPATH "/etc/mapserver/data/"|SHAPEPATH "/vsis3/'$XPLAN_S3_BUCKET_NAME'/"|g' $MS_MAPFILE echo "Metadata URL: $XPLAN_SERVICES_METADATA_URL" if [ -z "$XPLAN_SERVICES_METADATA_URL" ] diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wms/pom.xml b/xplan-webservices/xplan-webservices-services/xplan-services-wms/pom.xml index c47697c937..4ed5c2c143 100644 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wms/pom.xml +++ b/xplan-webservices/xplan-webservices-services/xplan-services-wms/pom.xml @@ -64,10 +64,6 @@ <groupId>de.latlon</groupId> <artifactId>deegree-services-config</artifactId> </dependency> - <dependency> - <groupId>de.latlon</groupId> - <artifactId>deegree-tilestore-geotiff</artifactId> - </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>xplan-webservices-core</artifactId> @@ -119,11 +115,6 @@ <artifactId>spotbugs-annotations</artifactId> <scope>provided</scope> </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/java/de/latlon/xplan/raster/RemoveFromRasterCacheServlet.java b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/java/de/latlon/xplan/raster/RemoveFromRasterCacheServlet.java deleted file mode 100644 index 4fca2e8229..0000000000 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/java/de/latlon/xplan/raster/RemoveFromRasterCacheServlet.java +++ /dev/null @@ -1,88 +0,0 @@ -package de.latlon.xplan.raster; - -import org.apache.commons.io.IOUtils; -import org.deegree.commons.config.DeegreeWorkspace; -import org.deegree.services.config.ApiKey; -import org.deegree.services.controller.OGCFrontController; -import org.deegree.tile.TileDataLevel; -import org.deegree.tile.TileDataSet; -import org.deegree.tile.persistence.GenericTileStore; -import org.deegree.tile.persistence.TileStore; -import org.deegree.tile.persistence.TileStoreProvider; -import org.deegree.tile.persistence.geotiff.GeoTIFFTileDataLevel; -import org.deegree.workspace.ResourceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; -import java.util.stream.Collectors; - -/** - * Clear raster cache to ensure raster files can be removed on windows. - * - * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> - * @since 7.1.2 - */ -public class RemoveFromRasterCacheServlet extends HttpServlet { - - private static final Logger LOG = LoggerFactory.getLogger(RemoveFromRasterCacheServlet.class); - - private static ApiKey apiKey = new ApiKey(); - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - try { - apiKey.validate(req); - } - catch (SecurityException e) { - resp.setStatus(403); - IOUtils.write("There were security concerns: " + e.getLocalizedMessage() + "\n", resp.getOutputStream()); - } - String pathInfo = req.getPathInfo(); - if (pathInfo != null) { - String tileStorePrefix = pathInfo.substring(1); - LOG.info("Cleanup pool of tile store prefix {}", tileStorePrefix); - DeegreeWorkspace workspace = OGCFrontController.getServiceWorkspace(); - - List<ResourceIdentifier<TileStore>> tileStoreResources = workspace.getNewWorkspace() - .getResourcesOfType(TileStoreProvider.class); - List<String> matchingTileStoreIds = tileStoreResources.stream() - .filter(tileStoreResource -> tileStoreResource.getId().startsWith(tileStorePrefix)) - .map(tileStoreResource -> tileStoreResource.getId()) - .collect(Collectors.toList()); - - if (matchingTileStoreIds.isEmpty()) { - LOG.warn("Could not find tile store with prefix {}", tileStorePrefix); - resp.setStatus(404); - IOUtils.write("Could not find tile store with prefix " + tileStorePrefix, resp.getOutputStream()); - return; - } - - for (String tileStoreId : matchingTileStoreIds) { - cleanCache(tileStoreId, workspace); - } - } - - } - - private void cleanCache(String tileStoreId, DeegreeWorkspace workspace) { - GenericTileStore tileStore = (GenericTileStore) workspace.getNewWorkspace() - .getResource(TileStoreProvider.class, tileStoreId); - if (tileStore == null) { - LOG.warn("Could not find tile store with id {}", tileStoreId); - return; - } - TileDataSet tileDataSet = tileStore.getTileDataSet(tileStoreId); - List<TileDataLevel> tileDataLevels = tileDataSet.getTileDataLevels(); - tileDataLevels.forEach(tileDataLevel -> { - if (tileDataLevel instanceof GeoTIFFTileDataLevel) { - ((GeoTIFFTileDataLevel) tileDataLevel).clearPool(); - } - }); - } - -} \ No newline at end of file diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/webapp/WEB-INF/web.xml b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/webapp/WEB-INF/web.xml index e1cc260342..4f63bf1ea4 100644 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/webapp/WEB-INF/web.xml +++ b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/main/webapp/WEB-INF/web.xml @@ -158,12 +158,6 @@ <load-on-startup>1</load-on-startup> </servlet> - <servlet> - <servlet-name>removefromcache</servlet-name> - <servlet-class>de.latlon.xplan.raster.RemoveFromRasterCacheServlet</servlet-class> - <load-on-startup>1</load-on-startup> - </servlet> - <servlet-mapping> <servlet-name>getAttachment</servlet-name> <url-pattern>/getAttachment</url-pattern> @@ -194,11 +188,6 @@ <url-pattern>/planwerkwmsapi/*</url-pattern> </servlet-mapping> - <servlet-mapping> - <servlet-name>removefromcache</servlet-name> - <url-pattern>/removecache/*</url-pattern> - </servlet-mapping> - <welcome-file-list> <welcome-file>index.xhtml</welcome-file> <welcome-file>index.jsf</welcome-file> diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/java/de/latlon/xplan/planwerkwms/PlanwerkMetadataTest.java b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/java/de/latlon/xplan/planwerkwms/PlanwerkMetadataTest.java index 7508b51a48..76eff139d7 100644 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/java/de/latlon/xplan/planwerkwms/PlanwerkMetadataTest.java +++ b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/java/de/latlon/xplan/planwerkwms/PlanwerkMetadataTest.java @@ -20,9 +20,22 @@ */ package de.latlon.xplan.planwerkwms; -import de.latlon.xplan.planwerkwms.jaxb.Planwerk; +import static de.latlon.xplan.planwerkwms.PlanwerkMetadata.CONFIG_JAXB_PACKAGE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.net.URL; +import java.util.Arrays; +import java.util.List; + +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; -import org.deegree.commons.tom.ows.Version; +import org.assertj.core.api.MatcherAssert; import org.deegree.services.OWS; import org.deegree.services.OWSProvider; import org.deegree.services.controller.ImplementationMetadata; @@ -31,44 +44,26 @@ import org.deegree.services.wms.controller.WmsMetadata; import org.deegree.workspace.ResourceLocation; import org.deegree.workspace.Workspace; import org.deegree.workspace.standard.DefaultWorkspace; -import org.hamcrest.MatcherAssert; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; import org.xml.sax.SAXException; +import de.latlon.xplan.planwerkwms.jaxb.Planwerk; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; - -import java.io.IOException; -import java.net.URL; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static de.latlon.xplan.planwerkwms.PlanwerkMetadata.CONFIG_JAXB_PACKAGE; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ -public class PlanwerkMetadataTest { +class PlanwerkMetadataTest { private final String schemaLocation = "/META-INF/schemas/services/planwerkwms/1.0/planwerk_configuration.xsd"; @Test - public void verifyThatUnmarshallingWorksForConfigFile() throws JAXBException, IOException, SAXException { + void verifyThatUnmarshallingWorksForConfigFile() throws Exception { final JAXBContext jaxbContext = JAXBContext.newInstance(CONFIG_JAXB_PACKAGE); final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); final Schema configSchema = loadSchema(schemaLocation); @@ -77,12 +72,12 @@ public class PlanwerkMetadataTest { URL planwerkConfigFile = PlanwerkMetadata.class.getResource("/planwerkwms.xml"); Planwerk planwerkConfig = (Planwerk) unmarshaller.unmarshal(planwerkConfigFile.openStream()); - MatcherAssert.assertThat(planwerkConfig.getName(), equalTo("Bergedorf1101Aend")); + assertEquals("Bergedorf1101Aend", planwerkConfig.getName()); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Test - public void verifyThatUnmarshallingWorksWithResourceBuilder() throws IOException { + void verifyThatUnmarshallingWorksWithResourceBuilder() throws IOException { final List<String> versionsAsList = Arrays.asList("1.3.0", "1.1.1"); final DeegreeWMS.SupportedVersions supportedVersions = Mockito.mock(DeegreeWMS.SupportedVersions.class); when(supportedVersions.getVersion()).thenReturn(versionsAsList); @@ -105,8 +100,8 @@ public class PlanwerkMetadataTest { PlanwerkBuilder planwerkBuilder = (PlanwerkBuilder) resource.prepare(); - MatcherAssert.assertThat(planwerkBuilder, is(notNullValue())); - MatcherAssert.assertThat(planwerkBuilder.build(), is(notNullValue())); + assertNotNull(planwerkBuilder); + assertNotNull(planwerkBuilder.build()); } private Schema loadSchema(String schemaFile) throws IOException, SAXException { diff --git a/xplan-webservices/xplan-webservices-validator-wms/src/main/java/de/latlon/xplan/validator/wms/ApplicationContextInitializer.java b/xplan-webservices/xplan-webservices-validator-wms/src/main/java/de/latlon/xplan/validator/wms/ApplicationContextInitializer.java index 3e3970bcaf..b7ad6da97f 100644 --- a/xplan-webservices/xplan-webservices-validator-wms/src/main/java/de/latlon/xplan/validator/wms/ApplicationContextInitializer.java +++ b/xplan-webservices/xplan-webservices-validator-wms/src/main/java/de/latlon/xplan/validator/wms/ApplicationContextInitializer.java @@ -20,17 +20,16 @@ */ package de.latlon.xplan.validator.wms; +import java.io.IOException; + import de.latlon.xplan.job.validator.config.JobContext; -import de.latlon.xplan.job.validator.config.MemoryJobContext; import de.latlon.xplan.validator.wms.config.JobWebContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - import jakarta.servlet.Servlet; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; -import java.io.IOException; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * Initializer of Spring ApplicationContext. Workaround to initialize Spring @@ -45,9 +44,8 @@ public class ApplicationContextInitializer implements Servlet { private AnnotationConfigApplicationContext rootContext; @Override - public void init(ServletConfig servletConfig) throws ServletException { - rootContext = new AnnotationConfigApplicationContext(JobContext.class, MemoryJobContext.class, - JobWebContext.class); + public void init(ServletConfig servletConfig) { + rootContext = new AnnotationConfigApplicationContext(JobContext.class, JobWebContext.class); } @Override diff --git a/xplan-webservices/xplan-webservices-workspaces/pom.xml b/xplan-webservices/xplan-webservices-workspaces/pom.xml index ccaef5ea1d..1cb7b026f9 100644 --- a/xplan-webservices/xplan-webservices-workspaces/pom.xml +++ b/xplan-webservices/xplan-webservices-workspaces/pom.xml @@ -62,9 +62,9 @@ <appendAssemblyId>true</appendAssemblyId> </configuration> </execution> - <!-- XPlanValidatorWMS Workspace - InMemory --> + <!-- XPlanValidatorWMS Workspace --> <execution> - <id>xplan-webservices-validator-wms-memory-workspace</id> + <id>xplan-webservices-validator-wms-workspace</id> <goals> <goal>single</goal> </goals> @@ -72,22 +72,7 @@ <configuration> <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions> <descriptors> - <descriptor>${project.basedir}/src/main/assembly/xplan-webservices-validator-wms-memory-workspace.xml</descriptor> - </descriptors> - <appendAssemblyId>true</appendAssemblyId> - </configuration> - </execution> - <!-- XPlanValidatorWMS Workspace SQLFeatureStore--> - <execution> - <id>xplan-webservices-validator-wms-sql-workspace</id> - <goals> - <goal>single</goal> - </goals> - <phase>package</phase> - <configuration> - <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions> - <descriptors> - <descriptor>${project.basedir}/src/main/assembly/xplan-webservices-validator-wms-sql-workspace.xml</descriptor> + <descriptor>${project.basedir}/src/main/assembly/xplan-webservices-validator-wms-workspace.xml</descriptor> </descriptors> <appendAssemblyId>true</appendAssemblyId> </configuration> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-services-wms-workspace.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-services-wms-workspace.xml index 7217d72019..db9639ef2d 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-services-wms-workspace.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-services-wms-workspace.xml @@ -29,7 +29,6 @@ <fileSet> <directory>${basedir}/src/main/workspace</directory> <includes> - <include>data/**</include> <include>datasources/feature/xplansyn*</include> <include>datasources/tile/**</include> <include>datasources/remoteows/**</include> @@ -47,8 +46,7 @@ <include>layers/rplan*</include> <include>layers/soplan*</include> <include>layers/planart-wms/**</include> - <include>layers/dummyrasterlayer.ignore</include> - <include>layers/mapserver.ignore</include> + <include>layers/mapserver.xml</include> <include>services/wms*</include> <include>themes/bplan*</include> <include>themes/fplan*</include> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-memory-workspace.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-memory-workspace.xml deleted file mode 100644 index 3d4d3f9369..0000000000 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-memory-workspace.xml +++ /dev/null @@ -1,91 +0,0 @@ -<!-- - #%L - xplan-webservices-workspaces - Modul zur Gruppierung aller Workspaces - %% - Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - #L% - --> -<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> - <!-- XPlanValidatorWMS is deprecated and will be removed in a future version. --> - <id>xplan-webservices-validator-wms-memory-workspace</id> - <formats> - <format>zip</format> - </formats> - <includeBaseDirectory>false</includeBaseDirectory> - <fileSets> - <fileSet> - <directory>${basedir}/src/main/workspace</directory> - <includes> - <include>layers/bplan.xml</include> - <include>layers/fplan.xml</include> - <include>layers/lplan.xml</include> - <include>layers/rplan.xml</include> - <include>layers/soplan.xml</include> - <include>services/html.gfi</include> - </includes> - <excludes> - <exclude>appschemas/*</exclude> - </excludes> - <outputDirectory>.</outputDirectory> - <filtered>false</filtered> - </fileSet> - <fileSet> - <directory>${basedir}/src/main/workspace/datasources/feature/validator-wms/memory</directory> - <outputDirectory>datasources/feature/</outputDirectory> - <filtered>false</filtered> - </fileSet> - <fileSet> - <directory>${basedir}/src/main/workspace/services/validator-wms</directory> - <outputDirectory>services/</outputDirectory> - <filtered>true</filtered> - <includes> - <include>wms_metadata.xml</include> - </includes> - </fileSet> - <fileSet> - <directory>${basedir}/src/main/workspace/services/validator-wms</directory> - <outputDirectory>services/</outputDirectory> - <filtered>false</filtered> - <excludes> - <exclude>wms_metadata.xml</exclude> - </excludes> - </fileSet> - <fileSet> - <directory>${basedir}/src/main/workspace/themes</directory> - <includes> - <include>vektor.xml</include> - </includes> - <outputDirectory>themes/</outputDirectory> - <filtered>false</filtered> - </fileSet> - <fileSet> - <directory>${basedir}/src/main/workspace/styles/xplansyn</directory> - <outputDirectory>styles/</outputDirectory> - <filtered>false</filtered> - </fileSet> - </fileSets> - <dependencySets> - <dependencySet> - <useProjectArtifact>false</useProjectArtifact> - <includes> - <include>de.latlon.product.xplanbox:xplan-core-schemas</include> - </includes> - <unpack>true</unpack> - <outputDirectory>/</outputDirectory> - </dependencySet> - </dependencySets> -</assembly> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-sql-workspace.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-workspace.xml similarity index 98% rename from xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-sql-workspace.xml rename to xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-workspace.xml index 61fa692f6c..899c4db7ac 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-sql-workspace.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/assembly/xplan-webservices-validator-wms-workspace.xml @@ -21,7 +21,7 @@ <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <!-- XPlanValidatorWMS is deprecated and will be removed in a future version. --> - <id>xplan-webservices-validator-wms-sql-workspace</id> + <id>xplan-webservices-validator-wms-workspace</id> <formats> <format>zip</format> </formats> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/data/dummy.png b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/data/dummy.png deleted file mode 100644 index 76d6ec866e933c797f76286f15cb10f7298821e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1661 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 diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/feature/validator-wms/memory/xplansyn.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/feature/validator-wms/memory/xplansyn.xml deleted file mode 100644 index ae394c455b..0000000000 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/feature/validator-wms/memory/xplansyn.xml +++ /dev/null @@ -1,29 +0,0 @@ -<!-- - #%L - xplan-webservices-workspaces - Modul zur Gruppierung aller Workspaces - %% - Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - #L% - --> -<MemoryFeatureStore xmlns="http://www.deegree.org/datasource/feature/memory" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.deegree.org/datasource/feature/memory - https://schemas.deegree.org/core/3.5/datasource/feature/memory/memory.xsd"> - <!-- XPlanValidatorWMS is deprecated and will be removed in a future version. --> - <StorageCRS>EPSG:25832</StorageCRS> - <GMLSchema version="GML_32">../../appschemas/XPlanGML_Syn/XPlanSyn.xsd</GMLSchema> - -</MemoryFeatureStore> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/remoteows/mapserver.ignore b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/remoteows/mapserver.xml similarity index 100% rename from xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/remoteows/mapserver.ignore rename to xplan-webservices/xplan-webservices-workspaces/src/main/workspace/datasources/remoteows/mapserver.xml diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/layers/mapserver.ignore b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/layers/mapserver.xml similarity index 100% rename from xplan-webservices/xplan-webservices-workspaces/src/main/workspace/layers/mapserver.ignore rename to xplan-webservices/xplan-webservices-workspaces/src/main/workspace/layers/mapserver.xml diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanarchiveraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanarchiveraster.xml index b67995c598..6377336f6c 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanarchiveraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanarchiveraster.xml @@ -18,8 +18,7 @@ --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial"> - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>bp_raster</Identifier> <d:Title>BP Raster</d:Title> @@ -28,8 +27,7 @@ <Theme> <Identifier>bplanraster_sortiert</Identifier> <d:Title>BP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">bp_rasterarchive</Layer>--> + <Layer layerStore="mapserver">bp_rasterarchive</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanpreraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanpreraster.xml index 0c6e4fc680..6d62ec463e 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanpreraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanpreraster.xml @@ -20,8 +20,7 @@ --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>bp_raster</Identifier> <d:Title>BP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>bplanraster_sortiert</Identifier> <d:Title>BP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">bp_rasterpre</Layer>--> + <Layer layerStore="mapserver">bp_rasterpre</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanraster.xml index a4644252cd..f422cbde5d 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/bplanraster.xml @@ -20,8 +20,7 @@ --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>bp_raster</Identifier> <d:Title>BP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>bplanraster_sortiert</Identifier> <d:Title>BP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">bp_raster</Layer>--> + <Layer layerStore="mapserver">bp_raster</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanarchiveraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanarchiveraster.xml index 3a45796f38..5c702c2148 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanarchiveraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanarchiveraster.xml @@ -20,8 +20,7 @@ --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>fp_raster</Identifier> <d:Title>FP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>fplanraster_sortiert</Identifier> <d:Title>FP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">fp_rasterarchive</Layer>--> + <Layer layerStore="mapserver">fp_rasterarchive</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanpreraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanpreraster.xml index 0d2cefbc7e..55e56a7eb1 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanpreraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanpreraster.xml @@ -20,8 +20,7 @@ --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>fp_raster</Identifier> <d:Title>FP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>fplanraster_sortiert</Identifier> <d:Title>FP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">fp_rasterpre</Layer>--> + <Layer layerStore="mapserver">fp_rasterpre</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanraster.xml index a7f0a12761..a12b341d06 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/fplanraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>fp_raster</Identifier> <d:Title>FP Raster</d:Title> @@ -30,7 +29,6 @@ <Theme> <Identifier>fplanraster_sortiert</Identifier> <d:Title>FP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> <!--<Layer layerStore="mapserver">fp_raster</Layer>--> </Theme> </Theme> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanarchiveraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanarchiveraster.xml index dddd5bcd71..d0574d3cc4 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanarchiveraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanarchiveraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>lp_raster</Identifier> <d:Title>LP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>lplanraster_sortiert</Identifier> <d:Title>LP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">lp_rasterarchive</Layer>--> + <Layer layerStore="mapserver">lp_rasterarchive</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanpreraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanpreraster.xml index 2473ece10f..f73a586075 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanpreraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanpreraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>lp_raster</Identifier> <d:Title>LP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>lplanraster_sortiert</Identifier> <d:Title>LP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">lp_rasterpre</Layer>--> + <Layer layerStore="mapserver">lp_rasterpre</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanraster.xml index 946de5a018..fab1e3cd78 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/lplanraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>lp_raster</Identifier> <d:Title>LP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>lplanraster_sortiert</Identifier> <d:Title>LP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">lp_raster</Layer>--> + <Layer layerStore="mapserver">lp_raster</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanarchiveraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanarchiveraster.xml index 07a4f73ffa..be2884db7b 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanarchiveraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanarchiveraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>rp_raster</Identifier> <d:Title>RP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>rplanraster_sortiert</Identifier> <d:Title>RP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">rp_rasterarchive</Layer>--> + <Layer layerStore="mapserver">rp_rasterarchive</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanpreraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanpreraster.xml index 10e73ce14a..8c6c275126 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanpreraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanpreraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>rp_raster</Identifier> <d:Title>RP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>rplanraster_sortiert</Identifier> <d:Title>RP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">rp_rasterpre</Layer>--> + <Layer layerStore="mapserver">rp_rasterpre</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanraster.xml index b005a94367..8a24ead7a9 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/rplanraster.xml @@ -19,9 +19,8 @@ #L% --> <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" - xmlns:s="http://www.deegree.org/metadata/spatial" > - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + xmlns:s="http://www.deegree.org/metadata/spatial"> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>rp_raster</Identifier> <d:Title>RP Raster</d:Title> @@ -30,8 +29,7 @@ <Theme> <Identifier>rplanraster_sortiert</Identifier> <d:Title>RP Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">rp_raster</Layer>--> + <Layer layerStore="mapserver">rp_raster</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanarchiveraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanarchiveraster.xml index 2c1ce0b310..9eac3c73b8 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanarchiveraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanarchiveraster.xml @@ -21,8 +21,7 @@ <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.deegree.org/themes/standard https://schemas.deegree.org/core/3.5/themes/themes.xsd"> - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>so_raster</Identifier> <d:Title>SO Raster</d:Title> @@ -31,8 +30,7 @@ <Theme> <Identifier>soplanraster_sortiert</Identifier> <d:Title>SO Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">so_rasterarchive</Layer>--> + <Layer layerStore="mapserver">so_rasterarchive</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanpreraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanpreraster.xml index b69d639533..a39ee4c74c 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanpreraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanpreraster.xml @@ -21,8 +21,7 @@ <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.deegree.org/themes/standard https://schemas.deegree.org/core/3.5/themes/themes.xsd"> - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>so_raster</Identifier> <d:Title>SO Raster</d:Title> @@ -31,8 +30,7 @@ <Theme> <Identifier>soplanraster_sortiert</Identifier> <d:Title>SO Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">so_rasterpre</Layer>--> + <Layer layerStore="mapserver">so_rasterpre</Layer> </Theme> </Theme> </Themes> diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanraster.xml b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanraster.xml index bccb8a2a3c..ce4fdabcbb 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanraster.xml +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/themes/soplanraster.xml @@ -21,8 +21,7 @@ <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.deegree.org/themes/standard https://schemas.deegree.org/core/3.5/themes/themes.xsd"> - <!--<LayerStoreId>dummyrasterlayer</LayerStoreId>--> - <!--<LayerStoreId>mapserver</LayerStoreId>--> + <LayerStoreId>mapserver</LayerStoreId> <Theme> <Identifier>so_raster</Identifier> <d:Title>SO Raster</d:Title> @@ -31,8 +30,7 @@ <Theme> <Identifier>soplanraster_sortiert</Identifier> <d:Title>SO Raster Theme</d:Title> - <!--<Layer layerStore="dummyrasterlayer">dummyraster</Layer>--> - <!--<Layer layerStore="mapserver">so_raster</Layer>--> + <Layer layerStore="mapserver">so_raster</Layer> </Theme> </Theme> </Themes> -- GitLab