├── .github └── workflows │ ├── backport.yaml │ ├── build-and-push.yaml │ ├── pull-request.yaml │ ├── sonarcloud-fork-pr.yaml │ └── sonarcloud.yaml ├── .gitignore ├── .gitmodules ├── .mvn ├── jvm.config └── wrapper │ └── maven-wrapper.properties ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.txt ├── Makefile ├── README.md ├── acceptance_tests ├── .gitignore ├── Dockerfile ├── README.md ├── entrypoint.py ├── pyproject.toml └── tests │ ├── conftest.py │ ├── lib │ └── utils.py │ ├── resources │ ├── getmap_expected.png │ ├── labels │ │ ├── default_locale │ │ │ ├── default_value │ │ │ │ ├── language_None_expected.png │ │ │ │ ├── language__expected.png │ │ │ │ ├── language_de_expected.png │ │ │ │ ├── language_fr_expected.png │ │ │ │ └── language_it_expected.png │ │ │ └── no_default_value │ │ │ │ ├── language_None_expected.png │ │ │ │ ├── language__expected.png │ │ │ │ └── language_it_expected.png │ │ └── no_default_locale │ │ │ ├── default_value │ │ │ ├── language_None_expected.png │ │ │ ├── language__expected.png │ │ │ ├── language_de_expected.png │ │ │ ├── language_fr_expected.png │ │ │ └── language_it_expected.png │ │ │ └── no_default_value │ │ │ ├── language_None_expected.png │ │ │ ├── language__expected.png │ │ │ └── language_it_expected.png │ ├── localized_labels.sld │ ├── localized_no_default.sld │ ├── localized_with_default.sld │ └── wfs_payload.xml │ ├── test_cascaded_stores.py │ ├── test_datastore.py │ ├── test_gwc.py │ ├── test_i18n.py │ ├── test_wfs.py │ ├── test_wms.py │ └── test_workspace.py ├── build-tools ├── README.md ├── pom.xml └── src │ └── main │ └── resources │ └── checkstyle │ ├── checkstyle.xml │ └── suppressions.xml ├── ci └── requirements.txt ├── compose ├── .env ├── .env.yjp.example ├── .gitignore ├── acceptance-pgconfig.yml ├── acceptance.yml ├── acceptance_datadir ├── acceptance_jdbcconfig ├── acceptance_pg_entrypoint │ └── 001_create_schemas.sql ├── acceptance_pgconfig ├── catalog-datadir.tgz ├── catalog-datadir.yml ├── catalog-jdbcconfig.yml ├── catalog-pgconfig.yml ├── compose.yml ├── datadir ├── infra.yml ├── jdbcconfig ├── localports.yml ├── pgbouncer.yml ├── pgconfig ├── standalone.yml └── templates.yml ├── docker-build ├── .env ├── base-images-multiplatform.yml ├── base-images.yml ├── geoserver-multiplatform.yml ├── geoserver.yml ├── infrastructure-multiplatform.yml ├── infrastructure.yml └── templates.yml ├── docs ├── _config.yml ├── assets │ └── css │ │ └── style.scss ├── configuration │ ├── index.md │ └── migration-2.26-to-2.27.md ├── cosign │ └── cosign.pub ├── deploy │ ├── docker-compose │ │ ├── index.md │ │ └── stable │ │ │ ├── datadir │ │ │ └── compose.yml │ │ │ ├── jdbcconfig │ │ │ └── compose.yml │ │ │ └── pgconfig │ │ │ └── compose.yml │ ├── helm │ │ ├── Chart.yaml │ │ ├── index.md │ │ ├── init-catalog.sh │ │ ├── templates │ │ │ └── install-postgis-cm.yml │ │ └── values.yaml │ ├── index.md │ └── podman │ │ ├── index.md │ │ └── traditional │ │ └── manual │ │ ├── .env │ │ ├── .gitignore │ │ ├── podman.md │ │ ├── pull.sh │ │ ├── shutdown.sh │ │ └── startup.sh ├── develop │ ├── build_instructions.md │ ├── coding_standards.md │ ├── event-bus │ │ └── index.md │ ├── extensions │ │ └── adding_extensions.md │ ├── index.md │ └── services │ │ ├── discovery-service.md │ │ ├── gateway-service.md │ │ └── restconfig-v1-service.md ├── img │ ├── gs_cloud_architecture_diagram.svg │ └── gs_cloud_eventbus_diagram.svg └── index.md ├── mvnw ├── mvnw.cmd ├── pom.xml ├── report-aggregate └── pom.xml ├── run-trivy-image-scan.sh └── src ├── apps ├── base-images │ ├── geoserver │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ ├── InstallDuckDBExtensions.java │ │ │ └── app │ │ │ └── dummy │ │ │ └── DummyApp.java │ ├── jre │ │ ├── Dockerfile │ │ └── pom.xml │ ├── pom.xml │ ├── spring-boot │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── app │ │ │ └── dummy │ │ │ └── DummyApp.java │ └── spring-boot3 │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── app │ │ └── dummy │ │ └── DummyApp.java ├── geoserver │ ├── gwc │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── gwc │ │ │ │ │ └── app │ │ │ │ │ ├── GeoWebCacheApplication.java │ │ │ │ │ ├── GeoWebCacheApplicationConfiguration.java │ │ │ │ │ └── RootRedirectController.java │ │ │ └── resources │ │ │ │ └── bootstrap.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── gwc │ │ │ │ └── app │ │ │ │ └── GeoWebCacheApplicationTest.java │ │ │ └── resources │ │ │ ├── bootstrap-test.yml │ │ │ └── logback-test.xml │ ├── pom.xml │ ├── restconfig │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── restconfig │ │ │ │ │ ├── RestConfigApplication.java │ │ │ │ │ ├── RestConfigApplicationConfiguration.java │ │ │ │ │ └── RootController.java │ │ │ └── resources │ │ │ │ └── bootstrap.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── restconfig │ │ │ │ ├── RestConfigApplicationDataDirectoryIT.java │ │ │ │ ├── RestConfigApplicationPgconfigIT.java │ │ │ │ └── RestConfigApplicationTest.java │ │ │ └── resources │ │ │ ├── bootstrap-test.yml │ │ │ └── logback-test.xml │ ├── wcs │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── wcs │ │ │ │ │ ├── WCSController.java │ │ │ │ │ ├── WcsApplication.java │ │ │ │ │ └── WcsApplicationConfiguration.java │ │ │ └── resources │ │ │ │ └── bootstrap.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── wcs │ │ │ │ └── WcsApplicationTest.java │ │ │ └── resources │ │ │ └── bootstrap-test.yml │ ├── webui │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ └── web │ │ │ │ │ │ ├── cloudnative │ │ │ │ │ │ └── CloudNativeUIAutoConfiguration.java │ │ │ │ │ │ ├── core │ │ │ │ │ │ ├── AbstractWebUIAutoConfiguration.java │ │ │ │ │ │ ├── WebCoreConfiguration.java │ │ │ │ │ │ ├── WebUIApplicationAutoConfiguration.java │ │ │ │ │ │ ├── WebUIConfigurationProperties.java │ │ │ │ │ │ ├── WebUIContextInitializer.java │ │ │ │ │ │ ├── WebUIInitializer.java │ │ │ │ │ │ └── WicketComponentFilter.java │ │ │ │ │ │ ├── demo │ │ │ │ │ │ ├── DemoRequestsConfiguration.java │ │ │ │ │ │ ├── DemosAutoConfiguration.java │ │ │ │ │ │ ├── LayerPreviewConfiguration.java │ │ │ │ │ │ ├── ReprojectionConsoleConfiguration.java │ │ │ │ │ │ ├── SrsListConfiguration.java │ │ │ │ │ │ ├── WcsRequestBuilderConfiguration.java │ │ │ │ │ │ └── WpsRequestBuilderConfiguration.java │ │ │ │ │ │ ├── extension │ │ │ │ │ │ └── ExtensionsAutoConfiguration.java │ │ │ │ │ │ ├── security │ │ │ │ │ │ ├── SecurityAutoConfiguration.java │ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ │ │ ├── tools │ │ │ │ │ │ ├── CatalogBulkLoadToolConfiguration.java │ │ │ │ │ │ ├── ReprojectionConsoleConfiguration.java │ │ │ │ │ │ ├── ResourceBrowserConfiguration.java │ │ │ │ │ │ └── ToolsAutoConfiguration.java │ │ │ │ │ │ ├── wcs │ │ │ │ │ │ ├── WcsAutoConfiguration.java │ │ │ │ │ │ └── WcsConfiguration.java │ │ │ │ │ │ ├── wfs │ │ │ │ │ │ ├── WfsAutoConfiguration.java │ │ │ │ │ │ └── WfsConfiguration.java │ │ │ │ │ │ ├── wms │ │ │ │ │ │ ├── WmsAutoConfiguration.java │ │ │ │ │ │ └── WmsConfiguration.java │ │ │ │ │ │ └── wps │ │ │ │ │ │ ├── WpsAutoConfiguration.java │ │ │ │ │ │ └── WpsConfiguration.java │ │ │ │ │ └── web │ │ │ │ │ ├── app │ │ │ │ │ └── WebUIApplication.java │ │ │ │ │ ├── service │ │ │ │ │ ├── ServiceInstance.java │ │ │ │ │ ├── ServiceInstanceRegistry.java │ │ │ │ │ └── WebUiCloudServicesConfiguration.java │ │ │ │ │ └── ui │ │ │ │ │ ├── GeoServerCloudHomePageContentProvider.java │ │ │ │ │ ├── GeoServerCloudStatusPanel.java │ │ │ │ │ ├── ServiceProvider.java │ │ │ │ │ └── ServiceRegistryPage.java │ │ │ └── resources │ │ │ │ ├── GeoServerApplication.properties │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ ├── bootstrap.yml │ │ │ │ ├── org │ │ │ │ └── geoserver │ │ │ │ │ ├── cloud │ │ │ │ │ └── web │ │ │ │ │ │ └── ui │ │ │ │ │ │ ├── GeoServerCloudStatusPanel.html │ │ │ │ │ │ └── ServiceRegistryPage.html │ │ │ │ │ └── web │ │ │ │ │ ├── admin │ │ │ │ │ └── GlobalSettingsPage.html │ │ │ │ │ └── geoserver-cloud.css │ │ │ │ └── static │ │ │ │ └── index.html │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── web │ │ │ │ │ └── core │ │ │ │ │ └── WicketComponentFilterTest.java │ │ │ │ └── web │ │ │ │ └── app │ │ │ │ ├── AclIntegrationTest.java │ │ │ │ └── WebUIApplicationTest.java │ │ │ └── resources │ │ │ ├── bootstrap-test.yml │ │ │ └── logback-test.xml │ ├── wfs │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── wfs │ │ │ │ │ ├── app │ │ │ │ │ ├── WFSController.java │ │ │ │ │ └── WfsApplication.java │ │ │ │ │ └── config │ │ │ │ │ └── WfsAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── bootstrap.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── wfs │ │ │ │ └── app │ │ │ │ ├── WfsApplicationDataDirectoryIT.java │ │ │ │ ├── WfsApplicationPgconfigIT.java │ │ │ │ └── WfsApplicationTest.java │ │ │ └── resources │ │ │ ├── bootstrap-datadir.yml │ │ │ ├── bootstrap-pgconfigjndi.yml │ │ │ └── logback-test.xml │ ├── wms │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ └── wms │ │ │ │ │ │ ├── KMLAutoConfiguration.java │ │ │ │ │ │ └── WmsApplicationAutoConfiguration.java │ │ │ │ │ └── wms │ │ │ │ │ ├── app │ │ │ │ │ ├── StatusCodeWmsExceptionHandler.java │ │ │ │ │ └── WmsApplication.java │ │ │ │ │ └── controller │ │ │ │ │ ├── GetMapReflectorController.java │ │ │ │ │ ├── WMSController.java │ │ │ │ │ └── kml │ │ │ │ │ ├── KMLIconsController.java │ │ │ │ │ └── KMLReflectorController.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── bootstrap.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── wms │ │ │ │ └── app │ │ │ │ ├── WmsApplicationDataDirectoryTest.java │ │ │ │ ├── WmsApplicationJdbcconfigTest.java │ │ │ │ └── WmsApplicationTest.java │ │ │ └── resources │ │ │ ├── bootstrap-test.yml │ │ │ ├── bootstrap-testjdbcconfig.yml │ │ │ └── logback-test.xml │ └── wps │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── wps │ │ │ │ ├── WPSController.java │ │ │ │ ├── WpsApplication.java │ │ │ │ └── WpsApplicationConfiguration.java │ │ └── resources │ │ │ └── bootstrap.yml │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── wps │ │ │ └── WpsApplicationTest.java │ │ └── resources │ │ └── bootstrap-test.yml ├── infrastructure │ ├── README.md │ ├── admin │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── adminserver │ │ │ │ └── SpringBootAdminServerApplication.java │ │ │ └── resources │ │ │ └── bootstrap.yml │ ├── config │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── config │ │ │ │ │ └── ConfigApplication.java │ │ │ └── resources │ │ │ │ └── application.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── config │ │ │ │ └── ConfigApplicationTest.java │ │ │ └── resources │ │ │ ├── application-test.yml │ │ │ ├── config │ │ │ ├── test-service-profile1.yml │ │ │ └── test-service.yml │ │ │ └── logback-test.xml │ ├── discovery │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── discovery │ │ │ │ │ └── DiscoveryApplication.java │ │ │ └── resources │ │ │ │ └── application.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── discovery │ │ │ │ └── DiscoveryApplicationTests.java │ │ │ └── resources │ │ │ └── logback-test.xml │ ├── gateway │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ └── gateway │ │ │ │ │ │ ├── GatewayApplicationAutoconfiguration.java │ │ │ │ │ │ └── GatewaySharedAuthAutoConfiguration.java │ │ │ │ │ ├── gateway │ │ │ │ │ ├── GatewayApplication.java │ │ │ │ │ ├── filter │ │ │ │ │ │ ├── GlobalUriFilter.java │ │ │ │ │ │ ├── RouteProfileGatewayFilterFactory.java │ │ │ │ │ │ └── StripBasePathGatewayFilterFactory.java │ │ │ │ │ ├── predicate │ │ │ │ │ │ └── RegExpQueryRoutePredicateFactory.java │ │ │ │ │ └── test │ │ │ │ │ │ └── MdcTest.java │ │ │ │ │ └── security │ │ │ │ │ └── gateway │ │ │ │ │ └── sharedauth │ │ │ │ │ ├── GatewaySharedAuthenticationPostFilter.java │ │ │ │ │ ├── GatewaySharedAuthenticationPreFilter.java │ │ │ │ │ └── SharedAuthConfigurationProperties.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── bootstrap.yml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── gateway │ │ │ │ │ ├── GatewayApplicationAutoconfigurationTest.java │ │ │ │ │ └── GatewaySharedAuthAutoConfigurationTest.java │ │ │ │ ├── gateway │ │ │ │ ├── config │ │ │ │ │ ├── TestLoggingConfig.java │ │ │ │ │ └── TestMdcConfiguration.java │ │ │ │ ├── filter │ │ │ │ │ └── TestMdcVerificationFilter.java │ │ │ │ └── logging │ │ │ │ │ ├── GatewayMdcPropagationTest.java │ │ │ │ │ ├── MdcJsonLoggingTest.java │ │ │ │ │ └── MdcPropagationTestCommand.java │ │ │ │ └── security │ │ │ │ └── gateway │ │ │ │ └── sharedauth │ │ │ │ └── GatewaySharedAuthenticationTest.java │ │ │ └── resources │ │ │ ├── application-json-logs.yml │ │ │ ├── application-test.yml │ │ │ ├── bootstrap-test.yml │ │ │ ├── bootstrap.yml │ │ │ └── logback-test.xml │ └── pom.xml └── pom.xml ├── catalog ├── README.md ├── backends │ ├── README.md │ ├── common │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ ├── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ │ ├── catalog │ │ │ │ │ │ │ └── backend │ │ │ │ │ │ │ │ └── core │ │ │ │ │ │ │ │ ├── DefaultUpdateSequenceAutoConfiguration.java │ │ │ │ │ │ │ │ ├── GeoServerBackendAutoConfiguration.java │ │ │ │ │ │ │ │ ├── LifecycleEventAutoConfiguration.java │ │ │ │ │ │ │ │ ├── RemoteEventResourcePoolCleanupUpAutoConfiguration.java │ │ │ │ │ │ │ │ └── XstreamServiceLoadersAutoConfiguration.java │ │ │ │ │ │ ├── geotools │ │ │ │ │ │ │ ├── GeoToolsHttpClientAutoConfiguration.java │ │ │ │ │ │ │ ├── GeoToolsHttpClientProxyConfigurationProperties.java │ │ │ │ │ │ │ ├── GeoToolsStaticContextInitializer.java │ │ │ │ │ │ │ ├── SpringEnvironmentAwareGeoToolsHttpClient.java │ │ │ │ │ │ │ └── SpringEnvironmentAwareGeoToolsHttpClientFactory.java │ │ │ │ │ │ ├── metrics │ │ │ │ │ │ │ └── catalog │ │ │ │ │ │ │ │ ├── CatalogMetrics.java │ │ │ │ │ │ │ │ ├── CatalogMetricsAutoConfiguration.java │ │ │ │ │ │ │ │ ├── ConditionalOnGeoServerMetricsEnabled.java │ │ │ │ │ │ │ │ ├── GeoSeverMetricsConfigProperties.java │ │ │ │ │ │ │ │ └── MetricsCatalogListener.java │ │ │ │ │ │ └── security │ │ │ │ │ │ │ ├── ConditionalOnGeoServerSecurityDisabled.java │ │ │ │ │ │ │ ├── ConditionalOnGeoServerSecurityEnabled.java │ │ │ │ │ │ │ └── GeoServerSecurityAutoConfiguration.java │ │ │ │ │ ├── config │ │ │ │ │ │ └── catalog │ │ │ │ │ │ │ └── backend │ │ │ │ │ │ │ └── core │ │ │ │ │ │ │ ├── CatalogProperties.java │ │ │ │ │ │ │ ├── CloudGeoServerLoaderProxy.java │ │ │ │ │ │ │ ├── CoreBackendConfiguration.java │ │ │ │ │ │ │ └── GeoServerBackendConfigurer.java │ │ │ │ │ ├── event │ │ │ │ │ │ └── remote │ │ │ │ │ │ │ ├── lifecycle │ │ │ │ │ │ │ └── LifecycleEventProcessor.java │ │ │ │ │ │ │ └── resourcepool │ │ │ │ │ │ │ └── RemoteEventResourcePoolProcessor.java │ │ │ │ │ └── security │ │ │ │ │ │ ├── CloudGeoServerSecurityManager.java │ │ │ │ │ │ ├── EnvironmentAdminAuthenticationProvider.java │ │ │ │ │ │ └── GeoServerSecurityConfiguration.java │ │ │ │ │ └── security │ │ │ │ │ ├── CloudGeoServerSecurityFilterChainProxy.java │ │ │ │ │ └── impl │ │ │ │ │ ├── GsCloudLayerGroupContainmentCache.java │ │ │ │ │ └── NoopLayerGroupContainmentCache.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── services │ │ │ │ └── org.geotools.http.HTTPClientFactory │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ ├── cloud │ │ │ │ └── autoconfigure │ │ │ │ │ ├── catalog │ │ │ │ │ └── backend │ │ │ │ │ │ └── core │ │ │ │ │ │ ├── LifecycleEventAutoConfigurationTest.java │ │ │ │ │ │ └── RemoteEventResourcePoolCleanupUpAutoConfigurationTest.java │ │ │ │ │ ├── geotools │ │ │ │ │ └── GeoToolsHttpClientAutoConfigurationTest.java │ │ │ │ │ └── security │ │ │ │ │ ├── AutoConfigurationTestConfiguration.java │ │ │ │ │ ├── EnvironmentAdminAuthenticationProviderTest.java │ │ │ │ │ └── GeoServerSecurityAutoConfigurationTest.java │ │ │ │ └── security │ │ │ │ └── impl │ │ │ │ └── GsCloudLayerGroupContainmentCacheTest.java │ │ │ └── resources │ │ │ ├── application.yml │ │ │ └── logback-test.xml │ ├── datadir │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ └── catalog │ │ │ │ │ │ └── backend │ │ │ │ │ │ └── datadir │ │ │ │ │ │ ├── ConditionalOnDataDirectoryEnabled.java │ │ │ │ │ │ ├── DataDirectoryAutoConfiguration.java │ │ │ │ │ │ └── RemoteEventDataDirectoryAutoConfiguration.java │ │ │ │ │ ├── catalog │ │ │ │ │ └── backend │ │ │ │ │ │ └── datadir │ │ │ │ │ │ ├── EventualConsistencyEnforcer.java │ │ │ │ │ │ └── EventuallyConsistentCatalogFacade.java │ │ │ │ │ ├── config │ │ │ │ │ └── catalog │ │ │ │ │ │ └── backend │ │ │ │ │ │ └── datadirectory │ │ │ │ │ │ ├── CatalogPluginGeoServerConfigPersister.java │ │ │ │ │ │ ├── CloudDataDirectoryGeoServerLoader.java │ │ │ │ │ │ ├── DataDirectoryBackendConfiguration.java │ │ │ │ │ │ ├── DataDirectoryProperties.java │ │ │ │ │ │ ├── DataDirectoryUpdateSequence.java │ │ │ │ │ │ ├── NoServletContextDataDirectoryResourceStore.java │ │ │ │ │ │ └── NoServletContextFileLockProvider.java │ │ │ │ │ └── event │ │ │ │ │ └── remote │ │ │ │ │ └── datadir │ │ │ │ │ ├── RemoteEventDataDirectoryConfiguration.java │ │ │ │ │ └── RemoteEventDataDirectoryProcessor.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── catalog │ │ │ │ │ └── backend │ │ │ │ │ └── datadir │ │ │ │ │ ├── DataDirectoryAutoConfigurationTest.java │ │ │ │ │ ├── DataDirectoryTestConfiguration.java │ │ │ │ │ └── DataDirectoryUpdateSequenceTest.java │ │ │ │ ├── catalog │ │ │ │ └── backend │ │ │ │ │ └── datadir │ │ │ │ │ └── EventuallyConsistentCatalogFacadeTest.java │ │ │ │ └── event │ │ │ │ └── remote │ │ │ │ └── datadir │ │ │ │ └── RemoteEventDataDirectoryProcessorTest.java │ │ │ └── resources │ │ │ ├── application.yml │ │ │ └── logback-test.xml │ ├── jdbcconfig │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ └── catalog │ │ │ │ │ │ └── backend │ │ │ │ │ │ └── jdbcconfig │ │ │ │ │ │ ├── ConditionalOnJdbcConfigEnabled.java │ │ │ │ │ │ ├── ConditionalOnJdbcConfigWebUIEnabled.java │ │ │ │ │ │ ├── JDBCConfigAutoConfiguration.java │ │ │ │ │ │ ├── JDBCConfigWebAutoConfiguration.java │ │ │ │ │ │ └── RemoteEventJdbcConfigAutoConfiguration.java │ │ │ │ │ ├── config │ │ │ │ │ └── catalog │ │ │ │ │ │ └── backend │ │ │ │ │ │ └── jdbcconfig │ │ │ │ │ │ ├── CloudJdbcCatalogFacade.java │ │ │ │ │ │ ├── CloudJdbcConfigDatabase.java │ │ │ │ │ │ ├── CloudJdbcConfigProperties.java │ │ │ │ │ │ ├── CloudJdbcGeoServerLoader.java │ │ │ │ │ │ ├── CloudJdbcGeoserverFacade.java │ │ │ │ │ │ ├── CloudJdbcStoreProperties.java │ │ │ │ │ │ ├── JDBCConfigBackendConfigurer.java │ │ │ │ │ │ ├── JDBCConfigWebConfiguration.java │ │ │ │ │ │ ├── JdbcConfigConfigurationProperties.java │ │ │ │ │ │ └── JdbcConfigUpdateSequence.java │ │ │ │ │ └── event │ │ │ │ │ └── remote │ │ │ │ │ └── jdbcconfig │ │ │ │ │ └── RemoteEventJdbcConfigProcessor.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── catalog │ │ │ │ └── backend │ │ │ │ └── jdbcconfig │ │ │ │ ├── AutoConfigurationTestConfiguration.java │ │ │ │ ├── JDBCConfigAutoConfigurationTest.java │ │ │ │ ├── JDBCConfigAutoConfigurationWebDisabledTest.java │ │ │ │ ├── JDBCConfigAutoConfigurationWebEnabledTest.java │ │ │ │ ├── JDBCConfigTest.java │ │ │ │ ├── JdbcConfigDataSourceTest.java │ │ │ │ └── JdbcConfigUpdateSequenceTest.java │ │ │ └── resources │ │ │ ├── application.yml │ │ │ └── logback-test.xml │ ├── pgconfig │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ ├── autoconfigure │ │ │ │ │ └── catalog │ │ │ │ │ │ └── backend │ │ │ │ │ │ └── pgconfig │ │ │ │ │ │ ├── ConditionalOnPgconfigBackendEnabled.java │ │ │ │ │ │ ├── PgconfigBackendAutoConfiguration.java │ │ │ │ │ │ ├── PgconfigDataSourceAutoConfiguration.java │ │ │ │ │ │ ├── PgconfigMigrationAutoConfiguration.java │ │ │ │ │ │ └── PgconfigTransactionManagerAutoConfiguration.java │ │ │ │ │ ├── backend │ │ │ │ │ └── pgconfig │ │ │ │ │ │ ├── PgconfigBackendBuilder.java │ │ │ │ │ │ ├── catalog │ │ │ │ │ │ ├── PgconfigCatalogFacade.java │ │ │ │ │ │ ├── filter │ │ │ │ │ │ │ ├── CatalogInfoLiteralAdaptor.java │ │ │ │ │ │ │ ├── PgconfigCatalogFilterSplitter.java │ │ │ │ │ │ │ ├── PgconfigFilterCapabilities.java │ │ │ │ │ │ │ ├── PgconfigFilterToSQL.java │ │ │ │ │ │ │ ├── PgconfigQueryBuilder.java │ │ │ │ │ │ │ └── ToPgsqlCompatibleFilterDuplicator.java │ │ │ │ │ │ └── repository │ │ │ │ │ │ │ ├── CatalogInfoRowMapper.java │ │ │ │ │ │ │ ├── LRUCache.java │ │ │ │ │ │ │ ├── LoggingTemplate.java │ │ │ │ │ │ │ ├── PgconfigCatalogInfoRepository.java │ │ │ │ │ │ │ ├── PgconfigLayerGroupRepository.java │ │ │ │ │ │ │ ├── PgconfigLayerRepository.java │ │ │ │ │ │ │ ├── PgconfigNamespaceRepository.java │ │ │ │ │ │ │ ├── PgconfigObjectMapper.java │ │ │ │ │ │ │ ├── PgconfigPublishedInfoReadOnlyRepository.java │ │ │ │ │ │ │ ├── PgconfigPublishedInfoRepository.java │ │ │ │ │ │ │ ├── PgconfigResourceRepository.java │ │ │ │ │ │ │ ├── PgconfigStoreRepository.java │ │ │ │ │ │ │ ├── PgconfigStyleRepository.java │ │ │ │ │ │ │ ├── PgconfigWorkspaceRepository.java │ │ │ │ │ │ │ └── UncheckedSqlException.java │ │ │ │ │ │ ├── config │ │ │ │ │ │ ├── PgconfigConfigRepository.java │ │ │ │ │ │ ├── PgconfigGeoServerFacade.java │ │ │ │ │ │ └── PgconfigUpdateSequence.java │ │ │ │ │ │ └── resource │ │ │ │ │ │ ├── FileSystemResourceStoreCache.java │ │ │ │ │ │ ├── PgconfigLockProvider.java │ │ │ │ │ │ ├── PgconfigResource.java │ │ │ │ │ │ ├── PgconfigResourceRowMapper.java │ │ │ │ │ │ └── PgconfigResourceStore.java │ │ │ │ │ └── config │ │ │ │ │ └── catalog │ │ │ │ │ └── backend │ │ │ │ │ └── pgconfig │ │ │ │ │ ├── DatabaseMigrationConfiguration.java │ │ │ │ │ ├── GeoServerConfigInitializer.java │ │ │ │ │ ├── PconfigDataSourceConfiguration.java │ │ │ │ │ ├── PgconfigBackendConfiguration.java │ │ │ │ │ ├── PgconfigBackendProperties.java │ │ │ │ │ ├── PgconfigCatalogResourcesSynchronizer.java │ │ │ │ │ ├── PgconfigDatabaseMigrations.java │ │ │ │ │ ├── PgconfigGeoServerLoader.java │ │ │ │ │ └── PgconfigGeoServerResourceLoader.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── db │ │ │ │ └── pgconfig │ │ │ │ └── migration │ │ │ │ └── postgresql │ │ │ │ ├── V1_0__Catalog_Tables.sql │ │ │ │ ├── V1_1__Catalog_Query_Tables.sql │ │ │ │ ├── V1_2__Catalog_Full_Text_Search.sql │ │ │ │ ├── V1_3__Config_Tables.sql │ │ │ │ ├── V1_4_1__Fix_StoreInfosView.sql │ │ │ │ ├── V1_4__ResourceStore_Tables.sql │ │ │ │ ├── V1_5__TileLayer_Tables.sql │ │ │ │ ├── V1_6__ResourceStore_NoCTE.sql │ │ │ │ ├── V1_7__PublishedInfo_Multivalued_Id_Queryables.sql │ │ │ │ ├── V1_8_1__Revert_Catalog_Full_Text_Search_Indexes.sql │ │ │ │ ├── V1_8__ServiceInfoSettingsInfoConstraints.sql │ │ │ │ ├── V1_9_0__PublishedInfos_add_styles_id_and_layers_id.sql │ │ │ │ └── V2_0_0__PublishedInfos_Materialized_Table.sql │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── catalog │ │ │ │ │ └── backend │ │ │ │ │ └── pgconfig │ │ │ │ │ ├── PgconfigBackendAutoConfigurationTest.java │ │ │ │ │ ├── PgconfigDataSourceAutoConfigurationTest.java │ │ │ │ │ └── PgconfigMigrationAutoConfigurationTest.java │ │ │ │ └── backend │ │ │ │ └── pgconfig │ │ │ │ ├── catalog │ │ │ │ ├── PgconfigCatalogBackendConformanceTest.java │ │ │ │ └── repository │ │ │ │ │ └── PgconfigWorkspaceRepositoryTest.java │ │ │ │ ├── config │ │ │ │ ├── PgconfigConfigRepositoryConformanceTest.java │ │ │ │ └── PgconfigUpdateSequenceTest.java │ │ │ │ ├── resource │ │ │ │ ├── PgconfigResourceStoreUpdateStateTest.java │ │ │ │ ├── PgconfigResourceTest.java │ │ │ │ └── PgconfigResourceUpdateStateTest.java │ │ │ │ └── support │ │ │ │ └── PgConfigTestContainer.java │ │ │ └── resources │ │ │ ├── application-test.yml │ │ │ └── logback-test.xml │ └── pom.xml ├── cache │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── catalog │ │ │ │ │ └── cache │ │ │ │ │ ├── BackendCacheAutoConfiguration.java │ │ │ │ │ └── ConditionalOnBackendCacheEnabled.java │ │ │ │ └── catalog │ │ │ │ └── cache │ │ │ │ ├── CachedReferenceCleaner.java │ │ │ │ ├── CachingCatalogFacade.java │ │ │ │ ├── CachingCatalogFacadeContainmentSupport.java │ │ │ │ ├── CachingFacadesLifeCycleHandler.java │ │ │ │ ├── CachingGeoServerFacade.java │ │ │ │ ├── GeoServerBackendCacheConfiguration.java │ │ │ │ ├── InfoIdKey.java │ │ │ │ ├── InfoNameKey.java │ │ │ │ └── ServiceInfoKey.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── catalog │ │ │ └── cache │ │ │ ├── CachingCatalogFacadeContainmentSupportTest.java │ │ │ ├── CachingCatalogFacadeTest.java │ │ │ ├── CachingGeoServerFacadeTest.java │ │ │ └── GeoServerBackendCacheConfigurationTest.java │ │ └── resources │ │ ├── application.yml │ │ └── logback-test.xml ├── event-bus │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── event │ │ │ │ │ └── bus │ │ │ │ │ ├── ConditionalOnGeoServerRemoteEventsDisabled.java │ │ │ │ │ ├── ConditionalOnGeoServerRemoteEventsEnabled.java │ │ │ │ │ └── GeoServerBusIntegrationAutoConfiguration.java │ │ │ │ └── event │ │ │ │ └── bus │ │ │ │ ├── InfoEventResolver.java │ │ │ │ ├── RemoteGeoServerEvent.java │ │ │ │ ├── RemoteGeoServerEventBridge.java │ │ │ │ ├── RemoteGeoServerEventMapper.java │ │ │ │ └── RemoteGeoServerEventsConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ ├── autoconfigure │ │ │ └── event │ │ │ │ └── bus │ │ │ │ └── GeoServerBusIntegrationAutoConfigurationTest.java │ │ │ └── event │ │ │ └── bus │ │ │ ├── BusAmqpIntegrationTests.java │ │ │ ├── BusEventCollector.java │ │ │ ├── CatalogRemoteApplicationEventsIT.java │ │ │ ├── ConfigRemoteApplicationEventsIT.java │ │ │ ├── LifecycleRemoteApplicationEventsIT.java │ │ │ ├── RemoteGeoServerEventsConfigurationTest.java │ │ │ └── TestConfigurationAutoConfiguration.java │ │ └── resources │ │ ├── application.yml │ │ └── logback-test.xml ├── events │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── catalog │ │ │ │ │ └── event │ │ │ │ │ ├── ConditionalOnCatalogEvents.java │ │ │ │ │ ├── LocalCatalogEventsAutoConfiguration.java │ │ │ │ │ ├── UpdateSequenceController.java │ │ │ │ │ └── UpdateSequenceControllerAutoConfiguration.java │ │ │ │ ├── config │ │ │ │ └── catalog │ │ │ │ │ └── events │ │ │ │ │ ├── CatalogApplicationEventPublisher.java │ │ │ │ │ ├── CatalogApplicationEventsConfiguration.java │ │ │ │ │ └── GeoServerLifecycleEventPublisher.java │ │ │ │ └── event │ │ │ │ ├── GeoServerEvent.java │ │ │ │ ├── UpdateSequenceEvent.java │ │ │ │ ├── catalog │ │ │ │ ├── CatalogInfoAdded.java │ │ │ │ ├── CatalogInfoModified.java │ │ │ │ ├── CatalogInfoRemoved.java │ │ │ │ ├── DefaultDataStoreSet.java │ │ │ │ ├── DefaultNamespaceSet.java │ │ │ │ └── DefaultWorkspaceSet.java │ │ │ │ ├── config │ │ │ │ ├── ConfigInfoAdded.java │ │ │ │ ├── ConfigInfoEvent.java │ │ │ │ ├── ConfigInfoModified.java │ │ │ │ ├── ConfigInfoRemoved.java │ │ │ │ ├── GeoServerInfoModified.java │ │ │ │ ├── GeoServerInfoSet.java │ │ │ │ ├── LoggingInfoModified.java │ │ │ │ ├── LoggingInfoSet.java │ │ │ │ ├── ServiceAdded.java │ │ │ │ ├── ServiceModified.java │ │ │ │ ├── ServiceRemoved.java │ │ │ │ ├── SettingsAdded.java │ │ │ │ ├── SettingsModified.java │ │ │ │ └── SettingsRemoved.java │ │ │ │ ├── info │ │ │ │ ├── ConfigInfoType.java │ │ │ │ ├── InfoAdded.java │ │ │ │ ├── InfoEvent.java │ │ │ │ ├── InfoModified.java │ │ │ │ └── InfoRemoved.java │ │ │ │ ├── lifecycle │ │ │ │ ├── LifecycleEvent.java │ │ │ │ ├── ReloadEvent.java │ │ │ │ └── ResetEvent.java │ │ │ │ └── security │ │ │ │ ├── SecurityConfigChanged.java │ │ │ │ └── SecurityManagerReloaded.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── config │ │ │ └── catalog │ │ │ └── events │ │ │ ├── CatalogApplicationEventsConfigurationTest.java │ │ │ └── TestConfigurationAutoConfiguration.java │ │ └── resources │ │ ├── application.yml │ │ └── logback-test.xml ├── jackson-bindings │ ├── geoserver │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── jackson │ │ │ │ │ └── databind │ │ │ │ │ ├── catalog │ │ │ │ │ ├── CatalogInfoDeserializer.java │ │ │ │ │ ├── CatalogInfoSerializer.java │ │ │ │ │ ├── ConnectionParameters.java │ │ │ │ │ ├── ConnectionParametersDeserializer.java │ │ │ │ │ ├── ConnectionParametersSerializer.java │ │ │ │ │ ├── GeoServerCatalogModule.java │ │ │ │ │ ├── dto │ │ │ │ │ │ ├── AttributeType.java │ │ │ │ │ │ ├── Attribution.java │ │ │ │ │ │ ├── AuthorityURL.java │ │ │ │ │ │ ├── CatalogInfoDto.java │ │ │ │ │ │ ├── Coverage.java │ │ │ │ │ │ ├── CoverageDimension.java │ │ │ │ │ │ ├── CoverageStore.java │ │ │ │ │ │ ├── DataLink.java │ │ │ │ │ │ ├── DataStore.java │ │ │ │ │ │ ├── Dimension.java │ │ │ │ │ │ ├── FeatureType.java │ │ │ │ │ │ ├── GridGeometryDto.java │ │ │ │ │ │ ├── HTTPStore.java │ │ │ │ │ │ ├── InfoDto.java │ │ │ │ │ │ ├── InfoReference.java │ │ │ │ │ │ ├── Keyword.java │ │ │ │ │ │ ├── Layer.java │ │ │ │ │ │ ├── LayerGroup.java │ │ │ │ │ │ ├── LayerGroupStyle.java │ │ │ │ │ │ ├── LayerIdentifier.java │ │ │ │ │ │ ├── Legend.java │ │ │ │ │ │ ├── Map.java │ │ │ │ │ │ ├── MetadataLink.java │ │ │ │ │ │ ├── MetadataMapDto.java │ │ │ │ │ │ ├── Namespace.java │ │ │ │ │ │ ├── PatchDto.java │ │ │ │ │ │ ├── Published.java │ │ │ │ │ │ ├── QueryDto.java │ │ │ │ │ │ ├── Resource.java │ │ │ │ │ │ ├── Store.java │ │ │ │ │ │ ├── Style.java │ │ │ │ │ │ ├── VirtualTableDto.java │ │ │ │ │ │ ├── WMSLayer.java │ │ │ │ │ │ ├── WMSStore.java │ │ │ │ │ │ ├── WMTSLayer.java │ │ │ │ │ │ ├── WMTSStore.java │ │ │ │ │ │ └── Workspace.java │ │ │ │ │ └── mapper │ │ │ │ │ │ ├── CatalogInfoMapper.java │ │ │ │ │ │ ├── CatalogInfoMapperConfig.java │ │ │ │ │ │ ├── GeoServerValueObjectsMapper.java │ │ │ │ │ │ ├── MapMapper.java │ │ │ │ │ │ ├── NamespaceMapper.java │ │ │ │ │ │ ├── ObjectFacotries.java │ │ │ │ │ │ ├── PublishedMapper.java │ │ │ │ │ │ ├── ResourceMapper.java │ │ │ │ │ │ ├── StoreMapper.java │ │ │ │ │ │ ├── StyleMapper.java │ │ │ │ │ │ └── WorkspaceMapper.java │ │ │ │ │ ├── config │ │ │ │ │ ├── ConfigInfoDeserializer.java │ │ │ │ │ ├── ConfigInfoSerializer.java │ │ │ │ │ ├── GeoServerConfigModule.java │ │ │ │ │ └── dto │ │ │ │ │ │ ├── CogSettingsDto.java │ │ │ │ │ │ ├── CogSettingsStoreDto.java │ │ │ │ │ │ ├── ConfigInfoDto.java │ │ │ │ │ │ ├── Contact.java │ │ │ │ │ │ ├── CoverageAccess.java │ │ │ │ │ │ ├── GeoServer.java │ │ │ │ │ │ ├── JaiDto.java │ │ │ │ │ │ ├── Logging.java │ │ │ │ │ │ ├── Service.java │ │ │ │ │ │ ├── Settings.java │ │ │ │ │ │ └── mapper │ │ │ │ │ │ ├── ConfigInfoMapperConfig.java │ │ │ │ │ │ ├── GeoServerConfigMapper.java │ │ │ │ │ │ ├── ObjectFacotries.java │ │ │ │ │ │ └── WPSMapper.java │ │ │ │ │ └── mapper │ │ │ │ │ ├── InfoReferenceMapper.java │ │ │ │ │ └── PatchMapper.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── services │ │ │ │ └── com.fasterxml.jackson.databind.Module │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── jackson │ │ │ │ └── databind │ │ │ │ ├── catalog │ │ │ │ ├── ConnectionParametersSerializerTest.java │ │ │ │ ├── GeoServerCatalogModuleJsonTest.java │ │ │ │ ├── GeoServerCatalogModuleTest.java │ │ │ │ ├── GeoServerCatalogModuleYamlTest.java │ │ │ │ ├── PatchSerializationJsonTest.java │ │ │ │ ├── PatchSerializationTest.java │ │ │ │ └── PatchSerializationYamlTest.java │ │ │ │ └── config │ │ │ │ ├── GeoServerConfigModuleTest.java │ │ │ │ ├── GeoSeververConfigModuleJsonTest.java │ │ │ │ └── GeoSeververConfigModuleYamlTest.java │ │ │ └── resources │ │ │ └── logback-test.xml │ ├── geotools │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geotools │ │ │ │ │ └── jackson │ │ │ │ │ └── databind │ │ │ │ │ ├── dto │ │ │ │ │ ├── CRS.java │ │ │ │ │ ├── Envelope.java │ │ │ │ │ ├── NameDto.java │ │ │ │ │ ├── NumberRangeDto.java │ │ │ │ │ └── VersionDto.java │ │ │ │ │ ├── filter │ │ │ │ │ ├── GeoToolsFilterModule.java │ │ │ │ │ ├── dto │ │ │ │ │ │ ├── Expression.java │ │ │ │ │ │ ├── Filter.java │ │ │ │ │ │ ├── Literal.java │ │ │ │ │ │ ├── LiteralDeserializer.java │ │ │ │ │ │ ├── LiteralSerializer.java │ │ │ │ │ │ └── SortBy.java │ │ │ │ │ └── mapper │ │ │ │ │ │ ├── DtoToFilterMapper.java │ │ │ │ │ │ ├── ExpressionFactory.java │ │ │ │ │ │ ├── ExpressionMapper.java │ │ │ │ │ │ ├── FilterFactory.java │ │ │ │ │ │ ├── FilterMapper.java │ │ │ │ │ │ ├── FilterMapperConfig.java │ │ │ │ │ │ ├── FilterToDtoMapper.java │ │ │ │ │ │ ├── GeoToolsValueMappers.java │ │ │ │ │ │ └── MappingFilterVisitor.java │ │ │ │ │ ├── geojson │ │ │ │ │ ├── GeoToolsGeoJsonModule.java │ │ │ │ │ └── geometry │ │ │ │ │ │ ├── GeometryDeserializer.java │ │ │ │ │ │ └── GeometrySerializer.java │ │ │ │ │ └── util │ │ │ │ │ ├── MapperDeserializer.java │ │ │ │ │ ├── MapperSerializer.java │ │ │ │ │ └── ObjectMapperUtil.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── services │ │ │ │ └── com.fasterxml.jackson.databind.Module │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geotools │ │ │ │ └── jackson │ │ │ │ └── databind │ │ │ │ ├── filter │ │ │ │ ├── ExpressionRoundtripTest.java │ │ │ │ ├── FilterRoundtripTest.java │ │ │ │ ├── GeoToolsFilterModuleExpressionsJsonTest.java │ │ │ │ ├── GeoToolsFilterModuleExpressionsTest.java │ │ │ │ ├── GeoToolsFilterModuleExpressionsYamlTest.java │ │ │ │ ├── GeoToolsFilterModuleFiltersJsonTest.java │ │ │ │ ├── GeoToolsFilterModuleFiltersTest.java │ │ │ │ ├── GeoToolsFilterModuleFiltersYamlTest.java │ │ │ │ ├── dto │ │ │ │ │ ├── ChangedFieldOrderExpressionSerializationTest.java │ │ │ │ │ ├── ExpressionSerializationTest.java │ │ │ │ │ └── FilterSerializationTest.java │ │ │ │ ├── mapper │ │ │ │ │ ├── ExpressionMapperTest.java │ │ │ │ │ └── FilterMapperTest.java │ │ │ │ └── model │ │ │ │ │ └── TestDto.java │ │ │ │ └── geojson │ │ │ │ ├── GeoToolsGeoJsonModuleJsonTest.java │ │ │ │ ├── GeoToolsGeoJsonModuleTest.java │ │ │ │ └── GeoToolsGeoJsonModuleYamlTest.java │ │ │ └── resources │ │ │ └── logback-test.xml │ ├── pom.xml │ └── starter │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── jackson │ │ │ │ ├── GeoServerJacksonBindingsAutoConfiguration.java │ │ │ │ └── GeoToolsJacksonBindingsAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── jackson │ │ │ ├── GeoServerJacksonBindingsAutoConfigurationTest.java │ │ │ └── GeoToolsJacksonBindingsAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml ├── plugin │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── geoserver │ │ │ ├── catalog │ │ │ └── plugin │ │ │ │ ├── AbstractCatalogVisitor.java │ │ │ │ ├── CatalogFacadeExtensionAdapter.java │ │ │ │ ├── CatalogInfoLookup.java │ │ │ │ ├── CatalogInfoRepository.java │ │ │ │ ├── CatalogInfoRepositoryHolder.java │ │ │ │ ├── CatalogInfoRepositoryHolderImpl.java │ │ │ │ ├── CatalogInfoTypeRegistry.java │ │ │ │ ├── CatalogPlugin.java │ │ │ │ ├── CatalogPluginStyleResourcePersister.java │ │ │ │ ├── DefaultMemoryCatalogFacade.java │ │ │ │ ├── ExtendedCatalogFacade.java │ │ │ │ ├── IsolatedCatalogFacade.java │ │ │ │ ├── Patch.java │ │ │ │ ├── PropertyDiff.java │ │ │ │ ├── Query.java │ │ │ │ ├── RepositoryCatalogFacade.java │ │ │ │ ├── RepositoryCatalogFacadeImpl.java │ │ │ │ ├── forwarding │ │ │ │ ├── ForwardingCatalog.java │ │ │ │ ├── ForwardingCatalogFacade.java │ │ │ │ ├── ForwardingCatalogRepository.java │ │ │ │ ├── ForwardingExtendedCatalogFacade.java │ │ │ │ ├── ForwardingLayerGroupRepository.java │ │ │ │ ├── ForwardingLayerRepository.java │ │ │ │ ├── ForwardingMapRepository.java │ │ │ │ ├── ForwardingNamespaceRepository.java │ │ │ │ ├── ForwardingRepositoryCatalogFacade.java │ │ │ │ ├── ForwardingResourceRepository.java │ │ │ │ ├── ForwardingStoreRepository.java │ │ │ │ ├── ForwardingStyleRepository.java │ │ │ │ ├── ForwardingWorkspaceRepository.java │ │ │ │ └── ResolvingCatalogFacadeDecorator.java │ │ │ │ ├── locking │ │ │ │ ├── ConfigInfoType.java │ │ │ │ ├── LockProviderGeoServerConfigurationLock.java │ │ │ │ ├── LockingCatalog.java │ │ │ │ ├── LockingGeoServer.java │ │ │ │ └── LockingSupport.java │ │ │ │ ├── resolving │ │ │ │ ├── CatalogPropertyResolver.java │ │ │ │ ├── CollectionPropertiesInitializer.java │ │ │ │ ├── ModificationProxyDecorator.java │ │ │ │ ├── ProxyUtils.java │ │ │ │ ├── ResolvingCatalogFacade.java │ │ │ │ ├── ResolvingCatalogInfoRepository.java │ │ │ │ ├── ResolvingFacade.java │ │ │ │ ├── ResolvingFacadeSupport.java │ │ │ │ └── ResolvingProxyResolver.java │ │ │ │ ├── rules │ │ │ │ ├── CatalogBusinessRules.java │ │ │ │ ├── CatalogInfoBusinessRules.java │ │ │ │ ├── CatalogOpContext.java │ │ │ │ ├── DefaultLayerGroupInfoRules.java │ │ │ │ ├── DefaultLayerInfoRules.java │ │ │ │ ├── DefaultNamespaceInfoRules.java │ │ │ │ ├── DefaultResourceInfoRules.java │ │ │ │ ├── DefaultStoreInfoRules.java │ │ │ │ ├── DefaultStyleInfoRules.java │ │ │ │ └── DefaultWorkspaceInfoRules.java │ │ │ │ └── validation │ │ │ │ ├── BeforeRemoveValidator.java │ │ │ │ ├── CatalogValidationRules.java │ │ │ │ ├── CatalogValidatorVisitor.java │ │ │ │ ├── DefaultCatalogValidator.java │ │ │ │ └── DefaultPropertyValuesResolver.java │ │ │ ├── config │ │ │ └── plugin │ │ │ │ ├── ConfigRepository.java │ │ │ │ ├── GeoServerImpl.java │ │ │ │ ├── MemoryConfigRepository.java │ │ │ │ ├── RepositoryGeoServerFacade.java │ │ │ │ ├── RepositoryGeoServerFacadeImpl.java │ │ │ │ └── forwarding │ │ │ │ └── ForwardingGeoServerFacade.java │ │ │ └── platform │ │ │ └── config │ │ │ ├── DefaultUpdateSequence.java │ │ │ └── UpdateSequence.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ ├── catalog │ │ │ ├── CatalogTestData.java │ │ │ ├── faker │ │ │ │ └── CatalogFaker.java │ │ │ └── plugin │ │ │ │ ├── AbstractCatalogVisitorTest.java │ │ │ │ ├── CatalogConformanceTest.java │ │ │ │ ├── CatalogFacadeExtensionAdapterTest.java │ │ │ │ ├── CatalogPluginConformanceTest.java │ │ │ │ ├── NamespaceInfoLookupTest.java │ │ │ │ ├── PropertyDiffTest.java │ │ │ │ ├── PropertyDiffTestSupport.java │ │ │ │ ├── XmlCatalogInfoLookup.java │ │ │ │ ├── XmlCatalogInfoLookupConformanceTest.java │ │ │ │ └── locking │ │ │ │ ├── LockProviderGeoServerConfigurationLockTest.java │ │ │ │ ├── LockingCatalogDataDirectoryTest.java │ │ │ │ └── LockingCatalogTest.java │ │ │ ├── cloud │ │ │ └── test │ │ │ │ └── ApplicationEventCapturingListener.java │ │ │ ├── config │ │ │ ├── GeoServerConfigConformanceTest.java │ │ │ ├── impl │ │ │ │ ├── CatalogImplConformanceTest.java │ │ │ │ └── GeoServerImplConformanceTest.java │ │ │ └── plugin │ │ │ │ ├── GeoServerImplConformanceTest.java │ │ │ │ ├── XmlSerializedConfigRepository.java │ │ │ │ └── XmlSerializedConfigRepositoryConformanceTest.java │ │ │ └── platform │ │ │ └── config │ │ │ ├── DefaultUpdateSequenceTest.java │ │ │ └── UpdateSequenceConformanceTest.java │ │ └── resources │ │ └── logback-test.xml └── pom.xml ├── extensions ├── README.md ├── app-schema │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── appschema │ │ │ │ ├── AppSchemaAutoConfiguration.java │ │ │ │ ├── AppSchemaConfigProperties.java │ │ │ │ ├── AppSchemaConfiguration.java │ │ │ │ └── ConditionalOnAppSchema.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── appschema │ │ │ └── AppSchemaAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml ├── core │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ ├── ConditionalOnGeoServer.java │ │ │ ├── ConditionalOnGeoServerGWC.java │ │ │ ├── ConditionalOnGeoServerREST.java │ │ │ ├── ConditionalOnGeoServerWCS.java │ │ │ ├── ConditionalOnGeoServerWFS.java │ │ │ ├── ConditionalOnGeoServerWMS.java │ │ │ ├── ConditionalOnGeoServerWPS.java │ │ │ ├── ConditionalOnGeoServerWebUI.java │ │ │ └── ConditionalOnGeoServerWebUIUnavailable.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ ├── AbstractConditionalTest.java │ │ │ ├── ConditionalOnGeoServerRESTTest.java │ │ │ ├── ConditionalOnGeoServerWCSTest.java │ │ │ ├── ConditionalOnGeoServerWFSTest.java │ │ │ ├── ConditionalOnGeoServerWMSTest.java │ │ │ ├── ConditionalOnGeoServerWPSTest.java │ │ │ ├── ConditionalOnGeoServerWebUITest.java │ │ │ └── test │ │ │ └── ConditionalTestAutoConfiguration.java │ │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ └── logback-test.xml ├── css-styling │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── cssstyling │ │ │ │ ├── ConditionalOnCssStyling.java │ │ │ │ ├── CssStylingAutoConfiguration.java │ │ │ │ └── CssStylingConfigProperties.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── README.md │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── cssstyling │ │ │ └── CssStylingAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml ├── importer │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── importer │ │ │ │ ├── ConditionalOnImporter.java │ │ │ │ ├── ImporterAutoConfiguration.java │ │ │ │ └── ImporterConfigProperties.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── importer │ │ │ └── ImporterAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml ├── input-formats │ ├── pom.xml │ ├── raster-formats │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ ├── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ │ └── autoconfigure │ │ │ │ │ │ └── cog │ │ │ │ │ │ ├── COGAutoConfiguration.java │ │ │ │ │ │ └── COGWebUIAutoConfiguration.java │ │ │ │ │ └── geotools │ │ │ │ │ └── autoconfigure │ │ │ │ │ └── rasterformats │ │ │ │ │ ├── GridFormatFactoryFilterConfigProperties.java │ │ │ │ │ ├── GridFormatFactoryFilterProcessor.java │ │ │ │ │ └── GridFormatFactoryFilteringAutoConfiguration.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── spring.factories │ │ │ │ └── spring │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ ├── geoserver │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── cog │ │ │ │ └── COGAutoConfigurationTest.java │ │ │ └── geotools │ │ │ └── autoconfigure │ │ │ └── rasterformats │ │ │ ├── GridFormatFactoryFilterProcessorTest.java │ │ │ └── GridFormatFactoryFilteringAutoConfigurationTest.java │ └── vector-formats │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ ├── geoserver │ │ │ │ └── cloud │ │ │ │ │ └── autoconfigure │ │ │ │ │ └── vectorformats │ │ │ │ │ ├── geoparquet │ │ │ │ │ ├── ConditionalOnGeoParquet.java │ │ │ │ │ └── GeoParquetWebComponentsAutoConfiguration.java │ │ │ │ │ └── graticule │ │ │ │ │ ├── ConditionalOnGraticule.java │ │ │ │ │ └── GraticuleWebComponentsAutoConfiguration.java │ │ │ │ └── geotools │ │ │ │ └── autoconfigure │ │ │ │ └── vectorformats │ │ │ │ ├── DataAccessFactoryFilterConfigProperties.java │ │ │ │ ├── DataAccessFactoryFilterProcessor.java │ │ │ │ └── DataAccessFactoryFilteringAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ ├── geoserver │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── vectorformats │ │ │ │ └── graticule │ │ │ │ └── GraticuleWebComponentsAutoConfigurationTest.java │ │ │ └── geotools │ │ │ └── autoconfigure │ │ │ └── vectorformats │ │ │ ├── DataAccessFactoryFilteringAutoConfigurationTest.java │ │ │ └── MockDataAccessFactory.java │ │ └── resources │ │ └── logback-test.xml ├── inspire │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── inspire │ │ │ │ ├── ConditionalOnInspire.java │ │ │ │ ├── InspireAutoConfiguration.java │ │ │ │ ├── InspireConfigProperties.java │ │ │ │ ├── gwc │ │ │ │ ├── ConditionalOnInspireGwc.java │ │ │ │ ├── InspireAutoConfigurationGwc.java │ │ │ │ └── InspireConfigurationGwc.java │ │ │ │ ├── wcs │ │ │ │ ├── ConditionalOnInspireWcs.java │ │ │ │ ├── InspireAutoConfigurationWcs.java │ │ │ │ └── InspireConfigurationWcs.java │ │ │ │ ├── webui │ │ │ │ ├── ConditionalOnInspireWebUI.java │ │ │ │ ├── InspireAutoConfigurationWebUI.java │ │ │ │ └── InspireConfigurationWebUI.java │ │ │ │ ├── wfs │ │ │ │ ├── ConditionalOnInspireWfs.java │ │ │ │ ├── InspireAutoConfigurationWfs.java │ │ │ │ └── InspireConfigurationWfs.java │ │ │ │ └── wms │ │ │ │ ├── ConditionalOnInspireWms.java │ │ │ │ ├── InspireAutoConfigurationWms.java │ │ │ │ └── InspireConfigurationWms.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ └── java │ │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── autoconfigure │ │ └── extensions │ │ └── inspire │ │ ├── InspireAutoConfigurationTest.java │ │ ├── gwc │ │ └── InspireAutoConfigurationGwcTest.java │ │ ├── wcs │ │ └── InspireAutoConfigurationWcsTest.java │ │ ├── webui │ │ └── InspireAutoConfigurationWebUITest.java │ │ ├── wfs │ │ └── InspireAutoConfigurationWfsTest.java │ │ └── wms │ │ └── InspireAutoConfigurationWmsTest.java ├── mapbox-styling │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── mapboxstyling │ │ │ │ ├── ConditionalOnMapBoxStyling.java │ │ │ │ ├── MapBoxStylingAutoConfiguration.java │ │ │ │ └── MapBoxStylingConfigProperties.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── mapboxstyling │ │ │ └── MapBoxStylingAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml ├── ogcapi │ ├── core │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── configuration │ │ │ │ └── ogcapi │ │ │ │ └── core │ │ │ │ ├── OgcApiCoreConfiguration.java │ │ │ │ └── OgcApiCoreWebConfiguration.java │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── configuration │ │ │ │ └── ogcapi │ │ │ │ └── core │ │ │ │ ├── OgcApiCoreConfigurationTest.java │ │ │ │ └── OgcApiCoreWebConfigurationTest.java │ │ │ └── resources │ │ │ └── logback-test.xml │ ├── features │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ ├── cloud │ │ │ │ │ └── autoconfigure │ │ │ │ │ │ └── extensions │ │ │ │ │ │ └── ogcapi │ │ │ │ │ │ └── features │ │ │ │ │ │ ├── ConditionalOnOgcApiFeatures.java │ │ │ │ │ │ ├── OgcApiFeatureConfigProperties.java │ │ │ │ │ │ ├── OgcApiFeaturesAutoConfiguration.java │ │ │ │ │ │ ├── OgcApiFeaturesConfiguration.java │ │ │ │ │ │ ├── OgcApiFeaturesConformancesModuleAutoConfiguration.java │ │ │ │ │ │ └── OgcApiFeaturesWebUIConfiguration.java │ │ │ │ │ └── jackson │ │ │ │ │ └── databind │ │ │ │ │ └── ogcapi │ │ │ │ │ └── features │ │ │ │ │ └── OgcApiFeaturesConformancesModule.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── services │ │ │ │ └── com.fasterxml.jackson.databind.Module │ │ │ │ ├── spring.factories │ │ │ │ └── spring │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── jackson │ │ │ │ └── databind │ │ │ │ └── ogcapi │ │ │ │ └── features │ │ │ │ └── OgcApiFeaturesConformancesModuleTest.java │ │ │ └── resources │ │ │ └── logback-test.xml │ └── pom.xml ├── output-formats │ ├── README.md │ ├── dxf │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── dxf │ │ │ │ ├── ConditionalOnDxf.java │ │ │ │ ├── DxfAutoConfiguration.java │ │ │ │ └── DxfConfigProperties.java │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── dxf │ │ │ └── DxfAutoConfigurationTest.java │ ├── flatgeobuf │ │ ├── README.md │ │ ├── bin │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ ├── main │ │ │ │ ├── java │ │ │ │ │ └── org │ │ │ │ │ │ └── geoserver │ │ │ │ │ │ └── cloud │ │ │ │ │ │ └── autoconfigure │ │ │ │ │ │ └── extensions │ │ │ │ │ │ └── flatgeobuf │ │ │ │ │ │ ├── ConditionalOnFlatGeobuf.class │ │ │ │ │ │ ├── FlatGeobufAutoConfiguration$FlatGeobufOutputFormatConfiguration.class │ │ │ │ │ │ ├── FlatGeobufAutoConfiguration.class │ │ │ │ │ │ └── FlatGeobufConfigProperties.class │ │ │ │ └── resources │ │ │ │ │ └── META-INF │ │ │ │ │ ├── spring.factories │ │ │ │ │ └── spring │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── test │ │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── autoconfigure │ │ │ │ │ └── extensions │ │ │ │ │ └── flatgeobuf │ │ │ │ │ └── FlatGeobufAutoConfigurationTest.class │ │ │ │ └── resources │ │ │ │ └── logback-test.xml │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── geoserver │ │ │ │ │ └── cloud │ │ │ │ │ └── autoconfigure │ │ │ │ │ └── extensions │ │ │ │ │ └── flatgeobuf │ │ │ │ │ ├── ConditionalOnFlatGeobuf.java │ │ │ │ │ ├── FlatGeobufAutoConfiguration.java │ │ │ │ │ └── FlatGeobufConfigProperties.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── spring.factories │ │ │ │ └── spring │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── flatgeobuf │ │ │ │ └── FlatGeobufAutoConfigurationTest.java │ │ │ └── resources │ │ │ └── logback-test.xml │ ├── pom.xml │ └── vector-tiles │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── vectortiles │ │ │ │ ├── ConditionalOnVectorTiles.java │ │ │ │ ├── ConditionalOnVectorTilesGeoJson.java │ │ │ │ ├── ConditionalOnVectorTilesMapBox.java │ │ │ │ ├── ConditionalOnVectorTilesTopoJson.java │ │ │ │ ├── GeoJsonConfiguration.java │ │ │ │ ├── MapBoxConfiguration.java │ │ │ │ ├── TopoJsonConfiguration.java │ │ │ │ ├── VectorTilesAutoConfiguration.java │ │ │ │ └── VectorTilesConfigProperties.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── vectortiles │ │ │ └── VectorTilesAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml ├── pom.xml └── security │ ├── README.md │ ├── auth-key │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── security │ │ │ │ └── authkey │ │ │ │ ├── AuthKeyAutoConfiguration.java │ │ │ │ ├── AuthKeyConfigProperties.java │ │ │ │ └── ConditionalOnAuthKey.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── security │ │ │ └── authkey │ │ │ └── AuthKeyAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml │ ├── environment-admin-auth │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── security │ │ │ │ └── environmentadmin │ │ │ │ ├── ConditionalOnEnvironmentAdmin.java │ │ │ │ ├── EnvironmentAdminAuthenticationProvider.java │ │ │ │ ├── EnvironmentAdminAutoConfiguration.java │ │ │ │ └── EnvironmentAdminConfigProperties.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── security │ │ │ └── environmentadmin │ │ │ └── EnvironmentAdminAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml │ ├── gateway-shared-auth │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── extensions │ │ │ │ │ └── security │ │ │ │ │ └── gateway │ │ │ │ │ ├── preauth │ │ │ │ │ └── GatewayPreAuthenticationAutoConfiguration.java │ │ │ │ │ └── sharedauth │ │ │ │ │ ├── ClientModeConfiguration.java │ │ │ │ │ ├── ConditionalOnClientMode.java │ │ │ │ │ ├── ConditionalOnGatewaySharedAuthDisabled.java │ │ │ │ │ ├── ConditionalOnGatewaySharedAuthEnabled.java │ │ │ │ │ ├── ConditionalOnServerMode.java │ │ │ │ │ ├── DisabledModeConfiguration.java │ │ │ │ │ ├── GatewaySharedAuthConfigProperties.java │ │ │ │ │ ├── GatewaySharedAuthenticationAutoConfiguration.java │ │ │ │ │ └── ServerModeConfiguration.java │ │ │ │ └── security │ │ │ │ └── gateway │ │ │ │ ├── GatewayPreAuthenticationConfiguration.java │ │ │ │ ├── GatewayPreAuthenticationConfigurationWebUI.java │ │ │ │ ├── GatewayPreAuthenticationFilter.java │ │ │ │ ├── GatewayPreAuthenticationFilterConfig.java │ │ │ │ ├── GatewayPreAuthenticationProvider.java │ │ │ │ ├── PrioritizableLoginFormInfo.java │ │ │ │ └── sharedauth │ │ │ │ ├── GatewaySharedAuthenticationFilter.java │ │ │ │ ├── GatewaySharedAuthenticationInitializer.java │ │ │ │ └── GatewaySharedAuthenticationProvider.java │ │ └── resources │ │ │ ├── GeoServerApplication.properties │ │ │ ├── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── authzn │ │ │ └── oidc.png │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── security │ │ │ └── gateway │ │ │ └── sharedauth │ │ │ └── GatewaySharedAuthAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml │ ├── geonode-oauth2 │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── security │ │ │ │ └── geonode │ │ │ │ ├── ConditionalOnGeoNodeOAuth2.java │ │ │ │ ├── GeoNodeOAuth2AutoConfiguration.java │ │ │ │ ├── GeoNodeOAuth2ConfigProperties.java │ │ │ │ ├── GeoNodeOAuth2WebUIAutoConfiguration.java │ │ │ │ └── WebUIComponents.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ └── java │ │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── autoconfigure │ │ └── extensions │ │ └── security │ │ └── geonode │ │ └── GeoNodeOAuth2WebUIAutoConfigurationTest.java │ ├── geoserver-acl │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── security │ │ │ │ └── acl │ │ │ │ ├── AclAutoConfiguration.java │ │ │ │ ├── AclConfigProperties.java │ │ │ │ └── ConditionalOnAcl.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── security │ │ │ └── acl │ │ │ └── AclAutoConfigurationTest.java │ │ └── resources │ │ ├── application.yml │ │ └── logback-test.xml │ ├── jdbc │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── security │ │ │ │ └── jdbc │ │ │ │ ├── ConditionalOnJDBC.java │ │ │ │ ├── JDBCConfigProperties.java │ │ │ │ ├── JDBCSecurityAutoConfiguration.java │ │ │ │ └── JDBCSecurityWebUIAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── security │ │ │ └── jdbc │ │ │ ├── JDBCSecurityAutoConfigurationTest.java │ │ │ └── JDBCSecurityWebUIAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml │ ├── ldap │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ └── extensions │ │ │ │ └── security │ │ │ │ └── ldap │ │ │ │ ├── ConditionalOnLDAP.java │ │ │ │ ├── LDAPConfigProperties.java │ │ │ │ ├── LDAPSecurityAutoConfiguration.java │ │ │ │ └── LDAPSecurityWebUIAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── spring.factories │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── extensions │ │ │ └── security │ │ │ └── ldap │ │ │ ├── LDAPSecurityAutoConfigurationTest.java │ │ │ └── LDAPSecurityWebUIAutoConfigurationTest.java │ │ └── resources │ │ └── logback-test.xml │ └── pom.xml ├── gwc ├── README.md ├── autoconfigure │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── autoconfigure │ │ │ │ ├── gwc │ │ │ │ ├── ConditionalOnAzureBlobstoreEnabled.java │ │ │ │ ├── ConditionalOnDirectWMSIntegrationEnabled.java │ │ │ │ ├── ConditionalOnDiskQuotaEnabled.java │ │ │ │ ├── ConditionalOnGeoServerWebUIEnabled.java │ │ │ │ ├── ConditionalOnGeoWebCacheEnabled.java │ │ │ │ ├── ConditionalOnGeoWebCacheRestConfigEnabled.java │ │ │ │ ├── ConditionalOnS3BlobstoreEnabled.java │ │ │ │ ├── ConditionalOnWMTSIntegrationEnabled.java │ │ │ │ ├── ConditionalOnWebUIEnabled.java │ │ │ │ ├── GoServerWebUIConfigurationProperties.java │ │ │ │ ├── backend │ │ │ │ │ ├── DefaultTileLayerCatalogAutoConfiguration.java │ │ │ │ │ ├── PgconfigGwcInitializer.java │ │ │ │ │ └── PgconfigTileLayerCatalogAutoConfiguration.java │ │ │ │ ├── blobstore │ │ │ │ │ ├── AzureBlobstoreAutoConfiguration.java │ │ │ │ │ └── S3BlobstoreAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ ├── CacheSeedingWebMapServiceAutoConfiguration.java │ │ │ │ │ ├── DiskQuotaAutoConfiguration.java │ │ │ │ │ ├── GeoServerIntegrationAutoConfiguration.java │ │ │ │ │ ├── GeoWebCacheAutoConfiguration.java │ │ │ │ │ └── GeoWebCacheCoreAutoConfiguration.java │ │ │ │ ├── integration │ │ │ │ │ ├── GeoWebCacheRemoteEventsAutoConfiguration.java │ │ │ │ │ ├── WMSIntegrationAutoConfiguration.java │ │ │ │ │ └── WMTSIntegrationAutoConfiguration.java │ │ │ │ ├── package-info.java │ │ │ │ └── service │ │ │ │ │ ├── GoogleMapsAutoConfiguration.java │ │ │ │ │ ├── KMLAutoConfiguration.java │ │ │ │ │ ├── MGMapsAutoConfiguration.java │ │ │ │ │ ├── RESTConfigAutoConfiguration.java │ │ │ │ │ ├── TileMapServiceAutoConfiguration.java │ │ │ │ │ ├── WebMapServiceAutoConfiguration.java │ │ │ │ │ └── WebMapTileServiceAutoConfiguration.java │ │ │ │ └── web │ │ │ │ └── gwc │ │ │ │ ├── CloudGWCServiceDescriptionProvider.java │ │ │ │ ├── GeoServerWebUIAutoConfiguration.java │ │ │ │ └── GeoWebCacheUIAutoConfiguration.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring.factories │ │ │ └── org │ │ │ └── geoserver │ │ │ └── gwc │ │ │ └── web │ │ │ └── wms-integration-disabled.css │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── autoconfigure │ │ │ └── gwc │ │ │ ├── GeoWebCacheContextRunner.java │ │ │ ├── backend │ │ │ └── PgconfigTileLayerCatalogAutoConfigurationTest.java │ │ │ ├── blobstore │ │ │ ├── AzureBlobstoreAutoConfigurationTest.java │ │ │ └── S3BlobstoreAutoConfigurationTest.java │ │ │ ├── core │ │ │ └── GeoWebCacheAutoConfigurationTest.java │ │ │ ├── integration │ │ │ └── WMSIntegrationAutoConfigurationTest.java │ │ │ └── service │ │ │ └── RESTConfigAutoConfigurationTest.java │ │ └── resources │ │ ├── application.yml │ │ ├── geowebcache-empty.xml │ │ └── logback-test.xml ├── backends │ ├── pgconfig │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── gwc │ │ │ │ └── backend │ │ │ │ └── pgconfig │ │ │ │ ├── CachingTileLayerInfoRepository.java │ │ │ │ ├── GeoServerTileLayerInfoMapper.java │ │ │ │ ├── ParameterFilterMapper.java │ │ │ │ ├── PgconfigTileLayerCatalog.java │ │ │ │ ├── PgconfigTileLayerInfoRepository.java │ │ │ │ ├── PgconfigTileLayerInfoRowMapper.java │ │ │ │ ├── TileLayerInfo.java │ │ │ │ └── TileLayerInfoRepository.java │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ └── gwc │ │ │ │ └── backend │ │ │ │ └── pgconfig │ │ │ │ ├── GeoServerTileLayerInfoMapperTest.java │ │ │ │ ├── PgconfigTileLayerCatalogIT.java │ │ │ │ ├── PgconfigTileLayerCatalogTest.java │ │ │ │ └── TileLayerMocking.java │ │ │ └── resources │ │ │ └── logback-test.xml │ └── pom.xml ├── blobstores │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── gwc │ │ │ └── config │ │ │ └── blobstore │ │ │ ├── AzureBlobstoreConfiguration.java │ │ │ ├── AzureBlobstoreGsWebUIConfiguration.java │ │ │ ├── S3BlobstoreConfiguration.java │ │ │ └── S3BlobstoreGsWebUIConfiguration.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── gwc │ │ │ └── config │ │ │ └── blobstore │ │ │ ├── AzureBlobStoreTest.java │ │ │ ├── AzureBlobStoreXmlConfigurationTest.java │ │ │ └── AzuriteContainer.java │ │ └── resources │ │ ├── geowebcache-empty.xml │ │ └── logback-test.xml ├── core │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ ├── cloud │ │ │ │ └── gwc │ │ │ │ │ ├── config │ │ │ │ │ └── core │ │ │ │ │ │ ├── DefaultTileLayerCatalogConfiguration.java │ │ │ │ │ │ ├── DiskQuotaConfiguration.java │ │ │ │ │ │ ├── DisquotaRestConfiguration.java │ │ │ │ │ │ ├── GeoServerIntegrationConfiguration.java │ │ │ │ │ │ ├── GeoWebCacheConfigurationProperties.java │ │ │ │ │ │ ├── GeoWebCacheCoreConfiguration.java │ │ │ │ │ │ ├── WebMapServiceCacheSeedingConfiguration.java │ │ │ │ │ │ └── WebMapServiceMinimalConfiguration.java │ │ │ │ │ ├── event │ │ │ │ │ ├── BlobStoreEvent.java │ │ │ │ │ ├── ConfigChangeEvent.java │ │ │ │ │ ├── GeoWebCacheEvent.java │ │ │ │ │ ├── GridsetEvent.java │ │ │ │ │ └── TileLayerEvent.java │ │ │ │ │ └── repository │ │ │ │ │ ├── CachingTileLayerCatalog.java │ │ │ │ │ ├── CloudCatalogConfiguration.java │ │ │ │ │ ├── CloudDefaultStorageFinder.java │ │ │ │ │ ├── CloudGwcXmlConfiguration.java │ │ │ │ │ ├── CloudXMLResourceProvider.java │ │ │ │ │ ├── ForwardingTileLayerCatalog.java │ │ │ │ │ ├── ForwardingTileLayerConfiguration.java │ │ │ │ │ ├── GeoServerTileLayerConfiguration.java │ │ │ │ │ └── ResourceStoreTileLayerCatalog.java │ │ │ │ └── gwc │ │ │ │ └── config │ │ │ │ ├── AbstractGwcInitializer.java │ │ │ │ ├── CloudGwcConfigPersister.java │ │ │ │ └── DefaultGwcInitializer.java │ │ └── resources │ │ │ └── org │ │ │ └── geoserver │ │ │ └── gwc │ │ │ └── web │ │ │ └── wms-integration-disabled.css │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── gwc │ │ │ └── repository │ │ │ ├── CachingTileLayerCatalogTest.java │ │ │ ├── CloudGwcXmlConfigurationTest.java │ │ │ └── ResourceStoreTileLayerCatalogTest.java │ │ └── resources │ │ ├── application.yml │ │ ├── geowebcache-empty.xml │ │ └── logback-test.xml ├── integration-bus │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── gwc │ │ ├── bus │ │ ├── GeoWebCacheRemoteEventsBroker.java │ │ ├── RemoteBlobStoreEvent.java │ │ ├── RemoteConfigChangeEvent.java │ │ ├── RemoteEventMapper.java │ │ ├── RemoteGeoWebCacheEvent.java │ │ ├── RemoteGridsetEvent.java │ │ └── RemoteTileLayerEvent.java │ │ └── config │ │ └── bus │ │ └── GeoWebCacheRemoteEventsConfiguration.java ├── pom.xml ├── services │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ ├── geoserver │ │ └── cloud │ │ │ └── gwc │ │ │ └── config │ │ │ └── services │ │ │ ├── GoogleMapsConfiguration.java │ │ │ ├── KMLConfiguration.java │ │ │ ├── MGMapsConfiguration.java │ │ │ ├── RESTConfigConfiguration.java │ │ │ ├── SeedControllerOverride.java │ │ │ ├── TileMapServiceConfiguration.java │ │ │ ├── WebMapServiceConfiguration.java │ │ │ └── WebMapTileServiceConfiguration.java │ │ └── gwc │ │ └── web │ │ ├── gmaps │ │ └── GoogleMapsController.java │ │ ├── kml │ │ └── KMLController.java │ │ ├── mgmaps │ │ └── MGMapsController.java │ │ ├── rest │ │ └── GeoWebCacheController.java │ │ ├── tms │ │ └── TMSController.java │ │ ├── wms │ │ └── WMSController.java │ │ └── wmts │ │ └── WMTSController.java └── starter │ ├── distributed_seeding.md │ └── pom.xml ├── integration-tests └── pom.xml ├── library ├── pom.xml ├── spring-boot-simplejndi │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── geoserver │ │ │ │ └── cloud │ │ │ │ ├── autoconfigure │ │ │ │ └── jndi │ │ │ │ │ ├── JNDIDataSourceAutoConfiguration.java │ │ │ │ │ └── SimpleJNDIStaticContextInitializer.java │ │ │ │ ├── config │ │ │ │ └── jndi │ │ │ │ │ ├── JNDIDataSourceConfiguration.java │ │ │ │ │ ├── JNDIDataSourcesConfigurationProperties.java │ │ │ │ │ ├── JNDIDatasourceConfig.java │ │ │ │ │ └── JNDIInitializer.java │ │ │ │ └── jndi │ │ │ │ ├── SimpleNameClassPair.java │ │ │ │ ├── SimpleNamingContext.java │ │ │ │ ├── SimpleNamingContextBuilder.java │ │ │ │ └── SimpleNamingContextFactory.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ ├── autoconfigure │ │ │ └── jndi │ │ │ │ └── JNDIDataSourceAutoConfigurationTest.java │ │ │ ├── config │ │ │ └── jndi │ │ │ │ └── SimpleJNDIStaticContextInitializerTest.java │ │ │ └── jndi │ │ │ ├── GeorchestraLdapContainer.java │ │ │ ├── SimpleNamingContextBuilderTest.java │ │ │ └── SimpleNamingContextTest.java │ │ └── resources │ │ ├── application.yml │ │ └── logback-test.xml └── spring-factory │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ ├── autoconfigure │ │ │ └── factory │ │ │ │ └── FilteringXmlBeanDefinitionReaderAutoConfiguration.java │ │ │ └── config │ │ │ └── factory │ │ │ ├── FilteringXmlBeanDefinitionReader.java │ │ │ └── ImportFilteredResource.java │ └── resources │ │ └── META-INF │ │ └── spring.factories │ └── test │ ├── java │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── config │ │ └── factory │ │ └── FilteringXmlBeanDefinitionReaderTest.java │ └── resources │ ├── logback-test.xml │ └── org │ └── geoserver │ └── cloud │ └── config │ └── factory │ └── FilteringXmlBeanDefinitionReaderTestData.xml ├── lombok.config ├── pom.xml └── starters ├── README.md ├── catalog-backend ├── README.md └── pom.xml ├── extensions ├── README.md └── pom.xml ├── input-formats ├── README.md └── pom.xml ├── observability-spring-boot-3 ├── README.md ├── pom.xml └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ ├── autoconfigure │ │ │ └── logging │ │ │ │ ├── accesslog │ │ │ │ ├── AccessLogServletAutoConfiguration.java │ │ │ │ └── webflux │ │ │ │ │ └── AccessLogWebFluxAutoConfiguration.java │ │ │ │ ├── gateway │ │ │ │ └── GatewayMdcAutoConfiguration.java │ │ │ │ └── mdc │ │ │ │ ├── GeoServerDispatcherMDCAutoConfiguration.java │ │ │ │ ├── LoggingMDCServletAutoConfiguration.java │ │ │ │ └── webflux │ │ │ │ └── LoggingMDCWebFluxAutoConfiguration.java │ │ │ └── logging │ │ │ ├── accesslog │ │ │ ├── AccessLogFilterConfig.java │ │ │ ├── AccessLogServletFilter.java │ │ │ └── AccessLogWebfluxFilter.java │ │ │ └── mdc │ │ │ ├── config │ │ │ ├── AuthenticationMdcConfigProperties.java │ │ │ ├── GeoServerMdcConfigProperties.java │ │ │ ├── HttpRequestMdcConfigProperties.java │ │ │ └── SpringEnvironmentMdcConfigProperties.java │ │ │ ├── ows │ │ │ └── OWSMdcDispatcherCallback.java │ │ │ ├── servlet │ │ │ ├── HttpRequestMdcFilter.java │ │ │ ├── MDCAuthenticationFilter.java │ │ │ ├── MDCCleaningFilter.java │ │ │ └── SpringEnvironmentMdcFilter.java │ │ │ └── webflux │ │ │ ├── MDCWebFilter.java │ │ │ └── ReactorContextHolder.java │ └── resources │ │ ├── META-INF │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── logback-spring.xml │ └── test │ ├── java │ └── org │ │ └── geoserver │ │ └── cloud │ │ ├── autoconfigure │ │ └── logging │ │ │ └── accesslog │ │ │ └── webflux │ │ │ └── AccessLogWebFluxAutoConfigurationTest.java │ │ └── logging │ │ ├── accesslog │ │ └── AccessLogFilterTest.java │ │ └── mdc │ │ ├── config │ │ └── MdcConfigPropertiesTest.java │ │ ├── ows │ │ └── OWSMdcDispatcherCallbackTest.java │ │ ├── servlet │ │ └── ServletMdcFiltersTest.java │ │ └── webflux │ │ └── WebFluxMdcPropagationTest.java │ └── resources │ ├── application.yml │ └── logback-test.xml ├── observability ├── README.md ├── pom.xml └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ ├── autoconfigure │ │ │ └── logging │ │ │ │ ├── accesslog │ │ │ │ ├── AccessLogServletAutoConfiguration.java │ │ │ │ └── AccessLogWebFluxAutoConfiguration.java │ │ │ │ └── mdc │ │ │ │ ├── GeoServerDispatcherMDCAutoConfiguration.java │ │ │ │ └── LoggingMDCServletAutoConfiguration.java │ │ │ └── logging │ │ │ ├── accesslog │ │ │ ├── AccessLogFilterConfig.java │ │ │ ├── AccessLogServletFilter.java │ │ │ └── AccessLogWebfluxFilter.java │ │ │ └── mdc │ │ │ ├── config │ │ │ ├── AuthenticationMdcConfigProperties.java │ │ │ ├── GeoServerMdcConfigProperties.java │ │ │ ├── HttpRequestMdcConfigProperties.java │ │ │ └── SpringEnvironmentMdcConfigProperties.java │ │ │ ├── ows │ │ │ └── OWSMdcDispatcherCallback.java │ │ │ └── servlet │ │ │ ├── HttpRequestMdcFilter.java │ │ │ ├── MDCAuthenticationFilter.java │ │ │ ├── MDCCleaningFilter.java │ │ │ └── SpringEnvironmentMdcFilter.java │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ └── logback-spring.xml │ └── test │ ├── java │ └── org │ │ └── geoserver │ │ └── cloud │ │ ├── autoconfigure │ │ └── logging │ │ │ ├── accesslog │ │ │ └── AccessLogWebFluxAutoConfigurationTest.java │ │ │ └── mdc │ │ │ └── LoggingMDCServletAutoConfigurationTest.java │ │ └── logging │ │ ├── accesslog │ │ └── AccessLogFilterTest.java │ │ └── mdc │ │ ├── config │ │ └── MdcConfigPropertiesTest.java │ │ ├── ows │ │ └── OWSMdcDispatcherCallbackTest.java │ │ └── servlet │ │ └── ServletMdcFiltersTest.java │ └── resources │ ├── application.yml │ └── logback-test.xml ├── output-formats ├── README.md └── pom.xml ├── pom.xml ├── security └── pom.xml ├── spring-boot ├── README.md ├── pom.xml └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── geoserver │ │ │ └── cloud │ │ │ └── app │ │ │ ├── ExitOnApplicationEventAutoConfiguration.java │ │ │ ├── ServiceIdFilterAutoConfiguration.java │ │ │ ├── StartupLogger.java │ │ │ └── StartupLoggerAutoConfiguration.java │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ └── gs_cloud_bootstrap_profiles.yml │ └── test │ ├── java │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── app │ │ └── ServiceIdFilterAutoConfigurationTest.java │ └── resources │ ├── application.yml │ ├── logback-test.xml │ └── org │ └── geoserver │ └── cloud │ └── config │ └── factory │ └── FilteringXmlBeanDefinitionReaderTestData.xml ├── spring-boot3 ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── geoserver │ │ └── cloud │ │ └── app │ │ ├── ExitOnApplicationEventAutoConfiguration.java │ │ ├── ReactorContextPropagationAutoConfiguration.java │ │ ├── ServiceIdFilterAutoConfiguration.java │ │ ├── StartupLogger.java │ │ └── StartupLoggerAutoConfiguration.java │ └── resources │ ├── META-INF │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── gs_cloud_bootstrap_profiles.yml ├── spring-cloud ├── README.md └── pom.xml └── webmvc ├── README.md ├── pom.xml └── src ├── main ├── java │ └── org │ │ └── geoserver │ │ └── cloud │ │ ├── autoconfigure │ │ ├── context │ │ │ └── GeoServerContextInitializer.java │ │ ├── core │ │ │ └── GeoServerWebMvcMainAutoConfiguration.java │ │ └── servlet │ │ │ └── GeoServerServletContextAutoConfiguration.java │ │ ├── config │ │ ├── main │ │ │ └── GeoServerMainModuleConfiguration.java │ │ └── servlet │ │ │ ├── GeoServerServletContextConfiguration.java │ │ │ └── GeoServerServletInitializer.java │ │ └── virtualservice │ │ └── VirtualServiceVerifier.java └── resources │ └── META-INF │ └── spring.factories └── test ├── java └── org │ └── geoserver │ └── cloud │ ├── autoconfigure │ └── servlet │ │ ├── DataDirectoryTempSupport.java │ │ ├── ServletContextConditionalFiltersTest.java │ │ ├── ServletContextDisabledSmokeTest.java │ │ └── ServletContextEnabledSmokeTest.java │ ├── config │ └── main │ │ └── GeoServerMainConfigurationSmokeTest.java │ └── test │ └── TestConfiguration.java └── resources ├── application-test.yml └── logback-test.xml /.github/workflows/backport.yaml: -------------------------------------------------------------------------------- 1 | name: ♻ Backport 2 | on: 3 | pull_request_target: 4 | types: 5 | - closed 6 | - labeled 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | backport: 13 | permissions: 14 | contents: write 15 | pull-requests: write 16 | issues: write 17 | runs-on: ubuntu-24.04 18 | name: Backport 19 | steps: 20 | - name: Backport Bot 21 | id: backport 22 | if: github.event.pull_request.merged && ( ( github.event.action == 'closed' && contains( join( github.event.pull_request.labels.*.name ), 'backport') ) || contains( github.event.label.name, 'backport' ) ) 23 | uses: m-kuhn/backport@v1.2.7 24 | with: 25 | github_token: ${{ secrets.GH_TOKEN_BOT }} 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | !.mvn/wrapper/maven-wrapper.properties 3 | .mvn/wrapper 4 | 5 | ### STS ### 6 | .apt_generated 7 | .classpath 8 | .factorypath 9 | .project 10 | .settings 11 | .springBeans 12 | .sts4-cache 13 | 14 | ### IntelliJ IDEA ### 15 | .idea 16 | *.iws 17 | *.iml 18 | *.ipr 19 | 20 | ### NetBeans ### 21 | /nbproject/private/ 22 | /nbbuild/ 23 | /dist/ 24 | /nbdist/ 25 | /.nb-gradle/ 26 | /build/ 27 | 28 | ### artifact created by test runs, under src/main/webapp on some projects 29 | ### TODO: get rid of them instead by fixing the tests to use in-memory or tmp folder catalogs 30 | webapp 31 | 32 | # https://bugs.openjdk.java.net/browse/JDK-8214300 33 | .attach_pid* 34 | 35 | .flattened-pom.xml 36 | 37 | docker-compose_datadir* 38 | /.metadata/ 39 | 40 | .vscode 41 | 42 | # Yourkit Java Profiler docker compose env file with private token 43 | .env.yjp 44 | 45 | hs_err_pid*.log 46 | 47 | .spotless-index 48 | 49 | .venv -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "config"] 2 | path = config 3 | url = https://github.com/geoserver/geoserver-cloud-config 4 | branch = master 5 | -------------------------------------------------------------------------------- /.mvn/jvm.config: -------------------------------------------------------------------------------- 1 | --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED 2 | --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED 3 | --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED 4 | --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED 5 | --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED 6 | -------------------------------------------------------------------------------- /acceptance_tests/.gitignore: -------------------------------------------------------------------------------- 1 | # ignore all python cache files recursively 2 | **/__pycache__/ 3 | poetry.lock 4 | -------------------------------------------------------------------------------- /acceptance_tests/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:24.04 AS base 2 | 3 | RUN apt-get update \ 4 | && apt-get upgrade --assume-yes \ 5 | && apt-get install --assume-yes --no-install-recommends \ 6 | vim curl jq libmagic1 zip python3-pip libpq-dev python3-dev gcc \ 7 | && rm -rf /var/lib/apt/lists/* \ 8 | && rm /usr/lib/python*/EXTERNALLY-MANAGED 9 | 10 | COPY . /acceptance_tests 11 | 12 | WORKDIR /acceptance_tests 13 | RUN python3 -m pip install --disable-pip-version-check . 14 | 15 | COPY entrypoint.py /bin/entrypoint.py 16 | 17 | ENV PYTHONUNBUFFERED=1 18 | ENTRYPOINT ["/bin/entrypoint.py"] 19 | 20 | HEALTHCHECK --interval=5s --start-period=15s --retries=20 CMD test -f /tmp/healthcheck || exit 1 21 | 22 | CMD ["sleep", "infinity"] 23 | -------------------------------------------------------------------------------- /acceptance_tests/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Cloud acceptance tests 2 | 3 | ## Requirements 4 | 5 | [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) 6 | 7 | ## Installation 8 | 9 | ```shell 10 | poetry install 11 | ``` 12 | 13 | # Run the tests 14 | First start the docker composition then run: 15 | 16 | ```shell 17 | GEOSERVER_URL=http://localhost:9090/geoserver/cloud poetry run pytest -vvv . 18 | ``` -------------------------------------------------------------------------------- /acceptance_tests/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "acceptance-tests" 3 | version = "0.1.0" 4 | description = "todo" 5 | authors = ["todo"] 6 | readme = "README.md" 7 | packages = [{ include = "tests" }] 8 | 9 | [tool.poetry.dependencies] 10 | python = "^3.10" 11 | pytest = "^8.3.3" 12 | psycopg2-binary = "^2.9.9" 13 | geoservercloud = "^0.2.5" 14 | sqlalchemy = "^2.0.35" 15 | 16 | 17 | [build-system] 18 | requires = ["poetry-core"] 19 | build-backend = "poetry.core.masonry.api" 20 | -------------------------------------------------------------------------------- /acceptance_tests/tests/lib/utils.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | 4 | def write_actual_image(response, tag): 5 | file = Path(f"/tmp/{tag}_actual.png") 6 | file.parent.mkdir(parents=True, exist_ok=True) 7 | with open(file, "wb") as fs: 8 | fs.write(response.read()) 9 | 10 | 11 | def compare_images(dir, tag): 12 | actual = f"/tmp/{tag}_actual.png" 13 | expected = f"{dir}/{tag}_expected.png" 14 | with open(actual, "rb") as fs1, open(expected, "rb") as fs2: 15 | assert fs1.read() == fs2.read() 16 | -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/getmap_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/getmap_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/default_value/language_None_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/default_value/language_None_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/default_value/language__expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/default_value/language__expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/default_value/language_de_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/default_value/language_de_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/default_value/language_fr_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/default_value/language_fr_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/default_value/language_it_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/default_value/language_it_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/no_default_value/language_None_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/no_default_value/language_None_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/no_default_value/language__expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/no_default_value/language__expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/default_locale/no_default_value/language_it_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/default_locale/no_default_value/language_it_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_None_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_None_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/default_value/language__expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/default_value/language__expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_de_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_de_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_fr_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_fr_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_it_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/default_value/language_it_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/no_default_value/language_None_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/no_default_value/language_None_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/no_default_value/language__expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/no_default_value/language__expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/labels/no_default_locale/no_default_value/language_it_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/acceptance_tests/tests/resources/labels/no_default_locale/no_default_value/language_it_expected.png -------------------------------------------------------------------------------- /acceptance_tests/tests/resources/wfs_payload.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 2600000.0 1200000.0 9 | 10 | 11 | 2024-05-13T08:14:48.763Z 12 | 10 13 | Title 14 | 15 | 16 | -------------------------------------------------------------------------------- /acceptance_tests/tests/test_datastore.py: -------------------------------------------------------------------------------- 1 | from conftest import PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD, PGSCHEMA 2 | 3 | 4 | def test_create_get_and_delete_datastore(geoserver): 5 | workspace = datastore = "test_create_pg_datastore" 6 | geoserver.create_workspace(workspace) 7 | response = geoserver.create_pg_datastore( 8 | workspace=workspace, 9 | datastore=datastore, 10 | pg_host=PGHOST, 11 | pg_port=PGPORT, 12 | pg_db=PGDATABASE, 13 | pg_user=PGUSER, 14 | pg_password=PGPASSWORD, 15 | pg_schema=PGSCHEMA, 16 | set_default_datastore=True, 17 | ) 18 | assert response.status_code == 201 19 | response = geoserver.get_request( 20 | f"/rest/workspaces/{workspace}/datastores/{datastore}.json" 21 | ) 22 | assert response.status_code == 200 23 | response = geoserver.delete_workspace(workspace) 24 | assert response.status_code == 200 25 | -------------------------------------------------------------------------------- /build-tools/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | 6 | org.geoserver.cloud 7 | gs-cloud-bom 8 | ${revision} 9 | 10 | 11 | gs-cloud-build-tools 12 | GeoServer Cloud Build Tools 13 | Centralized build configurations for GeoServer Cloud 14 | 15 | 16 | 17 | true 18 | 19 | 20 | -------------------------------------------------------------------------------- /build-tools/src/main/resources/checkstyle/suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /ci/requirements.txt: -------------------------------------------------------------------------------- 1 | c2cciutils[checks]==1.6.18 2 | -------------------------------------------------------------------------------- /compose/.gitignore: -------------------------------------------------------------------------------- 1 | catalog-datadir/ 2 | -------------------------------------------------------------------------------- /compose/acceptance-pgconfig.yml: -------------------------------------------------------------------------------- 1 | services: 2 | pgconfigdb: 3 | deploy: 4 | resources: 5 | limits: 6 | cpus: "1.0" 7 | memory: 512M 8 | -------------------------------------------------------------------------------- /compose/acceptance_datadir: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | 3 | GSUID=$(id -u) 4 | GSGID=$(id -g) 5 | 6 | GS_USER=$GSUID:$GSGID COMPOSE_PROJECT_NAME=gscloud-acceptance-datadir \ 7 | docker compose \ 8 | -f compose.yml \ 9 | -f catalog-datadir.yml \ 10 | -f acceptance.yml \ 11 | -f standalone.yml "$@" 12 | -------------------------------------------------------------------------------- /compose/acceptance_jdbcconfig: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | 3 | COMPOSE_PROJECT_NAME=gscloud-acceptance-jdbcconfig \ 4 | docker compose \ 5 | -f compose.yml \ 6 | -f catalog-jdbcconfig.yml \ 7 | -f acceptance.yml "$@" 8 | -------------------------------------------------------------------------------- /compose/acceptance_pg_entrypoint/001_create_schemas.sql: -------------------------------------------------------------------------------- 1 | \c geodata 2 | CREATE SCHEMA IF NOT EXISTS test1; 3 | CREATE SCHEMA IF NOT EXISTS test2; 4 | CREATE EXTENSION IF NOT EXISTS postgis; 5 | -------------------------------------------------------------------------------- /compose/acceptance_pgconfig: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | 3 | COMPOSE_PROJECT_NAME=gscloud-acceptance-pgconfig \ 4 | docker compose \ 5 | -f compose.yml \ 6 | -f catalog-pgconfig.yml \ 7 | -f acceptance-pgconfig.yml \ 8 | -f acceptance.yml \ 9 | -f standalone.yml "$@" 10 | -------------------------------------------------------------------------------- /compose/catalog-datadir.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/compose/catalog-datadir.tgz -------------------------------------------------------------------------------- /compose/datadir: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | docker compose -f compose.yml -f catalog-datadir.yml $@ 4 | -------------------------------------------------------------------------------- /compose/jdbcconfig: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | docker compose -f compose.yml -f catalog-jdbcconfig.yml $@ 4 | -------------------------------------------------------------------------------- /compose/localports.yml: -------------------------------------------------------------------------------- 1 | # Used only when needing to expose local ports on geoserver backend services 2 | # for example, when running the gateway through the IDE 3 | # Port numbers match the ones in the `local` spring profile used for development. 4 | services: 5 | # catalog microservice, provides a unified catalog backend to all services 6 | acl: 7 | ports: 8 | - 9000:8080 9 | wfs: 10 | ports: 11 | - 9101:8080 12 | wms: 13 | ports: 14 | - 9102:8080 15 | wcs: 16 | ports: 17 | - 9103:8080 18 | rest: 19 | ports: 20 | - 9105:8080 21 | webui: 22 | ports: 23 | - 9106:8080 24 | gwc: 25 | ports: 26 | - 9107:8080 27 | -------------------------------------------------------------------------------- /compose/pgconfig: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | docker compose -f compose.yml -f catalog-pgconfig.yml $@ 4 | -------------------------------------------------------------------------------- /docker-build/.env: -------------------------------------------------------------------------------- 1 | REPOSITORY=geoservercloud 2 | 3 | -------------------------------------------------------------------------------- /docker-build/infrastructure.yml: -------------------------------------------------------------------------------- 1 | services: 2 | discovery: 3 | extends: 4 | file: templates.yml 5 | service: current-platform 6 | image: ${REPOSITORY}/geoserver-cloud-discovery:${TAG} 7 | build: 8 | context: ../src/apps/infrastructure/discovery/ 9 | 10 | config: 11 | extends: 12 | file: templates.yml 13 | service: current-platform 14 | image: ${REPOSITORY}/geoserver-cloud-config:${TAG} 15 | build: 16 | context: ../src/apps/infrastructure/config/ 17 | 18 | admin: 19 | extends: 20 | file: templates.yml 21 | service: current-platform 22 | image: ${REPOSITORY}/geoserver-cloud-admin-server:${TAG} 23 | build: 24 | context: ../src/apps/infrastructure/admin/ 25 | 26 | gateway: 27 | extends: 28 | file: templates.yml 29 | service: current-platform 30 | image: ${REPOSITORY}/geoserver-cloud-gateway:${TAG} 31 | build: 32 | context: ../src/apps/infrastructure/gateway/ 33 | -------------------------------------------------------------------------------- /docker-build/templates.yml: -------------------------------------------------------------------------------- 1 | services: 2 | current-platform: 3 | build: 4 | no_cache: true 5 | pull: false 6 | context: override-me 7 | args: 8 | TAG: ${TAG} 9 | REPOSITORY: ${REPOSITORY} 10 | 11 | multi-platform: 12 | build: 13 | no_cache: true 14 | pull: true 15 | context: override-me 16 | platforms: 17 | - linux/amd64 18 | - linux/arm64 19 | args: 20 | TAG: ${TAG} 21 | REPOSITORY: ${REPOSITORY} 22 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-modernist 2 | title: GeoServer Cloud 3 | description: Dockerized GeoServer micro-services 4 | show_downloads: false 5 | -------------------------------------------------------------------------------- /docs/assets/css/style.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | // overrides for https://github.com/pages-themes/modernist/blob/master/_sass/jekyll-theme-modernist.scss 5 | 6 | @import "{{ site.theme }}"; 7 | 8 | .inner { 9 | max-width: 100%; 10 | } 11 | 12 | //change width, default value of 740px is too narrow 13 | .wrapper { 14 | width:75%; 15 | } -------------------------------------------------------------------------------- /docs/cosign/cosign.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsUudw4Y6QJfiCMwBvu3KIssgfvEx 3 | rCJ8pRHZL78ybbHiCPYyIwmy6RTOYaHePIFxDviZ0WZWH1fo3hrbw0b2ZQ== 4 | -----END PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /docs/deploy/helm/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | appVersion: '1.0' 3 | description: Example for geoserver-cloud with pgconfig 4 | name: gs-cloud-pgconfig 5 | version: 0.1.0 6 | dependencies: 7 | - name: 'geoservercloud' 8 | repository: https://camptocamp.github.io/helm-geoserver-cloud 9 | version: 2.3.5 10 | - name: 'rabbitmq' 11 | version: 15.0.0 12 | repository: 'https://charts.bitnami.com/bitnami' 13 | condition: rabbitmq.enabled 14 | - name: 'postgresql' 15 | version: 14.0.0 16 | repository: 'https://charts.bitnami.com/bitnami' 17 | condition: postgresql.enabled 18 | -------------------------------------------------------------------------------- /docs/deploy/helm/templates/install-postgis-cm.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: install-postgis-configmap 5 | data: 6 | install-postgis.sh: | 7 | #!/bin/bash 8 | set -e 9 | echo "Creating PostGIS extension..." 10 | PGPASSWORD=$(echo $POSTGRES_PASSWORD) psql -U postgres -d postgres -c "CREATE EXTENSION IF NOT EXISTS postgis;" 11 | -------------------------------------------------------------------------------- /docs/deploy/podman/traditional/manual/.env: -------------------------------------------------------------------------------- 1 | GSCLOUD_VERSION=1.8.7 2 | 3 | -------------------------------------------------------------------------------- /docs/deploy/podman/traditional/manual/.gitignore: -------------------------------------------------------------------------------- 1 | datadir 2 | -------------------------------------------------------------------------------- /docs/deploy/podman/traditional/manual/pull.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # read GSCLOUD_VERSION from ./.env 4 | export $(cat ./.env) 5 | 6 | podman pull docker.io/library/rabbitmq:4-management-alpine 7 | 8 | for i in discovery config gateway rest webui wms wfs wcs gwc 9 | do 10 | podman pull docker-daemon:geoservercloud/geoserver-cloud-$i:$GSCLOUD_VERSION 11 | done 12 | -------------------------------------------------------------------------------- /docs/deploy/podman/traditional/manual/shutdown.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for service in gateway rest webui wms wfs wcs gwc discovery config rabbitmq 4 | do 5 | podman container stop -i $service 6 | podman container rm -i $service 7 | done 8 | -------------------------------------------------------------------------------- /docs/develop/services/gateway-service.md: -------------------------------------------------------------------------------- 1 | # Cloud Native GeoServer Gateway service 2 | 3 | 4 | **Docker image**: `geoservercloud/gs-cloud-gateway`. 5 | 6 | **Service name**: `gateway-service`. 7 | 8 | This is the logical service name by which web clients will get the actual instances addresses from the [discovery-service](discovery-service.yml) and perform client-side load balancing against when interacting with the service. 9 | 10 | ## Service Configuration 11 | 12 | 13 | ## Client Configuration 14 | 15 | 16 | ## Developing 17 | 18 | -------------------------------------------------------------------------------- /docs/develop/services/restconfig-v1-service.md: -------------------------------------------------------------------------------- 1 | # Cloud Native GeoServer REST configuration API v1 service 2 | 3 | Spring Boot/Cloud microservice that exposes GeoServer [REST API](https://docs.geoserver.org/stable/en/user/rest/). 4 | 5 | **Docker image**: `geoservercloud/gs-cloud-restconfig-v1`. 6 | 7 | **Service name**: `restconfig-v1`. 8 | 9 | Logical service name by which the [gateway-service](gateway-service.yml) will get the actual instances addresses from the [discovery-service](discovery-service.yml) and perform client-side load balancing against when interacting with the service. 10 | 11 | ## Configuration 12 | 13 | ## Developing 14 | 15 | -------------------------------------------------------------------------------- /src/apps/base-images/geoserver/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.app.dummy; 7 | 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; 9 | 10 | /** 11 | * @since 1.0 12 | */ 13 | @SpringBootApplication 14 | public class DummyApp { 15 | 16 | public static void main(String... args) { 17 | throw new UnsupportedOperationException(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/apps/base-images/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.apps 6 | gs-cloud-apps 7 | ${revision} 8 | 9 | gs-cloud-base-images 10 | pom 11 | 12 | jre 13 | spring-boot 14 | spring-boot3 15 | geoserver 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/apps/base-images/spring-boot/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.app.dummy; 7 | 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; 9 | 10 | /** 11 | * @since 1.0 12 | */ 13 | @SpringBootApplication 14 | public class DummyApp { 15 | 16 | public static void main(String... args) { 17 | throw new UnsupportedOperationException(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/apps/base-images/spring-boot3/src/main/java/org/geoserver/cloud/app/dummy/DummyApp.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.app.dummy; 7 | 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; 9 | 10 | /** 11 | * @since 1.0 12 | */ 13 | @SpringBootApplication 14 | public class DummyApp { 15 | 16 | public static void main(String... args) { 17 | throw new UnsupportedOperationException(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/apps/geoserver/gwc/src/main/java/org/geoserver/cloud/gwc/app/RootRedirectController.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gwc.app; 7 | 8 | import org.springframework.stereotype.Controller; 9 | import org.springframework.web.bind.annotation.GetMapping; 10 | import org.springframework.web.servlet.view.RedirectView; 11 | 12 | /** 13 | * @since 1.0 14 | */ 15 | @Controller 16 | public class RootRedirectController { 17 | 18 | @GetMapping("/") 19 | public RedirectView redirectRootToGetCapabilities() { 20 | return new RedirectView("/gwc"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/apps/geoserver/gwc/src/test/resources/bootstrap-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | cloud.config.enabled: false 3 | cloud.config.discovery.enabled: false 4 | cloud.discovery.enabled: false 5 | cloud.bus.enabled: false 6 | eureka.client.enabled: false 7 | geoserver: 8 | acl.enabled: false 9 | security.enabled: true 10 | backend: 11 | data-directory: 12 | enabled: true 13 | location: # to be set by test classes 14 | 15 | logging: 16 | level: 17 | root: warn 18 | org.geotools: warn 19 | org.geoserver: warn 20 | org.geoserver.security: error 21 | org.geoserver.cloud: info 22 | org.geoserver.cloud.config.catalog: warn 23 | org.geoserver.cloud.config.factory: info 24 | org.geowebcache.config.XMLConfiguration: off 25 | org.springframework.test: info 26 | org.geoserver.cloud.config.factory.FilteringXmlBeanDefinitionReader: off 27 | -------------------------------------------------------------------------------- /src/apps/geoserver/gwc/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/geoserver/restconfig/README.md: -------------------------------------------------------------------------------- 1 | # Cloud Native GeoServer REST configuration API v1 service 2 | 3 | Spring Boot/Cloud microservice that exposes GeoServer [REST API](https://docs.geoserver.org/stable/en/user/rest/). 4 | 5 | Follow and the service [documentation](/docs/develop/services/restconfig-v1-service.md) and keep it up to date. 6 | -------------------------------------------------------------------------------- /src/apps/geoserver/restconfig/src/main/java/org/geoserver/cloud/restconfig/RootController.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.restconfig; 7 | 8 | import org.springframework.stereotype.Controller; 9 | import org.springframework.web.bind.annotation.GetMapping; 10 | import org.springframework.web.servlet.view.RedirectView; 11 | 12 | public @Controller class RootController { 13 | 14 | @GetMapping("/") 15 | public RedirectView redirectRootToGetCapabilities() { 16 | return new RedirectView("/rest"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/apps/geoserver/restconfig/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/geoserver/wcs/src/test/resources/bootstrap-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.config.enabled: false 7 | cloud.config.discovery.enabled: false 8 | cloud.discovery.enabled: false 9 | cloud.bus.enabled: false 10 | eureka.client.enabled: false 11 | 12 | geoserver: 13 | acl.enabled: false 14 | backend: 15 | data-directory: 16 | enabled: true 17 | location: # to be set by the test class 18 | 19 | logging: 20 | level: 21 | root: WARN 22 | org.geoserver.platform: ERROR 23 | org.geoserver.cloud: DEBUG 24 | org.geoserver.cloud.config.factory: TRACE 25 | org.springframework.test: ERROR 26 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG REPOSITORY=geoservercloud 2 | ARG TAG=latest 3 | 4 | FROM $REPOSITORY/gs-cloud-base-jre:$TAG AS builder 5 | 6 | ARG JAR_FILE=target/gs-cloud-*-bin.jar 7 | 8 | COPY ${JAR_FILE} application.jar 9 | 10 | RUN java -Djarmode=layertools -jar application.jar extract 11 | 12 | ########## 13 | FROM $REPOSITORY/gs-cloud-base-geoserver-image:$TAG 14 | 15 | # WORKDIR already set to /opt/app/bin 16 | 17 | COPY --from=builder dependencies/ ./ 18 | COPY --from=builder snapshot-dependencies/ ./ 19 | COPY --from=builder spring-boot-loader/ ./ 20 | #see https://github.com/moby/moby/issues/37965 21 | RUN true 22 | COPY --from=builder application/ ./ 23 | 24 | # CDS disabled for multi-platform builds 25 | # The CDS step was causing failures in multi-platform builds due to 26 | # architecture-specific issues with native libraries in DuckDB 27 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/cloudnative/CloudNativeUIAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.web.cloudnative; 7 | 8 | import javax.annotation.PostConstruct; 9 | import lombok.extern.slf4j.Slf4j; 10 | import org.geoserver.cloud.web.service.WebUiCloudServicesConfiguration; 11 | import org.springframework.context.annotation.Configuration; 12 | import org.springframework.context.annotation.Import; 13 | 14 | /** 15 | * @since 1.0 16 | */ 17 | @Configuration(proxyBeanMethods = false) 18 | @Import(WebUiCloudServicesConfiguration.class) 19 | @Slf4j 20 | public class CloudNativeUIAutoConfiguration { 21 | 22 | public @PostConstruct void log() { 23 | log.info("cloud native webui components enabled"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/core/AbstractWebUIAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.web.core; 7 | 8 | import javax.annotation.PostConstruct; 9 | import lombok.extern.slf4j.Slf4j; 10 | 11 | @Slf4j(topic = "org.geoserver.cloud.autoconfigure.web") 12 | public abstract class AbstractWebUIAutoConfiguration { 13 | 14 | protected abstract String getConfigPrefix(); 15 | 16 | public @PostConstruct void log() { 17 | log.info("{} enabled", getConfigPrefix()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/ExtensionsAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.web.extension; 7 | 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | /** 11 | * Auto-configuration for WebUI extensions. 12 | * Extensions are now provided via gs-cloud-starter-extensions. 13 | */ 14 | @Configuration 15 | public class ExtensionsAutoConfiguration {} 16 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/wcs/WcsConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.web.wcs; 7 | 8 | import org.geoserver.cloud.config.factory.ImportFilteredResource; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | @Configuration(proxyBeanMethods = true) 12 | @ImportFilteredResource({ 13 | "jar:gs-wcs-.*!/applicationContext.xml", 14 | "jar:gs-wcs1_0-.*!/applicationContext.xml", 15 | "jar:gs-wcs1_1-.*!/applicationContext.xml", 16 | "jar:gs-wcs2_0-.*!/applicationContext.xml", 17 | // exclude wcs request builder, the DemosAutoConfiguration takes care of it 18 | "jar:gs-web-wcs-.*!/applicationContext.xml#name=^(?!wcsRequestBuilder).*$" 19 | }) 20 | public class WcsConfiguration {} 21 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/wfs/WfsConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.web.wfs; 7 | 8 | import org.geoserver.cloud.config.factory.ImportFilteredResource; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | @Configuration(proxyBeanMethods = true) 12 | @ImportFilteredResource({ 13 | "jar:gs-web-wfs-.*!/applicationContext.xml", 14 | "jar:gs-wfs-.*!/applicationContext.xml", 15 | "jar:gs-dxf-core-.*!/applicationContext.xml#name=.*" 16 | // FlatGeobuf moved to output-formats/flatgeobuf extension 17 | }) 18 | public class WfsConfiguration {} 19 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/web/service/ServiceInstance.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.web.service; 7 | 8 | import java.io.Serializable; 9 | import lombok.Data; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | public @Data class ServiceInstance implements Serializable, Comparable { 15 | private static final long serialVersionUID = 1L; 16 | 17 | private String name; 18 | private String instanceId; 19 | private String uri; 20 | private String status; 21 | 22 | @Override 23 | public int compareTo(ServiceInstance o) { 24 | int c = getName().compareTo(o.getName()); 25 | if (c == 0) { 26 | c = getInstanceId().compareTo(o.getInstanceId()); 27 | } 28 | return c; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/web/ui/GeoServerCloudStatusPanel.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.web.ui; 7 | 8 | import org.apache.wicket.markup.html.basic.Label; 9 | import org.apache.wicket.markup.html.panel.Panel; 10 | import org.springframework.boot.info.BuildProperties; 11 | 12 | /** 13 | * @since 1.0 14 | */ 15 | class GeoServerCloudStatusPanel extends Panel { 16 | private static final long serialVersionUID = 1L; 17 | 18 | public GeoServerCloudStatusPanel(String id, BuildProperties buildInfo) { 19 | super(id); 20 | this.add(new Label("gsCloudVersion", buildInfo.getVersion())); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/resources/GeoServerApplication.properties: -------------------------------------------------------------------------------- 1 | category.cloud=Cloud Native 2 | ServiceRegistryPage.title=Service Registry 3 | ServiceRegistryPage.description=Status of all running services in the cluster 4 | ServiceRegistryPage.th.name=Service Name 5 | ServiceRegistryPage.th.status=Status 6 | ServiceRegistryPage.th.instanceId=Instance ID 7 | ServiceRegistryPage.th.uri=Internal URI 8 | 9 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Initializers 2 | org.springframework.context.ApplicationContextInitializer=\ 3 | org.geoserver.cloud.autoconfigure.web.core.WebUIContextInitializer 4 | 5 | # Auto Configure 6 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 7 | org.geoserver.cloud.autoconfigure.web.core.WebUIApplicationAutoConfiguration,\ 8 | org.geoserver.cloud.autoconfigure.web.cloudnative.CloudNativeUIAutoConfiguration -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/resources/org/geoserver/cloud/web/ui/GeoServerCloudStatusPanel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/resources/org/geoserver/cloud/web/ui/ServiceRegistryPage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | <wicket:message key="title">Workspaces</wicket:message> 4 | 5 | 6 | 7 |
8 | 9 |
10 | 11 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/resources/org/geoserver/web/geoserver-cloud.css: -------------------------------------------------------------------------------- 1 | .unused{ 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | GeoServer: Redirecting 11 | 12 | 13 |

Redirecting to the actual home page.

14 |

If you're stuck here, it means you don't have javascript 15 | enabled. Javascript is required to actually use the GeoServer admin console.

16 | 17 | 18 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/test/resources/bootstrap-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.config.enabled: false 7 | cloud.config.discovery.enabled: false 8 | cloud.discovery.enabled: false 9 | cloud.bus.enabled: false 10 | eureka.client.enabled: false 11 | 12 | geoserver: 13 | acl.enabled: false 14 | security.enabled: true 15 | backend: 16 | data-directory: 17 | enabled: true 18 | location: # to be set by the test classes 19 | 20 | logging: 21 | level: 22 | root: WARN 23 | org.geoserver.platform: error 24 | org.geoserver.cloud: info 25 | org.geoserver.cloud.config.factory: info 26 | org.springframework.test: error 27 | -------------------------------------------------------------------------------- /src/apps/geoserver/webui/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/geoserver/wfs/src/main/java/org/geoserver/cloud/wfs/app/WfsApplication.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.wfs.app; 7 | 8 | import org.springframework.boot.SpringApplication; 9 | import org.springframework.boot.autoconfigure.SpringBootApplication; 10 | import org.springframework.retry.annotation.EnableRetry; 11 | 12 | @SpringBootApplication 13 | @EnableRetry 14 | public class WfsApplication { 15 | 16 | public static void main(String[] args) { 17 | try { 18 | SpringApplication.run(WfsApplication.class, args); 19 | } catch (RuntimeException e) { 20 | System.exit(-1); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/apps/geoserver/wfs/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.wfs.config.WfsAutoConfiguration 3 | -------------------------------------------------------------------------------- /src/apps/geoserver/wfs/src/test/resources/bootstrap-datadir.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.bus.enabled: false 7 | cloud.config.enabled: false 8 | cloud.config.discovery.enabled: false 9 | cloud.discovery.enabled: false 10 | eureka.client.enabled: false 11 | 12 | geoserver: 13 | acl.enabled: false 14 | backend: 15 | data-directory: 16 | enabled: true 17 | location: # set by test classes 18 | 19 | logging: 20 | level: 21 | root: WARN 22 | org.geoserver.platform: ERROR 23 | org.geoserver.cloud: INFO 24 | org.geoserver.cloud.config.factory: INFO 25 | org.springframework.test: ERROR 26 | -------------------------------------------------------------------------------- /src/apps/geoserver/wfs/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/geoserver/wms/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.wms.WmsApplicationAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.wms.KMLAutoConfiguration -------------------------------------------------------------------------------- /src/apps/geoserver/wms/src/test/resources/bootstrap-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.config.enabled: false 7 | cloud.config.discovery.enabled: false 8 | cloud.discovery.enabled: false 9 | cloud.bus.enabled: false 10 | eureka.client.enabled: false 11 | 12 | geoserver: 13 | acl.enabled: false 14 | 15 | logging: 16 | level: 17 | root: WARN 18 | org.geoserver.platform: error 19 | org.geoserver.cloud: info 20 | org.geoserver.cloud.config.factory: info 21 | org.springframework.test: error 22 | 23 | -------------------------------------------------------------------------------- /src/apps/geoserver/wms/src/test/resources/bootstrap-testjdbcconfig.yml: -------------------------------------------------------------------------------- 1 | geoserver: 2 | backend: 3 | jdbcconfig: 4 | enabled: true 5 | web.enabled: true 6 | initdb: true 7 | cache-directory: # to be set by the test classes 8 | datasource: 9 | driverClassname: org.h2.Driver 10 | url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 11 | username: sa 12 | password: 13 | -------------------------------------------------------------------------------- /src/apps/geoserver/wms/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/geoserver/wps/src/test/resources/bootstrap-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.bus.enabled: false 7 | cloud.config.enabled: false 8 | cloud.config.discovery.enabled: false 9 | cloud.discovery.enabled: false 10 | eureka.client.enabled: false 11 | 12 | geoserver: 13 | acl.enabled: false 14 | backend: 15 | data-directory: 16 | enabled: true 17 | location: # to be set by the test classes 18 | 19 | logging: 20 | level: 21 | root: WARN 22 | org.geoserver.platform: ERROR 23 | org.geoserver.cloud: DEBUG 24 | org.geoserver.cloud.config.factory: TRACE 25 | org.springframework.test: ERROR 26 | -------------------------------------------------------------------------------- /src/apps/infrastructure/README.md: -------------------------------------------------------------------------------- 1 | # Cloud enabling support services 2 | 3 | These are microservices that enable the configuration and orchestration of the business services such as wfs, wms, etc. 4 | 5 | We're setting up a **discovery-first** architecture, where the first point of contact for all microservices is the "discovery" service. 6 | 7 | On bootstrap, all services first connect to the discovery service, looks up the config service, connect to the config service and load their configuration properties. 8 | 9 | The config service serves as a centralized, possibly versioned (as a git repository), provider of configuration properties. 10 | 11 | The api-gateway service acts as a single entry point for all microservices, dispatching requests to the appropriate service based on the configured rules, and doing load balancing among service instances. -------------------------------------------------------------------------------- /src/apps/infrastructure/admin/README.md: -------------------------------------------------------------------------------- 1 | # Spring-boot Admin Service 2 | 3 | See: 4 | - https://github.com/codecentric/spring-boot-admin 5 | - https://codecentric.github.io/spring-boot-admin/current/ 6 | 7 | Monitors all spring-boot based microservices registered to the discovery service. 8 | 9 | If using the default docker composition, browse to http://localhost:9091 to access it. -------------------------------------------------------------------------------- /src/apps/infrastructure/admin/src/main/java/org/geoserver/cloud/adminserver/SpringBootAdminServerApplication.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.adminserver; 7 | 8 | import de.codecentric.boot.admin.server.config.EnableAdminServer; 9 | import org.springframework.boot.autoconfigure.SpringBootApplication; 10 | import org.springframework.boot.builder.SpringApplicationBuilder; 11 | 12 | @SpringBootApplication 13 | @EnableAdminServer 14 | public class SpringBootAdminServerApplication { 15 | 16 | public static void main(String[] args) { 17 | new SpringApplicationBuilder(SpringBootAdminServerApplication.class).run(args); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/apps/infrastructure/config/README.md: -------------------------------------------------------------------------------- 1 | # Spring-boot config server 2 | 3 | ## Configuration environment variables 4 | 5 | The `config-service` supports the following environment variables: 6 | 7 | -------------------------------------------------------------------------------- /src/apps/infrastructure/config/src/main/java/org/geoserver/cloud/config/ConfigApplication.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.config; 7 | 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; 9 | import org.springframework.boot.builder.SpringApplicationBuilder; 10 | import org.springframework.cloud.config.server.EnableConfigServer; 11 | import org.springframework.retry.annotation.EnableRetry; 12 | 13 | @SpringBootApplication 14 | @EnableConfigServer 15 | @EnableRetry 16 | public class ConfigApplication { 17 | 18 | public static void main(String[] args) { 19 | new SpringApplicationBuilder(ConfigApplication.class).run(args); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/apps/infrastructure/config/src/test/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main.banner-mode: off 3 | application.name: config-service 4 | cloud.config.server.native.searchLocations: classpath:/config 5 | eureka.client.enabled: false 6 | logging.level: 7 | root: warn 8 | -------------------------------------------------------------------------------- /src/apps/infrastructure/config/src/test/resources/config/test-service-profile1.yml: -------------------------------------------------------------------------------- 1 | spring.application.name: geoserver-profile1 2 | -------------------------------------------------------------------------------- /src/apps/infrastructure/config/src/test/resources/config/test-service.yml: -------------------------------------------------------------------------------- 1 | spring.application.name: geoserver 2 | -------------------------------------------------------------------------------- /src/apps/infrastructure/config/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/infrastructure/discovery/README.md: -------------------------------------------------------------------------------- 1 | # Cloud Native GeoServer Discovery service 2 | 3 | The Discovery Service maintains a registry of the location and health status of other services. 4 | 5 | Any other service participating in the cluster will register to the Discovery Service at start up, and de-register 6 | at graceful shut down time. 7 | 8 | Inter-service communication will then be automatically load balanced to all available service instances of a given type. 9 | 10 | The most common scenario is when for High Availability or performance reasons, there are several instances of a specific service, 11 | hence incoming requests passing through the [Gateway Service](src/main/resources/application.yml) get served by a different instance in a round-robin 12 | fashion. 13 | 14 | Follow the service [documentation](/docs/develop/services/discovery-service.md) and keep it up to date. 15 | -------------------------------------------------------------------------------- /src/apps/infrastructure/discovery/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/apps/infrastructure/gateway/src/main/java/org/geoserver/cloud/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gateway; 7 | 8 | import org.springframework.boot.SpringApplication; 9 | import org.springframework.boot.autoconfigure.SpringBootApplication; 10 | 11 | /** 12 | * Spring Cloud Gateway application for GeoServer Cloud 13 | *

14 | * Using Spring Boot 3.2.x with Spring Cloud 2024.0.1+ for improved 15 | * reactive context propagation, especially for MDC values in logging. 16 | */ 17 | @SpringBootApplication 18 | public class GatewayApplication { 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(GatewayApplication.class, args); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/apps/infrastructure/gateway/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.gateway.GatewayApplicationAutoconfiguration 2 | org.geoserver.cloud.autoconfigure.gateway.GatewaySharedAuthAutoConfiguration -------------------------------------------------------------------------------- /src/apps/infrastructure/gateway/src/test/resources/application-json-logs.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | output: 3 | ansi: 4 | enabled: never 5 | 6 | # Configure MDC logging for JSON output in tests 7 | logging: 8 | level: 9 | root: INFO 10 | org.geoserver.cloud.accesslog: INFO 11 | org.geoserver.cloud.gateway: DEBUG -------------------------------------------------------------------------------- /src/apps/infrastructure/gateway/src/test/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: gateway 4 | cloud: 5 | gateway: 6 | enabled: true 7 | discovery: 8 | locator: 9 | enabled: false 10 | routes: [] # Empty list of routes for testing 11 | 12 | # Gateway logging properties 13 | geoserver: 14 | cloud: 15 | gateway: 16 | logging: 17 | includeQueryParams: true 18 | maxFieldLength: 256 -------------------------------------------------------------------------------- /src/apps/infrastructure/gateway/src/test/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: gateway 4 | config: 5 | enabled: false 6 | cloud: 7 | config: 8 | enabled: false 9 | discovery: 10 | enabled: false -------------------------------------------------------------------------------- /src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/metrics/catalog/GeoSeverMetricsConfigProperties.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.metrics.catalog; 7 | 8 | import lombok.Data; 9 | import org.springframework.boot.context.properties.ConfigurationProperties; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | @Data 15 | @ConfigurationProperties(prefix = "geoserver.metrics") 16 | public class GeoSeverMetricsConfigProperties { 17 | 18 | private boolean enabled = true; 19 | 20 | private String instanceId; 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/security/ConditionalOnGeoServerSecurityDisabled.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.security; 7 | 8 | import java.lang.annotation.Documented; 9 | import java.lang.annotation.ElementType; 10 | import java.lang.annotation.Retention; 11 | import java.lang.annotation.RetentionPolicy; 12 | import java.lang.annotation.Target; 13 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 14 | 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target({ElementType.METHOD, ElementType.TYPE}) 17 | @Documented 18 | @ConditionalOnProperty(prefix = "geoserver.security", name = "enabled", havingValue = "false", matchIfMissing = false) 19 | public @interface ConditionalOnGeoServerSecurityDisabled {} 20 | -------------------------------------------------------------------------------- /src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/security/ConditionalOnGeoServerSecurityEnabled.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.security; 7 | 8 | import java.lang.annotation.Documented; 9 | import java.lang.annotation.ElementType; 10 | import java.lang.annotation.Retention; 11 | import java.lang.annotation.RetentionPolicy; 12 | import java.lang.annotation.Target; 13 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 14 | 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target({ElementType.METHOD, ElementType.TYPE}) 17 | @Documented 18 | @ConditionalOnProperty(prefix = "geoserver.security", name = "enabled", havingValue = "true", matchIfMissing = true) 19 | public @interface ConditionalOnGeoServerSecurityEnabled {} 20 | -------------------------------------------------------------------------------- /src/catalog/backends/common/src/main/java/org/geoserver/cloud/config/catalog/backend/core/CatalogProperties.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.config.catalog.backend.core; 7 | 8 | import lombok.Data; 9 | import org.springframework.boot.context.properties.ConfigurationProperties; 10 | 11 | @ConfigurationProperties(prefix = "geoserver.catalog") 12 | public @Data class CatalogProperties { 13 | private boolean isolated = true; 14 | private boolean secure = true; 15 | private boolean localWorkspace = true; 16 | private boolean advertised = true; 17 | } 18 | -------------------------------------------------------------------------------- /src/catalog/backends/common/src/main/resources/META-INF/services/org.geotools.http.HTTPClientFactory: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.geotools.SpringEnvironmentAwareGeoToolsHttpClientFactory -------------------------------------------------------------------------------- /src/catalog/backends/common/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | info: 2 | instance-id: test-instance-id 3 | spring: 4 | main: 5 | banner-mode: off 6 | allow-bean-definition-overriding: true 7 | # false by default since spring-boot 2.6.0, breaks geoserver initialization 8 | allow-circular-references: true 9 | cloud.bus.enabled: false 10 | autoconfigure: 11 | exclude: 12 | - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 13 | 14 | 15 | eureka.client.enabled: false 16 | 17 | logging: 18 | level: 19 | root: WARN 20 | #org.geoserver.platform: ERROR 21 | org.geoserver: warn 22 | org.geoserver.cloud: warn 23 | org.geoserver.cloud.config.factory: warn 24 | org.geoserver.jdbcconfig: warn 25 | org.geoserver.jdbcstore: warn 26 | -------------------------------------------------------------------------------- /src/catalog/backends/common/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/catalog/backends/datadir/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.geoserver.cloud.autoconfigure.catalog.backend.datadir.DataDirectoryAutoConfiguration,\ 4 | org.geoserver.cloud.autoconfigure.catalog.backend.datadir.RemoteEventDataDirectoryAutoConfiguration -------------------------------------------------------------------------------- /src/catalog/backends/datadir/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | allow-circular-references: true 7 | autoconfigure: 8 | exclude: 9 | - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 10 | 11 | geoserver: 12 | backend: 13 | data-directory: 14 | enabled: false 15 | location: # to be set by the test classes 16 | 17 | logging: 18 | level: 19 | root: WARN 20 | -------------------------------------------------------------------------------- /src/catalog/backends/datadir/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/catalog/backends/jdbcconfig/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/jdbcconfig/JDBCConfigWebAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.catalog.backend.jdbcconfig; 7 | 8 | import org.geoserver.cloud.config.catalog.backend.jdbcconfig.JDBCConfigWebConfiguration; 9 | import org.springframework.boot.autoconfigure.AutoConfiguration; 10 | import org.springframework.context.annotation.Import; 11 | 12 | /** Auto configuration for the wicket ui components of the jdbcconfig extension */ 13 | @AutoConfiguration 14 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 15 | @ConditionalOnJdbcConfigWebUIEnabled 16 | @Import({JDBCConfigWebConfiguration.class}) 17 | public class JDBCConfigWebAutoConfiguration {} 18 | -------------------------------------------------------------------------------- /src/catalog/backends/jdbcconfig/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.geoserver.cloud.autoconfigure.catalog.backend.jdbcconfig.JDBCConfigAutoConfiguration,\ 4 | org.geoserver.cloud.autoconfigure.catalog.backend.jdbcconfig.JDBCConfigWebAutoConfiguration,\ 5 | org.geoserver.cloud.autoconfigure.catalog.backend.jdbcconfig.RemoteEventJdbcConfigAutoConfiguration -------------------------------------------------------------------------------- /src/catalog/backends/jdbcconfig/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigMigrationAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2023 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.catalog.backend.pgconfig; 7 | 8 | import org.geoserver.cloud.config.catalog.backend.pgconfig.DatabaseMigrationConfiguration; 9 | import org.springframework.boot.autoconfigure.AutoConfiguration; 10 | import org.springframework.context.annotation.Import; 11 | 12 | /** 13 | * @since 1.4 14 | */ 15 | @AutoConfiguration(after = PgconfigDataSourceAutoConfiguration.class) 16 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 17 | @ConditionalOnPgconfigBackendEnabled 18 | @Import(DatabaseMigrationConfiguration.class) 19 | public class PgconfigMigrationAutoConfiguration {} 20 | -------------------------------------------------------------------------------- /src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/backend/pgconfig/catalog/repository/UncheckedSqlException.java: -------------------------------------------------------------------------------- 1 | /* (c) 2023 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.backend.pgconfig.catalog.repository; 7 | 8 | import java.sql.SQLException; 9 | 10 | /** 11 | * @since 1.4 12 | */ 13 | @SuppressWarnings("serial") 14 | class UncheckedSqlException extends RuntimeException { 15 | 16 | UncheckedSqlException(SQLException cause) { 17 | super(cause); 18 | } 19 | 20 | @Override 21 | public synchronized SQLException getCause() { 22 | return (SQLException) super.getCause(); 23 | } 24 | 25 | static UncheckedSqlException of(SQLException e) { 26 | return new UncheckedSqlException(e); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigGeoServerFacade.java: -------------------------------------------------------------------------------- 1 | /* (c) 2023 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.backend.pgconfig.config; 7 | 8 | import lombok.NonNull; 9 | import org.geoserver.config.plugin.RepositoryGeoServerFacadeImpl; 10 | import org.springframework.jdbc.core.JdbcTemplate; 11 | 12 | /** 13 | * @since 1.4 14 | */ 15 | public class PgconfigGeoServerFacade extends RepositoryGeoServerFacadeImpl { 16 | 17 | public PgconfigGeoServerFacade(@NonNull JdbcTemplate template) { 18 | super(new PgconfigConfigRepository(template)); 19 | } 20 | 21 | public PgconfigGeoServerFacade(@NonNull PgconfigConfigRepository repo) { 22 | super(repo); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/catalog/backends/pgconfig/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.geoserver.cloud.autoconfigure.catalog.backend.pgconfig.PgconfigDataSourceAutoConfiguration,\ 4 | org.geoserver.cloud.autoconfigure.catalog.backend.pgconfig.PgconfigTransactionManagerAutoConfiguration,\ 5 | org.geoserver.cloud.autoconfigure.catalog.backend.pgconfig.PgconfigMigrationAutoConfiguration,\ 6 | org.geoserver.cloud.autoconfigure.catalog.backend.pgconfig.PgconfigBackendAutoConfiguration -------------------------------------------------------------------------------- /src/catalog/backends/pgconfig/src/main/resources/db/pgconfig/migration/postgresql/V1_8_1__Revert_Catalog_Full_Text_Search_Indexes.sql: -------------------------------------------------------------------------------- 1 | -- Drop indexes created in V1_2__Catalog_Full_Text_Search.sql as they're not used 2 | -- We'll address the full text search capability in a future iteration accounting for 3 | -- both the database schema and code changes required. 4 | 5 | DROP INDEX IF EXISTS namespaceinfo_to_tsvector_idx; 6 | DROP INDEX IF EXISTS workspaceinfo_to_tsvector_idx; 7 | DROP INDEX IF EXISTS storeinfo_to_tsvector_idx; 8 | DROP INDEX IF EXISTS resourceinfo_to_tsvector_idx; 9 | DROP INDEX IF EXISTS layerinfo_to_tsvector_idx; 10 | DROP INDEX IF EXISTS layergroupinfo_to_tsvector_idx; 11 | DROP INDEX IF EXISTS styleinfo_to_tsvector_idx; 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/catalog/backends/pgconfig/src/test/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | 2 | 3 | geoserver: 4 | backend: 5 | pgconfig: 6 | initialize: true 7 | schema: gscatalog 8 | create-schema: true 9 | datasource: 10 | jndi-name: java:comp/env/jdbc/test -------------------------------------------------------------------------------- /src/catalog/cache/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Catalog micro-service client 2 | 3 | Client library for the catalog-microservice. 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/catalog/cache/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.catalog.cache.BackendCacheAutoConfiguration -------------------------------------------------------------------------------- /src/catalog/cache/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring.main.banner-mode: off 2 | 3 | logging: 4 | level: 5 | root: WARN 6 | org.springframework: error 7 | org.geoserver.platform: error 8 | org.geoserver.cloud: info 9 | org.geoserver.cloud.bus: info 10 | -------------------------------------------------------------------------------- /src/catalog/cache/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/catalog/event-bus/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.event.bus.GeoServerBusIntegrationAutoConfiguration 3 | -------------------------------------------------------------------------------- /src/catalog/event-bus/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.bus.enabled: true 7 | geoserver: 8 | bus: 9 | send-object: false 10 | send-diff: false 11 | 12 | logging: 13 | level: 14 | root: WARN 15 | org.springframework: error 16 | org.geoserver.platform: error 17 | org.geoserver.cloud: debug 18 | org.geoserver.cloud.bus: debug 19 | -------------------------------------------------------------------------------- /src/catalog/event-bus/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/catalog/events/src/main/java/org/geoserver/cloud/autoconfigure/catalog/event/ConditionalOnCatalogEvents.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.catalog.event; 7 | 8 | import java.lang.annotation.Documented; 9 | import java.lang.annotation.ElementType; 10 | import java.lang.annotation.Retention; 11 | import java.lang.annotation.RetentionPolicy; 12 | import java.lang.annotation.Target; 13 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 14 | 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Target({ElementType.METHOD, ElementType.TYPE}) 17 | @Documented 18 | @ConditionalOnProperty(value = "geoserver.catalog.events.enabled", havingValue = "true", matchIfMissing = true) 19 | public @interface ConditionalOnCatalogEvents {} 20 | -------------------------------------------------------------------------------- /src/catalog/events/src/main/java/org/geoserver/cloud/event/config/ConfigInfoEvent.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.event.config; 7 | 8 | /** Marker interface in case listening for all config remote events is required */ 9 | public interface ConfigInfoEvent {} 10 | -------------------------------------------------------------------------------- /src/catalog/events/src/main/java/org/geoserver/cloud/event/lifecycle/ReloadEvent.java: -------------------------------------------------------------------------------- 1 | /* (c) 2024 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.event.lifecycle; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 9 | import com.fasterxml.jackson.annotation.JsonTypeName; 10 | 11 | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) 12 | @JsonTypeName("ReloadEvent") 13 | @SuppressWarnings("serial") 14 | public class ReloadEvent extends LifecycleEvent { 15 | public ReloadEvent() { 16 | // no-op, for serialization 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/catalog/events/src/main/java/org/geoserver/cloud/event/lifecycle/ResetEvent.java: -------------------------------------------------------------------------------- 1 | /* (c) 2024 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.event.lifecycle; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 9 | import com.fasterxml.jackson.annotation.JsonTypeName; 10 | 11 | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) 12 | @JsonTypeName("ResetEvent") 13 | @SuppressWarnings("serial") 14 | public class ResetEvent extends LifecycleEvent { 15 | public ResetEvent() { 16 | // no-op, for serialization 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/catalog/events/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.catalog.event.LocalCatalogEventsAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.catalog.event.UpdateSequenceControllerAutoConfiguration -------------------------------------------------------------------------------- /src/catalog/events/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | 7 | logging: 8 | level: 9 | root: WARN 10 | org.springframework: error 11 | org.geoserver.platform: error 12 | org.geoserver.cloud: info 13 | org.geoserver.cloud.bus: info 14 | -------------------------------------------------------------------------------- /src/catalog/events/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Jackson bindings 2 | 3 | Jackson-databind bindings for GeoServer Catalog and Configuration objects. 4 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Attribution.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class Attribution { 12 | private String id; 13 | private String title; 14 | private String href; 15 | private String logoURL; 16 | private int logoWidth; 17 | private int logoHeight; 18 | private String logoType; 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/AuthorityURL.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class AuthorityURL { 12 | private String name; 13 | private String href; 14 | } 15 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/CoverageDimension.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import java.util.List; 9 | import lombok.Data; 10 | import org.geoserver.catalog.impl.CoverageDimensionImpl; 11 | import org.geotools.jackson.databind.dto.NumberRangeDto; 12 | 13 | /** 14 | * @see CoverageDimensionImpl 15 | */ 16 | @Data 17 | public class CoverageDimension { 18 | private String id; 19 | private String name; 20 | private String description; 21 | private NumberRangeDto range; 22 | private List nullValues; 23 | private String unit; 24 | private String dimensionType; 25 | } 26 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/CoverageStore.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("CoverageStoreInfo") 17 | public class CoverageStore extends Store { 18 | 19 | private String URL; 20 | } 21 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/DataLink.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class DataLink { 12 | private String id; 13 | private String about; 14 | private String type; 15 | private String content; 16 | } 17 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/DataStore.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("DataStoreInfo") 17 | public class DataStore extends Store {} 18 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/GridGeometryDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | import org.geoserver.config.util.XStreamPersister; 10 | import org.geotools.coverage.grid.GridGeometry2D; 11 | import org.geotools.jackson.databind.dto.CRS; 12 | 13 | /** 14 | * DTO for {@link GridGeometry2D} 15 | * 16 | * @see XStreamPersister#GridGeometry2DConverter 17 | */ 18 | @Data 19 | public class GridGeometryDto { 20 | private int[] low; 21 | private int[] high; 22 | private double[] transform; 23 | private CRS crs; 24 | } 25 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/InfoDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonSubTypes; 9 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 10 | import lombok.Data; 11 | import org.geoserver.jackson.databind.config.dto.ConfigInfoDto; 12 | 13 | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) 14 | @JsonSubTypes({@JsonSubTypes.Type(value = CatalogInfoDto.class), @JsonSubTypes.Type(value = ConfigInfoDto.class)}) 15 | @Data 16 | public abstract class InfoDto { 17 | private String id; 18 | } 19 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/InfoReference.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.AllArgsConstructor; 9 | import lombok.Data; 10 | import lombok.NoArgsConstructor; 11 | import lombok.NonNull; 12 | import org.geoserver.catalog.impl.ClassMappings; 13 | 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public class InfoReference { 18 | private @NonNull ClassMappings type; 19 | private @NonNull String id; 20 | } 21 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Keyword.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class Keyword { 12 | private String value; 13 | private String language; 14 | private String vocabulary; 15 | } 16 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/LayerIdentifier.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class LayerIdentifier { 12 | private String authority; 13 | private String identifier; 14 | } 15 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Legend.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class Legend { 12 | private String id; 13 | private int width; 14 | private int height; 15 | private String format; 16 | private String onlineResource; 17 | } 18 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Map.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import java.util.List; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.ToString; 13 | 14 | @Data 15 | @EqualsAndHashCode(callSuper = true) 16 | @ToString(callSuper = true) 17 | @JsonTypeName("MapInfo") 18 | public class Map extends CatalogInfoDto { 19 | 20 | private String name; 21 | private boolean enabled; 22 | private List layers; 23 | } 24 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/MetadataLink.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class MetadataLink { 12 | private String id; 13 | private String type; 14 | private String about; 15 | private String metadataType; 16 | private String content; 17 | } 18 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/MetadataMapDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 9 | import com.fasterxml.jackson.annotation.JsonTypeName; 10 | import java.util.LinkedHashMap; 11 | import org.geotools.jackson.databind.filter.dto.Literal; 12 | 13 | /** 14 | * @since 1.0 15 | */ 16 | @JsonTypeName("MetadataMap") 17 | @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 18 | public class MetadataMapDto extends LinkedHashMap { 19 | 20 | private static final long serialVersionUID = 1L; 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Namespace.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("NamespaceInfo") 17 | public class Namespace extends CatalogInfoDto { 18 | private String name; 19 | private String URI; 20 | private boolean isolated; 21 | private MetadataMapDto metadata; 22 | } 23 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Style.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | import org.geotools.jackson.databind.dto.VersionDto; 13 | 14 | @Data 15 | @EqualsAndHashCode(callSuper = true) 16 | @ToString(callSuper = true) 17 | @JsonTypeName("StyleInfo") 18 | public class Style extends CatalogInfoDto { 19 | 20 | private String name; 21 | private String workspace; 22 | private String format; 23 | private VersionDto formatVersion; 24 | private String filename; 25 | private Legend legend; 26 | private MetadataMapDto metadata; 27 | } 28 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/VirtualTableDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import lombok.Data; 9 | import org.geotools.jdbc.VirtualTable; 10 | 11 | /** DTO type for {@link VirtualTable} */ 12 | @Data 13 | public class VirtualTableDto { 14 | 15 | private String name; 16 | private String sql; 17 | private boolean escapeSql; 18 | } 19 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/WMSStore.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("WMSStoreInfo") 17 | public class WMSStore extends HTTPStore {} 18 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/WMTSLayer.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("WMTSLayerInfo") 17 | public class WMTSLayer extends Resource {} 18 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/WMTSStore.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("WMTSStoreInfo") 17 | public class WMTSStore extends HTTPStore {} 18 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/dto/Workspace.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @ToString(callSuper = true) 16 | @JsonTypeName("WorkspaceInfo") 17 | public class Workspace extends CatalogInfoDto { 18 | private String name; 19 | private boolean isolated; 20 | private MetadataMapDto metadata; 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/mapper/MapMapper.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.mapper; 7 | 8 | import lombok.Generated; 9 | import org.geoserver.catalog.MapInfo; 10 | import org.geoserver.jackson.databind.catalog.dto.Map; 11 | import org.mapstruct.AnnotateWith; 12 | import org.mapstruct.Mapper; 13 | 14 | @Mapper(config = CatalogInfoMapperConfig.class) 15 | @AnnotateWith(value = Generated.class) 16 | public interface MapMapper { 17 | 18 | MapInfo map(Map o); 19 | 20 | Map map(MapInfo o); 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/mapper/NamespaceMapper.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.mapper; 7 | 8 | import lombok.Generated; 9 | import org.geoserver.catalog.NamespaceInfo; 10 | import org.geoserver.jackson.databind.catalog.dto.Namespace; 11 | import org.mapstruct.AnnotateWith; 12 | import org.mapstruct.Mapper; 13 | import org.mapstruct.Mapping; 14 | 15 | @Mapper(config = CatalogInfoMapperConfig.class) 16 | @AnnotateWith(value = Generated.class) 17 | public interface NamespaceMapper { 18 | 19 | @Mapping(target = "prefix", source = "name") 20 | NamespaceInfo map(Namespace o); 21 | 22 | Namespace map(NamespaceInfo o); 23 | } 24 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/mapper/StyleMapper.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.mapper; 7 | 8 | import lombok.Generated; 9 | import org.geoserver.catalog.StyleInfo; 10 | import org.geoserver.jackson.databind.catalog.dto.Style; 11 | import org.mapstruct.AnnotateWith; 12 | import org.mapstruct.Mapper; 13 | 14 | @Mapper(config = CatalogInfoMapperConfig.class) 15 | @AnnotateWith(value = Generated.class) 16 | public interface StyleMapper { 17 | 18 | StyleInfo map(Style o); 19 | 20 | Style map(StyleInfo o); 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/catalog/mapper/WorkspaceMapper.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog.mapper; 7 | 8 | import lombok.Generated; 9 | import org.geoserver.catalog.WorkspaceInfo; 10 | import org.geoserver.jackson.databind.catalog.dto.Workspace; 11 | import org.mapstruct.AnnotateWith; 12 | import org.mapstruct.Mapper; 13 | 14 | @Mapper(config = CatalogInfoMapperConfig.class) 15 | @AnnotateWith(value = Generated.class) 16 | public interface WorkspaceMapper { 17 | 18 | WorkspaceInfo map(Workspace o); 19 | 20 | Workspace map(WorkspaceInfo o); 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/config/dto/CogSettingsDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | 11 | /** */ 12 | @JsonTypeName("CogSettings") 13 | @Data 14 | public class CogSettingsDto { 15 | public enum RangeReaderType { 16 | HTTP, 17 | S3, 18 | GS, 19 | Azure; 20 | } 21 | 22 | private RangeReaderType rangeReaderSettings = RangeReaderType.HTTP; 23 | private boolean useCachingStream; 24 | } 25 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/config/dto/CogSettingsStoreDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 9 | import com.fasterxml.jackson.annotation.JsonTypeName; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | 13 | /** */ 14 | @Data 15 | @EqualsAndHashCode(callSuper = true) 16 | @JsonTypeName("CogSettingsStore") 17 | @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 18 | public class CogSettingsStoreDto extends CogSettingsDto { 19 | 20 | private String username; 21 | private String password; 22 | } 23 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/config/dto/ConfigInfoDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonSubTypes; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | import org.geoserver.jackson.databind.catalog.dto.InfoDto; 13 | 14 | @Data 15 | @EqualsAndHashCode(callSuper = true) 16 | @ToString(callSuper = true) 17 | @JsonSubTypes({ 18 | @JsonSubTypes.Type(value = GeoServer.class), 19 | @JsonSubTypes.Type(value = Logging.class), 20 | @JsonSubTypes.Type(value = Service.class), 21 | @JsonSubTypes.Type(value = Settings.class) 22 | }) 23 | public class ConfigInfoDto extends InfoDto {} 24 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/config/dto/CoverageAccess.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config.dto; 7 | 8 | import lombok.Data; 9 | import org.geoserver.config.CoverageAccessInfo; 10 | 11 | /** DTO for {@link CoverageAccessInfo} */ 12 | @Data 13 | public class CoverageAccess { 14 | public enum QueueType { 15 | UNBOUNDED, 16 | DIRECT 17 | } 18 | 19 | private int corePoolSize; 20 | private int keepAliveTime; 21 | private int maxPoolSize; 22 | private QueueType queueType; 23 | private long imageIOCacheThreshold; 24 | } 25 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/java/org/geoserver/jackson/databind/config/dto/Logging.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config.dto; 7 | 8 | import com.fasterxml.jackson.annotation.JsonTypeName; 9 | import lombok.Data; 10 | import lombok.EqualsAndHashCode; 11 | import lombok.ToString; 12 | import org.geoserver.config.LoggingInfo; 13 | 14 | /** DTO for {@link LoggingInfo} */ 15 | @Data 16 | @EqualsAndHashCode(callSuper = true) 17 | @ToString(callSuper = true) 18 | @JsonTypeName("LoggingInfo") 19 | public class Logging extends ConfigInfoDto { 20 | private String level; 21 | private String location; 22 | private boolean stdOutLogging; 23 | } 24 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module: -------------------------------------------------------------------------------- 1 | org.geoserver.jackson.databind.catalog.GeoServerCatalogModule 2 | org.geoserver.jackson.databind.config.GeoServerConfigModule 3 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleJsonTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoServerCatalogModuleJsonTest extends GeoServerCatalogModuleTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleYamlTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoServerCatalogModuleYamlTest extends GeoServerCatalogModuleTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newYAMLObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationJsonTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | class PatchSerializationJsonTest extends PatchSerializationTest { 12 | 13 | protected @Override ObjectMapper newObjectMapper() { 14 | return ObjectMapperUtil.newObjectMapper(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationYamlTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.catalog; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | class PatchSerializationYamlTest extends PatchSerializationTest { 12 | 13 | protected @Override ObjectMapper newObjectMapper() { 14 | return ObjectMapperUtil.newYAMLObjectMapper(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleJsonTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoSeververConfigModuleJsonTest extends GeoServerConfigModuleTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleYamlTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.jackson.databind.config; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoSeververConfigModuleYamlTest extends GeoServerConfigModuleTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newYAMLObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geoserver/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/README.md: -------------------------------------------------------------------------------- 1 | # GeoTools Jackson bindings 2 | 3 | Jackson-databind bindings for GeoTools, includes bindings for: 4 | 5 | - `org.opengis.filter.Filter`, so `Filter` objects can be serialized/deserialized directly with Jackson 6 | - `org.locationtech.jts.geom.Geometry`, to serialize/deserialize JTS geometries as GeoJSON with Jackson 7 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/dto/CRS.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class CRS { 12 | private String srs; 13 | private String WKT; 14 | } 15 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/dto/Envelope.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.dto; 7 | 8 | import lombok.Data; 9 | 10 | @Data 11 | public class Envelope { 12 | private CRS crs; 13 | private double[] coordinates; 14 | } 15 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/dto/NameDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.dto; 7 | 8 | import lombok.Data; 9 | 10 | /** DTO for {@link org.geotools.api.feature.type.Name} */ 11 | @Data 12 | public class NameDto { 13 | private String namespaceURI; 14 | private String localPart; 15 | } 16 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/dto/NumberRangeDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.dto; 7 | 8 | import lombok.Data; 9 | import org.geotools.util.NumberRange; 10 | 11 | /** 12 | * @see NumberRange 13 | */ 14 | @Data 15 | public class NumberRangeDto { 16 | 17 | private Number min; 18 | private Number max; 19 | private boolean minIncluded; 20 | private boolean maxIncluded; 21 | } 22 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/dto/VersionDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.dto; 7 | 8 | import lombok.Data; 9 | import lombok.experimental.Accessors; 10 | 11 | /** DTO for {@link org.geotools.util.Version} */ 12 | @Accessors(chain = true) 13 | @Data 14 | public class VersionDto { 15 | private String value; 16 | } 17 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/filter/dto/SortBy.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter.dto; 7 | 8 | import lombok.AllArgsConstructor; 9 | import lombok.Data; 10 | import lombok.NoArgsConstructor; 11 | 12 | /** DTO for {@link org.geotools.api.filter.sort.SortBy} */ 13 | @Data 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class SortBy { 17 | 18 | public enum SortOrder { 19 | ASCENDING, 20 | DESCENDING 21 | } 22 | 23 | private Expression.PropertyName propertyName; 24 | private SortOrder sortOrder; 25 | } 26 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/filter/mapper/FilterFactory.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter.mapper; 7 | 8 | import org.geotools.api.filter.ExcludeFilter; 9 | import org.geotools.api.filter.Filter; 10 | import org.geotools.api.filter.IncludeFilter; 11 | import org.mapstruct.ObjectFactory; 12 | 13 | public class FilterFactory { 14 | 15 | @ObjectFactory 16 | public IncludeFilter include() { 17 | return Filter.INCLUDE; 18 | } 19 | 20 | @ObjectFactory 21 | public ExcludeFilter exclude() { 22 | return Filter.EXCLUDE; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/java/org/geotools/jackson/databind/filter/mapper/FilterMapperConfig.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter.mapper; 7 | 8 | import org.mapstruct.MapperConfig; 9 | import org.mapstruct.ReportingPolicy; 10 | 11 | @MapperConfig( 12 | componentModel = "default", 13 | unmappedTargetPolicy = ReportingPolicy.ERROR, 14 | uses = {ExpressionFactory.class, FilterFactory.class, GeoToolsValueMappers.class, ExpressionMapper.class}) 15 | public class FilterMapperConfig {} 16 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module: -------------------------------------------------------------------------------- 1 | org.geotools.jackson.databind.geojson.GeoToolsGeoJsonModule 2 | org.geotools.jackson.databind.filter.GeoToolsFilterModule 3 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/filter/GeoToolsFilterModuleExpressionsJsonTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoToolsFilterModuleExpressionsJsonTest extends GeoToolsFilterModuleExpressionsTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/filter/GeoToolsFilterModuleExpressionsYamlTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoToolsFilterModuleExpressionsYamlTest extends GeoToolsFilterModuleExpressionsTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newYAMLObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/filter/GeoToolsFilterModuleFiltersJsonTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoToolsFilterModuleFiltersJsonTest extends GeoToolsFilterModuleFiltersTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/filter/GeoToolsFilterModuleFiltersYamlTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoToolsFilterModuleFiltersYamlTest extends GeoToolsFilterModuleFiltersTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newYAMLObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/filter/model/TestDto.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.filter.model; 7 | 8 | import java.util.Date; 9 | import lombok.AllArgsConstructor; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.NoArgsConstructor; 13 | 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @EqualsAndHashCode 18 | public class TestDto { 19 | private String s; 20 | private Integer i; 21 | private Date d; 22 | } 23 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/geojson/GeoToolsGeoJsonModuleJsonTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.geojson; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoToolsGeoJsonModuleJsonTest extends GeoToolsGeoJsonModuleTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/java/org/geotools/jackson/databind/geojson/GeoToolsGeoJsonModuleYamlTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.jackson.databind.geojson; 7 | 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | import org.geotools.jackson.databind.util.ObjectMapperUtil; 10 | 11 | /** 12 | * @since 1.0 13 | */ 14 | class GeoToolsGeoJsonModuleYamlTest extends GeoToolsGeoJsonModuleTest { 15 | 16 | protected @Override ObjectMapper newObjectMapper() { 17 | return ObjectMapperUtil.newObjectMapper(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/geotools/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.catalog 6 | gs-cloud-catalog 7 | ${revision} 8 | 9 | org.geoserver.cloud.catalog.jackson 10 | gs-cloud-catalog-jackson 11 | pom 12 | Catalog and Config Jackson Bindings 13 | 14 | geotools 15 | geoserver 16 | starter 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.jackson.GeoToolsJacksonBindingsAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.jackson.GeoServerJacksonBindingsAutoConfiguration 4 | -------------------------------------------------------------------------------- /src/catalog/jackson-bindings/starter/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/main/java/org/geoserver/catalog/plugin/forwarding/ForwardingMapRepository.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.catalog.plugin.forwarding; 7 | 8 | import org.geoserver.catalog.MapInfo; 9 | import org.geoserver.catalog.plugin.CatalogInfoRepository.MapRepository; 10 | 11 | /** 12 | * A decorator for {@link MapRepository} that forwards all method calls to an underlying repository. 13 | * 14 | * @since 1.0 15 | */ 16 | public class ForwardingMapRepository extends ForwardingCatalogRepository 17 | implements MapRepository { 18 | 19 | public ForwardingMapRepository(MapRepository subject) { 20 | super(subject); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/main/java/org/geoserver/catalog/plugin/rules/DefaultLayerGroupInfoRules.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.catalog.plugin.rules; 7 | 8 | import org.geoserver.catalog.Catalog; 9 | import org.geoserver.catalog.LayerGroupInfo; 10 | 11 | /** Encapsulates default {@link Catalog} business rules for {@link LayerGroupInfo} objects */ 12 | public class DefaultLayerGroupInfoRules implements CatalogInfoBusinessRules {} 13 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/main/java/org/geoserver/catalog/plugin/rules/DefaultLayerInfoRules.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.catalog.plugin.rules; 7 | 8 | import org.geoserver.catalog.Catalog; 9 | import org.geoserver.catalog.LayerInfo; 10 | 11 | /** Encapsulates default {@link Catalog} business rules for {@link LayerInfo} objects */ 12 | public class DefaultLayerInfoRules implements CatalogInfoBusinessRules {} 13 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/main/java/org/geoserver/catalog/plugin/rules/DefaultResourceInfoRules.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.catalog.plugin.rules; 7 | 8 | import org.geoserver.catalog.Catalog; 9 | import org.geoserver.catalog.ResourceInfo; 10 | 11 | /** Encapsulates default {@link Catalog} business rules for {@link ResourceInfo} objects */ 12 | public class DefaultResourceInfoRules implements CatalogInfoBusinessRules {} 13 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/main/java/org/geoserver/config/plugin/RepositoryGeoServerFacade.java: -------------------------------------------------------------------------------- 1 | /* (c) 2001 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.config.plugin; 7 | 8 | import org.geoserver.config.GeoServerFacade; 9 | import org.geoserver.config.SettingsInfo; 10 | 11 | public interface RepositoryGeoServerFacade extends GeoServerFacade { 12 | 13 | SettingsInfo getSettings(String id); 14 | 15 | void setRepository(ConfigRepository repository); 16 | } 17 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/main/java/org/geoserver/platform/config/UpdateSequence.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.platform.config; 7 | 8 | /** 9 | * @since 1.0 10 | */ 11 | public interface UpdateSequence { 12 | 13 | /** 14 | * @return the currently observed update sequence value 15 | */ 16 | long currValue(); 17 | 18 | long nextValue(); 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogPluginConformanceTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.catalog.plugin; 7 | 8 | import java.io.File; 9 | import org.geoserver.platform.GeoServerResourceLoader; 10 | 11 | class CatalogPluginConformanceTest extends CatalogConformanceTest { 12 | 13 | protected @Override CatalogPlugin createCatalog(File tmpFolder) { 14 | var catalog = new org.geoserver.catalog.plugin.CatalogPlugin(); 15 | catalog.setResourceLoader(new GeoServerResourceLoader(tmpFolder)); 16 | catalog.addListener(new CatalogPluginStyleResourcePersister(catalog)); 17 | return catalog; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/test/java/org/geoserver/config/impl/GeoServerImplConformanceTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.config.impl; 7 | 8 | import org.geoserver.catalog.impl.CatalogImpl; 9 | import org.geoserver.config.GeoServer; 10 | import org.geoserver.config.GeoServerConfigConformanceTest; 11 | 12 | /** {@link GeoServerConfigConformanceTest} for the traditional {@link GeoServerImpl} */ 13 | class GeoServerImplConformanceTest extends GeoServerConfigConformanceTest { 14 | 15 | protected @Override GeoServer createGeoServer() { 16 | GeoServerImpl gs = new GeoServerImpl(); 17 | gs.setCatalog(new CatalogImpl()); 18 | return gs; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/test/java/org/geoserver/config/plugin/GeoServerImplConformanceTest.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.config.plugin; 7 | 8 | import org.geoserver.catalog.plugin.CatalogPlugin; 9 | import org.geoserver.config.GeoServer; 10 | import org.geoserver.config.GeoServerConfigConformanceTest; 11 | 12 | /** 13 | * {@link GeoServerConfigConformanceTest} for {@link GeoServerImpl} with {@link 14 | * RepositoryGeoServerFacade} backed by {@link MemoryConfigRepository} and a {@link CatalogPlugin} 15 | */ 16 | class GeoServerImplConformanceTest extends GeoServerConfigConformanceTest { 17 | 18 | protected @Override GeoServer createGeoServer() { 19 | GeoServerImpl gs = new GeoServerImpl(); 20 | gs.setCatalog(new CatalogPlugin()); 21 | return gs; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/catalog/plugin/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/extensions/app-schema/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.appschema.AppSchemaAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/app-schema/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.appschema.AppSchemaAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/app-schema/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/extensions/core/src/test/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.test.ConditionalTestAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/core/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/extensions/css-styling/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.cssstyling.CssStylingAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/css-styling/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/extensions/importer/src/main/java/org/geoserver/cloud/autoconfigure/extensions/importer/ImporterConfigProperties.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | package org.geoserver.cloud.autoconfigure.extensions.importer; 6 | 7 | import lombok.Data; 8 | import org.springframework.boot.context.properties.ConfigurationProperties; 9 | 10 | /** 11 | * Configuration properties for the GeoServer Importer extension. 12 | */ 13 | @Data 14 | @ConfigurationProperties(prefix = ImporterConfigProperties.PREFIX) 15 | public class ImporterConfigProperties { 16 | 17 | public static final String PREFIX = "geoserver.extension.importer"; 18 | public static final boolean DEFAULT_ENABLED = false; 19 | 20 | /** 21 | * Enable/disable the Importer extension. 22 | */ 23 | private boolean enabled = DEFAULT_ENABLED; 24 | } 25 | -------------------------------------------------------------------------------- /src/extensions/importer/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.importer.ImporterAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/importer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.importer.ImporterAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/importer/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/extensions/input-formats/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.extensions 6 | gs-cloud-extensions 7 | ${revision} 8 | 9 | gs-cloud-extensions-input-formats 10 | pom 11 | GeoServer input data format extensions 12 | 13 | raster-formats 14 | vector-formats 15 | 16 | -------------------------------------------------------------------------------- /src/extensions/input-formats/raster-formats/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geotools.autoconfigure.rasterformats.GridFormatFactoryFilteringAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.cog.COGAutoConfiguration,\ 4 | org.geoserver.cloud.autoconfigure.cog.COGWebUIAutoConfiguration 5 | -------------------------------------------------------------------------------- /src/extensions/input-formats/raster-formats/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geotools.autoconfigure.rasterformats.GridFormatFactoryFilteringAutoConfiguration 2 | org.geoserver.cloud.autoconfigure.cog.COGAutoConfiguration 3 | org.geoserver.cloud.autoconfigure.cog.COGWebUIAutoConfiguration 4 | -------------------------------------------------------------------------------- /src/extensions/input-formats/vector-formats/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geotools.autoconfigure.vectorformats.DataAccessFactoryFilteringAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.vectorformats.graticule.GraticuleWebComponentsAutoConfiguration,\ 4 | org.geoserver.cloud.autoconfigure.vectorformats.geoparquet.GeoParquetWebComponentsAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/input-formats/vector-formats/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geotools.autoconfigure.vectorformats.DataAccessFactoryFilteringAutoConfiguration 2 | org.geoserver.cloud.autoconfigure.vectorformats.graticule.GraticuleWebComponentsAutoConfiguration 3 | org.geoserver.cloud.autoconfigure.vectorformats.geoparquet.GeoParquetWebComponentsAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/input-formats/vector-formats/src/test/java/org/geotools/autoconfigure/vectorformats/MockDataAccessFactory.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geotools.autoconfigure.vectorformats; 7 | 8 | /** 9 | * A simple mock class for testing the filtering system. 10 | * We don't implement DataAccessFactory due to incompatibility issues with the classpath. 11 | */ 12 | public class MockDataAccessFactory { 13 | private final String name; 14 | 15 | public MockDataAccessFactory(String name) { 16 | this.name = name; 17 | } 18 | 19 | public String getDisplayName() { 20 | return name; 21 | } 22 | 23 | public String getDescription() { 24 | return "Test factory: " + name; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/extensions/input-formats/vector-formats/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/java/org/geoserver/cloud/autoconfigure/extensions/inspire/gwc/InspireAutoConfigurationGwc.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | package org.geoserver.cloud.autoconfigure.extensions.inspire.gwc; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.boot.autoconfigure.AutoConfiguration; 9 | import org.springframework.context.annotation.Import; 10 | 11 | @AutoConfiguration 12 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 13 | @Import(InspireConfigurationGwc.class) 14 | @Slf4j(topic = "org.geoserver.cloud.autoconfigure.extensions.inspire.gwc") 15 | @ConditionalOnInspireGwc 16 | public class InspireAutoConfigurationGwc {} 17 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/java/org/geoserver/cloud/autoconfigure/extensions/inspire/wcs/InspireAutoConfigurationWcs.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | package org.geoserver.cloud.autoconfigure.extensions.inspire.wcs; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.boot.autoconfigure.AutoConfiguration; 9 | import org.springframework.context.annotation.Import; 10 | 11 | @AutoConfiguration 12 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 13 | @Import(InspireConfigurationWcs.class) 14 | @Slf4j(topic = "org.geoserver.cloud.autoconfigure.extensions.inspire.wcs") 15 | @ConditionalOnInspireWcs 16 | public class InspireAutoConfigurationWcs {} 17 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/java/org/geoserver/cloud/autoconfigure/extensions/inspire/webui/InspireAutoConfigurationWebUI.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | package org.geoserver.cloud.autoconfigure.extensions.inspire.webui; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.boot.autoconfigure.AutoConfiguration; 9 | import org.springframework.context.annotation.Import; 10 | 11 | @AutoConfiguration 12 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 13 | @Import(InspireConfigurationWebUI.class) 14 | @Slf4j(topic = "org.geoserver.cloud.autoconfigure.extensions.inspire.webui") 15 | @ConditionalOnInspireWebUI 16 | public class InspireAutoConfigurationWebUI {} 17 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/java/org/geoserver/cloud/autoconfigure/extensions/inspire/wfs/InspireAutoConfigurationWfs.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | package org.geoserver.cloud.autoconfigure.extensions.inspire.wfs; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.boot.autoconfigure.AutoConfiguration; 9 | import org.springframework.context.annotation.Import; 10 | 11 | @AutoConfiguration 12 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 13 | @Import(InspireConfigurationWfs.class) 14 | @Slf4j(topic = "org.geoserver.cloud.autoconfigure.extensions.inspire.wfs") 15 | @ConditionalOnInspireWfs 16 | public class InspireAutoConfigurationWfs {} 17 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/java/org/geoserver/cloud/autoconfigure/extensions/inspire/wms/InspireAutoConfigurationWms.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | package org.geoserver.cloud.autoconfigure.extensions.inspire.wms; 6 | 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.boot.autoconfigure.AutoConfiguration; 9 | import org.springframework.context.annotation.Import; 10 | 11 | @AutoConfiguration 12 | @SuppressWarnings("java:S1118") // Suppress SonarLint warning, constructor needs to be public 13 | @Import(InspireConfigurationWms.class) 14 | @Slf4j(topic = "org.geoserver.cloud.autoconfigure.extensions.inspire.wms") 15 | @ConditionalOnInspireWms 16 | public class InspireAutoConfigurationWms {} 17 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.inspire.InspireAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.extensions.inspire.webui.InspireAutoConfigurationWebUI,\ 4 | org.geoserver.cloud.autoconfigure.extensions.inspire.gwc.InspireAutoConfigurationGwc,\ 5 | org.geoserver.cloud.autoconfigure.extensions.inspire.wfs.InspireAutoConfigurationWfs,\ 6 | org.geoserver.cloud.autoconfigure.extensions.inspire.wms.InspireAutoConfigurationWms,\ 7 | org.geoserver.cloud.autoconfigure.extensions.inspire.wcs.InspireAutoConfigurationWcs 8 | -------------------------------------------------------------------------------- /src/extensions/inspire/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.inspire.InspireAutoConfiguration 2 | org.geoserver.cloud.autoconfigure.extensions.inspire.webui.InspireAutoConfigurationWebUI 3 | org.geoserver.cloud.autoconfigure.extensions.inspire.gwc.InspireAutoConfigurationGwc 4 | org.geoserver.cloud.autoconfigure.extensions.inspire.wfs.InspireAutoConfigurationWfs 5 | org.geoserver.cloud.autoconfigure.extensions.inspire.wms.InspireAutoConfigurationWms 6 | org.geoserver.cloud.autoconfigure.extensions.inspire.wcs.InspireAutoConfigurationWcs -------------------------------------------------------------------------------- /src/extensions/mapbox-styling/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.mapboxstyling.MapBoxStylingAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/mapbox-styling/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/extensions/ogcapi/core/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/extensions/ogcapi/features/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module: -------------------------------------------------------------------------------- 1 | org.geoserver.jackson.databind.ogcapi.features.OgcApiFeaturesConformancesModule -------------------------------------------------------------------------------- /src/extensions/ogcapi/features/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.ogcapi.features.OgcApiFeaturesAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.extensions.ogcapi.features.OgcApiFeaturesConformancesModuleAutoConfiguration 4 | -------------------------------------------------------------------------------- /src/extensions/ogcapi/features/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.ogcapi.features.OgcApiFeaturesAutoConfiguration 2 | org.geoserver.cloud.autoconfigure.extensions.ogcapi.features.OgcApiFeaturesConformancesModuleAutoConfiguration 3 | -------------------------------------------------------------------------------- /src/extensions/ogcapi/features/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/extensions/ogcapi/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.extensions 6 | gs-cloud-extensions 7 | ${revision} 8 | 9 | gs-cloud-extensions-ogcapi 10 | pom 11 | GeoServer OGC API extensions 12 | 13 | core 14 | features 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/extensions/output-formats/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Cloud Output Format Extensions 2 | 3 | This directory contains extensions for additional output formats in GeoServer Cloud: 4 | 5 | ## Vector Tiles 6 | 7 | The Vector Tiles extension adds support for various vector tile formats including: 8 | - Mapbox Vector Tiles 9 | - GeoJSON Vector Tiles 10 | - TopoJSON Vector Tiles 11 | 12 | Vector tiles are a way to deliver geographic data to a browser or other client application in small chunks that can be efficiently rendered and styled on the client side. 13 | 14 | ## Future Extensions 15 | 16 | Additional output format extensions may be added here in the future, such as: 17 | - KML 18 | - CSV 19 | - GeoPackage output 20 | - Additional vector and raster output formats -------------------------------------------------------------------------------- /src/extensions/output-formats/dxf/src/main/java/org/geoserver/cloud/autoconfigure/extensions/dxf/DxfConfigProperties.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.extensions.dxf; 7 | 8 | import lombok.Data; 9 | import org.springframework.boot.context.properties.ConfigurationProperties; 10 | 11 | /** 12 | * Configuration properties for the DXF extension. 13 | * 14 | *

15 | * These properties control whether the DXF extension is enabled. 16 | * 17 | * @since 2.27.0 18 | */ 19 | @Data 20 | @ConfigurationProperties(prefix = "geoserver.extension.dxf") 21 | public class DxfConfigProperties { 22 | 23 | /** 24 | * Whether DXF output format support is enabled. 25 | * Default is true. 26 | */ 27 | private boolean enabled = true; 28 | } 29 | -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/ConditionalOnFlatGeobuf.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/ConditionalOnFlatGeobuf.class -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufAutoConfiguration$FlatGeobufOutputFormatConfiguration.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufAutoConfiguration$FlatGeobufOutputFormatConfiguration.class -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufAutoConfiguration.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufAutoConfiguration.class -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufConfigProperties.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/src/extensions/output-formats/flatgeobuf/bin/src/main/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufConfigProperties.class -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.flatgeobuf.FlatGeobufAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.flatgeobuf.FlatGeobufAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/test/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufAutoConfigurationTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/src/extensions/output-formats/flatgeobuf/bin/src/test/java/org/geoserver/cloud/autoconfigure/extensions/flatgeobuf/FlatGeobufAutoConfigurationTest.class -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/bin/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.flatgeobuf.FlatGeobufAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.flatgeobuf.FlatGeobufAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/output-formats/flatgeobuf/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/extensions/output-formats/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.extensions 6 | gs-cloud-extensions 7 | ${revision} 8 | 9 | gs-cloud-extensions-output-formats 10 | pom 11 | GeoServer output format extensions 12 | 13 | vector-tiles 14 | flatgeobuf 15 | dxf 16 | 17 | -------------------------------------------------------------------------------- /src/extensions/output-formats/vector-tiles/src/main/java/org/geoserver/cloud/autoconfigure/extensions/vectortiles/GeoJsonConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.extensions.vectortiles; 7 | 8 | import org.geoserver.cloud.config.factory.ImportFilteredResource; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | /** 12 | * Configuration for GeoJSON Vector Tiles format. 13 | * 14 | * @since 2.27.0 15 | */ 16 | @ConditionalOnVectorTilesGeoJson 17 | @ImportFilteredResource( 18 | "jar:gs-vectortiles-.*!/applicationContext.xml#name=(wmsGeoJsonBuilderFactory|wmsGeoJsonMapOutputFormat)") 19 | @Configuration 20 | public class GeoJsonConfiguration {} 21 | -------------------------------------------------------------------------------- /src/extensions/output-formats/vector-tiles/src/main/java/org/geoserver/cloud/autoconfigure/extensions/vectortiles/MapBoxConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.extensions.vectortiles; 7 | 8 | import org.geoserver.cloud.config.factory.ImportFilteredResource; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | /** 12 | * Configuration for MapBox Vector Tiles format. 13 | * 14 | * @since 2.27.0 15 | */ 16 | @ConditionalOnVectorTilesMapBox 17 | @ImportFilteredResource( 18 | "jar:gs-vectortiles-.*!/applicationContext.xml#name=(wmsMapBoxBuilderFactory|wmsMapBoxMapOutputFormat)") 19 | @Configuration 20 | public class MapBoxConfiguration {} 21 | -------------------------------------------------------------------------------- /src/extensions/output-formats/vector-tiles/src/main/java/org/geoserver/cloud/autoconfigure/extensions/vectortiles/TopoJsonConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.extensions.vectortiles; 7 | 8 | import org.geoserver.cloud.config.factory.ImportFilteredResource; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | /** 12 | * Configuration for TopoJSON Vector Tiles format. 13 | * 14 | * @since 2.27.0 15 | */ 16 | @ConditionalOnVectorTilesTopoJson 17 | @ImportFilteredResource( 18 | "jar:gs-vectortiles-.*!/applicationContext.xml#name=(wmsTopoJSONBuilderFactory|wmsTopoJSONMapOutputFormat)") 19 | @Configuration 20 | public class TopoJsonConfiguration {} 21 | -------------------------------------------------------------------------------- /src/extensions/output-formats/vector-tiles/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.vectortiles.VectorTilesAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/output-formats/vector-tiles/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/extensions/security/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Security Extensions 2 | 3 | This module provides auto-configuration for various GeoServer security extensions. 4 | 5 | ## Extensions 6 | 7 | The following security extensions are available: 8 | 9 | - **GeoNode OAuth2**: Authentication with GeoNode OAuth2 provider 10 | 11 | ## Configuration 12 | 13 | Each security extension has its own configuration properties. See the individual extension READMEs for details: 14 | 15 | - [GeoNode OAuth2](geonode-oauth2/README.md) 16 | 17 | ## Implementation Details 18 | 19 | The security extensions use Spring Boot's auto-configuration mechanism to conditionally enable security features in GeoServer Cloud. 20 | 21 | Each extension follows the same pattern: 22 | - Auto-configuration class that imports the necessary beans 23 | - Configuration properties class with the extension's settings 24 | - Conditional annotations to enable/disable the extension -------------------------------------------------------------------------------- /src/extensions/security/auth-key/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.authkey.AuthKeyAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/auth-key/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.security.authkey.AuthKeyAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/auth-key/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/extensions/security/environment-admin-auth/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.environmentadmin.EnvironmentAdminAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/environment-admin-auth/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.security.environmentadmin.EnvironmentAdminAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/environment-admin-auth/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/main/java/org/geoserver/cloud/security/gateway/GatewayPreAuthenticationConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2023 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.security.gateway; 7 | 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | @Configuration 12 | public class GatewayPreAuthenticationConfiguration { 13 | 14 | @Bean 15 | GatewayPreAuthenticationProvider gatewayPreAuthenticationProvider() { 16 | return new GatewayPreAuthenticationProvider(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/main/java/org/geoserver/cloud/security/gateway/GatewayPreAuthenticationFilterConfig.java: -------------------------------------------------------------------------------- 1 | /* (c) 2023 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.security.gateway; 7 | 8 | import org.geoserver.security.config.RequestHeaderAuthenticationFilterConfig; 9 | 10 | @SuppressWarnings("serial") 11 | public class GatewayPreAuthenticationFilterConfig extends RequestHeaderAuthenticationFilterConfig { 12 | 13 | public GatewayPreAuthenticationFilterConfig() { 14 | setPrincipalHeaderAttribute("sec-username"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/main/java/org/geoserver/cloud/security/gateway/PrioritizableLoginFormInfo.java: -------------------------------------------------------------------------------- 1 | /* (c) 2023 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.security.gateway; 7 | 8 | import lombok.Getter; 9 | import lombok.Setter; 10 | import org.geoserver.platform.ExtensionPriority; 11 | import org.geoserver.web.LoginFormInfo; 12 | 13 | /** 14 | * @since 1.2 15 | */ 16 | @SuppressWarnings("serial") 17 | public class PrioritizableLoginFormInfo extends LoginFormInfo implements ExtensionPriority { 18 | 19 | private @Getter @Setter int priority = ExtensionPriority.LOWEST; 20 | } 21 | -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.gateway.sharedauth.GatewaySharedAuthenticationAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.extensions.security.gateway.preauth.GatewayPreAuthenticationAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.security.gateway.sharedauth.GatewaySharedAuthenticationAutoConfiguration 2 | org.geoserver.cloud.autoconfigure.extensions.security.gateway.preauth.GatewayPreAuthenticationAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/main/resources/org/geoserver/cloud/autoconfigure/authzn/oidc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoserver/geoserver-cloud/8d434f7e43fdb22fe528380a57df59eba7d3ca40/src/extensions/security/gateway-shared-auth/src/main/resources/org/geoserver/cloud/autoconfigure/authzn/oidc.png -------------------------------------------------------------------------------- /src/extensions/security/gateway-shared-auth/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/extensions/security/geonode-oauth2/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.geonode.GeoNodeOAuth2AutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.extensions.security.geonode.GeoNodeOAuth2WebUIAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/geonode-oauth2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.security.geonode.GeoNodeOAuth2AutoConfiguration 2 | org.geoserver.cloud.autoconfigure.extensions.security.geonode.GeoNodeOAuth2WebUIAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/geoserver-acl/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.acl.AclAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/geoserver-acl/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | geoserver: 2 | extension: 3 | security: 4 | acl: 5 | enabled: true 6 | 7 | # Legacy property format for backward compatibility 8 | security: 9 | acl: 10 | enabled: ${geoserver.extension.security.acl.enabled} -------------------------------------------------------------------------------- /src/extensions/security/geoserver-acl/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/extensions/security/jdbc/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.jdbc.JDBCSecurityAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/jdbc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.security.jdbc.JDBCSecurityAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/jdbc/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/extensions/security/ldap/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.extensions.security.ldap.LDAPSecurityAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/ldap/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.extensions.security.ldap.LDAPSecurityAutoConfiguration -------------------------------------------------------------------------------- /src/extensions/security/ldap/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/extensions/security/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.extensions 6 | gs-cloud-extensions 7 | ${revision} 8 | 9 | gs-cloud-extensions-security 10 | pom 11 | GeoServer security extensions 12 | 13 | auth-key 14 | environment-admin-auth 15 | gateway-shared-auth 16 | geonode-oauth2 17 | geoserver-acl 18 | jdbc 19 | ldap 20 | 21 | -------------------------------------------------------------------------------- /src/gwc/autoconfigure/src/main/resources/org/geoserver/gwc/web/wms-integration-disabled.css: -------------------------------------------------------------------------------- 1 | /* direct-WMS integration is disabled, hide the related form elements */ 2 | #enableWMSIntegration,#requireTiledParameter{ 3 | display: none; 4 | } 5 | #page-pane form ul li label[for="enableWMSIntegration"]{ 6 | display: none; 7 | } 8 | #page-pane form ul li label[for="requireTiledParameter"]{ 9 | display: none; 10 | } -------------------------------------------------------------------------------- /src/gwc/autoconfigure/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.bus.enabled: false 7 | 8 | logging: 9 | level: 10 | ROOT: WARN 11 | -------------------------------------------------------------------------------- /src/gwc/autoconfigure/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger [%X{instance-id}] %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/gwc/blobstores/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger [%X{instance-id}] %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/gwc/core/src/main/java/org/geoserver/cloud/gwc/config/core/DisquotaRestConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gwc.config.core; 7 | 8 | import org.geowebcache.diskquota.rest.controller.DiskQuotaController; 9 | import org.springframework.context.annotation.ComponentScan; 10 | import org.springframework.context.annotation.Configuration; 11 | 12 | /** 13 | * Enables disk quota REST API if both {@link ConditionalOnDiskQuotaEnabled disk-quota} and {@link 14 | * ConditionalOnGeoWebCacheRestConfigEnabled res-config} are enabled. 15 | */ 16 | @Configuration 17 | @ComponentScan(basePackageClasses = DiskQuotaController.class) 18 | public class DisquotaRestConfiguration {} 19 | -------------------------------------------------------------------------------- /src/gwc/core/src/main/java/org/geoserver/cloud/gwc/event/ConfigChangeEvent.java: -------------------------------------------------------------------------------- 1 | /* (c) 2025 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gwc.event; 7 | 8 | @SuppressWarnings("serial") 9 | public class ConfigChangeEvent extends GeoWebCacheEvent { 10 | 11 | public static final String OBJECT_ID = "gwcConfig"; 12 | 13 | public ConfigChangeEvent(Object source) { 14 | super(source, Type.MODIFIED); 15 | } 16 | 17 | @Override 18 | protected String getObjectId() { 19 | return OBJECT_ID; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/gwc/core/src/main/java/org/geoserver/cloud/gwc/repository/ForwardingTileLayerCatalog.java: -------------------------------------------------------------------------------- 1 | /* (c) 2024 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gwc.repository; 7 | 8 | import lombok.Getter; 9 | import lombok.NonNull; 10 | import lombok.RequiredArgsConstructor; 11 | import lombok.experimental.Delegate; 12 | import org.geoserver.gwc.layer.TileLayerCatalog; 13 | 14 | /** Base class for {@link TileLayerCatalog} decorators */ 15 | @RequiredArgsConstructor 16 | public abstract class ForwardingTileLayerCatalog implements TileLayerCatalog { 17 | 18 | /** Note all {@link TileLayerCatalog} methods are delegated to this subject */ 19 | @Getter 20 | @Delegate 21 | @NonNull 22 | protected final TileLayerCatalog delegate; 23 | } 24 | -------------------------------------------------------------------------------- /src/gwc/core/src/main/java/org/geoserver/cloud/gwc/repository/ForwardingTileLayerConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2024 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gwc.repository; 7 | 8 | import lombok.Getter; 9 | import lombok.NonNull; 10 | import lombok.RequiredArgsConstructor; 11 | import lombok.experimental.Delegate; 12 | import org.geowebcache.config.TileLayerConfiguration; 13 | 14 | /** Base class for {@link TileLayerConfiguration} decorators */ 15 | @RequiredArgsConstructor 16 | public class ForwardingTileLayerConfiguration implements TileLayerConfiguration { 17 | 18 | /** Note all {@link TileLayerConfiguration} methods are delegated to this subject */ 19 | @Getter 20 | @Delegate 21 | @NonNull 22 | private final TileLayerConfiguration subject; 23 | } 24 | -------------------------------------------------------------------------------- /src/gwc/core/src/main/resources/org/geoserver/gwc/web/wms-integration-disabled.css: -------------------------------------------------------------------------------- 1 | /* direct-WMS integration is disabled, hide the related form elements */ 2 | #enableWMSIntegration,#requireTiledParameter{ 3 | display: none; 4 | } 5 | #page-pane form ul li label[for="enableWMSIntegration"]{ 6 | display: none; 7 | } 8 | #page-pane form ul li label[for="requireTiledParameter"]{ 9 | display: none; 10 | } -------------------------------------------------------------------------------- /src/gwc/core/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | 7 | logging: 8 | level: 9 | ROOT: WARN 10 | 11 | -------------------------------------------------------------------------------- /src/gwc/core/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger [%X{instance-id}] %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/gwc/integration-bus/src/main/java/org/geoserver/cloud/gwc/bus/RemoteConfigChangeEvent.java: -------------------------------------------------------------------------------- 1 | /* (c) 2024 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.gwc.bus; 7 | 8 | import lombok.EqualsAndHashCode; 9 | import lombok.NoArgsConstructor; 10 | import lombok.NonNull; 11 | import org.geoserver.cloud.gwc.event.ConfigChangeEvent; 12 | 13 | /** 14 | * @since 1.9 15 | */ 16 | @NoArgsConstructor 17 | @EqualsAndHashCode(callSuper = true) 18 | @SuppressWarnings("serial") 19 | public class RemoteConfigChangeEvent extends RemoteGeoWebCacheEvent { 20 | 21 | public RemoteConfigChangeEvent(Object source, @NonNull String originService) { 22 | super(source, originService); 23 | } 24 | 25 | protected @Override String getObjectId() { 26 | return ConfigChangeEvent.OBJECT_ID; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/gwc/starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud.gwc 6 | gwc-cloud 7 | ${revision} 8 | 9 | gwc-cloud-spring-boot-starter 10 | jar 11 | 12 | 13 | org.geoserver.cloud.gwc 14 | gwc-cloud-spring-boot-autoconfigure 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/integration-tests/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud 6 | gs-cloud 7 | ${revision} 8 | 9 | integration-tests 10 | pom 11 | Integration Tests 12 | 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-test 17 | test 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/library/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.geoserver.cloud 6 | gs-cloud 7 | ${revision} 8 | 9 | gs-cloud-lib 10 | pom 11 | Misc libs 12 | 13 | spring-factory 14 | spring-boot-simplejndi 15 | 16 | 17 | 18 | org.springframework.boot 19 | spring-boot-starter-test 20 | test 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourceConfiguration.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.config.jndi; 7 | 8 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | 12 | /** 13 | * @since 1.0 14 | */ 15 | @Configuration 16 | @EnableConfigurationProperties(JNDIDataSourcesConfigurationProperties.class) 17 | public class JNDIDataSourceConfiguration { 18 | @Bean 19 | JNDIInitializer jndiInitializer(JNDIDataSourcesConfigurationProperties config) { 20 | return new JNDIInitializer(config); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourcesConfigurationProperties.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.config.jndi; 7 | 8 | import java.util.Map; 9 | import java.util.TreeMap; 10 | import lombok.Data; 11 | import org.springframework.boot.context.properties.ConfigurationProperties; 12 | 13 | /** 14 | * @since 1.0 15 | */ 16 | @Data 17 | @ConfigurationProperties(value = "jndi") 18 | public class JNDIDataSourcesConfigurationProperties { 19 | 20 | private Map datasources = new TreeMap<>(); 21 | } 22 | -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDatasourceConfig.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.config.jndi; 7 | 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; 11 | 12 | /** 13 | * @since 1.0 14 | */ 15 | @Data 16 | @EqualsAndHashCode(callSuper = true) 17 | public class JNDIDatasourceConfig extends DataSourceProperties { 18 | boolean enabled = true; 19 | boolean waitForIt = true; 20 | int waitTimeout = 60; 21 | 22 | int minimumIdle = 2; 23 | int maximumPoolSize = 10; 24 | long connectionTimeout = 250; // ms 25 | long idleTimeout = 60_000; // ms 26 | 27 | /** 28 | * @since 1.3 29 | */ 30 | String schema; 31 | } 32 | -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/jndi/SimpleNamingContextFactory.java: -------------------------------------------------------------------------------- 1 | /* (c) 2022 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.jndi; 7 | 8 | import java.util.Hashtable; 9 | import javax.naming.Context; 10 | import javax.naming.NamingException; 11 | import javax.naming.spi.InitialContextFactory; 12 | 13 | /** 14 | * Simple implementation of a JNDI naming context factory. 15 | * 16 | * @see SimpleNamingContext 17 | */ 18 | public class SimpleNamingContextFactory implements InitialContextFactory { 19 | 20 | private SimpleNamingContext initialContext = new SimpleNamingContext(); 21 | 22 | @Override 23 | public Context getInitialContext(Hashtable environment) throws NamingException { 24 | return initialContext; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Initializers 2 | org.springframework.context.ApplicationContextInitializer=\ 3 | org.geoserver.cloud.autoconfigure.jndi.SimpleJNDIStaticContextInitializer 4 | 5 | # Auto Configure 6 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 7 | org.geoserver.cloud.autoconfigure.jndi.JNDIDataSourceAutoConfiguration -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | 2 | 3 | jndi: 4 | datasources: 5 | # the data source names (i.e. ds1, ds2) will be bound as java:comp/env/jdbc/ds1 and java:comp/env/jdbc/ds2: 6 | ds1: 7 | enabled: true 8 | wait-for-it: true 9 | wait-timeout: 60 10 | url: jdbc:h2:mem:ds1 11 | username: sa 12 | password: sa 13 | connection-timeout: 250 14 | idle-timeout: 60000 15 | ds2: 16 | url: jdbc:h2:mem:ds2 17 | username: sa 18 | password: sa 19 | connection-timeout: 250 20 | idle-timeout: 60000 -------------------------------------------------------------------------------- /src/library/spring-boot-simplejndi/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/library/spring-factory/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.geoserver.cloud.autoconfigure.factory.FilteringXmlBeanDefinitionReaderAutoConfiguration -------------------------------------------------------------------------------- /src/library/spring-factory/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/lombok.config: -------------------------------------------------------------------------------- 1 | # This tells lombok this directory is the root, 2 | # no need to look somewhere else for java code. 3 | config.stopBubbling = true 4 | # This will add the @lombok.Generated annotation 5 | # to all the code generated by Lombok, 6 | # so it can be excluded from coverage by jacoco. 7 | lombok.addLombokGeneratedAnnotation = true 8 | 9 | -------------------------------------------------------------------------------- /src/starters/catalog-backend/README.md: -------------------------------------------------------------------------------- 1 | # gs-cloud-starter-catalog-backend 2 | 3 | Spring Boot starter module including all known 4 | catalog backend autoconfigurations. 5 | -------------------------------------------------------------------------------- /src/starters/observability-spring-boot-3/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.autoconfigure.logging.accesslog.AccessLogServletAutoConfiguration 2 | org.geoserver.cloud.autoconfigure.logging.accesslog.webflux.AccessLogWebFluxAutoConfiguration 3 | org.geoserver.cloud.autoconfigure.logging.gateway.GatewayMdcAutoConfiguration 4 | org.geoserver.cloud.autoconfigure.logging.mdc.LoggingMDCServletAutoConfiguration 5 | org.geoserver.cloud.autoconfigure.logging.mdc.webflux.LoggingMDCWebFluxAutoConfiguration 6 | org.geoserver.cloud.autoconfigure.logging.mdc.GeoServerDispatcherMDCAutoConfiguration -------------------------------------------------------------------------------- /src/starters/observability-spring-boot-3/src/main/resources/logback-spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/starters/observability-spring-boot-3/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | logging: 2 | mdc: 3 | include: 4 | user: 5 | id: false 6 | roles: false 7 | application: 8 | name: true 9 | version: true 10 | instance-id: true 11 | active-profiles: true 12 | http: 13 | id: true 14 | method: true 15 | url: true 16 | query-string: false 17 | parameters: false 18 | headers: false 19 | headers-pattern: ".*" 20 | cookies: false 21 | remote-addr: false 22 | remote-host: false 23 | session-id: false 24 | geoserver: 25 | ows: 26 | service-name: true 27 | service-version: true 28 | service-format: true 29 | operation-name: true -------------------------------------------------------------------------------- /src/starters/observability-spring-boot-3/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/starters/observability/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.autoconfigure.logging.accesslog.AccessLogServletAutoConfiguration,\ 3 | org.geoserver.cloud.autoconfigure.logging.mdc.LoggingMDCServletAutoConfiguration,\ 4 | org.geoserver.cloud.autoconfigure.logging.mdc.GeoServerDispatcherMDCAutoConfiguration -------------------------------------------------------------------------------- /src/starters/observability/src/main/resources/logback-spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/starters/observability/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | logging: 2 | mdc: 3 | include: 4 | user: 5 | id: false 6 | roles: false 7 | application: 8 | name: true 9 | version: true 10 | instance-id: true 11 | active-profiles: true 12 | http: 13 | id: true 14 | method: true 15 | url: true 16 | query-string: false 17 | parameters: false 18 | headers: false 19 | headers-pattern: ".*" 20 | cookies: false 21 | remote-addr: false 22 | remote-host: false 23 | session-id: false 24 | geoserver: 25 | ows: 26 | service-name: true 27 | service-version: true 28 | service-format: true 29 | operation-name: true -------------------------------------------------------------------------------- /src/starters/observability/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/starters/spring-boot/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Spring-boot starter 2 | 3 | This is a `jar` module providing additional spring-boot-starter configuration classes. 4 | 5 | - `org.geoserver.cloud.config.factory.FilteringXmlBeanDefinitionReader` allows to 6 | cherry pick which Spring beans to load from specific jar dependencies, using regular expressions. Especially 7 | useful to avoid redefining GeoServer's `applicationContext.xml` configuration files as Java configurations, 8 | but still being able of selecting exactly which beans to load to the application context based 9 | on specific cloud module requirements (i.e. through spring-boot autoconfigurations). 10 | 11 | ## Usage 12 | 13 | Add the following dependency to each micro-service `pom.xml`: 14 | 15 | ``` 16 | 17 | org.geoserver.cloud 18 | gs-cloud-spring-boot-starter 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /src/starters/spring-boot/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.geoserver.cloud.app.StartupLoggerAutoConfiguration,\ 3 | org.geoserver.cloud.app.ServiceIdFilterAutoConfiguration,\ 4 | org.geoserver.cloud.app.ExitOnApplicationEventAutoConfiguration -------------------------------------------------------------------------------- /src/starters/spring-boot/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | allow-circular-references: true 7 | autoconfigure: 8 | exclude: 9 | - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 10 | 11 | logging: 12 | level: 13 | root: WARN 14 | -------------------------------------------------------------------------------- /src/starters/spring-boot/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/starters/spring-boot3/README.md: -------------------------------------------------------------------------------- 1 | # GeoServer Cloud Spring Boot 3 Starter 2 | 3 | Spring Boot 3 starter module for GeoServer Cloud applications. 4 | 5 | This starter provides common configurations and auto-configurations for GeoServer Cloud applications running on Spring Boot 3.x. 6 | 7 | ## Features 8 | 9 | - Application startup logging 10 | - Service ID filter configuration for web applications 11 | - Support for standard GeoServer Cloud bootstrap profiles 12 | - Jakarta EE compatibility (vs javax.* in Spring Boot 2.x) 13 | - Spring Boot 3.2.x compatibility 14 | - Automatic reactor context propagation 15 | 16 | ## Usage 17 | 18 | Add this starter as a dependency to your Spring Boot 3 application: 19 | 20 | ```xml 21 | 22 | org.geoserver.cloud 23 | gs-cloud-spring-boot3-starter 24 | 25 | ``` -------------------------------------------------------------------------------- /src/starters/spring-boot3/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.geoserver.cloud.app.StartupLoggerAutoConfiguration 2 | org.geoserver.cloud.app.ServiceIdFilterAutoConfiguration 3 | org.geoserver.cloud.app.ExitOnApplicationEventAutoConfiguration 4 | org.geoserver.cloud.app.ReactorContextPropagationAutoConfiguration -------------------------------------------------------------------------------- /src/starters/webmvc/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Initializers 2 | org.springframework.context.ApplicationContextInitializer=\ 3 | org.geoserver.cloud.autoconfigure.context.GeoServerContextInitializer 4 | 5 | # Auto Configure 6 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 7 | org.geoserver.cloud.autoconfigure.core.GeoServerWebMvcMainAutoConfiguration,\ 8 | org.geoserver.cloud.autoconfigure.servlet.GeoServerServletContextAutoConfiguration,\ 9 | org.geoserver.cloud.autoconfigure.servlet.GeoServerServletContextAutoConfiguration$Disabled -------------------------------------------------------------------------------- /src/starters/webmvc/src/test/java/org/geoserver/cloud/autoconfigure/servlet/DataDirectoryTempSupport.java: -------------------------------------------------------------------------------- 1 | /* (c) 2020 Open Source Geospatial Foundation - all rights reserved 2 | * This code is licensed under the GPL 2.0 license, available at the root 3 | * application directory. 4 | */ 5 | 6 | package org.geoserver.cloud.autoconfigure.servlet; 7 | 8 | import java.nio.file.Path; 9 | import org.junit.jupiter.api.io.TempDir; 10 | import org.springframework.test.context.DynamicPropertyRegistry; 11 | import org.springframework.test.context.DynamicPropertySource; 12 | 13 | public class DataDirectoryTempSupport { 14 | 15 | @TempDir 16 | protected static Path tempDataDir; 17 | 18 | @DynamicPropertySource 19 | static void setDynamicProperties(DynamicPropertyRegistry registry) { 20 | registry.add( 21 | "geoserver.backend.data-directory.location", 22 | () -> tempDataDir.toAbsolutePath().toString()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/starters/webmvc/src/test/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | banner-mode: off 4 | allow-bean-definition-overriding: true 5 | allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization 6 | cloud.config.enabled: false 7 | cloud.config.discovery.enabled: false 8 | eureka.client.enabled: false 9 | 10 | geoserver: 11 | backend: 12 | data-directory: 13 | enabled: true 14 | location: # configured by TestConfiguration.java 15 | 16 | logging: 17 | level: 18 | ROOT: WARN 19 | -------------------------------------------------------------------------------- /src/starters/webmvc/src/test/resources/logback-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | --------------------------------------------------------------------------------