MetadataLinkInfo - refactor / simplify the implementation
This commit is contained in:
parent
d61e7fd142
commit
637ec22000
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user