diff --git a/.classpath b/.classpath
index 098b190..e3894ac 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,6 @@
-
+
@@ -27,5 +27,5 @@
-
+
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCalogueMetadataFormatReader.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCalogueMetadataFormatReader.java
index 726294d..2350738 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCalogueMetadataFormatReader.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCalogueMetadataFormatReader.java
@@ -6,7 +6,7 @@ import java.util.Map;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.scope.impl.ScopeBean;
-import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType;
+import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataProfile;
import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat;
import org.gcube.datacatalogue.metadatadiscovery.reader.MetadataFormatDiscovery;
import org.gcube.datacatalogue.metadatadiscovery.reader.MetadataFormatReader;
@@ -44,9 +44,12 @@ public class DataCalogueMetadataFormatReader implements DataCatalogueMetadataDis
scope = new ScopeBean(scopeString);
medataFormatDiscovery = new MetadataFormatDiscovery(scope);
- logger.info("MedataFormatDiscovery has retrieved: "+medataFormatDiscovery.getMetadataTypes().size() +" metadata type/s");
+ logger.info("MedataFormatDiscovery has retrieved: "+medataFormatDiscovery.getMetadataProfiles().size() +" metadata type/s");
logger.debug("filling cache for MedataFormat");
- for (MetadataType mT : medataFormatDiscovery.getMetadataTypes()) {
+ for (MetadataProfile mT : medataFormatDiscovery.getMetadataProfiles()) {
+ if(mT==null)
+ continue;
+
MetadataFormatReader reader = new MetadataFormatReader(scope, mT.getId());
hash.put(mT.getId(), reader.getMetadataFormat());
logger.debug("MetadataType id: "+mT.getId() +" cached as: "+reader.getMetadataFormat());
@@ -57,25 +60,25 @@ public class DataCalogueMetadataFormatReader implements DataCatalogueMetadataDis
* @see org.gcube.datacatalogue.metadatadiscovery.DataCatalogueMetadataDiscovery#getListOfMetadataTypes()
*/
@Override
- public List getListOfMetadataTypes() throws Exception {
+ public List getListOfMetadataProfiles() throws Exception {
- return medataFormatDiscovery.getMetadataTypes();
+ return medataFormatDiscovery.getMetadataProfiles();
}
/* (non-Javadoc)
* @see org.gcube.datacatalogue.metadatadiscovery.DataCatalogueMetadataDiscovery#getMetadataFormatForMetadataType(org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType)
*/
@Override
- public MetadataFormat getMetadataFormatForMetadataType(MetadataType type) throws Exception {
+ public MetadataFormat getMetadataFormatForMetadataProfile(MetadataProfile profile) throws Exception {
- if(type==null)
- throw new Exception("MetadataType is null");
+ if(profile==null)
+ throw new Exception("Input "+ MetadataProfile.class.getSimpleName() + " is null");
- MetadataFormat format = hash.get(type.getId());
+ MetadataFormat format = hash.get(profile.getId());
if(format!=null)
return format;
- MetadataFormatReader reader = new MetadataFormatReader(scope, type.getId());
+ MetadataFormatReader reader = new MetadataFormatReader(scope, profile.getId());
return reader.getMetadataFormat();
}
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCatalogueMetadataDiscovery.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCatalogueMetadataDiscovery.java
index ddb2f79..492852c 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCatalogueMetadataDiscovery.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCatalogueMetadataDiscovery.java
@@ -5,16 +5,17 @@ package org.gcube.datacatalogue.metadatadiscovery;
import java.util.List;
-import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType;
+import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataProfile;
import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat;
+
/**
* The Interface DataCatalogueMetadataDiscovery.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Jun 8, 2016
+ * Mar 24, 2017
*/
public interface DataCatalogueMetadataDiscovery {
@@ -23,9 +24,9 @@ public interface DataCatalogueMetadataDiscovery {
* Gets the list of metadata types.
*
* @return the list of metadata types
- * @throws Exception
+ * @throws Exception the exception
*/
- List getListOfMetadataTypes() throws Exception;
+ List getListOfMetadataProfiles() throws Exception;
/**
@@ -33,8 +34,8 @@ public interface DataCatalogueMetadataDiscovery {
*
* @param type the type
* @return the metadata format for metadata type
- * @throws Exception
+ * @throws Exception the exception
*/
- MetadataFormat getMetadataFormatForMetadataType(MetadataType type) throws Exception;
+ MetadataFormat getMetadataFormatForMetadataProfile(MetadataProfile type) throws Exception;
}
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/MetadataType.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/MetadataProfile.java
similarity index 69%
rename from src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/MetadataType.java
rename to src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/MetadataProfile.java
index 4203299..cabcc8c 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/MetadataType.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/MetadataProfile.java
@@ -6,27 +6,29 @@ package org.gcube.datacatalogue.metadatadiscovery.bean;
import java.io.Serializable;
+
/**
- * The Class MetadataType.
+ * The Class MetadataProfile.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Jun 8, 2016
+ * Mar 24, 2017
*/
-public class MetadataType implements Serializable{
+public class MetadataProfile implements Serializable{
+
/**
*
*/
- private static final long serialVersionUID = -975360133066572549L;
-
+ private static final long serialVersionUID = 8829173012445264057L;
private String id;
private String name;
private String description;
+ private String metadataType;
/**
* Instantiates a new metadata type.
*/
- public MetadataType() {
+ public MetadataProfile() {
}
@@ -37,12 +39,13 @@ public class MetadataType implements Serializable{
* @param name the name
* @param description the description
*/
- public MetadataType(String id, String name, String description) {
+ public MetadataProfile(String id, String name, String description, String metadataType) {
super();
this.id = id;
this.name = name;
this.description = description;
+ this.metadataType = metadataType;
}
@@ -111,6 +114,23 @@ public class MetadataType implements Serializable{
this.description = description;
}
+ /**
+ * @return the metadataType
+ */
+ public String getMetadataType() {
+
+ return metadataType;
+ }
+
+
+ /**
+ * @param metadataType the metadataType to set
+ */
+ public void setMetadataType(String metadataType) {
+
+ this.metadataType = metadataType;
+ }
+
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@@ -118,14 +138,17 @@ public class MetadataType implements Serializable{
public String toString() {
StringBuilder builder = new StringBuilder();
- builder.append("MetadataType [id=");
+ builder.append("MetadataProfile [id=");
builder.append(id);
builder.append(", name=");
builder.append(name);
builder.append(", description=");
builder.append(description);
+ builder.append(", metadataType=");
+ builder.append(metadataType);
builder.append("]");
return builder.toString();
}
+
}
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/jaxb/MetadataFormat.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/jaxb/MetadataFormat.java
index 49bb17a..2b9c1ca 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/jaxb/MetadataFormat.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/jaxb/MetadataFormat.java
@@ -31,6 +31,10 @@ public class MetadataFormat implements Serializable{
*/
private static final long serialVersionUID = -5881074882343424963L;
+ public static final String LOCAL_NAME_METADATA_TYPE = "metadatatype";
+
+ public static final String LOCAL_NAME_METADATA_FORMAT = "metadataformat";
+
/**
* Instantiates a new metadata format.
*/
@@ -44,7 +48,7 @@ public class MetadataFormat implements Serializable{
@XmlElement(name = "metadatafield")
private List metadataFields;
- @XmlAttribute(name = "metadatatype", required=true)
+ @XmlAttribute(name = LOCAL_NAME_METADATA_TYPE, required=true)
private String metadataType = "";
@XmlTransient
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatDiscovery.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatDiscovery.java
index 1c88165..a06c9bc 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatDiscovery.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatDiscovery.java
@@ -8,15 +8,21 @@ import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
import org.gcube.common.resources.gcore.utils.XPathHelper;
import org.gcube.common.scope.impl.ScopeBean;
-import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType;
+import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataProfile;
+import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat;
import org.gcube.resources.discovery.client.api.DiscoveryClient;
import org.gcube.resources.discovery.client.queries.api.Query;
import org.gcube.resources.discovery.client.queries.impl.QueryBox;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
@@ -33,7 +39,7 @@ public class MetadataFormatDiscovery {
protected static final String DATA_CATALOGUE_METADATA_SECONDARY_TYPE = "DataCatalogueMetadata";
private String secondaryType;
private ScopeBean scope;
- private List metadataTypes;
+ private List metadataProfiles;
/**
* Instantiates a new medata format reader.
@@ -44,7 +50,7 @@ public class MetadataFormatDiscovery {
public MetadataFormatDiscovery(ScopeBean scope) throws Exception {
this.scope = scope;
this.secondaryType = DATA_CATALOGUE_METADATA_SECONDARY_TYPE;
- this.metadataTypes = readProfileFromInfrastrucure();
+ this.metadataProfiles = readMetadataProfilesFromInfrastrucure();
}
/**
@@ -53,7 +59,7 @@ public class MetadataFormatDiscovery {
* @return the applicationProfile profile
* @throws Exception the exception
*/
- private List readProfileFromInfrastrucure() throws Exception {
+ private List readMetadataProfilesFromInfrastrucure() throws Exception {
logger.trace("read secondary type: "+secondaryType);
if(this.scope==null)
@@ -62,7 +68,7 @@ public class MetadataFormatDiscovery {
String scopeString = this.scope.toString();
logger.trace("read scope: "+scopeString);
- List list = new ArrayList();
+ List list = new ArrayList();
try {
@@ -77,21 +83,22 @@ public class MetadataFormatDiscovery {
Query q = new QueryBox(queryString);
DiscoveryClient client = client();
- List appProfile = client.submit(q);
+ List metaProfile = client.submit(q);
- if (appProfile == null || appProfile.size() == 0)
- throw new ApplicationProfileNotFoundException("ApplicationProfile with secondaryType: "+secondaryType+" is not registered in the scope: "+scopeString);
+ if (metaProfile == null || metaProfile.size() == 0)
+ throw new MetadataProfileNotFoundException("Resource/s with secondaryType: "+secondaryType+" is/are not registered in the scope: "+scopeString);
else {
- for (String elem : appProfile) {
+ for (String elem : metaProfile) {
try{
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement();
+ Document doc = docBuilder.parse(new InputSource(new StringReader(elem)));
+ Node node = doc.getDocumentElement();
XPathHelper helper = new XPathHelper(node);
- MetadataType meta = getMetadataTypeFromResource(helper);
+ MetadataProfile meta = getMetadataProfileFromResource(doc, helper);
list.add(meta);
}catch(Exception e){
- logger.error("Error while trying to fetch applicationProfile "+secondaryType+" from the infrastructure, ",e);
+ logger.error("Error while trying to fetch resource with secondary type "+secondaryType+" from the infrastructure, scope: "+scopeString,e);
}
}
}
@@ -110,41 +117,51 @@ public class MetadataFormatDiscovery {
*
* @param helper the helper
* @return the metadata type from resource
- * @throws ApplicationProfileNotFoundException the application profile not found exception
+ * @throws MetadataProfileNotFoundException the application profile not found exception
*/
- private MetadataType getMetadataTypeFromResource(XPathHelper helper) throws ApplicationProfileNotFoundException{
+ private MetadataProfile getMetadataProfileFromResource(Document doc, XPathHelper helper) throws MetadataProfileNotFoundException{
try {
- MetadataType metaType = new MetadataType();
+ MetadataProfile metadataProfile = new MetadataProfile();
List id = helper.evaluate("/Resource/ID/text()");
if(id==null || id.isEmpty())
- throw new ApplicationProfileNotFoundException("Resource ID not found for "+helper.toString());
+ throw new MetadataProfileNotFoundException("Resource ID not found for "+helper.toString());
else{
- metaType.setId(id.get(0));
+ metadataProfile.setId(id.get(0));
}
List name = helper.evaluate("/Resource/Profile/Name/text()");
if(name==null || name.isEmpty())
- throw new ApplicationProfileNotFoundException("Resource Name not found for "+helper.toString());
+ throw new MetadataProfileNotFoundException("Resource Name not found for Resource Id: "+metadataProfile.getId());
else
- metaType.setName(name.get(0));
+ metadataProfile.setName(name.get(0));
List description = helper.evaluate("/Resource/Profile/Description/text()");
if(description==null || description.isEmpty())
- throw new ApplicationProfileNotFoundException("Resource Name not found for "+helper.toString());
+ logger.info("Description not found for Resource ID: "+metadataProfile.getId()+", continuing.. ");
else
- metaType.setDescription(description.get(0));
+ metadataProfile.setDescription(description.get(0));
- return metaType;
+ XPathFactory xpathFactory = XPathFactory.newInstance();
+ XPath xpath = xpathFactory.newXPath();
+ XPathExpression expr = xpath.compile("/Resource/Profile/Body/metadataformat/@"+MetadataFormat.LOCAL_NAME_METADATA_TYPE);
+ String metadataType = (String) expr.evaluate(doc, XPathConstants.STRING);
+
+ if(metadataType==null || metadataType.isEmpty())
+ throw new MetadataProfileNotFoundException("Required attribute '"+MetadataFormat.LOCAL_NAME_METADATA_TYPE+"' not found in the element '"+MetadataFormat.LOCAL_NAME_METADATA_FORMAT+"' for Metadata Profile (with Resource) Id: "+metadataProfile.getId());
+ else
+ metadataProfile.setMetadataType(metadataType);
+
+ return metadataProfile;
} catch (Exception e) {
- logger.error("An error occurred in getListDefaultLayerFromNode ", e);
+ logger.error("An error occurred in getMetadataProfileFromResource ", e);
return null;
}
@@ -186,8 +203,8 @@ public class MetadataFormatDiscovery {
*
* @return the metadataTypes
*/
- public List getMetadataTypes() {
+ public List getMetadataProfiles() {
- return metadataTypes;
+ return metadataProfiles;
}
}
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatReader.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatReader.java
index 4d2b1c4..d801844 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatReader.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataFormatReader.java
@@ -84,7 +84,7 @@ public class MetadataFormatReader {
List appProfile = client.submit(q);
if (appProfile == null || appProfile.size() == 0)
- throw new ApplicationProfileNotFoundException("Your resourceID "+resourceID+" is not registered in the infrastructure, the scope is "+scopeString);
+ throw new MetadataProfileNotFoundException("Your resourceID "+resourceID+" is not registered in the infrastructure, the scope is "+scopeString);
else {
String theResource = null;
try{
diff --git a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/ApplicationProfileNotFoundException.java b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataProfileNotFoundException.java
similarity index 73%
rename from src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/ApplicationProfileNotFoundException.java
rename to src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataProfileNotFoundException.java
index f3eb097..883310a 100644
--- a/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/ApplicationProfileNotFoundException.java
+++ b/src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/MetadataProfileNotFoundException.java
@@ -7,14 +7,14 @@ package org.gcube.datacatalogue.metadatadiscovery.reader;
* Jun 7, 2016
*/
@SuppressWarnings("serial")
-public class ApplicationProfileNotFoundException extends Exception {
+public class MetadataProfileNotFoundException extends Exception {
/**
* Instantiates a new application profile not found exception.
*
* @param message the message
*/
- public ApplicationProfileNotFoundException(String message) {
+ public MetadataProfileNotFoundException(String message) {
super(message);
}
}
\ No newline at end of file
diff --git a/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestDataCatalogueMetadataFormatReader.java b/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestDataCatalogueMetadataFormatReader.java
index 80ed6c4..b4517fc 100644
--- a/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestDataCatalogueMetadataFormatReader.java
+++ b/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestDataCatalogueMetadataFormatReader.java
@@ -4,7 +4,7 @@
package org.gcube.datacatalogue.metadatadiscovery;
import org.gcube.common.scope.api.ScopeProvider;
-import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType;
+import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataProfile;
import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat;
import org.junit.Test;
import org.slf4j.Logger;
@@ -31,8 +31,12 @@ public class TestDataCatalogueMetadataFormatReader {
ScopeProvider.instance.set(scopeString);
DataCalogueMetadataFormatReader reader = new DataCalogueMetadataFormatReader();
int i = 0;
- for (MetadataType mt : reader.getListOfMetadataTypes()) {
- MetadataFormat metadataFormat = reader.getMetadataFormatForMetadataType(mt);
+ for (MetadataProfile mt : reader.getListOfMetadataProfiles()) {
+
+ if(mt==null)
+ continue;
+
+ MetadataFormat metadataFormat = reader.getMetadataFormatForMetadataProfile(mt);
logger.trace("\n\n "+ ++i +".) Metadata source: "+metadataFormat.getMetadataSource().substring(0, 100));
}
diff --git a/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestMetadataFormatDiscovery.java b/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestMetadataFormatDiscovery.java
index 5dd1d10..5334e63 100644
--- a/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestMetadataFormatDiscovery.java
+++ b/src/test/java/org/gcube/datacatalogue/metadatadiscovery/TestMetadataFormatDiscovery.java
@@ -5,7 +5,7 @@ package org.gcube.datacatalogue.metadatadiscovery;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.scope.impl.ScopeBean;
-import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType;
+import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataProfile;
import org.gcube.datacatalogue.metadatadiscovery.reader.MetadataFormatDiscovery;
import org.junit.Test;
@@ -30,10 +30,10 @@ public class TestMetadataFormatDiscovery {
try {
ScopeProvider.instance.set(scopeString);
reader = new MetadataFormatDiscovery(scope);
- System.out.println(reader.getMetadataTypes());
+ //System.out.println(reader.getMetadataProfiles());
- for (MetadataType type : reader.getMetadataTypes()) {
- System.out.println(type);
+ for (MetadataProfile metaProfile : reader.getMetadataProfiles()) {
+ System.out.println(metaProfile.getId() +" name: "+metaProfile.getName() +" type: "+metaProfile.getMetadataType());
}
} catch (Exception e) {