Merge pull request #68 from eblondel/master-62-metadatalink-refactor
#62 MetadataLinkInfo - refactor / simplify the implementation
This commit is contained in:
commit
9cd87b7ea3
@ -158,36 +158,6 @@ public class RESTResource {
|
|||||||
return attrsList;
|
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
|
* Decodes the list of MetadataLinkInfo from the GeoServer Resource
|
||||||
*
|
*
|
||||||
@ -205,12 +175,9 @@ public class RESTResource {
|
|||||||
metaLinks.size());
|
metaLinks.size());
|
||||||
for (Element metaLink : metaLinks) {
|
for (Element metaLink : metaLinks) {
|
||||||
final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder();
|
final GSMetadataLinkInfoEncoder metaLinkEnc = new GSMetadataLinkInfoEncoder();
|
||||||
for (ResourceMetadataLinkInfo rmd : ResourceMetadataLinkInfo
|
metaLinkEnc.setType(metaLink.getChildText(ResourceMetadataLinkInfo.type.name()));
|
||||||
.values()) {
|
metaLinkEnc.setMetadataType(metaLink.getChildText(ResourceMetadataLinkInfo.metadataType.name()));
|
||||||
String key = rmd.toString();
|
metaLinkEnc.setContent(metaLink.getChildText(ResourceMetadataLinkInfo.content.name()));
|
||||||
metaLinkEnc.setMetadataLinkInfoMember(rmd,
|
|
||||||
metaLink.getChildText(key)); // change
|
|
||||||
}
|
|
||||||
metaLinksList.add(metaLinkEnc);
|
metaLinksList.add(metaLinkEnc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -161,8 +161,8 @@ public abstract class GSResourceEncoder
|
|||||||
*/
|
*/
|
||||||
public void addMetadataLinkInfo(String type, String metadataType,
|
public void addMetadataLinkInfo(String type, String metadataType,
|
||||||
String content) {
|
String content) {
|
||||||
final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder();
|
final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder(
|
||||||
mde.setup(type, metadataType, content);
|
type, metadataType, content);
|
||||||
metadataLinksListEncoder.addContent(mde.getRoot());
|
metadataLinksListEncoder.addContent(mde.getRoot());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ import org.jdom.Element;
|
|||||||
import org.jdom.filter.Filter;
|
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.XmlElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource
|
* GSMetadataLinkEncoder - encodes a metadataLink for a given GeoServer Resource
|
||||||
@ -39,7 +39,9 @@ import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
|
|||||||
* <pre>
|
* <pre>
|
||||||
* {@code
|
* {@code
|
||||||
* final GSMetadataLinkInfoEncoder mde = new GSMetadataLinkInfoEncoder();
|
* 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>
|
* </pre>
|
||||||
* For this example, the XML output is:
|
* For this example, the XML output is:
|
||||||
@ -57,13 +59,13 @@ import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder;
|
|||||||
* emmanuel.blondel@fao.org
|
* emmanuel.blondel@fao.org
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder {
|
public class GSMetadataLinkInfoEncoder extends XmlElement {
|
||||||
|
|
||||||
/** A class to filter the MetadataLinkInfo by content
|
/** A class to filter the MetadataLinkInfo by content
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static class filterByContent implements Filter {
|
private static class filterByContent implements Filter {
|
||||||
|
|
||||||
final private String key;
|
final private String key;
|
||||||
|
|
||||||
@ -101,6 +103,18 @@ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder {
|
|||||||
super("metadataLink");
|
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
|
* Set-up quickly a metadataLinkInfo
|
||||||
*
|
*
|
||||||
@ -108,43 +122,88 @@ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder {
|
|||||||
* @param metadataType
|
* @param metadataType
|
||||||
* @param content
|
* @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.type.name(), type);
|
||||||
set(ResourceMetadataLinkInfo.metadataType.name(), metadataType);
|
set(ResourceMetadataLinkInfo.metadataType.name(), metadataType);
|
||||||
set(ResourceMetadataLinkInfo.content.name(), content);
|
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)
|
* Set a MetadataLinkInfo member (type, metadataType or content)
|
||||||
*
|
*
|
||||||
* @param type
|
* @param type
|
||||||
* @param value
|
* @param value
|
||||||
*/
|
*/
|
||||||
public void setMetadataLinkInfoMember(ResourceMetadataLinkInfo type,
|
protected void setMember(ResourceMetadataLinkInfo type,
|
||||||
String value) {
|
String value) {
|
||||||
set(type.toString(), 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
|
* Deletes a MetadataLinkInfo member
|
||||||
*
|
*
|
||||||
* @param type
|
* @param type
|
||||||
* @return true if the metadataLinkInfo member is removed
|
* @return true if the metadataLinkInfo member is removed
|
||||||
*/
|
*/
|
||||||
public boolean delMetadataLinkInfoMember(ResourceMetadataLinkInfo type) {
|
protected boolean delMember(ResourceMetadataLinkInfo type) {
|
||||||
return ElementUtils.remove(this.getRoot(), get(type.toString()));
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -153,12 +212,39 @@ public class GSMetadataLinkInfoEncoder extends PropertyXMLEncoder {
|
|||||||
* @param type
|
* @param type
|
||||||
* @return the value of the MetadataLinkInfo member
|
* @return the value of the MetadataLinkInfo member
|
||||||
*/
|
*/
|
||||||
public String getMetadataLinkInfoMember(ResourceMetadataLinkInfo type) {
|
protected String getMember(ResourceMetadataLinkInfo type) {
|
||||||
Element el = get(type.toString());
|
Element el = this.getRoot().getChild(type.toString());
|
||||||
if (el != null)
|
if (el != null)
|
||||||
return el.getTextTrim();
|
return el.getTextTrim();
|
||||||
else
|
else
|
||||||
return null;
|
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();
|
List<GSMetadataLinkInfoEncoder> list = coverage.getEncodedMetadataLinkInfoList();
|
||||||
|
|
||||||
GSMetadataLinkInfoEncoder metadataLinkInfo1 = list.get(0);
|
GSMetadataLinkInfoEncoder metadataLinkInfo1 = list.get(0);
|
||||||
Assert.assertEquals(metadataLinkInfo1.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type),"text/xml");
|
Assert.assertEquals("text/xml", metadataLinkInfo1.getType());
|
||||||
Assert.assertEquals(metadataLinkInfo1.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType),"ISO19115:2003");
|
Assert.assertEquals("ISO19115:2003", metadataLinkInfo1.getMetadataType());
|
||||||
Assert.assertEquals(metadataLinkInfo1.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content),"http://www.organization.org/metadata1");
|
Assert.assertEquals("http://www.organization.org/metadata1", metadataLinkInfo1.getContent());
|
||||||
|
|
||||||
GSMetadataLinkInfoEncoder metadataLinkInfo2 = list.get(1);
|
GSMetadataLinkInfoEncoder metadataLinkInfo2 = list.get(1);
|
||||||
Assert.assertEquals(metadataLinkInfo2.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type),"text/html");
|
Assert.assertEquals("text/html",metadataLinkInfo2.getType());
|
||||||
Assert.assertEquals(metadataLinkInfo2.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType),"ISO19115:2003");
|
Assert.assertEquals("ISO19115:2003",metadataLinkInfo2.getMetadataType());
|
||||||
Assert.assertEquals(metadataLinkInfo2.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content),"http://www.organization.org/metadata2");
|
Assert.assertEquals("http://www.organization.org/metadata2",metadataLinkInfo2.getContent());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,8 +78,9 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest {
|
|||||||
fte.setEnabled(true);
|
fte.setEnabled(true);
|
||||||
|
|
||||||
//metadataLink
|
//metadataLink
|
||||||
GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder();
|
GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder(
|
||||||
metadatalink.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata1");
|
"text/xml", "ISO19115:2003",
|
||||||
|
"http://www.organization.org/metadata1");
|
||||||
fte.addMetadataLinkInfo(metadatalink);
|
fte.addMetadataLinkInfo(metadatalink);
|
||||||
|
|
||||||
GSLayerEncoder layerEncoder = new GSLayerEncoder();
|
GSLayerEncoder layerEncoder = new GSLayerEncoder();
|
||||||
|
|||||||
@ -35,19 +35,19 @@ public class GSMetadataLinkInfoEncoderTest {
|
|||||||
GSMetadataLinkInfoEncoder encoder = new GSMetadataLinkInfoEncoder();
|
GSMetadataLinkInfoEncoder encoder = new GSMetadataLinkInfoEncoder();
|
||||||
encoder.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata1");
|
encoder.setup("text/xml", "ISO19115:2003","http://www.organization.org/metadata1");
|
||||||
|
|
||||||
Assert.assertEquals("text/xml", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type));
|
Assert.assertEquals("text/xml", encoder.getType());
|
||||||
Assert.assertEquals("ISO19115:2003", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType));
|
Assert.assertEquals("ISO19115:2003", encoder.getMetadataType());
|
||||||
Assert.assertEquals("http://www.organization.org/metadata1", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content));
|
Assert.assertEquals("http://www.organization.org/metadata1", encoder.getContent());
|
||||||
|
|
||||||
Assert.assertTrue(encoder.delMetadataLinkInfoMember(ResourceMetadataLinkInfo.content));
|
Assert.assertTrue(encoder.delContent());
|
||||||
Assert.assertNull(encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content));
|
Assert.assertNull(encoder.getContent());
|
||||||
|
|
||||||
encoder.setMetadataLinkInfoMember(ResourceMetadataLinkInfo.type, "text/html");
|
encoder.setType("text/html");
|
||||||
encoder.setMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType, "FGDC");
|
encoder.setMetadataType("FGDC");
|
||||||
encoder.setMetadataLinkInfoMember(ResourceMetadataLinkInfo.content, "http://www.organization.org/metadata2");
|
encoder.setContent("http://www.organization.org/metadata2");
|
||||||
Assert.assertEquals("text/html", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.type));
|
Assert.assertEquals("text/html", encoder.getType());
|
||||||
Assert.assertEquals("FGDC", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.metadataType));
|
Assert.assertEquals("FGDC", encoder.getMetadataType());
|
||||||
Assert.assertEquals("http://www.organization.org/metadata2", encoder.getMetadataLinkInfoMember(ResourceMetadataLinkInfo.content));
|
Assert.assertEquals("http://www.organization.org/metadata2", encoder.getContent());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user