Last active
December 18, 2015 19:09
-
-
Save fvanderbiest/5831034 to your computer and use it in GitHub Desktop.
GeoServer WMS opaque layer property support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/main/src/main/java/org/geoserver/catalog/LayerInfo.java b/src/main/src/main/java/org/geoserver/catalog/LayerInfo.java | |
index 995810c..4852912 100644 | |
--- a/src/main/src/main/java/org/geoserver/catalog/LayerInfo.java | |
+++ b/src/main/src/main/java/org/geoserver/catalog/LayerInfo.java | |
@@ -161,7 +161,7 @@ public interface LayerInfo extends PublishedInfo { | |
/** | |
* Sets the queryable status | |
- * | |
+ * | |
* @param {@code true} to set this Layer as queryable and subject of GetFeatureInfo requests, | |
* {@code false} to make the layer not queryable. | |
*/ | |
@@ -176,6 +176,22 @@ public interface LayerInfo extends PublishedInfo { | |
boolean isQueryable(); | |
/** | |
+ * Sets the opaque status | |
+ * | |
+ * @param {@code true} to set this Layer as opaque, | |
+ * {@code false} to make the layer not opaque. | |
+ */ | |
+ void setOpaque(boolean opaque); | |
+ | |
+ /** | |
+ * Whether the layer is opaque | |
+ * <p> | |
+ * Defaults to {@code false} | |
+ * </p> | |
+ */ | |
+ boolean isOpaque(); | |
+ | |
+ /** | |
* Gets the attribution information for this layer. | |
* | |
* @return an AttributionInfo instance with the layer's attribution information. | |
diff --git a/src/main/src/main/java/org/geoserver/catalog/impl/LayerInfoImpl.java b/src/main/src/main/java/org/geoserver/catalog/impl/LayerInfoImpl.java | |
index 5eab4a9..07e7ee0 100644 | |
--- a/src/main/src/main/java/org/geoserver/catalog/impl/LayerInfoImpl.java | |
+++ b/src/main/src/main/java/org/geoserver/catalog/impl/LayerInfoImpl.java | |
@@ -58,6 +58,8 @@ public class LayerInfoImpl implements LayerInfo { | |
protected Boolean queryable; | |
+ protected Boolean opaque; | |
+ | |
protected MetadataMap metadata = new MetadataMap(); | |
protected AttributionInfo attribution; | |
@@ -334,6 +336,16 @@ public class LayerInfoImpl implements LayerInfo { | |
} | |
@Override | |
+ public void setOpaque(boolean opaque) { | |
+ this.opaque = opaque; | |
+ } | |
+ | |
+ @Override | |
+ public boolean isOpaque() { | |
+ return this.opaque == null? false : this.opaque.booleanValue(); | |
+ } | |
+ | |
+ @Override | |
public boolean isAdvertised() { | |
if(this.advertised != null) { | |
return advertised; | |
diff --git a/src/main/src/main/java/org/geoserver/security/decorators/DecoratingLayerInfo.java b/src/main/src/main/java/org/geoserver/security/decorators/DecoratingLayerInfo.java | |
index ef41593..96eb04e 100644 | |
--- a/src/main/src/main/java/org/geoserver/security/decorators/DecoratingLayerInfo.java | |
+++ b/src/main/src/main/java/org/geoserver/security/decorators/DecoratingLayerInfo.java | |
@@ -127,13 +127,20 @@ public class DecoratingLayerInfo extends AbstractDecorator<LayerInfo> implements | |
public void setQueryable(boolean _queryableEnabled) { | |
delegate.setQueryable(_queryableEnabled); | |
- | |
} | |
public boolean isQueryable() { | |
return delegate.isQueryable(); | |
} | |
+ public void setOpaque(boolean _opaqueEnabled) { | |
+ delegate.setOpaque(_opaqueEnabled); | |
+ } | |
+ | |
+ public boolean isOpaque() { | |
+ return delegate.isOpaque(); | |
+ } | |
+ | |
@Override | |
public boolean isAdvertised() { | |
return delegate.isAdvertised(); | |
diff --git a/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.html b/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.html | |
index cde4cb9..30bd32d 100644 | |
--- a/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.html | |
+++ b/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.html | |
@@ -13,6 +13,12 @@ | |
<label for="queryableEnabled" class="choice"><wicket:message key="queryable">Queryable</wicket:message></label> | |
</li> | |
</ul> | |
+ <ul> | |
+ <li> | |
+ <input id="opaqueEnabled" class="field checkbox" type="checkbox" wicket:id="opaqueEnabled"></input> | |
+ <label for="opaqueEnabled" class="choice"><wicket:message key="opaque">Opaque</wicket:message></label> | |
+ </li> | |
+ </ul> | |
<ul wicket:id="styles"> | |
<li> | |
<label for="defaultStyle"><wicket:message key="defaultStyle">Default Style</wicket:message></label> | |
diff --git a/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.java b/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.java | |
index 1582543..c04599a 100644 | |
--- a/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.java | |
+++ b/src/web/wms/src/main/java/org/geoserver/wms/web/publish/WMSLayerConfig.java | |
@@ -37,6 +37,7 @@ public class WMSLayerConfig extends LayerConfigurationPanel { | |
super(id, layerModel); | |
add(new CheckBox("queryableEnabled", new PropertyModel(layerModel,"queryable"))); | |
+ add(new CheckBox("opaqueEnabled", new PropertyModel(layerModel,"opaque"))); | |
// styles block container | |
WebMarkupContainer styleContainer = new WebMarkupContainer("styles"); | |
diff --git a/src/web/wms/src/main/resources/GeoServerApplication.properties b/src/web/wms/src/main/resources/GeoServerApplication.properties | |
index d0e7f94..c594dce 100644 | |
--- a/src/web/wms/src/main/resources/GeoServerApplication.properties | |
+++ b/src/web/wms/src/main/resources/GeoServerApplication.properties | |
@@ -102,6 +102,7 @@ WMSLayerConfig.defaultTitle = WMS Settings | |
WMSLayerConfig.defaultWmsPath = Default WMS Path | |
WMSLayerConfig.defaultRenderingBuffer = Default Rendering Buffer | |
WMSLayerConfig.queryable = Queryable | |
+WMSLayerConfig.opaque = Opaque | |
WMSLayerConfig.layerIdentifier = Layer Identifier | |
LayerAuthoritiesAndIdentifiersPanel.authorityURLs = Authority URLs for this WMS Layer | |
diff --git a/src/wms/src/main/java/org/geoserver/wms/WMS.java b/src/wms/src/main/java/org/geoserver/wms/WMS.java | |
index 1b66275..8ffc364 100644 | |
--- a/src/wms/src/main/java/org/geoserver/wms/WMS.java | |
+++ b/src/wms/src/main/java/org/geoserver/wms/WMS.java | |
@@ -756,6 +756,13 @@ public class WMS implements ApplicationContextAware { | |
} | |
} | |
+ /** | |
+ * Returns true if the layer is opaque | |
+ */ | |
+ public boolean isOpaque(LayerInfo layer) { | |
+ return layer.isOpaque(); | |
+ } | |
+ | |
public Integer getCascadedHopCount(LayerInfo layer) { | |
if (!(layer.getResource() instanceof WMSLayerInfo)) { | |
return null; | |
diff --git a/src/wms/src/main/java/org/geoserver/wms/capabilities/Capabilities_1_3_0_Transformer.java b/src/wms/src/main/java/org/geoserver/wms/capabilities/Capabilities_1_3_0_Transformer.java | |
index 90e6c9a..6c9eb07 100644 | |
--- a/src/wms/src/main/java/org/geoserver/wms/capabilities/Capabilities_1_3_0_Transformer.java | |
+++ b/src/wms/src/main/java/org/geoserver/wms/capabilities/Capabilities_1_3_0_Transformer.java | |
@@ -881,6 +881,8 @@ public class Capabilities_1_3_0_Transformer extends TransformerBase { | |
protected void handleLayer(final LayerInfo layer) { | |
boolean queryable = wmsConfig.isQueryable(layer); | |
AttributesImpl qatts = attributes("queryable", queryable ? "1" : "0"); | |
+ boolean opaque = wmsConfig.isOpaque(layer); | |
+ qatts.addAttribute("", "opaque", "opaque", "", opaque ? "1" : "0"); | |
Integer cascadedHopCount = wmsConfig.getCascadedHopCount(layer); | |
if (cascadedHopCount != null) { | |
qatts.addAttribute("", "cascaded", "cascaded", "", String.valueOf(cascadedHopCount)); | |
diff --git a/src/wms/src/main/java/org/geoserver/wms/capabilities/GetCapabilitiesTransformer.java b/src/wms/src/main/java/org/geoserver/wms/capabilities/GetCapabilitiesTransformer.java | |
index 71cc584..1592a8f 100644 | |
--- a/src/wms/src/main/java/org/geoserver/wms/capabilities/GetCapabilitiesTransformer.java | |
+++ b/src/wms/src/main/java/org/geoserver/wms/capabilities/GetCapabilitiesTransformer.java | |
@@ -836,6 +836,8 @@ public class GetCapabilitiesTransformer extends TransformerBase { | |
AttributesImpl qatts = new AttributesImpl(); | |
boolean queryable = wmsConfig.isQueryable(layer); | |
qatts.addAttribute("", "queryable", "queryable", "", queryable ? "1" : "0"); | |
+ boolean opaque = wmsConfig.isOpaque(layer); | |
+ qatts.addAttribute("", "opaque", "opaque", "", opaque ? "1" : "0"); | |
Integer cascaded = wmsConfig.getCascadedHopCount(layer); | |
if (cascaded != null) { | |
qatts.addAttribute("", "cascaded", "cascaded", "", String.valueOf(cascaded)); | |
diff --git a/src/wms/src/test/java/org/geoserver/wms/wms_1_1_1/CapabilitiesTest.java b/src/wms/src/test/java/org/geoserver/wms/wms_1_1_1/CapabilitiesTest.java | |
index 82329f8..666b90d 100644 | |
--- a/src/wms/src/test/java/org/geoserver/wms/wms_1_1_1/CapabilitiesTest.java | |
+++ b/src/wms/src/test/java/org/geoserver/wms/wms_1_1_1/CapabilitiesTest.java | |
@@ -313,7 +313,7 @@ public class CapabilitiesTest extends WMSTestSupport { | |
assertXpathEvaluatesTo("__fax", cinfo + "ContactFacsimileTelephone", doc); | |
assertXpathEvaluatesTo("e@mail", cinfo + "ContactElectronicMailAddress", doc); | |
} | |
- | |
+ | |
@Test | |
public void testQueryable() throws Exception{ | |
LayerInfo lines = getCatalog().getLayerByName(MockData.LINES.getLocalPart()); | |
@@ -325,7 +325,7 @@ public class CapabilitiesTest extends WMSTestSupport { | |
String linesName = MockData.LINES.getPrefix() + ":" + MockData.LINES.getLocalPart(); | |
String pointsName = MockData.POINTS.getPrefix() + ":" + MockData.POINTS.getLocalPart(); | |
- | |
+ | |
Document doc = getAsDOM("wms?service=WMS&request=getCapabilities&version=1.1.1", true); | |
// print(doc); | |
@@ -333,4 +333,21 @@ public class CapabilitiesTest extends WMSTestSupport { | |
assertXpathEvaluatesTo("0", "//Layer[Name='" + pointsName + "']/@queryable", doc); | |
} | |
+ @Test | |
+ public void testOpaque() throws Exception{ | |
+ LayerInfo lines = getCatalog().getLayerByName(MockData.LINES.getLocalPart()); | |
+ lines.setOpaque(true); | |
+ getCatalog().save(lines); | |
+ LayerInfo points = getCatalog().getLayerByName(MockData.POINTS.getLocalPart()); | |
+ points.setOpaque(false); | |
+ getCatalog().save(points); | |
+ | |
+ String linesName = MockData.LINES.getPrefix() + ":" + MockData.LINES.getLocalPart(); | |
+ String pointsName = MockData.POINTS.getPrefix() + ":" + MockData.POINTS.getLocalPart(); | |
+ | |
+ Document doc = getAsDOM("wms?service=WMS&request=getCapabilities&version=1.1.1", true); | |
+ | |
+ assertXpathEvaluatesTo("1", "//Layer[Name='" + linesName + "']/@opaque", doc); | |
+ assertXpathEvaluatesTo("0", "//Layer[Name='" + pointsName + "']/@opaque", doc); | |
+ } | |
} | |
diff --git a/src/wms/src/test/java/org/geoserver/wms/wms_1_3/CapabilitiesIntegrationTest.java b/src/wms/src/test/java/org/geoserver/wms/wms_1_3/CapabilitiesIntegrationTest.java | |
index 5d881fd..96cfcc5 100644 | |
--- a/src/wms/src/test/java/org/geoserver/wms/wms_1_3/CapabilitiesIntegrationTest.java | |
+++ b/src/wms/src/test/java/org/geoserver/wms/wms_1_3/CapabilitiesIntegrationTest.java | |
@@ -344,6 +344,24 @@ public class CapabilitiesIntegrationTest extends WMSTestSupport { | |
assertXpathEvaluatesTo("1", "//wms:Layer[wms:Name='" + linesName + "']/@queryable", doc); | |
assertXpathEvaluatesTo("0", "//wms:Layer[wms:Name='" + pointsName + "']/@queryable", doc); | |
} | |
+ | |
+ @org.junit.Test | |
+ public void testOpaque() throws Exception { | |
+ LayerInfo lines = getCatalog().getLayerByName(MockData.LINES.getLocalPart()); | |
+ lines.setOpaque(true); | |
+ getCatalog().save(lines); | |
+ LayerInfo points = getCatalog().getLayerByName(MockData.POINTS.getLocalPart()); | |
+ points.setOpaque(false); | |
+ getCatalog().save(points); | |
+ | |
+ String linesName = MockData.LINES.getPrefix() + ":" + MockData.LINES.getLocalPart(); | |
+ String pointsName = MockData.POINTS.getPrefix() + ":" + MockData.POINTS.getLocalPart(); | |
+ | |
+ Document doc = getAsDOM("wms?service=WMS&request=getCapabilities&version=1.3.0", true); | |
+ | |
+ assertXpathEvaluatesTo("1", "//wms:Layer[wms:Name='" + linesName + "']/@opaque", doc); | |
+ assertXpathEvaluatesTo("0", "//wms:Layer[wms:Name='" + pointsName + "']/@opaque", doc); | |
+ } | |
@org.junit.Test | |
public void testKeywordVocab() throws Exception { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment