diff --git a/README.md b/README.md index a979241c6..7074a3086 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Only a curated list of the [vast amount](http://geoserver.org/release/stable/) o - cog - importer - imagepyramid +- graticules Advanced ACL system is available through the project [GeoServer ACL](https://github.com/geoserver/geoserver-acl) which offers the same capacities as GeoFence. diff --git a/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/ExtensionsAutoConfiguration.java b/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/ExtensionsAutoConfiguration.java index ef2bd3dab..3ca3a79b3 100644 --- a/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/ExtensionsAutoConfiguration.java +++ b/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/ExtensionsAutoConfiguration.java @@ -4,12 +4,14 @@ */ package org.geoserver.cloud.autoconfigure.web.extension; +import org.geoserver.cloud.autoconfigure.web.extension.graticule.GraticuleAutoConfiguration; import org.geoserver.cloud.autoconfigure.web.extension.importer.ImporterAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import({ - ImporterAutoConfiguration.class // + ImporterAutoConfiguration.class, // + GraticuleAutoConfiguration.class }) public class ExtensionsAutoConfiguration {} diff --git a/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/graticule/GraticuleAutoConfiguration.java b/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/graticule/GraticuleAutoConfiguration.java new file mode 100644 index 000000000..f6aed1b0c --- /dev/null +++ b/src/apps/geoserver/webui/src/main/java/org/geoserver/cloud/autoconfigure/web/extension/graticule/GraticuleAutoConfiguration.java @@ -0,0 +1,19 @@ +/* + * (c) 2024 Open Source Geospatial Foundation - all rights reserved This code is licensed under the + * GPL 2.0 license, available at the root application directory. + */ +package org.geoserver.cloud.autoconfigure.web.extension.graticule; + +import org.geoserver.cloud.config.factory.FilteringXmlBeanDefinitionReader; +import org.geotools.data.graticule.GraticuleDataStoreFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; + +/** Auto configuration to enable the graticule customized store panel. */ +@Configuration +@ConditionalOnClass(GraticuleDataStoreFactory.class) +@ImportResource( // + reader = FilteringXmlBeanDefinitionReader.class, // + locations = {"jar:gs-graticule-.*!/applicationContext.xml"}) +public class GraticuleAutoConfiguration {} diff --git a/src/apps/geoserver/webui/src/test/java/org/geoserver/cloud/autoconfigure/web/extension/graticule/GraticuleAutoConfigurationTest.java b/src/apps/geoserver/webui/src/test/java/org/geoserver/cloud/autoconfigure/web/extension/graticule/GraticuleAutoConfigurationTest.java new file mode 100644 index 000000000..7e382746a --- /dev/null +++ b/src/apps/geoserver/webui/src/test/java/org/geoserver/cloud/autoconfigure/web/extension/graticule/GraticuleAutoConfigurationTest.java @@ -0,0 +1,46 @@ +/* + * (c) 2024 Open Source Geospatial Foundation - all rights reserved This code is licensed under the + * GPL 2.0 license, available at the root application directory. + */ +package org.geoserver.cloud.autoconfigure.web.extension.graticule; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.geoserver.web.data.resource.DataStorePanelInfo; +import org.geoserver.web.data.store.graticule.GraticuleStoreEditPanel; +import org.geotools.data.graticule.GraticuleDataStoreFactory; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +/** + * Test suite for {@link GraticuleAutoConfiguration} + * + * @since 1.8 + */ +class GraticuleAutoConfigurationTest { + + private final ApplicationContextRunner contextRunner = + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(GraticuleAutoConfiguration.class)); + + @Test + void test_enabled() { + + contextRunner.run( + context -> { + assertThat(context) + .hasBean("graticuleStorePanel") + .getBean("graticuleStorePanel") + .isInstanceOf(DataStorePanelInfo.class); + + assertThat(context.getBean("graticuleStorePanel", DataStorePanelInfo.class)) + .hasFieldOrPropertyWithValue( + "factoryClass", GraticuleDataStoreFactory.class); + + assertThat(context.getBean("graticuleStorePanel", DataStorePanelInfo.class)) + .hasFieldOrPropertyWithValue( + "componentClass", GraticuleStoreEditPanel.class); + }); + } +} diff --git a/src/pom.xml b/src/pom.xml index 7192160ae..0f06a995b 100644 --- a/src/pom.xml +++ b/src/pom.xml @@ -652,6 +652,21 @@ + + org.geoserver.community + gs-graticule + ${gs.community.version} + + + org.apache.wicket + wicket-core + + + org.geoserver.web + gs-web-core + + + software.amazon.awssdk diff --git a/src/starters/vector-formats/pom.xml b/src/starters/vector-formats/pom.xml index a50a29e43..a296236f3 100644 --- a/src/starters/vector-formats/pom.xml +++ b/src/starters/vector-formats/pom.xml @@ -38,5 +38,9 @@ org.geoserver.extension gs-feature-pregeneralized + + org.geoserver.community + gs-graticule +