diff --git a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java index 9067b49..1997ff9 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java @@ -1,196 +1,252 @@ -/* - * 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.encoder.feature.FeatureTypeAttribute; -import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jdom.Element; -import org.jdom.Namespace; - -/** - * Parse a resource (FeatureType or Coverage) returned as XML REST objects. - * - * @author etj - */ -public class RESTResource { - protected final Element rootElem; - - public static RESTResource build(String response) { - Element elem = JDOMBuilder.buildElement(response); - return elem == null ? null : new RESTCoverage(elem); - } - - public RESTResource(Element resource) { - this.rootElem = resource; - } - - public String getName() { - return rootElem.getChildText("name"); - } - - public String getTitle() { - return rootElem.getChildText("title"); - } - - public String getNativeName() { - return rootElem.getChildText("nativeName"); - } - - public String getAbstract() { - return rootElem.getChildText("abstract"); - } - - public String getNameSpace() { - return rootElem.getChild("namespace").getChildText("name"); - } - - public String getStoreName() { - return rootElem.getChild("store").getChildText("name"); - } - - public String getStoreType() { - return rootElem.getChild("store").getAttributeValue("class"); - } - - public String getStoreUrl() { - Element store = rootElem.getChild("store"); - Element atom = store.getChild("link", - Namespace.getNamespace("atom", "http://www.w3.org/2005/Atom")); - return atom.getAttributeValue("href"); - } - - public String getCRS() { - Element elBBox = rootElem.getChild("latLonBoundingBox"); - return elBBox.getChildText("crs"); - } - - protected double getLatLonEdge(String edge) { - Element elBBox = rootElem.getChild("latLonBoundingBox"); - return Double.parseDouble(elBBox.getChildText(edge)); - } - - public double getMinX() { - return getLatLonEdge("minx"); - } - - public double getMaxX() { - return getLatLonEdge("maxx"); - } - - public double getMinY() { - return getLatLonEdge("miny"); - } - - public double getMaxY() { - return getLatLonEdge("maxy"); - } - - public List> getAttributeList() { - List> attrsList = null; - - final Element attrsRoot = rootElem.getChild("attributes"); - final List attrs = attrsRoot.getChildren(); - if (attrs != null) { - attrsList = new ArrayList>(attrs.size()); - for (Element attr : attrs) { - Map attrsMap = new HashMap(); - attrsList.add(attrsMap); - for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { - String key = at.toString(); - attrsMap.put(at, attr.getChildText(key)); - } - } - } - return attrsList; - } - - public List getEncodedAttributeList() { - List attrsList = null; - - final Element attrsRoot = rootElem.getChild("attributes"); - final List attrs = attrsRoot.getChildren(); - if (attrs != null) { - attrsList = new ArrayList(attrs.size()); - for (Element attr : attrs) { - final GSAttributeEncoder attrEnc = new GSAttributeEncoder(); - for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { - String key = at.toString(); - attrEnc.setAttribute(at, attr.getChildText(key)); - } - attrsList.add(attrEnc); - } - - } - return attrsList; - } - - // /** - // * @return the list of available attribute names - // */ - // public List getAttributeNames() { - // return getAttributes("name"); - // } - // - // /** - // * @return a list of object which are String representation of Classes - // */ - // public List getAttributeBinding() { - // return getAttributes("binding"); - // } - - // /** - // *
- // * NATION
- // * 0
- // * 1
- // * true
- // * java.lang.Integer
- // * 3
- // *

- // * - // * @param name - // * @return - // */ - // private List getAttributes(String name) { - // final Element attrsRoot = rootElem.getChild("attributes"); - // final List attrs = attrsRoot.getChildren(); - // List attrNames = null; - // if (attrs != null) { - // attrNames = new ArrayList(attrs.size()); - // for (Element attr : attrs) { - // attrNames.add(attr.getChildText(name)); - // } - // } - // return attrNames; - // } -} +/* + * 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.encoder.feature.FeatureTypeAttribute; +import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder; +import it.geosolutions.geoserver.rest.encoder.metadatalink.GSMetadataLinkInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.metadatalink.ResourceMetadataLinkInfo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.jdom.Element; +import org.jdom.Namespace; + +/** + * Parse a resource (FeatureType or Coverage) returned as XML REST objects. + * + * @author etj + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org + */ +public class RESTResource { + protected final Element rootElem; + + public static RESTResource build(String response) { + Element elem = JDOMBuilder.buildElement(response); + return elem == null ? null : new RESTCoverage(elem); + } + + public RESTResource(Element resource) { + this.rootElem = resource; + } + + public String getName() { + return rootElem.getChildText("name"); + } + + public String getTitle() { + return rootElem.getChildText("title"); + } + + public String getNativeName() { + return rootElem.getChildText("nativeName"); + } + + public String getAbstract() { + return rootElem.getChildText("abstract"); + } + + public String getNameSpace() { + return rootElem.getChild("namespace").getChildText("name"); + } + + public String getStoreName() { + return rootElem.getChild("store").getChildText("name"); + } + + public String getStoreType() { + return rootElem.getChild("store").getAttributeValue("class"); + } + + public String getStoreUrl() { + Element store = rootElem.getChild("store"); + Element atom = store.getChild("link", + Namespace.getNamespace("atom", "http://www.w3.org/2005/Atom")); + return atom.getAttributeValue("href"); + } + + public String getCRS() { + Element elBBox = rootElem.getChild("latLonBoundingBox"); + return elBBox.getChildText("crs"); + } + + protected double getLatLonEdge(String edge) { + Element elBBox = rootElem.getChild("latLonBoundingBox"); + return Double.parseDouble(elBBox.getChildText(edge)); + } + + public double getMinX() { + return getLatLonEdge("minx"); + } + + public double getMaxX() { + return getLatLonEdge("maxx"); + } + + public double getMinY() { + return getLatLonEdge("miny"); + } + + public double getMaxY() { + return getLatLonEdge("maxy"); + } + + public List> getAttributeList() { + List> attrsList = null; + + final Element attrsRoot = rootElem.getChild("attributes"); + final List attrs = attrsRoot.getChildren(); + if (attrs != null) { + attrsList = new ArrayList>(attrs.size()); + for (Element attr : attrs) { + Map attrsMap = new HashMap(); + attrsList.add(attrsMap); + for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { + String key = at.toString(); + attrsMap.put(at, attr.getChildText(key)); + } + } + } + return attrsList; + } + + public List getEncodedAttributeList() { + List attrsList = null; + + final Element attrsRoot = rootElem.getChild("attributes"); + final List attrs = attrsRoot.getChildren(); + if (attrs != null) { + attrsList = new ArrayList(attrs.size()); + for (Element attr : attrs) { + final GSAttributeEncoder attrEnc = new GSAttributeEncoder(); + for (FeatureTypeAttribute at : FeatureTypeAttribute.values()) { + String key = at.toString(); + attrEnc.setAttribute(at, attr.getChildText(key)); + } + attrsList.add(attrEnc); + } + + } + return attrsList; + } + + /** + * + * @author Emmanuel Blondel + * + * @return the list of metadataLinkInfo + */ + public List> getMetadataLinkInfoList() { + List> metaLinksList = null; + + final Element metaLinksRoot = rootElem.getChild("metadataLinks"); + final List metaLinks = metaLinksRoot.getChildren(); + if (metaLinks != null) { + metaLinksList = new ArrayList>(metaLinks.size()); + for (Element metaLink : metaLinks) { + Map metaLinkMap = new HashMap(); + metaLinksList.add(metaLinkMap); + for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo.values()) { + String key = rmd.toString(); + metaLinkMap.put(rmd, metaLink.getChildText(key)); + } + } + } + return metaLinksList; + } + + + /** + * + * @author Emmanuel Blondel + * + * @return the list of GSMetadataLinkEncoder + */ + public List getEncodedMetadataLinkInfoList() { + List metaLinksList = null; + + final Element metaLinksRoot = rootElem.getChild("metadataLinks"); + final List metaLinks = metaLinksRoot.getChildren(); + if (metaLinks != null) { + metaLinksList = new ArrayList(metaLinks.size()); + for (Element metaLink : metaLinks) { + final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); + for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo.values()) { + String key = rmd.toString(); + metaLinkEnc.setMetadataLinkInfoMember(rmd, metaLink.getChildText(key)); //change + } + metaLinksList.add(metaLinkEnc); + } + + } + return metaLinksList; + } + + + // /** + // * @return the list of available attribute names + // */ + // public List getAttributeNames() { + // return getAttributes("name"); + // } + // + // /** + // * @return a list of object which are String representation of Classes + // */ + // public List getAttributeBinding() { + // return getAttributes("binding"); + // } + + // /** + // *
+ // * NATION
+ // * 0
+ // * 1
+ // * true
+ // * java.lang.Integer
+ // * 3
+ // *

+ // * + // * @param name + // * @return + // */ + // private List getAttributes(String name) { + // final Element attrsRoot = rootElem.getChild("attributes"); + // final List attrs = attrsRoot.getChildren(); + // List attrNames = null; + // if (attrs != null) { + // attrNames = new ArrayList(attrs.size()); + // for (Element attr : attrs) { + // attrNames.add(attr.getChildText(name)); + // } + // } + // return attrNames; + // } +}