it.geosolutions.geoserver.rest.decoder.RESTLayer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of geoserver-manager Show documentation
Show all versions of geoserver-manager Show documentation
GeoServer Manager is a library to interact with GeoServer
The scope of this library is to have a simple API, and use as few external
libs as possible.
/*
* 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 java.util.ArrayList;
import java.util.List;
import it.geosolutions.geoserver.rest.decoder.utils.JDOMBuilder;
import it.geosolutions.geoserver.rest.encoder.authorityurl.AuthorityURLInfo;
import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder;
import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder;
import it.geosolutions.geoserver.rest.encoder.identifier.IdentifierInfo;
import it.geosolutions.geoserver.rest.encoder.metadatalink.GSMetadataLinkInfoEncoder;
import it.geosolutions.geoserver.rest.encoder.metadatalink.ResourceMetadataLinkInfo;
import org.jdom.Element;
import org.jdom.Namespace;
/**
* Parse Layers returned as XML REST objects.
*
* This is the XML REST representation:
*
* {@code
*
* tasmania_cities
* /
* VECTOR
*
* capitals
*
*
*
*
*
*
* tasmania_cities
*
*
* true
* true
* true
*
* 0
* 0
*
*
*
* authority1
* http://www.authority1.org
*
*
*
*
* authority1
* identifier1
*
*
*
* }
*
* @author etj
* @author eblondel
* @version $Id: $
*/
public class RESTLayer {
protected final Element layerElem;
public enum Type {
VECTOR("VECTOR"),
RASTER("RASTER"),
UNKNOWN(null);
private final String restName;
private Type(String restName) {
this.restName = restName;
}
public static Type get(String restName) {
for (Type type : values()) {
if(type == UNKNOWN)
continue;
if(type.restName.equals(restName))
return type;
}
return UNKNOWN;
}
};
/**
* build
*
* @param response a {@link java.lang.String} object.
* @return a {@link it.geosolutions.geoserver.rest.decoder.RESTLayer} object.
*/
public static RESTLayer build(String response) {
if(response == null)
return null;
Element pb = JDOMBuilder.buildElement(response);
if(pb != null)
return new RESTLayer(pb);
else
return null;
}
/**
* Constructor for RESTLayer.
*
* @param layerElem a {@link org.jdom.Element} object.
*/
public RESTLayer(Element layerElem) {
this.layerElem = layerElem;
}
/**
* getEnabled
*
* @return a boolean.
*/
public boolean getEnabled(){
return Boolean.parseBoolean(layerElem.getChildText("enabled"));
}
/**
* getQueryable
*
* @return a boolean.
*/
public boolean getQueryable(){
return Boolean.parseBoolean(layerElem.getChildText("queryable"));
}
/**
* getAdvertised
*
* @return a boolean.
*/
public boolean getAdvertised(){
return Boolean.parseBoolean(layerElem.getChildText("advertised"));
}
/**
* getName
*
* @return a {@link java.lang.String} object.
*/
public String getName() {
return layerElem.getChildText("name");
}
/**
* getTypeString
*
* @return a {@link java.lang.String} object.
*/
public String getTypeString() {
return layerElem.getChildText("type");
}
/**
* getType
*
* @return a {@link it.geosolutions.geoserver.rest.decoder.RESTLayer.Type} object.
*/
public Type getType() {
return Type.get(getTypeString());
}
/**
* getDefaultStyle
*
* @return a {@link java.lang.String} object.
*/
public String getDefaultStyle() {
Element defaultStyle = layerElem.getChild("defaultStyle");
return defaultStyle == null? null : defaultStyle.getChildText("name");
}
/**
* getStyles
*
* @return a {@link it.geosolutions.geoserver.rest.decoder.RESTStyleList} object.
*/
public RESTStyleList getStyles() {
RESTStyleList styleList = null;
final Element stylesRoot = layerElem.getChild("styles");
if (stylesRoot != null) {
styleList = new RESTStyleList(stylesRoot);
}
return styleList;
}
/**
* getDefaultStyleWorkspace
*
* @return a {@link java.lang.String} object.
*/
public String getDefaultStyleWorkspace() {
Element defaultStyle = layerElem.getChild("defaultStyle");
return defaultStyle == null? null : defaultStyle.getChildText("workspace");
}
/**
* getTitle
*
* @return a {@link java.lang.String} object.
*/
public String getTitle() {
Element resource = layerElem.getChild("resource");
return resource.getChildText("title");
}
/**
* getAbstract
*
* @return a {@link java.lang.String} object.
*/
public String getAbstract() {
Element resource = layerElem.getChild("resource");
return resource.getChildText("abstract");
}
/**
* getNameSpace
*
* @return a {@link java.lang.String} object.
*/
public String getNameSpace() {
Element resource = layerElem.getChild("resource");
return resource.getChild("namespace").getChildText("name");
}
// public String getStoreName() {
// Element resource = layerElem.getChild("resource");
// return resource.getChild("store").getChildText("name");
// }
//
// public String getStoreType() {
// Element resource = layerElem.getChild("resource");
// return resource.getChild("store").getAttributeValue("class");
// }
// public String getCRS() {
// Element resource = layerElem.getChild("resource");
// Element elBBox = resource.getChild("latLonBoundingBox");
// return elBBox.getChildText("crs");
// }
/**
* Get the URL to retrieve the featuretype.
*
* {@code
*
* tasmania_cities
*
*
* }
*
* @return a {@link java.lang.String} object.
*/
public String getResourceUrl() {
Element resource = layerElem.getChild("resource");
Element atom = resource.getChild("link", Namespace.getNamespace("atom", "http://www.w3.org/2005/Atom"));
return atom.getAttributeValue("href");
}
/**
* Decodes the list of AuthorityURLInfo from the GeoServer Layer
*
* @return the list of GSAuthorityURLInfoEncoder
*/
public List getEncodedAuthorityURLInfoList() {
List authorityURLList = null;
final Element authorityURLsRoot = layerElem.getChild("authorityURLs");
if (authorityURLsRoot != null) {
final List authorityURLs = authorityURLsRoot.getChildren();
if (authorityURLs != null) {
authorityURLList = new ArrayList(
authorityURLs.size());
for (Element authorityURL : authorityURLs) {
final GSAuthorityURLInfoEncoder authEnc = new GSAuthorityURLInfoEncoder();
authEnc.setName(authorityURL
.getChildText(AuthorityURLInfo.name.name()));
authEnc.setHref(authorityURL
.getChildText(AuthorityURLInfo.href.name()));
authorityURLList.add(authEnc);
}
}
}
return authorityURLList;
}
/**
* Decodes the list of IdentifierInfo from the GeoServer Layer
*
* @return the list of IdentifierInfoEncoder
*/
public List getEncodedIdentifierInfoList() {
List idList = null;
final Element idRoot = layerElem.getChild("identifiers");
if (idRoot != null) {
final List identifiers = idRoot.getChildren();
if (identifiers != null) {
idList = new ArrayList(
identifiers.size());
for (Element identifier : identifiers) {
final GSIdentifierInfoEncoder idEnc = new GSIdentifierInfoEncoder();
idEnc.setAuthority(identifier
.getChildText(IdentifierInfo.authority.name()));
idEnc.setIdentifier(identifier
.getChildText(IdentifierInfo.identifier.name()));
idList.add(idEnc);
}
}
}
return idList;
}
// protected double getLatLonEdge(String edge) {
// Element resource = layerElem.getChild("resource");
// Element elBBox = resource.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");
// }
}