From 637ec2200024fd6cfb94858efbf8920b7fbd3f3b Mon Sep 17 00:00:00 2001 From: eblondel Date: Mon, 15 Apr 2013 13:52:37 +0200 Subject: [PATCH] MetadataLinkInfo - refactor / simplify the implementation --- .../geoserver/rest/decoder/RESTResource.java | 39 +----- .../rest/encoder/GSResourceEncoder.java | 4 +- .../GSMetadataLinkInfoEncoder.java | 130 +++++++++++++++--- .../decoder/MetadataDecoderTest.java | 12 +- .../encoder/feature/GSFeatureEncoderTest.java | 5 +- .../GSMetadataLinkInfoEncoderTest.java | 22 +-- 6 files changed, 133 insertions(+), 79 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 23c3f8b..0dad15a 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java +++ b/src/main/java/it/geosolutions/geoserver/rest/decoder/RESTResource.java @@ -158,36 +158,6 @@ public class RESTResource { return attrsList; } - - - /** - * 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; - } - /** * Decodes the list of MetadataLinkInfo from the GeoServer Resource * @@ -205,12 +175,9 @@ public class RESTResource { 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 - } + metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name())); + metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name())); + metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name())); metaLinksList.add(metaLinkEnc); } 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 960bd5d..cc999be 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -161,8 +161,8 @@ public abstract class GSResourceEncoder */ public void addMetadataLinkInfo(String type, String metadataType, String content) { - final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder(); - mde.setup(type, metadataType, content); + final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder( + type, metadataType, content); metadataLinksListEncoder.addContent(mde.getRoot()); } 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 8ad2c4b..40efe52 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 @@ -31,7 +31,7 @@ import org.jdom.Element; import org.jdom.filter.Filter; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; -import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; /** * GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource @@ -39,7 +39,9 @@ import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; *
  * {@code
  * final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder();
- * mde.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata");
+ * mde.setType("text/xml");
+ * mde.setMetadataType("ISO19115:2003");
+ * mde.setContent("http://www.organization.org/metadata");
  * }
  * 
* For this example, the XML output is: @@ -57,13 +59,13 @@ import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; * emmanuel.blondel@fao.org * */ -public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder { +public class GSMetadataLinkInfoEncoder extends XmlElement { /** A class to filter the MetadataLinkInfo by content * * */ - public static class filterByContent implements Filter { + private static class filterByContent implements Filter { final private String key; @@ -101,6 +103,18 @@ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder { super("metadataLink"); } + /** + * Constructs quickly a MetadataLink info + * + * @param type (required) + * @param metadataType (required) + * @param content (required) + */ + public GSMetadataLinkInfoEncoder(String type, String metadataType, String content){ + super("metadataLink"); + this.setup(type, metadataType, content); + } + /** * Set-up quickly a metadataLinkInfo * @@ -108,23 +122,11 @@ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder { * @param metadataType * @param content */ - public void setup(String type, String metadataType, String content) { + protected void setup(String type, String metadataType, String content) { set(ResourceMetadataLinkInfo.type.name(), type); set(ResourceMetadataLinkInfo.metadataType.name(), metadataType); set(ResourceMetadataLinkInfo.content.name(), content); } - - /** - * Set-up a metadataLinkInfo - * - * @param metadataLinkInfos - */ - public void setup(Map metadataLinkInfos) { - for (Entry mdLinkInfo : metadataLinkInfos - .entrySet()) { - set(mdLinkInfo.getKey().toString(), mdLinkInfo.getValue()); - } - } /** * Set a MetadataLinkInfo member (type, metadataType or content) @@ -132,33 +134,117 @@ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder { * @param type * @param value */ - public void setMetadataLinkInfoMember(ResourceMetadataLinkInfo type, + protected void setMember(ResourceMetadataLinkInfo type, String value) { set(type.toString(), value); } + /** + * Set the mime type + * + * @param type + */ + public void setType(String type){ + this.setMember(ResourceMetadataLinkInfo.type, type); + } + + /** + * Set the metadata type + * + * @param metadataType + */ + public void setMetadataType(String metadataType){ + this.setMember(ResourceMetadataLinkInfo.metadataType, metadataType); + } + + /** + * Set the content + * + * @param content + */ + public void setContent(String content){ + this.setMember(ResourceMetadataLinkInfo.content, content); + } + /** * 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())); + protected boolean delMember(ResourceMetadataLinkInfo type) { + return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString())); } + /** + * Deletes the type + * + * @param type + * @return true if removed + */ + public boolean delType(){ + return this.delMember(ResourceMetadataLinkInfo.type); + } + + /** + * Deletes the metadata type + * + * @param metadata type + * @return true if removed + */ + public boolean delMetadataType(){ + return this.delMember(ResourceMetadataLinkInfo.metadataType); + } + + /** + * Deletes the content + * + * @param content + * @return true if removed + */ + public boolean delContent(){ + return this.delMember(ResourceMetadataLinkInfo.content); + } + /** * 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()); + protected String getMember(ResourceMetadataLinkInfo type) { + Element el = this.getRoot().getChild(type.toString()); if (el != null) return el.getTextTrim(); else return null; } + + /** + * Get the mime type + * + * @return + */ + public String getType(){ + return this.getMember(ResourceMetadataLinkInfo.type); + } + + /** + * Get the metadata type + * + * @return + */ + public String getMetadataType(){ + return this.getMember(ResourceMetadataLinkInfo.metadataType); + } + + /** + * Get the content + * + * @return + */ + public String getContent(){ + return this.getMember(ResourceMetadataLinkInfo.content); + } } diff --git a/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java b/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java index a259360..2f92d50 100644 --- a/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/decoder/MetadataDecoderTest.java @@ -79,14 +79,14 @@ public class MetadataDecoderTest { List list = coverage.getEncodedMetadataLinkInfoList(); GSMetadataLinkInfoEncoder metadataLinkInfo1 = list.get(0); - Assert.assertEquals(metadataLinkInfo1.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type),"text/xml"); - Assert.assertEquals(metadataLinkInfo1.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType),"ISO19115:2003"); - Assert.assertEquals(metadataLinkInfo1.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content),"http://www.organization.org/metadata1"); + Assert.assertEquals("text/xml", metadataLinkInfo1.getType()); + Assert.assertEquals("ISO19115:2003", metadataLinkInfo1.getMetadataType()); + Assert.assertEquals("http://www.organization.org/metadata1", metadataLinkInfo1.getContent()); GSMetadataLinkInfoEncoder metadataLinkInfo2 = list.get(1); - Assert.assertEquals(metadataLinkInfo2.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type),"text/html"); - Assert.assertEquals(metadataLinkInfo2.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType),"ISO19115:2003"); - Assert.assertEquals(metadataLinkInfo2.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content),"http://www.organization.org/metadata2"); + Assert.assertEquals("text/html",metadataLinkInfo2.getType()); + Assert.assertEquals("ISO19115:2003",metadataLinkInfo2.getMetadataType()); + Assert.assertEquals("http://www.organization.org/metadata2",metadataLinkInfo2.getContent()); } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java index 3d273f9..125c888 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java @@ -78,8 +78,9 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest { fte.setEnabled(true); //metadataLink - GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder(); - metadatalink.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata1"); + GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder( + "text/xml", "ISO19115:2003", + "http://www.organization.org/metadata1"); fte.addMetadataLinkInfo(metadatalink); GSLayerEncoder layerEncoder = new GSLayerEncoder(); diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoderTest.java index 97de7fd..e6de192 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/metadatalink/GSMetadataLinkInfoEncoderTest.java @@ -35,19 +35,19 @@ public class GSMetadataLinkInfoEncoderTest { GSMetadataLinkInfoEncoder encoder = new GSMetadataLinkInfoEncoder(); encoder.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata1"); - Assert.assertEquals("text/xml", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type)); - Assert.assertEquals("ISO19115:2003", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType)); - Assert.assertEquals("http://www.organization.org/metadata1", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content)); + Assert.assertEquals("text/xml", encoder.getType()); + Assert.assertEquals("ISO19115:2003", encoder.getMetadataType()); + Assert.assertEquals("http://www.organization.org/metadata1", encoder.getContent()); - Assert.assertTrue(encoder.delMetadataLinkInfoMember(ResourceMetadataLinkInfo.content)); - Assert.assertNull(encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content)); + Assert.assertTrue(encoder.delContent()); + Assert.assertNull(encoder.getContent()); - encoder.setMetadataLinkInfoMember(ResourceMetadataLinkInfo.type, "text/html"); - encoder.setMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType, "FGDC"); - encoder.setMetadataLinkInfoMember(ResourceMetadataLinkInfo.content, "http://www.organization.org/metadata2"); - Assert.assertEquals("text/html", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type)); - Assert.assertEquals("FGDC", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType)); - Assert.assertEquals("http://www.organization.org/metadata2", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content)); + encoder.setType("text/html"); + encoder.setMetadataType("FGDC"); + encoder.setContent("http://www.organization.org/metadata2"); + Assert.assertEquals("text/html", encoder.getType()); + Assert.assertEquals("FGDC", encoder.getMetadataType()); + Assert.assertEquals("http://www.organization.org/metadata2", encoder.getContent()); } } \ No newline at end of file