Merge pull request #68 from eblondel/master-62-metadatalink-refactor

#62 MetadataLinkInfo - refactor / simplify the implementation
This commit is contained in:
Carlo Cancellieri 2013-04-15 05:19:34 -07:00
commit 9cd87b7ea3
6 changed files with 133 additions and 79 deletions

View File

@ -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<ResourceMetadataLinkInfo,String>
*/
public List<Map<ResourceMetadataLinkInfo, String>> getMetadataLinkInfoList() {
List<Map<ResourceMetadataLinkInfo, String>> metaLinksList = null;
final Element metaLinksRoot = rootElem.getChild("metadataLinks");
final List<Element> metaLinks = metaLinksRoot.getChildren();
if (metaLinks != null) {
metaLinksList = new ArrayList<Map<ResourceMetadataLinkInfo, String>>(
metaLinks.size());
for (Element metaLink : metaLinks) {
Map<ResourceMetadataLinkInfo, String> metaLinkMap = new HashMap<ResourceMetadataLinkInfo, String>();
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);
}

View File

@ -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());
}

View File

@ -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;
* <pre>
* {@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");
* }
* </pre>
* 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<ResourceMetadataLinkInfo, String> metadataLinkInfos) {
for (Entry<ResourceMetadataLinkInfo, String> 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);
}
}

View File

@ -79,14 +79,14 @@ public class MetadataDecoderTest {
List<GSMetadataLinkInfoEncoder> 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());
}
}

View File

@ -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();

View File

@ -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());
}
}