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 * @author Emmanuel Blondel
* *
* @return the list of GSMetadataLinkEncoder * @return the list of GSMetadataLinkEncoder
*/ */
public List<GSMetadataLinkInfoEncoder> getEncodedMetadataLinkInfoList() { public List<GSMetadataLinkInfoEncoder> getEncodedMetadataLinkInfoList() {
List<GSMetadataLinkInfoEncoder> metaLinksList = null; List<GSMetadataLinkInfoEncoder> 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<GSMetadataLinkInfoEncoder>(metaLinks.size()); metaLinksList = new ArrayList<GSMetadataLinkInfoEncoder>(
for (Element metaLink : metaLinks) { metaLinks.size());
final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder(); for (Element metaLink : metaLinks) {
for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo.values()) { final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder();
String key = rmd.toString(); for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo
metaLinkEnc.setMetadataLinkInfoMember(rmd, metaLink.getChildText(key)); //change .values()) {
} String key = rmd.toString();
metaLinksList.add(metaLinkEnc); 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;
} }
/** /**
* @param MetadataLink the metadataLink to add * Adds a MetadataLinkInfo to the GeoServer Resource
* *
* @author Emmanuel Blondel * @param MetadataLink
*/ *
public void addMetadataLinkInfo(GSMetadataLinkInfoEncoder metadataLinkInfo) { * @author Emmanuel Blondel
metadataLinksListEncoder.addContent(metadataLinkInfo.getRoot()); */
} 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 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 * @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 {
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) { /** A class to filter the MetadataLinkInfo by content
Element el=((Element) obj).getChild(ResourceMetadataLinkInfo.content.toString()); *
if (el!=null && el.getTextTrim().equals(key)) { *
return true; */
} public static class filterByContent implements Filter {
return false;
} final private String key;
}
public filterByContent(String content) {
public static Filter getFilterByContent(String content){ this.key = content;
return new filterByContent(content); }
}
private static final long serialVersionUID = 1L;
public GSMetadataLinkInfoEncoder() { public boolean matches(Object obj) {
super("metadataLink"); 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 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);
}
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;
}
} }

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 {