diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java index 6197063..5aa06ef 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java @@ -45,6 +45,10 @@ import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageGranulesList import it.geosolutions.geoserver.rest.decoder.RESTStructuredCoverageIndexSchema; import it.geosolutions.geoserver.rest.decoder.RESTStyle; import it.geosolutions.geoserver.rest.decoder.RESTStyleList; +import it.geosolutions.geoserver.rest.decoder.RESTWms; +import it.geosolutions.geoserver.rest.decoder.RESTWmsList; +import it.geosolutions.geoserver.rest.decoder.RESTWmsStore; +import it.geosolutions.geoserver.rest.decoder.RESTWmsStoreList; import it.geosolutions.geoserver.rest.decoder.RESTWorkspaceList; import it.geosolutions.geoserver.rest.decoder.about.GSVersionDecoder; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStructuredGridCoverageReaderManager; @@ -544,6 +548,153 @@ public class GeoServerRESTReader { return RESTCoverage.build(response); } + //========================================================================== + //=== WMSSTORES + //========================================================================== + + /** + * Get summary info about all WmsStore in a WorkSpace. + * + * @param workspace The name of the workspace + * + * @return summary info about CoverageStores as a {@link RESTWmsStoreList} + */ + public RESTWmsStoreList getWmsStores(String workspace) { + String url = "/rest/workspaces/" + workspace + "/wmsstores.xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving CS list from " + url); + } + return RESTWmsStoreList.build(load(url)); + } + + /** + * Get detailed info about a given WmsStore in a given Workspace. + * + * @param workspace The name of the workspace + * @param wsName The name of the WmsStore + * @return WmsStore details as a {@link RESTWmsStore} + */ + public RESTWmsStore getWmsStore(String workspace, String wsName) { + String url = "/rest/workspaces/" + workspace + "/wmsstores/" + wsName + ".xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving CS from " + url); + } + return RESTWmsStore.build(load(url)); + } + + /** + * Get detailed info about a Wms's Datastore. + * + * @param wms the RESTWms + * @return wmsStore details as a {@link RESTWmsStore} + */ + public RESTWmsStore getWmsStore(RESTWms wms) { + String url = wms.getStoreUrl(); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving CS from fullurl " + url); + } + String response = loadFullURL(url); + return RESTWmsStore.build(response); + } + + /** + * Checks if the selected Wms store is present. Parameter quietOnNotFound can be used for controlling the logging when 404 is returned. + * + * @param workspace workspace of the wmsstore + * @param wsName name of the wmsstore + * @param quietOnNotFound if true, no exception is logged + * @return boolean indicating if the wmsstore exists + */ + public boolean existsWmsstore(String workspace, String wsName, boolean quietOnNotFound){ + String url = baseurl + "/rest/workspaces/" + workspace + "/wmsstores/" + wsName + ".xml"; + String composed = Util.appendQuietOnNotFound(quietOnNotFound, url); + return HTTPUtils.exists(composed, username, password); + } + + /** + * Checks if the selected wms store is present. + * + * @param workspace workspace of the wmsstore + * @param wsName name of the wmsstore + * @return boolean indicating if the wmsstore exists + */ + public boolean existsWmsstore(String workspace, String wsName){ + return existsCoveragestore(workspace, wsName, Util.DEFAULT_QUIET_ON_NOT_FOUND); + } + + //========================================================================== + //=== WMSS + //========================================================================== + + /** + * Get list of wmss (usually only one). + * + * @param workspace The name of the workspace + * @param wsName The name of the WmsStore + * @return wms list as a {@link RESTWmsList} + */ + public RESTWmsList getWms(String workspace, String wsName) { + String url = "/rest/workspaces/" + workspace + "/wmsstores/" + wsName + "/wmslayers.xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving Wmss from " + url); + } + return RESTWmsList.build(load(url)); + } + + /** + * Get detailed info about a given Wms. + * + * @param workspace The name of the workspace + * @param store The name of the WmsStore + * @param name The name of the Wms + * @return wms details as a {@link RESTwms} + */ + public RESTWms getWms(String workspace, String store, String name) { + String url = "/rest/workspaces/" + workspace + "/wmsstores/" + store + "/wmslayers/"+name+".xml"; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("### Retrieving Wmss from " + url); + } + return RESTWms.build(load(url)); + } + + /** + * Checks if the selected Wms is present. Parameter quietOnNotFound can be used for controlling the logging when 404 is returned. + * + * @param workspace workspace of the wmsstore + * @param wsName name of the wmsstore + * @param name name of the wms + * @param quietOnNotFound if true, no exception is logged + * @return boolean indicating if the coverage exists + */ + public boolean existsWms(String workspace, String store, String name, boolean quietOnNotFound){ + String url = baseurl + "/rest/workspaces/" + workspace + "/wmsstores/" + store + "/wmslayers/"+name+".xml"; + String composed = Util.appendQuietOnNotFound(quietOnNotFound, url); + return HTTPUtils.exists(composed, username, password); + } + + /** + * Checks if the selected wms is present. + * + * @param workspace workspace of the wmsstore + * @param store name of the wmsstore + * @param name name of the wms + * @return boolean indicating if the coverage exists + */ + public boolean existsWms(String workspace, String store, String name){ + return existsWms(workspace, store, name, Util.DEFAULT_QUIET_ON_NOT_FOUND); + } + + /** + * Get detailed info about a Wms given the Layer where it's published with. + * + * @param layer A layer publishing the wmsStore + * @return Wms details as a {@link RESTWms} + */ + public RESTWms getWms(RESTLayer layer) { + String response = loadFullURL(layer.getResourceUrl()); + return RESTWms.build(response); + } + //========================================================================== //========================================================================== diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java new file mode 100644 index 0000000..39834f6 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWms.java @@ -0,0 +1,306 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.decoder; + +import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.jdom.Element; + +/** + * Parse WMSs returned as XML REST objects. + * + *
This is the XML REST representation: + *
+ *{@code
+
+ comunilazio
+ lait:comunilazio
+
+ arit
+
+
+ comunilazio
+
+
+ features
+ comunilazio
+
+
+ GEOGCS["WGS 84", DATUM["World Geodetic System 1984", SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4326"]]
+
+ EPSG:4326
+
+ 11.4482128
+ 14.0288013
+ 40.7848334
+ 42.8396541
+ EPSG:4326
+
+
+ 11.4482128
+ 14.0288013
+ 40.7848334
+ 42.8396541
+
+ GEOGCS["WGS84(DD)", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH]]
+
+
+ FORCE_DECLARED
+ true
+
+ false
+
+
+ regione
+
+
+
+ * }
+ *
+ * @author cip
+ */
+public class RESTWms extends RESTResource {
+
+
+ public static RESTWms build(String response) {
+ Element elem = JDOMBuilder.buildElement(response);
+ return elem == null? null : new RESTWms(elem);
+ }
+
+ public RESTWms(Element resource) {
+ super(resource);
+ }
+
+ public RESTWms(RESTResource resource) {
+ super(resource.rootElem);
+ }
+
+// public String getName() {
+// return rootElem.getChildText("name");
+// }
+
+// public String getNativeName() {
+// return rootElem.getChildText("nativeName");
+// }
+
+
+
+// public String getNameSpace() {
+// return rootElem.getChild("namespace").getChildText("name");
+// }
+//
+// public String getTitle() {
+// return rootElem.getChildText("title");
+// }
+
+ public String getNativeCRS() {
+ return rootElem.getChildText("nativeCRS");
+ }
+
+ public String getSRS() {
+ return rootElem.getChildText("srs");
+ }
+
+ public RESTMetadataList getMetadataList() {
+ return new RESTMetadataList(rootElem.getChild("metadata"));
+ }
+
+ public ListThis is the XML REST representation: + *
{@code
+
+ comunilazio
+
+
+
+ *
+}
+ *
+ * @author cip
+ */
+public class RESTWmsList extends RESTAbstractList+ * This is the XML document returned by GeoServer when requesting a WmsStore: + *
+ * {@code
+
+ regione
+ WMS
+ true
+
+ arit
+
+
+
+ true
+
+ <__default>false
+ http://www.regione.lazio.it/geoserver/wms
+ 6
+ 60
+ 30
+
+
+
+
+ * }
+ *
+ *
+ * Note: the whole XML fragment is stored in memory. At the moment, there are
+ * methods to retrieve only the more useful data.
+ *
+ * @author etj
+ */
+public class RESTWmsStore {
+ private final Element cs;
+
+
+ public RESTWmsStore(Element cs) {
+ this.cs = cs;
+ }
+
+ public static RESTWmsStore build(String response) {
+ if(response == null)
+ return null;
+ if(response.isEmpty())
+ return new RESTWmsStore(new Element("wmsStore")); // TODO check how to response
+
+ Element pb = JDOMBuilder.buildElement(response);
+ if(pb != null)
+ return new RESTWmsStore(pb);
+ else
+ return null;
+ }
+
+ public String getName() {
+ return cs.getChildText("name");
+ }
+
+ public String getWorkspaceName() {
+ return cs.getChild("workspace").getChildText("name");
+ }
+
+ public String getCapabilitiesURL() {
+ return cs.getChildText("capabilitiesURL");
+ }
+
+ public String getMaxConnections() {
+ return cs.getChildText("maxConnections");
+ }
+
+ public String getReadTimeout() {
+ return cs.getChildText("readTimeout");
+ }
+
+ public String getConnectTimeout() {
+ return cs.getChildText("connectTimeout");
+ }
+
+ public String getType() {
+ return cs.getChildText("type");
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder(getClass().getSimpleName())
+ .append('[');
+ if(cs == null)
+ sb.append("null");
+ else
+ sb.append("name:").append(getName())
+ .append(" wsname:").append(getWorkspaceName());
+
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java
new file mode 100644
index 0000000..cad4f01
--- /dev/null
+++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTWmsStoreList.java
@@ -0,0 +1,60 @@
+/*
+ * GeoServer-Manager - Simple Manager Library for GeoServer
+ *
+ * Copyright (C) 2007,2011 GeoSolutions S.A.S.
+ * http://www.geo-solutions.it
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package it.geosolutions.geoserver.rest.decoder;
+
+import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
+import it.geosolutions.geoserver.rest.decoder.utils.NameLinkElem;
+
+import org.jdom.Element;
+
+/**
+ * Parses list of summary data about WmsStores.
+ *
+ * This is the XML REST representation: + *
{@code
+
+
+ regione
+
+
+
+ *
+}
+ *
+ * @author cip
+ */
+public class RESTWmsStoreList extends RESTAbstractList