MetadataLink support - enrich javadoc & format code/comments

This commit is contained in:
eblondel 2013-04-10 14:51:27 +02:00
parent 7fee169369
commit 4aeac4d080
4 changed files with 199 additions and 134 deletions

View File

@ -43,7 +43,8 @@ import org.jdom.Namespace;
* Parse a resource (FeatureType or Coverage) returned as XML REST objects. * Parse a resource (FeatureType or Coverage) returned as XML REST objects.
* *
* @author etj * @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 { public class RESTResource {
protected final Element rootElem; protected final Element rootElem;
@ -159,58 +160,63 @@ public class RESTResource {
/** /**
* * Decodes the list of MetadataLinkInfo from the GeoServer Resource
* @author Emmanuel Blondel *
* * @author Emmanuel Blondel
* @return the list of metadataLinkInfo *
*/ * @return the list of Map<ResourceMetadataLinkInfo,String>
public List<Map<ResourceMetadataLinkInfo, String>> getMetadataLinkInfoList() { */
List<Map<ResourceMetadataLinkInfo, String>> metaLinksList = null; public List<Map<ResourceMetadataLinkInfo, String>> getMetadataLinkInfoList() {
List<Map<ResourceMetadataLinkInfo, String>> metaLinksList = null;
final Element metaLinksRoot = rootElem.getChild("metadataLinks"); final Element metaLinksRoot = rootElem.getChild("metadataLinks");
final List<Element> metaLinks = metaLinksRoot.getChildren(); final List<Element> metaLinks = metaLinksRoot.getChildren();
if (metaLinks != null) { if (metaLinks != null) {
metaLinksList = new ArrayList<Map<ResourceMetadataLinkInfo, String>>(metaLinks.size()); metaLinksList = new ArrayList<Map<ResourceMetadataLinkInfo, String>>(
for (Element metaLink : metaLinks) { metaLinks.size());
Map<ResourceMetadataLinkInfo, String> metaLinkMap = new HashMap<ResourceMetadataLinkInfo, String>(); for (Element metaLink : metaLinks) {
metaLinksList.add(metaLinkMap); Map<ResourceMetadataLinkInfo, String> metaLinkMap = new HashMap<ResourceMetadataLinkInfo, String>();
for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo.values()) { metaLinksList.add(metaLinkMap);
String key = rmd.toString(); for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo
metaLinkMap.put(rmd, metaLink.getChildText(key)); .values()) {
} String key = rmd.toString();
} metaLinkMap.put(rmd, metaLink.getChildText(key));
} }
return metaLinksList; }
} }
return metaLinksList;
}
/**
* Decodes the list of MetadataLinkInfo from the GeoServer Resource
*
* @author Emmanuel Blondel
*
* @return the list of GSMetadataLinkEncoder
*/
public List<GSMetadataLinkInfoEncoder> getEncodedMetadataLinkInfoList() {
List<GSMetadataLinkInfoEncoder> metaLinksList = null;
/** final Element metaLinksRoot = rootElem.getChild("metadataLinks");
* final List<Element> metaLinks = metaLinksRoot.getChildren();
* @author Emmanuel Blondel if (metaLinks != null) {
* metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>(
* @return the list of GSMetadataLinkEncoder metaLinks.size());
*/ for (Element metaLink : metaLinks) {
public List<GSMetadataLinkInfoEncoder> getEncodedMetadataLinkInfoList() { final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder();
List<GSMetadataLinkInfoEncoder> metaLinksList = null; for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo
.values()) {
final Element metaLinksRoot = rootElem.getChild("metadataLinks"); String key = rmd.toString();
final List<Element> metaLinks = metaLinksRoot.getChildren(); metaLinkEnc.setMetadataLinkInfoMember(rmd,
if (metaLinks != null) { metaLink.getChildText(key)); // change
metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>(metaLinks.size()); }
for (Element metaLink : metaLinks) { metaLinksList.add(metaLinkEnc);
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 // * @return the list of available attribute names

View File

@ -47,7 +47,8 @@ import org.jdom.filter.Filter;
* *
* @author ETj (etj at geo-solutions.it) * @author ETj (etj at geo-solutions.it)
* @author Carlo Cancellieri - carlo.cancellieri@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 public abstract class GSResourceEncoder
extends PropertyXMLEncoder { extends PropertyXMLEncoder {
@ -86,10 +87,6 @@ public abstract class GSResourceEncoder
set("enabled", (enabled) ? "true" : "false"); set("enabled", (enabled) ? "true" : "false");
} }
// TODO MetadataLink
// public void setMetadata(String key, String url){
// metadata.set(key, url);
// }
/** /**
* @param key * @param key
@ -141,34 +138,36 @@ public abstract class GSResourceEncoder
})).size() == 0 ? false : true; })).size() == 0 ? false : true;
} }
/**
* Adds a MetadataLinkInfo to the GeoServer Resource
*
* @param MetadataLink
*
* @author Emmanuel Blondel
*/
public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) {
metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot());
}
/** /**
* @param MetadataLink the metadataLink to add * Adds quickly a MetadataLinkInfo to the GeoServer Resource
* *
* @author Emmanuel Blondel * @author Emmanuel Blondel
*/ *
public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) { * @param type
metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot()); * @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());
}
/**
/** Quick MetadataLinkInfo set-up * Deletes a metadataLinkInfo from the list using the metadataURL
* * (MetadataLinkInfo content)
* @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)
* *
* @author Emmanuel Blondel * @author Emmanuel Blondel
* *
@ -176,8 +175,10 @@ public abstract class GSResourceEncoder
* @return true if something is removed, false otherwise * @return true if something is removed, false otherwise
*/ */
public boolean delMetadataLinkInfo(final String metadataURL) { public boolean delMetadataLinkInfo(final String metadataURL) {
return (metadataLinksListEncoder.removeContent(GSMetadataLinkInfoEncoder.getFilterByContent(metadataURL))).size() == 0 ? false return (metadataLinksListEncoder
: true; .removeContent(GSMetadataLinkInfoEncoder
.getFilterByContent(metadataURL))).size() == 0 ? false
: true;
} }

