From 4aeac4d080fbb951e4e6041edfcdc583e658af4f Mon Sep 17 00:00:00 2001 From: eblondel Date: Wed, 10 Apr 2013 14:51:27 +0200 Subject: [PATCH] MetadataLink support - enrich javadoc & format code/comments --- .../geoserver/rest/decoder/RESTResource.java | 104 +++++------ .../rest/encoder/GSResourceEncoder.java | 65 +++---- .../GSMetadataLinkInfoEncoder.java | 161 ++++++++++++------ .../ResourceMetadataLinkInfo.java | 3 +- 4 files changed, 199 insertions(+), 134 deletions(-) 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 5c78d3f..23c3f8b 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java @@ -43,7 +43,8 @@ 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 + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org */ public class RESTResource { protected final Element rootElem; @@ -159,58 +160,63 @@ public class RESTResource { - /** - * - * @author Emmanuel Blondel - * - * @return the list of metadataLinkInfo - */ - public List> getMetadataLinkInfoList() { - List> metaLinksList = null; + /** + * Decodes the list of MetadataLinkInfo from the GeoServer Resource + * + * @author Emmanuel Blondel + * + * @return the list of Map + */ + 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; - } + 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; + /** + * Decodes the list of MetadataLinkInfo from the GeoServer Resource + * + * @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); - } + 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 metaLinksList; + } // /** // * @return the list of available attribute names diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java index 2e180a2..7a801f3 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -47,7 +47,8 @@ import org.jdom.filter.Filter; * * @author ETj (etj at geo-solutions.it) * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it - * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org */ public abstract class GSResourceEncoder extends PropertyXMLEncoder { @@ -86,10 +87,6 @@ public abstract class GSResourceEncoder set("enabled", (enabled) ? "true" : "false"); } - // TODO MetadataLink -// public void setMetadata(String key, String url){ -// metadata.set(key, url); -// } /** * @param key @@ -141,34 +138,36 @@ public abstract class GSResourceEncoder })).size() == 0 ? false : true; } - /** - * @param MetadataLink the metadataLink to add - * - * @author Emmanuel Blondel - */ - public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) { - metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot()); - } - - - /** Quick MetadataLinkInfo set-up - * - * @author Emmanuel Blondel - * - * @param type - * @param metadataType - * @param content - */ - public void addMetadataLinkInfo(String type, String metadataType, String content){ - final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder(); - mde.setup(type, metadataType, content); - metadataLinksListEncoder.addContent(mde.getRoot()); - } + * Adds a MetadataLinkInfo to the GeoServer Resource + * + * @param MetadataLink + * + * @author Emmanuel Blondel + */ + public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) { + metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot()); + } + /** + * Adds quickly a MetadataLinkInfo to the GeoServer Resource + * + * @author Emmanuel Blondel + * + * @param type + * @param metadataType + * @param content + */ + public void addMetadataLinkInfo(String type, String metadataType, + String content) { + final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder(); + mde.setup(type, metadataType, content); + metadataLinksListEncoder.addContent(mde.getRoot()); + } - /** - * delete a metadataLinkInfo from the list using the metadataURL (MetadataLinkInfo content) + /** + * Deletes a metadataLinkInfo from the list using the metadataURL + * (MetadataLinkInfo content) * * @author Emmanuel Blondel * @@ -176,8 +175,10 @@ public abstract class GSResourceEncoder * @return true if something is removed, false otherwise */ public boolean delMetadataLinkInfo(final String metadataURL) { - return (metadataLinksListEncoder.removeContent(GSMetadataLinkInfoEncoder.getFilterByContent(metadataURL))).size() == 0 ? false - : true; + return (metadataLinksListEncoder + .removeContent(GSMetadataLinkInfoEncoder + .getFilterByContent(metadataURL))).size() == 0 ? false + : true; } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java index 65de75b..8ad2c4b 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoder.java @@ -33,75 +33,132 @@ import org.jdom.filter.Filter; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; -/** GSMetadataLinkEncoder +/** + * GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource + * (feature type /coverage), as follows: + *
+ * {@code
+ * final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder();
+ * mde.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata");
+ * }
+ * 
+ * For this example, the XML output is: + *
+ * {@code
+ * 
+ * 	text/xml
+ * 	ISO19115:2003
+ * 	http://www.organization.org/metadata
+ * 
+ * }
+ * 
+ * + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org * - * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org - * */ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder { - - public static class filterByContent implements Filter { - - final private String key; - - public filterByContent(String content){ - this.key=content; - } - - private static final long serialVersionUID = 1L; - public boolean matches(Object obj) { - Element el=((Element) obj).getChild(ResourceMetadataLinkInfo.content.toString()); - if (el!=null && el.getTextTrim().equals(key)) { - return true; - } - return false; - } - } - - public static Filter getFilterByContent(String content){ - return new filterByContent(content); - } - - - public GSMetadataLinkInfoEncoder() { - super("metadataLink"); + /** A class to filter the MetadataLinkInfo by content + * + * + */ + public static class filterByContent implements Filter { + + final private String key; + + public filterByContent(String content) { + this.key = content; + } + + private static final long serialVersionUID = 1L; + + public boolean matches(Object obj) { + Element el = ((Element) obj) + .getChild(ResourceMetadataLinkInfo.content.toString()); + if (el != null && el.getTextTrim().equals(key)) { + return true; + } + return false; + } } - /** quick MetadataLinkInfo set-up + /** + * Get a Filter using the MetadataLinkInfo content (metadataURL) + * + * @param content + * @return the filter + */ + public static Filter getFilterByContent(String content) { + return new filterByContent(content); + } + + /** + * Constructs a new GSMetadataLinkInfoEncoder + * + */ + public GSMetadataLinkInfoEncoder() { + super("metadataLink"); + } + + /** + * Set-up quickly a metadataLinkInfo * * @param type * @param metadataType * @param content */ - public void setup(String type, String metadataType, String content){ + public void setup(String type, String metadataType, String content) { set(ResourceMetadataLinkInfo.type.name(), type); set(ResourceMetadataLinkInfo.metadataType.name(), metadataType); set(ResourceMetadataLinkInfo.content.name(), content); } - - public void setup(Map metadataLinkInfos){ - for (Entry mdLinkInfo:metadataLinkInfos.entrySet()){ - set(mdLinkInfo.getKey().toString(),mdLinkInfo.getValue()); - } + + /** + * Set-up a metadataLinkInfo + * + * @param metadataLinkInfos + */ + public void setup(Map metadataLinkInfos) { + for (Entry mdLinkInfo : metadataLinkInfos + .entrySet()) { + set(mdLinkInfo.getKey().toString(), mdLinkInfo.getValue()); + } } - public void setMetadataLinkInfoMember(ResourceMetadataLinkInfo type, String value){ - set(type.toString(),value); - } - + /** + * Set a MetadataLinkInfo member (type, metadataType or content) + * + * @param type + * @param value + */ + public void setMetadataLinkInfoMember(ResourceMetadataLinkInfo type, + String value) { + set(type.toString(), value); + } - public boolean delMetadataLinkInfoMember(ResourceMetadataLinkInfo type){ - return ElementUtils.remove(this.getRoot(), get(type.toString())); - } - + /** + * Deletes a MetadataLinkInfo member + * + * @param type + * @return true if the metadataLinkInfo member is removed + */ + public boolean delMetadataLinkInfoMember(ResourceMetadataLinkInfo type) { + return ElementUtils.remove(this.getRoot(), get(type.toString())); + } + + /** + * Get the value of the MetadataLinkInfo member + * + * @param type + * @return the value of the MetadataLinkInfo member + */ + public String getMetadataLinkInfoMember(ResourceMetadataLinkInfo type) { + Element el = get(type.toString()); + if (el != null) + return el.getTextTrim(); + else + return null; + } - public String getMetadataLinkInfoMember(ResourceMetadataLinkInfo type){ - Element el = get(type.toString()); - if (el!=null) - return el.getTextTrim(); - else - return null; - } - } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/ResourceMetadataLinkInfo.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/ResourceMetadataLinkInfo.java index 91c21e2..d71c91c 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/ResourceMetadataLinkInfo.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadatalink/ResourceMetadataLinkInfo.java @@ -27,7 +27,8 @@ package it.geosolutions.geoserver.rest.encoder.metadatalink; /** * Enumeration of featureType metadataLink member * - * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | emmanuel.blondel@fao.org + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org * */ public enum ResourceMetadataLinkInfo {