From 6fc07e74692ff63d59d4dce5048fb87f9041b10d Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Fri, 24 Mar 2017 15:05:52 +0000 Subject: [PATCH] Rename MeatadataType as MedataProfile Added metadatatype attribute also to MedataProfile git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-catalogue/gcubedatacatalogue-metadata-discovery@146329 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 4 +- .../DataCalogueMetadataFormatReader.java | 23 ++++--- .../DataCatalogueMetadataDiscovery.java | 13 ++-- ...MetadataType.java => MetadataProfile.java} | 39 ++++++++--- .../bean/jaxb/MetadataFormat.java | 6 +- .../reader/MetadataFormatDiscovery.java | 67 ++++++++++++------- .../reader/MetadataFormatReader.java | 2 +- ... => MetadataProfileNotFoundException.java} | 4 +- ...TestDataCatalogueMetadataFormatReader.java | 10 ++- .../TestMetadataFormatDiscovery.java | 8 +-- 10 files changed, 114 insertions(+), 62 deletions(-) rename src/main/java/org/gcube/datacatalogue/metadatadiscovery/bean/{MetadataType.java => MetadataProfile.java} (69%) rename src/main/java/org/gcube/datacatalogue/metadatadiscovery/reader/{ApplicationProfileNotFoundException.java => MetadataProfileNotFoundException.java} (73%) 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) {