View File

@ -33,75 +33,132 @@ import org.jdom.filter.Filter;
import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
/** GSMetadataLinkEncoder /**
* GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource
* (feature type /coverage), as follows:
* <pre>
* {@code
* final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder();
* mde.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata");
* }
* </pre>
* For this example, the XML output is:
* <pre>
* {@code
* <metadataLink>
* <type>text/xml</type>
* <metadataType>ISO19115:2003</metadataType>
* <content>http://www.organization.org/metadata</content>
* </metadataLink>
* }
* </pre>
* *
* @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 class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder {
/** A class to filter the MetadataLinkInfo by content
*
*
*/
public static class filterByContent implements Filter { public static class filterByContent implements Filter {
final private String key; final private String key;
public filterByContent(String content){ public filterByContent(String content) {
this.key=content; this.key = content;
} }
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public boolean matches(Object obj) { public boolean matches(Object obj) {
Element el=((Element) obj).getChild(ResourceMetadataLinkInfo.content.toString()); Element el = ((Element) obj)
if (el!=null && el.getTextTrim().equals(key)) { .getChild(ResourceMetadataLinkInfo.content.toString());
return true; if (el != null && el.getTextTrim().equals(key)) {
} return true;
return false; }
} return false;
} }
}
public static Filter getFilterByContent(String content){
return new filterByContent(content);
}
/**
* 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() { public GSMetadataLinkInfoEncoder() {
super("metadataLink"); super("metadataLink");
} }
/** quick MetadataLinkInfo set-up /**
* Set-up quickly a metadataLinkInfo
* *
* @param type * @param type
* @param metadataType * @param metadataType
* @param content * @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.type.name(), type);
set(ResourceMetadataLinkInfo.metadataType.name(), metadataType); set(ResourceMetadataLinkInfo.metadataType.name(), metadataType);
set(ResourceMetadataLinkInfo.content.name(), content); set(ResourceMetadataLinkInfo.content.name(), content);
} }
public void setup(Map<ResourceMetadataLinkInfo, String> metadataLinkInfos){ /**
for (Entry<ResourceMetadataLinkInfo,String> mdLinkInfo:metadataLinkInfos.entrySet()){ * Set-up a metadataLinkInfo
set(mdLinkInfo.getKey().toString(),mdLinkInfo.getValue()); *
} * @param metadataLinkInfos
*/
public void setup(Map<ResourceMetadataLinkInfo, String> metadataLinkInfos) {
for (Entry<ResourceMetadataLinkInfo, String> 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);
}
/**
* 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()));
}
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()); public String getMetadataLinkInfoMember(ResourceMetadataLinkInfo type) {
if (el!=null) Element el = get(type.toString());
return el.getTextTrim(); if (el != null)
else return el.getTextTrim();
return null; else
} return null;
}
} }

View File

@ -27,7 +27,8 @@ package it.geosolutions.geoserver.rest.encoder.metadatalink;
/** /**
* Enumeration of featureType metadataLink member * 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 { public enum ResourceMetadataLinkInfo {