From b7b702f8e9b7f4324f8bfb5afa77ee37fb9ea268 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Tue, 1 Mar 2022 16:39:43 +0100 Subject: [PATCH 01/13] #22890 overloaded method --- .settings/org.eclipse.wst.common.component | 1 + CHANGELOG.md | 8 +- pom.xml | 14 +- .../MetadataProfileReader.java | 150 ++++++++++++++---- .../reader/MetadataFormatDiscovery.java | 12 +- 5 files changed, 139 insertions(+), 46 deletions(-) create mode 100644 .settings/org.eclipse.wst.common.component diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..bcc91bc --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1 @@ + diff --git a/CHANGELOG.md b/CHANGELOG.md index 04aa045..d782b48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v1.1.0-SNAPSHOT] - 2022-03-01 + +#### Enhancement + +- [#22890] Extend the MetadataDiscovery logic + ## [v1.0.0] - 2020-09-30 #### First release -[#19880] Create the library metadata-profile-discovery \ No newline at end of file +- [#19880] Create the library metadata-profile-discovery \ No newline at end of file diff --git a/pom.xml b/pom.xml index bb0ca56..2030bd4 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.common metadata-profile-discovery - 1.0.0 + 1.1.0-SNAPSHOT jar The Metadata Profile discovery library The metadata-profile-discovery library is able to build java objects parsing the 'gCube Metadata Profiles' models: @@ -108,12 +108,12 @@ - - - - - - + + + + + + diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java b/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java index a199d5e..6911357 100644 --- a/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java @@ -40,13 +40,12 @@ import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; - /** * The Class MetadataProfileReader. * - * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Sep 30, 2020 + * Mar 1, 2022 */ public class MetadataProfileReader implements MetadataProfileDiscovery { @@ -63,22 +62,61 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { private String grMetadataProfileSecondaryType; + private String grMetadataProfileResourceName; + private static Logger logger = LoggerFactory.getLogger(MetadataProfileReader.class); - - + /** * Instantiates a new metadata profile reader. * - * @param grMetadataProfileSecondaryType the SecondaryType that must be used to discover the "gCube Metadata Profiles" from Information System + * @param grMetadataProfileSecondaryType the SecondaryType that must be used to + * discover the "gCube Metadata Profiles" + * from Information System * @throws Exception the exception */ public MetadataProfileReader(String grMetadataProfileSecondaryType) throws Exception { - - if(grMetadataProfileSecondaryType==null || grMetadataProfileSecondaryType.isEmpty()) - throw new NullPointerException("Invalid input parameter"); - + + if (grMetadataProfileSecondaryType == null || grMetadataProfileSecondaryType.isEmpty()) + throw new NullPointerException("Invalid input parameter: grMetadataProfileSecondaryType"); + this.grMetadataProfileSecondaryType = grMetadataProfileSecondaryType; - + + readNamespacesAndProfiles(); + } + + /** + * Instantiates a new metadata profile reader. + * + * @param grMetadataProfileSecondaryType the gr metadata profile secondary type + * @param resourceName the resource name + * + * the SecondaryType and the ResourceName + * that must be used to discover the + * "gCube Metadata Profiles" from + * Information System + * @throws Exception the exception + */ + public MetadataProfileReader(String grMetadataProfileSecondaryType, String resourceName) throws Exception { + + if (grMetadataProfileSecondaryType == null || grMetadataProfileSecondaryType.isEmpty()) + throw new NullPointerException("Invalid input parameter: grMetadataProfileSecondaryType"); + + if (resourceName == null || resourceName.isEmpty()) + throw new NullPointerException("Invalid input parameter: resourceName"); + + this.grMetadataProfileSecondaryType = grMetadataProfileSecondaryType; + this.grMetadataProfileResourceName = resourceName; + + readNamespacesAndProfiles(); + } + + /** + * Read namespaces and profiles. + * + * @throws Exception the exception + */ + private void readNamespacesAndProfiles() throws Exception { + String scopeString = ScopeProvider.instance.get(); logger.debug("Read scope " + scopeString + " from ScopeProvider"); @@ -86,20 +124,22 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { throw new Exception("Please set a valid scope into ScopeProvider"); scope = new ScopeBean(scopeString); - + readNamespaces(); readMetadataFormats(); } - + /** * Read metada formats. * * @throws Exception the exception */ private void readMetadataFormats() throws Exception { - - //reading from Generic Resource for Secondary Type passed in input - medataFormatDiscovery = new MetadataFormatDiscovery(scope, grMetadataProfileSecondaryType); + + // reading from Generic Resource for Secondary Type and Resource Name passed in + // input + medataFormatDiscovery = new MetadataFormatDiscovery(scope, grMetadataProfileSecondaryType, + grMetadataProfileResourceName); logger.info("MedataFormatDiscovery has retrieved: " + medataFormatDiscovery.getMetadataProfiles().size() + " metadata type/s"); @@ -113,12 +153,13 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { hashMetadataFormats.put(mT.getId(), reader.getMetadataFormat()); logger.debug("MetadataType id: " + mT.getId() + " cached as: " + reader.getMetadataFormat()); } - + } /** * Read namespaces. - * @throws Exception + * + * @throws Exception the exception */ private void readNamespaces() throws Exception { @@ -154,13 +195,13 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { */ public static InputStream getProfileSchemaInputStream() { try { - logger.info("Trying to return the URL resource: "+URL_OF_GCDCMETADATAPROFILEV3_XSD); + logger.info("Trying to return the URL resource: " + URL_OF_GCDCMETADATAPROFILEV3_XSD); return new URL(URL_OF_GCDCMETADATAPROFILEV3_XSD).openStream(); - + } catch (Exception e) { - logger.warn("Error on reading the URL: "+URL_OF_GCDCMETADATAPROFILEV3_XSD); + logger.warn("Error on reading the URL: " + URL_OF_GCDCMETADATAPROFILEV3_XSD); } - logger.info("Returning local resource: "+SCHEMA_FILENAME); + logger.info("Returning local resource: " + SCHEMA_FILENAME); return MetadataProfileReader.class.getResourceAsStream(SCHEMA_FILENAME); } @@ -171,13 +212,13 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { */ public static URL getProfileSchemaURL() { try { - logger.info("Trying to return the URL object: "+URL_OF_GCDCMETADATAPROFILEV3_XSD); + logger.info("Trying to return the URL object: " + URL_OF_GCDCMETADATAPROFILEV3_XSD); return new URL(URL_OF_GCDCMETADATAPROFILEV3_XSD); - + } catch (Exception e) { - logger.warn("Error on reading the URL: "+URL_OF_GCDCMETADATAPROFILEV3_XSD); + logger.warn("Error on reading the URL: " + URL_OF_GCDCMETADATAPROFILEV3_XSD); } - logger.info("Returning local URL of: "+SCHEMA_FILENAME); + logger.info("Returning local URL of: " + SCHEMA_FILENAME); return MetadataProfileReader.class.getResource(SCHEMA_FILENAME); } @@ -206,6 +247,13 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { validateAgainstXSD(new StreamSource(xml), getProfileSchemaURL()); } + /** + * Gets the metadata format for metadata profile. + * + * @param profile the profile + * @return the metadata format for metadata profile + * @throws Exception the exception + */ /* * (non-Javadoc) * @@ -227,6 +275,12 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { return reader.getMetadataFormat(); } + /** + * Gets the list of metadata profiles. + * + * @return the list of metadata profiles + * @throws Exception the exception + */ /* * (non-Javadoc) * @@ -242,6 +296,12 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { return medataFormatDiscovery.getMetadataProfiles(); } + /** + * Gets the list of namespace categories. + * + * @return the list of namespace categories + * @throws Exception the exception + */ /* * (non-Javadoc) * @@ -257,6 +317,9 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { return namespaceCategories; } + /** + * Reset metadata profile. + */ /* * (non-Javadoc) * @@ -270,6 +333,9 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { hashMetadataFormats = null; } + /** + * Reset namespace categories. + */ /* * (non-Javadoc) * @@ -282,6 +348,11 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { namespaceCategories = null; } + /** + * Gets the profile schema. + * + * @return the profile schema + */ /* * (non-Javadoc) * @@ -297,6 +368,15 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { } + /** + * Validate profile. + * + * @param xmlProfile the xml profile + * @throws ParserConfigurationException the parser configuration exception + * @throws SAXException the SAX exception + * @throws IOException Signals that an I/O exception has + * occurred. + */ /* * (non-Javadoc) * @@ -310,23 +390,23 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { DOMSource source = new DOMSource(doc); validateAgainstXSD(source, getProfileSchemaURL()); } - + /** - * Utility method to get a metadata format from a "gCube Metadata Profiles" model (XML-based) + * Utility method to get a metadata format from a "gCube Metadata Profiles" + * model (XML-based). * * @param metadataProfileStream the metadata profile stream * @return the metadata format * @throws JAXBException the JAXB exception */ - public static MetadataFormat toMetadataFormat(InputStream metadataProfileStream) throws JAXBException{ - - if(metadataProfileStream==null) + public static MetadataFormat toMetadataFormat(InputStream metadataProfileStream) throws JAXBException { + + if (metadataProfileStream == null) throw new NullPointerException("Invalid input parameter"); - + JAXBContext jaxbContext = JAXBContext.newInstance(MetadataFormat.class); - Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); - return (MetadataFormat) jaxbUnmarshaller.unmarshal(metadataProfileStream); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); + return (MetadataFormat) jaxbUnmarshaller.unmarshal(metadataProfileStream); } - } diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/reader/MetadataFormatDiscovery.java b/src/main/java/org/gcube/common/metadataprofilediscovery/reader/MetadataFormatDiscovery.java index 73114a2..54d7a8c 100644 --- a/src/main/java/org/gcube/common/metadataprofilediscovery/reader/MetadataFormatDiscovery.java +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/reader/MetadataFormatDiscovery.java @@ -40,6 +40,7 @@ public class MetadataFormatDiscovery { private String secondaryType; private ScopeBean scope; private List metadataProfiles; + private String resourceName; /** @@ -49,9 +50,10 @@ public class MetadataFormatDiscovery { * @param secondaryType the secondary type * @throws Exception the exception */ - public MetadataFormatDiscovery(ScopeBean scope, String secondaryType) throws Exception { + public MetadataFormatDiscovery(ScopeBean scope, String secondaryType, String resourceName) throws Exception { this.scope = scope; this.secondaryType = secondaryType; + this.resourceName = resourceName; this.metadataProfiles = readMetadataProfilesFromInfrastrucure(); } @@ -79,8 +81,12 @@ public class MetadataFormatDiscovery { // ScopeProvider.instance.set(scopeString); logger.info("Using scope from ScopeProvider: "+scopeString); - - String queryString = QueryForResourceUtil.getGcubeGenericQueryStringForSecondaryType(secondaryType); + String queryString = null; + if(resourceName!=null) + queryString = QueryForResourceUtil.getGcubeGenericQueryStringForSecondaryTypeAndName(resourceName, secondaryType); + else + queryString = QueryForResourceUtil.getGcubeGenericQueryStringForSecondaryType(secondaryType); + logger.trace("queryString: " +queryString); Query q = new QueryBox(queryString); -- 2.17.1 From 44f7124933ce30585d61a5c4ea28e4f37cf55edb Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Tue, 1 Mar 2022 17:00:10 +0100 Subject: [PATCH 02/13] fixed JUnit Test --- .../metadataprofilediscovery/TestMetadataFormatDiscovery.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java index e58b74a..87ee411 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java @@ -29,7 +29,7 @@ public class TestMetadataFormatDiscovery { MetadataFormatDiscovery reader; try { ScopeProvider.instance.set(scopeString); - reader = new MetadataFormatDiscovery(scope, grMetadataProfileSecondaryType); + reader = new MetadataFormatDiscovery(scope, grMetadataProfileSecondaryType, null); //System.out.println(reader.getMetadataProfiles()); for (MetadataProfile metaProfile : reader.getMetadataProfiles()) { -- 2.17.1 From 97c9a716a0f0d07f00d612a667a1a022a342449b Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 2 Mar 2022 13:18:58 +0100 Subject: [PATCH 03/13] added Test Class. Moved log to WARN --- .classpath | 6 --- .settings/org.eclipse.jdt.core.prefs | 2 + .settings/org.eclipse.wst.validation.prefs | 2 + .../MetadataProfileReader.java | 2 +- .../TestMetadataFormatReader.java | 38 +++++-------- .../TestMetadataProfileReader.java | 53 +++++++++++++++++++ 6 files changed, 72 insertions(+), 31 deletions(-) create mode 100644 .settings/org.eclipse.wst.validation.prefs create mode 100644 src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java diff --git a/.classpath b/.classpath index d64ebcb..fcd4e72 100644 --- a/.classpath +++ b/.classpath @@ -6,12 +6,6 @@ - - - - - - diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index e2ceea1..a0e69ab 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -8,7 +8,9 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java b/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java index 6911357..2ee96dd 100644 --- a/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java @@ -173,7 +173,7 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { namespaceCategories.addAll(rd.getNamespaces().getNamespaceCategories()); } } catch (Exception e) { - logger.debug("An error occurred during read namespaces for categories: ", e); + logger.warn("An error occurred during read namespaces for categories: ", e); throw e; } } diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java index 26f29af..b3359be 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java @@ -3,11 +3,8 @@ */ package org.gcube.common.metadataprofilediscovery; -import java.io.InputStream; - -import org.gcube.common.metadataprofilediscovery.jaxb.MetadataField; -import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; -import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatReader; +import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile; +import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; @@ -19,35 +16,28 @@ import org.gcube.common.scope.impl.ScopeBean; */ public class TestMetadataFormatReader { -// @Test + //@Test public void test() { String scopeString = "/gcube/devsec/devVRE"; final ScopeBean scope = new ScopeBean(scopeString); - MetadataFormatReader reader; + MetadataProfileReader reader; try { ScopeProvider.instance.set(scopeString); - reader = new MetadataFormatReader(scope, "0d29d7a9-d779-478c-a13d-d70708dc66c4"); - System.out.println(reader.getMetadataFormat()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - //@Test - public void testReadInputStream() { - String fileNameMeatadataProfile = "HarvestedObject.xml"; - try { - InputStream in = ClassLoader.getSystemResourceAsStream(fileNameMeatadataProfile); - //InputStream in = TestMetadataFormatReader.class.getResourceAsStream(fileNameMeatadataProfile); - MetadataFormat mf = MetadataProfileReader.toMetadataFormat(in); - System.out.println("Source: "+mf.getMetadataSource()); + reader = new MetadataProfileReader("GeoNaMetadata"); + + int i = 0; + for (MetadataProfile metadataProfile : reader.getListOfMetadataProfiles()) { + System.out.println(i++ +")"+metadataProfile); + } - for (MetadataField field : mf.getMetadataFields()) { - System.out.println(field); + i = 0; + for (NamespaceCategory namespaceCategory : reader.getListOfNamespaceCategories()) { + System.out.println(i++ +")"+namespaceCategory); } } catch (Exception e) { e.printStackTrace(); } } + } diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java new file mode 100644 index 0000000..48f0ca9 --- /dev/null +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java @@ -0,0 +1,53 @@ +/** + * + */ +package org.gcube.common.metadataprofilediscovery; + +import java.io.InputStream; + +import org.gcube.common.metadataprofilediscovery.jaxb.MetadataField; +import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; +import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatReader; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 8, 2016 + */ +public class TestMetadataProfileReader { + +// @Test + public void test() { + + String scopeString = "/gcube/devsec/devVRE"; + final ScopeBean scope = new ScopeBean(scopeString); + MetadataFormatReader reader; + try { + ScopeProvider.instance.set(scopeString); + reader = new MetadataFormatReader(scope, "0d29d7a9-d779-478c-a13d-d70708dc66c4"); + System.out.println(reader.getMetadataFormat()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //@Test + public void testReadInputStream() { + String fileNameMeatadataProfile = "HarvestedObject.xml"; + try { + InputStream in = ClassLoader.getSystemResourceAsStream(fileNameMeatadataProfile); + //InputStream in = TestMetadataFormatReader.class.getResourceAsStream(fileNameMeatadataProfile); + MetadataFormat mf = MetadataProfileReader.toMetadataFormat(in); + System.out.println("Source: "+mf.getMetadataSource()); + + for (MetadataField field : mf.getMetadataFields()) { + System.out.println(field); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} -- 2.17.1 From 471536ae648ff04c42ed3b5e4d034e7cd254d02c Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 3 Mar 2022 16:14:07 +0100 Subject: [PATCH 04/13] Added guava cache. New DocumentBuilder a Xpath parser --- .classpath | 6 + pom.xml | 5 + .../MetadataProfileReader.java | 6 +- .../NamespaceCategoriesCache.java | 145 ++++++++++++++++++ .../reader/NamespaceCategoryReader.java | 75 ++++++++- .../TestMetadataFormatReader.java | 47 +++--- .../TestMetadataProfileReader.java | 61 ++++---- 7 files changed, 284 insertions(+), 61 deletions(-) create mode 100644 src/main/java/org/gcube/common/metadataprofilediscovery/NamespaceCategoriesCache.java diff --git a/.classpath b/.classpath index fcd4e72..d64ebcb 100644 --- a/.classpath +++ b/.classpath @@ -6,6 +6,12 @@ + + + + + + diff --git a/pom.xml b/pom.xml index 2030bd4..aabb261 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,11 @@ provided + + com.google.guava + guava + + junit diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java b/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java index 2ee96dd..ce30511 100644 --- a/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/MetadataProfileReader.java @@ -28,10 +28,10 @@ import javax.xml.validation.Validator; import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile; import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; +import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategories; import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory; import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatDiscovery; import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatReader; -import org.gcube.common.metadataprofilediscovery.reader.NamespaceCategoryReader; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; import org.slf4j.Logger; @@ -169,8 +169,8 @@ public class MetadataProfileReader implements MetadataProfileDiscovery { if (namespaceCategories == null) namespaceCategories = new ArrayList(); - NamespaceCategoryReader rd = new NamespaceCategoryReader(scope); - namespaceCategories.addAll(rd.getNamespaces().getNamespaceCategories()); + NamespaceCategories ncCache = NamespaceCategoriesCache.loadNamespaces(scope.toString()); + namespaceCategories.addAll(ncCache.getNamespaceCategories()); } } catch (Exception e) { logger.warn("An error occurred during read namespaces for categories: ", e); diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/NamespaceCategoriesCache.java b/src/main/java/org/gcube/common/metadataprofilediscovery/NamespaceCategoriesCache.java new file mode 100644 index 0000000..dcbec15 --- /dev/null +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/NamespaceCategoriesCache.java @@ -0,0 +1,145 @@ +/** + * + */ +package org.gcube.common.metadataprofilediscovery; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategories; +import org.gcube.common.metadataprofilediscovery.reader.NamespaceCategoryReader; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.cache.RemovalListener; +import com.google.common.cache.RemovalNotification; + +/** + * The Class NamespaceCategoriesCache. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Mar 3, 2022 + */ +public class NamespaceCategoriesCache { + + private static Logger LOG = LoggerFactory.getLogger(NamespaceCategoriesCache.class); + private static LoadingCache namespaces; + + static { + + CacheLoader loader = new CacheLoader() { + + @Override + public NamespaceCategories load(String scope) throws Exception { + + LOG.info("Loading the NamespaceCategories cache for scope: {}", scope); + NamespaceCategories namespacesCat = loadNamespaces(scope); + if (namespacesCat != null) + LOG.info("Returning {} for the scope name: {}", NamespaceCategories.class.getSimpleName(), scope); + else { + LOG.info("No NamespaceCategories obj for scope {}", scope); + } + + return namespacesCat; + } + + }; + + RemovalListener removalListener = new RemovalListener() { + + @Override + public void onRemoval(RemovalNotification arg0) { + + LOG.debug("cache expired"); + } + }; + + namespaces = CacheBuilder.newBuilder().maximumSize(300).expireAfterWrite(30, TimeUnit.MINUTES) + .removalListener(removalListener).build(loader); + + } + + /** + * Populate the cache. + * + * @param scope the scope + */ + private static void populateTheCache(ScopeBean scope) { + String origScope = null; + String instScope = scope.toString(); + try { + origScope = ScopeProvider.instance.get(); + // Populating the cache by using the detachedres-library + ScopeProvider.instance.set(scope.toString()); + LOG.info("Trying to populate the Namespaces cache in the scope: "+instScope); + NamespaceCategoryReader rd = new NamespaceCategoryReader(scope); + namespaces.put(instScope, rd.getNamespaces()); + } catch (Exception e) { + // SILENT + } finally { + + if (origScope != null && !origScope.equals(scope.toString())) { + // Setting original scope + ScopeProvider.instance.set(scope.toString()); + } + + } + } + + /** + * Gets the VRE obj for input VRE name. + * + * @param scope the scope + * @return the vre + * @throws ExecutionException the execution exception + */ + public static NamespaceCategories get(String scope) throws ExecutionException { + + try { + return namespaces.get(scope); + } catch (Exception e) { + LOG.info("Error on getting NamespaceCategories obj for scope {}. Is the key {} not found in the cache?", + scope, namespaces); + throw e; + } + } + + /** + * Load VRE obj for VRE name. + * + * @param scope the scope + * @return the vre + */ + protected static NamespaceCategories loadNamespaces(String scope) { + NamespaceCategories namespacesCategories = namespaces.getIfPresent(scope); + + // THIS CHECK SHOULD NOT BE NEEDED + if (namespacesCategories == null) { + LOG.info("loading Catalogue Namespaces for scope: {}",scope); + ScopeBean scopeB = new ScopeBean(scope); + populateTheCache(scopeB); + namespacesCategories = namespaces.getIfPresent(scope); + LOG.info("NamespaceCategories populated correclty with scope: {}",scope); + }else { + LOG.info("NamespaceCategories cache already populated with scope: {}, returning cached NamespaceCategories",scope); + } + + return namespacesCategories; + } + + /** + * Gets the cache. + * + * @return the cache + */ + public LoadingCache getCache() { + return namespaces; + } + +} diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/reader/NamespaceCategoryReader.java b/src/main/java/org/gcube/common/metadataprofilediscovery/reader/NamespaceCategoryReader.java index 95303bf..5b7c158 100644 --- a/src/main/java/org/gcube/common/metadataprofilediscovery/reader/NamespaceCategoryReader.java +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/reader/NamespaceCategoryReader.java @@ -8,12 +8,21 @@ import static org.gcube.resources.discovery.icclient.ICFactory.client; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringReader; +import java.io.StringWriter; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathFactory; import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategories; import org.gcube.common.resources.gcore.utils.XPathHelper; @@ -23,7 +32,9 @@ 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.w3c.dom.NodeList; import org.xml.sax.InputSource; @@ -35,6 +46,8 @@ import org.xml.sax.InputSource; */ public class NamespaceCategoryReader { + private static final String PATH_RESOURCE_PROFILE_BODY_NAMESPACES = "/Resource/Profile/Body/namespaces"; + private static Logger logger = LoggerFactory.getLogger(NamespaceCategoryReader.class); private static final String GENERIC_RESOURCE_NAMESPACES_NAME = "Namespaces Catalogue Categories"; @@ -89,12 +102,11 @@ public class NamespaceCategoryReader { String theResource = null; try{ theResource = appProfile.get(0); - logger.debug("Resource (Namespaces Catalogue Categories) found"); + logger.debug("Resource "+GENERIC_RESOURCE_NAMESPACES_NAME+" found"); + logger.trace("Resource "+GENERIC_RESOURCE_NAMESPACES_NAME+" is: "+theResource); DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Node node = docBuilder.parse(new InputSource(new StringReader(theResource))).getDocumentElement(); - XPathHelper helper = new XPathHelper(node); - logger.debug("Unmarshalling it.."); - readNamespaceCategoryFromResource(helper); + Document xmlDocument = docBuilder.parse(new InputSource(new StringReader(theResource))); + readNamespaceCategoryFromResource(xmlDocument); }catch(Exception e){ logger.error("Error while parsing Resource "+theResource+" from the infrastructure, the scope is "+scopeString,e); } @@ -109,6 +121,52 @@ public class NamespaceCategoryReader { } } + /** + * Read namespace category from resource. + * + * @param helper the helper + * @throws Exception the exception + */ + private void readNamespaceCategoryFromResource(Document xmlDocument) throws Exception{ + + try { + + XPath xPath = XPathFactory.newInstance().newXPath(); + String expression = PATH_RESOURCE_PROFILE_BODY_NAMESPACES; + NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); + + String namespaceSources = getNodeString(nodeList.item(0)); + + JAXBContext jaxbContext = JAXBContext.newInstance(NamespaceCategories.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); + + if(namespaceSources==null || namespaceSources.length()==0){ + throw new Exception("Resource does not contain ... in the body"); + } + + logger.debug("Unmarshalling document path "+PATH_RESOURCE_PROFILE_BODY_NAMESPACES +" to "+NamespaceCategories.class.getSimpleName()); + InputStream stream = new ByteArrayInputStream(namespaceSources.getBytes()); + namespaces = (NamespaceCategories) jaxbUnmarshaller.unmarshal(stream); + + }catch(Exception e){ + String error = "An error occurred in readNamespaceCategoryFromResource " + e.getMessage(); + logger.error("An error occurred in readNamespaceCategoryFromResource ", e); + throw new Exception(error); + } + } + + private String getNodeString(Node node) { + try { + StringWriter writer = new StringWriter(); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + transformer.transform(new DOMSource(node), new StreamResult(writer)); + String output = writer.toString(); + return output; + } catch (TransformerException e) { + e.printStackTrace(); + } + return node.getTextContent(); + } /** * Read namespace category from resource. @@ -119,8 +177,13 @@ public class NamespaceCategoryReader { private void readNamespaceCategoryFromResource(XPathHelper helper) throws Exception{ try { + + if(helper==null) { + logger.warn("**************************\n\nXpathHelper is null!!!!\n\n"); + } + - List namespaceSources = helper.evaluate("/Resource/Profile/Body/namespaces"); + List namespaceSources = helper.evaluate(PATH_RESOURCE_PROFILE_BODY_NAMESPACES); JAXBContext jaxbContext = JAXBContext.newInstance(NamespaceCategories.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java index b3359be..d81e312 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatReader.java @@ -3,41 +3,50 @@ */ package org.gcube.common.metadataprofilediscovery; -import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile; -import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory; +import java.io.InputStream; + +import org.gcube.common.metadataprofilediscovery.jaxb.MetadataField; +import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; +import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatReader; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; - /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Jun 8, 2016 + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jun 8, 2016 */ public class TestMetadataFormatReader { - //@Test +// @Test public void test() { String scopeString = "/gcube/devsec/devVRE"; - final ScopeBean scope = new ScopeBean(scopeString); - MetadataProfileReader reader; + final ScopeBean scope = new ScopeBean(scopeString); + MetadataFormatReader reader; try { ScopeProvider.instance.set(scopeString); - reader = new MetadataProfileReader("GeoNaMetadata"); - - int i = 0; - for (MetadataProfile metadataProfile : reader.getListOfMetadataProfiles()) { - System.out.println(i++ +")"+metadataProfile); - } - - i = 0; - for (NamespaceCategory namespaceCategory : reader.getListOfNamespaceCategories()) { - System.out.println(i++ +")"+namespaceCategory); - } + reader = new MetadataFormatReader(scope, "0d29d7a9-d779-478c-a13d-d70708dc66c4"); + System.out.println(reader.getMetadataFormat()); } catch (Exception e) { e.printStackTrace(); } } + // @Test + public void testReadInputStream() { + String fileNameMeatadataProfile = "HarvestedObject.xml"; + try { + InputStream in = ClassLoader.getSystemResourceAsStream(fileNameMeatadataProfile); + // InputStream in = + // TestMetadataFormatReader.class.getResourceAsStream(fileNameMeatadataProfile); + MetadataFormat mf = MetadataProfileReader.toMetadataFormat(in); + System.out.println("Source: " + mf.getMetadataSource()); + + for (MetadataField field : mf.getMetadataFields()) { + System.out.println(field); + } + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java index 48f0ca9..d9a3a46 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataProfileReader.java @@ -3,51 +3,46 @@ */ package org.gcube.common.metadataprofilediscovery; -import java.io.InputStream; - -import org.gcube.common.metadataprofilediscovery.jaxb.MetadataField; -import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; -import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatReader; +import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile; +import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; - +import org.junit.Test; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Jun 8, 2016 + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jun 8, 2016 */ public class TestMetadataProfileReader { -// @Test + //@Test public void test() { String scopeString = "/gcube/devsec/devVRE"; - final ScopeBean scope = new ScopeBean(scopeString); - MetadataFormatReader reader; - try { - ScopeProvider.instance.set(scopeString); - reader = new MetadataFormatReader(scope, "0d29d7a9-d779-478c-a13d-d70708dc66c4"); - System.out.println(reader.getMetadataFormat()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - //@Test - public void testReadInputStream() { - String fileNameMeatadataProfile = "HarvestedObject.xml"; - try { - InputStream in = ClassLoader.getSystemResourceAsStream(fileNameMeatadataProfile); - //InputStream in = TestMetadataFormatReader.class.getResourceAsStream(fileNameMeatadataProfile); - MetadataFormat mf = MetadataProfileReader.toMetadataFormat(in); - System.out.println("Source: "+mf.getMetadataSource()); - - for (MetadataField field : mf.getMetadataFields()) { - System.out.println(field); + final ScopeBean scope = new ScopeBean(scopeString); + + String[] genericResourceNames = new String[] {"Informazioni_di_progetto","Relazione_di_Scavo"}; + + for (int i = 0; i < 2; i++) { + MetadataProfileReader reader; + try { + ScopeProvider.instance.set(scope.toString()); + reader = new MetadataProfileReader("GeoNaMetadata",genericResourceNames[i]); + + int j = 0; + for (MetadataProfile metadataProfile : reader.getListOfMetadataProfiles()) { + System.out.println(j++ + ")" + metadataProfile); + } + + j = 0; + for (NamespaceCategory namespaceCategory : reader.getListOfNamespaceCategories()) { + System.out.println(j++ + ")" + namespaceCategory); + } + } catch (Exception e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); } + } + } -- 2.17.1 From ff90eda8bd5dd143c231ca1aa45539a5f3faa692 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Mon, 20 Jun 2022 16:24:11 +0200 Subject: [PATCH 05/13] [#23537] Introduced the fieldId in the gCube Metadata Profile, Moved to maven-portal-bom 3.6.4 --- CHANGELOG.md | 4 +- pom.xml | 2 +- .../jaxb/MetadataField.java | 92 +++++++++++-------- ...TestDataCatalogueMetadataFormatReader.java | 6 +- .../TestMetadataFormatDiscovery.java | 21 ++++- 5 files changed, 80 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d782b48..271c5d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [v1.1.0-SNAPSHOT] - 2022-03-01 +## [v1.1.0-SNAPSHOT] - 2022-06-20 #### Enhancement - [#22890] Extend the MetadataDiscovery logic +- [#23537] Introduce the fieldId in the gCube Metadata Profile +- Moved to maven-portal-bom 3.6.4 ## [v1.0.0] - 2020-09-30 diff --git a/pom.xml b/pom.xml index aabb261..1085780 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ org.gcube.distribution maven-portal-bom - 3.6.0 + 3.6.4 pom import diff --git a/src/main/java/org/gcube/common/metadataprofilediscovery/jaxb/MetadataField.java b/src/main/java/org/gcube/common/metadataprofilediscovery/jaxb/MetadataField.java index b6de026..43710b5 100644 --- a/src/main/java/org/gcube/common/metadataprofilediscovery/jaxb/MetadataField.java +++ b/src/main/java/org/gcube/common/metadataprofilediscovery/jaxb/MetadataField.java @@ -15,17 +15,16 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.gcube.common.metadataprofilediscovery.Namespace; import org.gcube.common.metadataprofilediscovery.adapter.DataTypeAdapter; - - /** * The Class MetadataField. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Jun 8, 2016 + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Jun 20, 2022 */ -@XmlRootElement(name="metadatafield") +@XmlRootElement(name = "metadatafield") @XmlAccessorType(XmlAccessType.FIELD) -public class MetadataField implements Serializable{ +public class MetadataField implements Serializable { /** * @@ -37,22 +36,27 @@ public class MetadataField implements Serializable{ */ private static final long serialVersionUID = 5935573474465015727L; - @XmlAttribute(name=LOCAL_NAME_CATEGORYREF) - private String categoryRef = null; //ITS VALUE IS A CATEGORY-ID + @XmlAttribute(name = LOCAL_NAME_CATEGORYREF) + private String categoryRef = null; // ITS VALUE IS A CATEGORY-ID + + // optional Field used as fieldName in the (result) Document. If it absent, the + // mandatory fieldName is used + private String fieldId = null; + @XmlElement(required = true) private String fieldName; - @XmlElement(required = true) + @XmlElement(required = true) private Boolean mandatory = false; - @XmlElement(name = "maxOccurs") + @XmlElement(name = "maxOccurs") private String maxOccurs; // private Boolean isBoolean = false; - @XmlJavaTypeAdapter(DataTypeAdapter.class) + @XmlJavaTypeAdapter(DataTypeAdapter.class) private DataType dataType = DataType.String; private String defaultValue; private String note; - //It's the list of eligible values; + // It's the list of eligible values; @XmlElement(name = "vocabulary") private MetadataVocabulary vocabulary; @@ -84,12 +88,11 @@ public class MetadataField implements Serializable{ this.mandatory = mandatory; } - /** * Instantiates a new metadata field. * - * @param fieldName the field name - * @param mandatory the mandatory + * @param fieldName the field name + * @param mandatory the mandatory * @param categoryID the category id */ public MetadataField(String fieldName, Boolean mandatory, String categoryID) { @@ -110,7 +113,6 @@ public class MetadataField implements Serializable{ return categoryRef; } - /** * Sets the category ref to category id. * @@ -124,17 +126,37 @@ public class MetadataField implements Serializable{ /** * Gets the category field qualified name. * - * If the Metadata Field belongs to a category, returns the qualified name: {@link MetadataField#categoryRef} {@link Namespace#Separator}} fieldName; + * If the Metadata Field belongs to a category, returns the qualified name: + * {@link MetadataField#categoryRef} {@link Namespace#Separator}} fieldName; * Otherwise returns the fieldName * * @return the category q name */ - public String getCategoryFieldQName(){ + public String getCategoryFieldQName() { - return categoryRef==null?fieldName:categoryRef+Namespace.Separator+fieldName; + return categoryRef == null ? fieldName : categoryRef + Namespace.Separator + fieldName; } + /** + * Gets the field id. + * + * @return the field id + */ + public String getFieldId() { + return fieldId; + } + + /** + * Sets the field id. Optional Field used as fieldName in the (result) Document. + * (e.g. JSON Document { fieldId: [data entry value]} If it absent, the + * mandatory fieldName is used + * + * @param fieldId the new field id + */ + public void setFieldId(String fieldId) { + this.fieldId = fieldId; + } /** * Gets the field name. @@ -146,7 +168,6 @@ public class MetadataField implements Serializable{ return fieldName; } - /** * Gets the mandatory. * @@ -157,7 +178,6 @@ public class MetadataField implements Serializable{ return mandatory; } - /** * Gets the data type. * @@ -168,7 +188,6 @@ public class MetadataField implements Serializable{ return dataType; } - /** * Gets the max occurs. * @@ -179,8 +198,9 @@ public class MetadataField implements Serializable{ return maxOccurs; } - /** + * Sets the max occurs. + * * @param maxOccurs the maxOccurs to set */ public void setMaxOccurs(String maxOccurs) { @@ -198,7 +218,6 @@ public class MetadataField implements Serializable{ return defaultValue; } - /** * Gets the note. * @@ -209,7 +228,6 @@ public class MetadataField implements Serializable{ return note; } - /** * Gets the vocabulary. * @@ -220,7 +238,6 @@ public class MetadataField implements Serializable{ return vocabulary; } - /** * Gets the validator. * @@ -231,7 +248,6 @@ public class MetadataField implements Serializable{ return validator; } - /** * Gets the tagging. * @@ -242,7 +258,6 @@ public class MetadataField implements Serializable{ return tagging; } - /** * Gets the grouping. * @@ -253,7 +268,6 @@ public class MetadataField implements Serializable{ return grouping; } - /** * Sets the field name. * @@ -264,7 +278,6 @@ public class MetadataField implements Serializable{ this.fieldName = fieldName; } - /** * Sets the mandatory. * @@ -275,7 +288,6 @@ public class MetadataField implements Serializable{ this.mandatory = mandatory; } - /** * Sets the data type. * @@ -286,7 +298,6 @@ public class MetadataField implements Serializable{ this.dataType = dataType; } - /** * Sets the default value. * @@ -297,7 +308,6 @@ public class MetadataField implements Serializable{ this.defaultValue = defaultValue; } - /** * Sets the note. * @@ -308,7 +318,6 @@ public class MetadataField implements Serializable{ this.note = note; } - /** * Sets the vocabulary. * @@ -319,7 +328,6 @@ public class MetadataField implements Serializable{ this.vocabulary = vocabulary; } - /** * Sets the validator. * @@ -330,7 +338,6 @@ public class MetadataField implements Serializable{ this.validator = validator; } - /** * Sets the tagging. * @@ -341,7 +348,6 @@ public class MetadataField implements Serializable{ this.tagging = tagging; } - /** * Sets the grouping. * @@ -352,7 +358,14 @@ public class MetadataField implements Serializable{ this.grouping = grouping; } - /* (non-Javadoc) + /** + * To string. + * + * @return the string + */ + /* + * (non-Javadoc) + * * @see java.lang.Object#toString() */ @Override @@ -361,6 +374,8 @@ public class MetadataField implements Serializable{ StringBuilder builder = new StringBuilder(); builder.append("MetadataField [categoryRef="); builder.append(categoryRef); + builder.append(", fieldId="); + builder.append(fieldId); builder.append(", fieldName="); builder.append(fieldName); builder.append(", mandatory="); @@ -385,5 +400,4 @@ public class MetadataField implements Serializable{ return builder.toString(); } - } diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestDataCatalogueMetadataFormatReader.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestDataCatalogueMetadataFormatReader.java index 6164fd1..bcd89ac 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestDataCatalogueMetadataFormatReader.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestDataCatalogueMetadataFormatReader.java @@ -29,7 +29,7 @@ public class TestDataCatalogueMetadataFormatReader { * Test. * @throws Exception */ - @Test + //@Test public void test() throws Exception { @@ -45,7 +45,7 @@ public class TestDataCatalogueMetadataFormatReader { List categs = reader.getListOfNamespaceCategories(); for (NamespaceCategory namespaceCategory : categs) { - logger.trace("\n\n "+ ++i +".) Category: "+namespaceCategory); + logger.info("\n\n "+ ++i +".) Category: "+namespaceCategory); } i = 0; @@ -55,7 +55,7 @@ public class TestDataCatalogueMetadataFormatReader { continue; MetadataFormat metadataFormat = reader.getMetadataFormatForMetadataProfile(mt); - logger.trace("\n\n "+ ++i +".) Metadata source: "+metadataFormat.getMetadataSource().substring(0, 100)); + logger.info("\n\n "+ ++i +".) Metadata source: "+metadataFormat.getMetadataSource().substring(0, 100)); } } diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java index 87ee411..b6bb274 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java @@ -4,9 +4,12 @@ package org.gcube.common.metadataprofilediscovery; import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile; +import org.gcube.common.metadataprofilediscovery.jaxb.MetadataField; +import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatDiscovery; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; +import org.junit.Test; /** @@ -25,6 +28,8 @@ public class TestMetadataFormatDiscovery { String scopeString = "/gcube/devsec/devVRE"; String grMetadataProfileSecondaryType = "DataCatalogueMetadata"; + grMetadataProfileSecondaryType = "GeoNaMetadata"; + final ScopeBean scope = new ScopeBean(scopeString); MetadataFormatDiscovery reader; try { @@ -33,8 +38,22 @@ public class TestMetadataFormatDiscovery { //System.out.println(reader.getMetadataProfiles()); for (MetadataProfile metaProfile : reader.getMetadataProfiles()) { - System.out.println(metaProfile.getId() +", name: "+metaProfile.getName() +", type: "+metaProfile.getMetadataType()); + System.out.println("\n\n###" + metaProfile.getId() +", name: "+metaProfile.getName() +", type: "+metaProfile.getMetadataType()); + + MetadataProfileReader readerProfile = new MetadataProfileReader(grMetadataProfileSecondaryType, metaProfile.getName()); + MetadataFormat format = readerProfile.getMetadataFormatForMetadataProfile(metaProfile); + int i = 0; + try { + for (MetadataField field : format.getMetadataFields()) { + System.out.println(++i +") "+field); + } + }catch (Exception e) { + System.out.println("\t## Error occurred reading: " + metaProfile.getId() +", name: "+metaProfile.getName() +", type: "+metaProfile.getMetadataType()); + e.printStackTrace(); + } } + + } catch (Exception e) { e.printStackTrace(); -- 2.17.1 From 5c73963bcfa3ae87b9fb680c2c19de34c551d8ee Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 31 Aug 2022 17:32:33 +0200 Subject: [PATCH 06/13] commented JUnit Test --- .../TestMetadataFormatDiscovery.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java index b6bb274..32b7292 100644 --- a/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java +++ b/src/test/java/org/gcube/common/metadataprofilediscovery/TestMetadataFormatDiscovery.java @@ -9,7 +9,6 @@ import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat; import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatDiscovery; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; -import org.junit.Test; /** @@ -45,10 +44,10 @@ public class TestMetadataFormatDiscovery { int i = 0; try { for (MetadataField field : format.getMetadataFields()) { - System.out.println(++i +") "+field); + System.out.println("\t"+ ++i +") "+field); } }catch (Exception e) { - System.out.println("\t## Error occurred reading: " + metaProfile.getId() +", name: "+metaProfile.getName() +", type: "+metaProfile.getMetadataType()); + System.err.println("\t## Error occurred reading: " + metaProfile.getId() +", name: "+metaProfile.getName() +", type: "+metaProfile.getMetadataType()); e.printStackTrace(); } } -- 2.17.1 From 79c9d0daf7d7dd69b0ed3641f9b7550235e0952f Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 9 Nov 2022 15:48:20 +0100 Subject: [PATCH 07/13] Moved to `maven.compiler.source` 1.8, maven-portal-bom 3.7.0-SNAPSHOT --- CHANGELOG.md | 2 +- pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 271c5d0..f28fe6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [v1.1.0-SNAPSHOT] - 2022-06-20 +## [v1.1.0-SNAPSHOT] - 2022-11-09 #### Enhancement diff --git a/pom.xml b/pom.xml index 1085780..c29e1c7 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ org.gcube.distribution maven-portal-bom - 3.6.4 + 3.7.0-SNAPSHOT pom import @@ -54,7 +54,7 @@ UTF-8 UTF-8 - 1.7 + 1.8 1.8 -- 2.17.1 From aac74a865239541ba63e58b266def20c2add4b0d Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 10 Nov 2022 09:33:10 +0100 Subject: [PATCH 08/13] reverted to java source 1.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c29e1c7..62993ca 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ UTF-8 UTF-8 - 1.8 + 1.7 1.8 -- 2.17.1 From 9230393cbccf23a83804dd861a54f5b7645732d4 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 10 Nov 2022 09:39:47 +0100 Subject: [PATCH 09/13] moved to java source 1.8 --- .settings/org.eclipse.wst.common.project.facet.core.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 1b22d70..4f92af5 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,5 +1,5 @@ - + diff --git a/pom.xml b/pom.xml index 62993ca..c29e1c7 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ UTF-8 UTF-8 - 1.7 + 1.8 1.8 -- 2.17.1 From 1ad3d3de17384cf1443efdf320b2f296c9f1d544 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 10 Nov 2022 09:51:36 +0100 Subject: [PATCH 10/13] #24110 added dependency for compiling with JDK_11 --- .classpath | 2 +- .settings/org.eclipse.jdt.core.prefs | 4 ++-- ...org.eclipse.wst.common.project.facet.core.xml | 2 +- pom.xml | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.classpath b/.classpath index d64ebcb..dc47709 100644 --- a/.classpath +++ b/.classpath @@ -32,7 +32,7 @@ - + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index a0e69ab..8b5c4dc 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -3,7 +3,7 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -13,4 +13,4 @@ org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 4f92af5..f4bf050 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,5 +1,5 @@ - + diff --git a/pom.xml b/pom.xml index c29e1c7..9b51d50 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,22 @@ provided + + + + org.projectlombok + lombok + 1.18.4 + provided + + + + javax.xml.bind + jaxb-api + 2.3.0 + provided + + com.google.guava guava -- 2.17.1 From 53dd64a892df77addf41cdf1f7056ae55fa34464 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 10 Nov 2022 10:04:09 +0100 Subject: [PATCH 11/13] #24110 Added dependencies required for building with JDK_11 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f28fe6a..b2e34db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - [#22890] Extend the MetadataDiscovery logic - [#23537] Introduce the fieldId in the gCube Metadata Profile - Moved to maven-portal-bom 3.6.4 +- [#24110] Added dependencies required for building with JDK_11 ## [v1.0.0] - 2020-09-30 -- 2.17.1 From 7b7da662a421bd642a32ae8ba71f3c19ee5202f7 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Fri, 11 Nov 2022 10:07:18 +0100 Subject: [PATCH 12/13] Updated dependency as reported at #24110#note-1 --- CHANGELOG.md | 2 +- pom.xml | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2e34db..22996f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - [#22890] Extend the MetadataDiscovery logic - [#23537] Introduce the fieldId in the gCube Metadata Profile - Moved to maven-portal-bom 3.6.4 -- [#24110] Added dependencies required for building with JDK_11 +- [#24110] Added dependency required for building with JDK_11 ## [v1.0.0] - 2020-09-30 diff --git a/pom.xml b/pom.xml index 9b51d50..c72987d 100644 --- a/pom.xml +++ b/pom.xml @@ -101,19 +101,13 @@ - - org.projectlombok - lombok - 1.18.4 - provided - - javax.xml.bind jaxb-api 2.3.0 provided + com.google.guava -- 2.17.1 From 4851d5558bb03bf4e14fe7b429b847ea53de9584 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Mon, 14 Nov 2022 14:57:56 +0100 Subject: [PATCH 13/13] Updated description --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22996f7..88c00fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm #### Enhancement -- [#22890] Extend the MetadataDiscovery logic +- [#22890] Extend the MetadataDiscovery logic - [#23537] Introduce the fieldId in the gCube Metadata Profile - Moved to maven-portal-bom 3.6.4 - [#24110] Added dependency required for building with JDK_11 -- 2.17.1