created project copying class form gcubedatacatalogue-metadata-discovery
This commit is contained in:
commit
9380c394f2
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" path="src/main/resources"/>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="test" value="true"/>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
|
@ -0,0 +1,2 @@
|
|||
/bin/
|
||||
/target/
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>metadata-profile-discovery</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,4 @@
|
|||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding/<project>=UTF-8
|
|
@ -0,0 +1,14 @@
|
|||
eclipse.preferences.version=1
|
||||
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.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.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<faceted-project>
|
||||
<installed facet="java" version="1.8"/>
|
||||
</faceted-project>
|
|
@ -0,0 +1,134 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>maven-parent</artifactId>
|
||||
<groupId>org.gcube.tools</groupId>
|
||||
<version>1.1.0</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>metadata-profile-discovery</artifactId>
|
||||
<version>0.1.0-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>The Metadata Profile discovery library</name>
|
||||
<description>The metadata-profile-discovery library is able to build java objects parsing the 'gCube Metadata Profiles' models:
|
||||
* defined in the contexts (scopes) of the D4Science Infrastructure;
|
||||
* passed as an input stream;
|
||||
</description>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</connection>
|
||||
<developerConnection>scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</developerConnection>
|
||||
<url>https://code-repo.d4science.org/gCubeSystem/${project.artifactId}</url>
|
||||
</scm>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Francesco Mangiacrapa</name>
|
||||
<email>francesco.mangiacrapa@isti.cnr.it</email>
|
||||
<organization>CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"</organization>
|
||||
<roles>
|
||||
<role>architect</role>
|
||||
<role>developer</role>
|
||||
</roles>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.gcube.distribution</groupId>
|
||||
<artifactId>maven-portal-bom</artifactId>
|
||||
<version>3.6.0</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<!-- GWT needs at least java 1.6 -->
|
||||
<maven.compiler.source>1.7</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
</properties>
|
||||
<dependencies>
|
||||
|
||||
<!-- FWS -->
|
||||
<dependency>
|
||||
<groupId>org.gcube.resources.discovery</groupId>
|
||||
<artifactId>ic-client</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.gcube.core</groupId>
|
||||
<artifactId>common-scope-maps</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- END FWS -->
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.bind</groupId>
|
||||
<artifactId>jaxb-core</artifactId>
|
||||
<version>2.2.11</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sun.xml.bind</groupId>
|
||||
<artifactId>jaxb-impl</artifactId>
|
||||
<version>2.2.11</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- LOGGER -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JUNIT -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Required to log on tests -->
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>1.0.13</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-servicearchive</id>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,275 @@
|
|||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringReader;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
import javax.xml.validation.Schema;
|
||||
import javax.xml.validation.SchemaFactory;
|
||||
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.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;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.w3c.dom.Document;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* The Class DataCalogueMetadataReader.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jun 8, 2016
|
||||
*/
|
||||
public class DataCalogueMetadataFormatReader implements DataCatalogueMetadataDiscovery {
|
||||
|
||||
private static String SCHEMA_FILENAME = "Gdcmetadataprofilev3.xsd";
|
||||
|
||||
private MetadataFormatDiscovery medataFormatDiscovery;
|
||||
private ScopeBean scope;
|
||||
private Map<String, MetadataFormat> hashMetadataFormats = null;
|
||||
private List<NamespaceCategory> namespaceCategories = null;
|
||||
|
||||
private String profileSchema = null;
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(DataCalogueMetadataFormatReader.class);
|
||||
|
||||
/**
|
||||
* Instantiates a new data calogue metadata format reader.
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public DataCalogueMetadataFormatReader() throws Exception {
|
||||
|
||||
String scopeString = ScopeProvider.instance.get();
|
||||
logger.debug("Read scope " + scopeString + " from ScopeProvider");
|
||||
|
||||
if (scopeString == null || scopeString.isEmpty())
|
||||
throw new Exception("Please set a valid scope into ScopeProvider");
|
||||
|
||||
scope = new ScopeBean(scopeString);
|
||||
readNamespaces();
|
||||
readMetadaFormats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Read metada formats.
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private void readMetadaFormats() throws Exception {
|
||||
|
||||
medataFormatDiscovery = new MetadataFormatDiscovery(scope);
|
||||
logger.info("MedataFormatDiscovery has retrieved: " + medataFormatDiscovery.getMetadataProfiles().size()
|
||||
+ " metadata type/s");
|
||||
logger.debug("filling cache for MedataFormat");
|
||||
hashMetadataFormats = new HashMap<String, MetadataFormat>(medataFormatDiscovery.getMetadataProfiles().size());
|
||||
for (MetadataProfile mT : medataFormatDiscovery.getMetadataProfiles()) {
|
||||
if (mT == null)
|
||||
continue;
|
||||
|
||||
MetadataFormatReader reader = new MetadataFormatReader(scope, mT.getId());
|
||||
hashMetadataFormats.put(mT.getId(), reader.getMetadataFormat());
|
||||
logger.debug("MetadataType id: " + mT.getId() + " cached as: " + reader.getMetadataFormat());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read namespaces.
|
||||
*/
|
||||
private void readNamespaces() {
|
||||
|
||||
try {
|
||||
if (namespaceCategories == null || namespaceCategories.isEmpty()) {
|
||||
|
||||
if (namespaceCategories == null)
|
||||
namespaceCategories = new ArrayList<NamespaceCategory>();
|
||||
|
||||
NamespaceCategoryReader rd = new NamespaceCategoryReader(scope);
|
||||
namespaceCategories.addAll(rd.getNamespaces().getNamespaceCategories());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.debug("An error occurred during read namespaces for categories: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the profile schema string.
|
||||
*
|
||||
* @return the profile schema string
|
||||
*/
|
||||
public static String getProfileSchemaString() {
|
||||
InputStream inputStream = DataCalogueMetadataFormatReader.getProfileSchemaInputStream();
|
||||
return new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the profile schema input stream.
|
||||
*
|
||||
* @return the profile schema input stream
|
||||
*/
|
||||
public static InputStream getProfileSchemaInputStream() {
|
||||
return DataCalogueMetadataFormatReader.class.getResourceAsStream(SCHEMA_FILENAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the profile schema URL.
|
||||
*
|
||||
* @return the profile schema URL
|
||||
*/
|
||||
public static URL getProfileSchemaURL() {
|
||||
return DataCalogueMetadataFormatReader.class.getResource(SCHEMA_FILENAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate against XSD.
|
||||
*
|
||||
* @param xml the xml
|
||||
* @param xsd the xsd
|
||||
* @throws SAXException the SAX exception
|
||||
* @throws IOException Signals that an I/O exception has occurred.
|
||||
*/
|
||||
static void validateAgainstXSD(Source xml, URL xsd) throws SAXException, IOException {
|
||||
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||
Schema schema = factory.newSchema(xsd);
|
||||
Validator validator = schema.newValidator();
|
||||
validator.validate(xml);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate profile.
|
||||
*
|
||||
* @param xml the xml
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public static void validateProfile(InputStream xml) throws Exception {
|
||||
validateAgainstXSD(new StreamSource(xml), getProfileSchemaURL());
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* getMetadataFormatForMetadataProfile(org.gcube.common.metadataprofilediscovery
|
||||
* .bean.MetadataProfile)
|
||||
*/
|
||||
public MetadataFormat getMetadataFormatForMetadataProfile(MetadataProfile profile) throws Exception {
|
||||
|
||||
if (profile == null)
|
||||
throw new Exception("Input " + MetadataProfile.class.getSimpleName() + " is null");
|
||||
|
||||
MetadataFormat format = hashMetadataFormats.get(profile.getId());
|
||||
if (format != null)
|
||||
return format;
|
||||
|
||||
MetadataFormatReader reader = new MetadataFormatReader(scope, profile.getId());
|
||||
return reader.getMetadataFormat();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* getListOfMetadataProfiles()
|
||||
*/
|
||||
public List<MetadataProfile> getListOfMetadataProfiles() throws Exception {
|
||||
|
||||
if (medataFormatDiscovery == null)
|
||||
readMetadaFormats();
|
||||
|
||||
return medataFormatDiscovery.getMetadataProfiles();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* getListOfNamespaceCategories()
|
||||
*/
|
||||
public List<NamespaceCategory> getListOfNamespaceCategories() throws Exception {
|
||||
|
||||
if (namespaceCategories == null)
|
||||
readNamespaces();
|
||||
|
||||
return namespaceCategories;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* resetMetadataProfile()
|
||||
*/
|
||||
public void resetMetadataProfile() {
|
||||
|
||||
medataFormatDiscovery = null;
|
||||
hashMetadataFormats = null;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* resetNamespaceCategories()
|
||||
*/
|
||||
public void resetNamespaceCategories() {
|
||||
|
||||
namespaceCategories = null;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* getProfileSchema()
|
||||
*/
|
||||
public String getProfileSchema() {
|
||||
if (profileSchema == null) {
|
||||
profileSchema = DataCalogueMetadataFormatReader.getProfileSchemaString();
|
||||
}
|
||||
return profileSchema;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.gcube.common.metadataprofilediscovery.DataCatalogueMetadataDiscovery#
|
||||
* validateProfile(java.lang.String)
|
||||
*/
|
||||
public void validateProfile(String xmlProfile) throws ParserConfigurationException, SAXException, IOException {
|
||||
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
Document doc = db.parse(new InputSource(new StringReader(xmlProfile)));
|
||||
DOMSource source = new DOMSource(doc);
|
||||
validateAgainstXSD(source, getProfileSchemaURL());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory;
|
||||
|
||||
|
||||
/**
|
||||
* The Interface DataCatalogueMetadataDiscovery.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||||
*
|
||||
* Sep 30, 2020
|
||||
*/
|
||||
public interface DataCatalogueMetadataDiscovery {
|
||||
|
||||
/**
|
||||
* Gets the list of metadata types.
|
||||
*
|
||||
* @return the list of metadata types
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
List<MetadataProfile> getListOfMetadataProfiles() throws Exception;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the list of namespace categories.
|
||||
*
|
||||
* @return the list of namespace categories
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
List<NamespaceCategory> getListOfNamespaceCategories() throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata format for metadata type.
|
||||
*
|
||||
* @param type the type
|
||||
* @return the metadata format for metadata type
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
MetadataFormat getMetadataFormatForMetadataProfile(MetadataProfile type) throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
* Reset metadata profile.
|
||||
* Forces current list of Metadata Profile at null in order to read it from IS againg
|
||||
*/
|
||||
void resetMetadataProfile();
|
||||
|
||||
/**
|
||||
* Reset namespace categories.
|
||||
* Forces current list of Namespace Categories Profile at null in order to read it from IS againg
|
||||
*/
|
||||
void resetNamespaceCategories();
|
||||
|
||||
/**
|
||||
* Return the XSD of the profile schema.
|
||||
*
|
||||
* @return the String representation of the XSD containing the schema for a profile
|
||||
*/
|
||||
String getProfileSchema();
|
||||
|
||||
/**
|
||||
* Validate the xml provided as argument.
|
||||
*
|
||||
* @param xmlProfile the string representation of the XML to validate again the schema
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
void validateProfile(String xmlProfile) throws Exception;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
/**
|
||||
* The Interface Namespace.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Apr 26, 2017
|
||||
*/
|
||||
public interface Namespace {
|
||||
|
||||
public static final String Separator = ":";
|
||||
public String id = null;
|
||||
public String name = null;
|
||||
public String title = null;
|
||||
public String description = "";
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
package org.gcube.common.metadataprofilediscovery.adapter;
|
||||
|
||||
import javax.xml.bind.annotation.adapters.XmlAdapter;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.DataType;
|
||||
|
||||
|
||||
/**
|
||||
* The Class DataTypeAdapter.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Sep 12, 2016
|
||||
*/
|
||||
public class DataTypeAdapter extends XmlAdapter<String, DataType> {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
|
||||
*/
|
||||
public String marshal(DataType dt) {
|
||||
|
||||
return dt.name();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
|
||||
*/
|
||||
public DataType unmarshal(String dt) {
|
||||
|
||||
return DataType.fromValue(dt);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
package org.gcube.common.metadataprofilediscovery.adapter;
|
||||
|
||||
import javax.xml.bind.annotation.adapters.XmlAdapter;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.TaggingGroupingValue;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Class TaggingGroupingAdapter.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Mar 21, 2017
|
||||
*/
|
||||
public class TaggingGroupingAdapter extends XmlAdapter<String, TaggingGroupingValue> {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
|
||||
*/
|
||||
public String marshal(TaggingGroupingValue dt) {
|
||||
|
||||
return dt.value();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
|
||||
*/
|
||||
public TaggingGroupingValue unmarshal(String dt) {
|
||||
|
||||
return TaggingGroupingValue.fromValue(dt);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,159 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.bean;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataProfile.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* May 19, 2017
|
||||
*/
|
||||
public class MetadataProfile implements Serializable{
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 8829173012445264057L;
|
||||
private String id;
|
||||
private String name;
|
||||
private String description;
|
||||
private String metadataType;
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata type.
|
||||
*/
|
||||
public MetadataProfile() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata type.
|
||||
*
|
||||
* @param id the id
|
||||
* @param name the name
|
||||
* @param description the description
|
||||
* @param metadataType the metadata type
|
||||
*/
|
||||
public MetadataProfile(String id, String name, String description, String metadataType) {
|
||||
|
||||
super();
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.metadataType = metadataType;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the id.
|
||||
*
|
||||
* @return the id
|
||||
*/
|
||||
public String getId() {
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the name.
|
||||
*
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the description.
|
||||
*
|
||||
* @return the description
|
||||
*/
|
||||
public String getDescription() {
|
||||
|
||||
return description;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the id.
|
||||
*
|
||||
* @param id the id to set
|
||||
*/
|
||||
public void setId(String id) {
|
||||
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the name.
|
||||
*
|
||||
* @param name the name to set
|
||||
*/
|
||||
public void setName(String name) {
|
||||
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the description.
|
||||
*
|
||||
* @param description the description to set
|
||||
*/
|
||||
public void setDescription(String description) {
|
||||
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the metadata type.
|
||||
*
|
||||
* @return the metadataType
|
||||
*/
|
||||
public String getMetadataType() {
|
||||
|
||||
return metadataType;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the metadata type.
|
||||
*
|
||||
* @param metadataType the metadataType to set
|
||||
*/
|
||||
public void setMetadataType(String metadataType) {
|
||||
|
||||
this.metadataType = metadataType;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import javax.xml.bind.annotation.XmlEnum;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
|
||||
/**
|
||||
* The Enum DataType.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Sep 12, 2016
|
||||
*/
|
||||
@XmlType(name = "dataType")
|
||||
@XmlEnum
|
||||
public enum DataType {
|
||||
|
||||
String,
|
||||
Time,
|
||||
Time_Interval,
|
||||
Times_ListOf,
|
||||
Text,
|
||||
Boolean,
|
||||
Number,
|
||||
GeoJSON;
|
||||
|
||||
/**
|
||||
* Value.
|
||||
*
|
||||
* @return the string
|
||||
*/
|
||||
public String value() {
|
||||
return name();
|
||||
}
|
||||
|
||||
/**
|
||||
* From value.
|
||||
*
|
||||
* @param v the v
|
||||
* @return the data type
|
||||
*/
|
||||
public static DataType fromValue(String v) {
|
||||
DataType vv;
|
||||
try{
|
||||
vv = valueOf(v);
|
||||
}catch(Exception e){
|
||||
return DataType.String;
|
||||
}
|
||||
|
||||
return vv;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,389 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
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
|
||||
*/
|
||||
@XmlRootElement(name="metadatafield")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class MetadataField implements Serializable{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String LOCAL_NAME_CATEGORYREF = "categoryref";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 5935573474465015727L;
|
||||
|
||||
@XmlAttribute(name=LOCAL_NAME_CATEGORYREF)
|
||||
private String categoryRef = null; //ITS VALUE IS A CATEGORY-ID
|
||||
@XmlElement(required = true)
|
||||
private String fieldName;
|
||||
@XmlElement(required = true)
|
||||
private Boolean mandatory = false;
|
||||
|
||||
@XmlElement(name = "maxOccurs")
|
||||
private String maxOccurs;
|
||||
// private Boolean isBoolean = false;
|
||||
@XmlJavaTypeAdapter(DataTypeAdapter.class)
|
||||
private DataType dataType = DataType.String;
|
||||
private String defaultValue;
|
||||
private String note;
|
||||
|
||||
//It's the list of eligible values;
|
||||
@XmlElement(name = "vocabulary")
|
||||
private MetadataVocabulary vocabulary;
|
||||
|
||||
@XmlElement(name = "validator")
|
||||
private MetadataValidator validator;
|
||||
|
||||
@XmlElement(name = "tagging")
|
||||
private MetadataTagging tagging;
|
||||
|
||||
@XmlElement(name = "grouping")
|
||||
private MetadataGrouping grouping;
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata field.
|
||||
*/
|
||||
public MetadataField() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata field.
|
||||
*
|
||||
* @param fieldName the field name
|
||||
* @param mandatory the mandatory
|
||||
*/
|
||||
public MetadataField(String fieldName, Boolean mandatory) {
|
||||
|
||||
super();
|
||||
this.fieldName = fieldName;
|
||||
this.mandatory = mandatory;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata field.
|
||||
*
|
||||
* @param fieldName the field name
|
||||
* @param mandatory the mandatory
|
||||
* @param categoryID the category id
|
||||
*/
|
||||
public MetadataField(String fieldName, Boolean mandatory, String categoryID) {
|
||||
|
||||
super();
|
||||
this.fieldName = fieldName;
|
||||
this.mandatory = mandatory;
|
||||
setCategoryRefToCategoryId(categoryID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the category ref. If exists its value is a Category-ID
|
||||
*
|
||||
* @return the categoryRef
|
||||
*/
|
||||
public String getCategoryRef() {
|
||||
|
||||
return categoryRef;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the category ref to category id.
|
||||
*
|
||||
* @param categoryID the new category ref to category id
|
||||
*/
|
||||
public void setCategoryRefToCategoryId(String categoryID) {
|
||||
|
||||
this.categoryRef = categoryID;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
* Otherwise returns the fieldName
|
||||
*
|
||||
* @return the category q name
|
||||
*/
|
||||
public String getCategoryFieldQName(){
|
||||
|
||||
return categoryRef==null?fieldName:categoryRef+Namespace.Separator+fieldName;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the field name.
|
||||
*
|
||||
* @return the fieldName
|
||||
*/
|
||||
public String getFieldName() {
|
||||
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the mandatory.
|
||||
*
|
||||
* @return the mandatory
|
||||
*/
|
||||
public Boolean getMandatory() {
|
||||
|
||||
return mandatory;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the data type.
|
||||
*
|
||||
* @return the dataType
|
||||
*/
|
||||
public DataType getDataType() {
|
||||
|
||||
return dataType;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the max occurs.
|
||||
*
|
||||
* @return the maxOccurs
|
||||
*/
|
||||
public String getMaxOccurs() {
|
||||
|
||||
return maxOccurs;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param maxOccurs the maxOccurs to set
|
||||
*/
|
||||
public void setMaxOccurs(String maxOccurs) {
|
||||
|
||||
this.maxOccurs = maxOccurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the default value.
|
||||
*
|
||||
* @return the defaultValue
|
||||
*/
|
||||
public String getDefaultValue() {
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the note.
|
||||
*
|
||||
* @return the note
|
||||
*/
|
||||
public String getNote() {
|
||||
|
||||
return note;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the vocabulary.
|
||||
*
|
||||
* @return the vocabulary
|
||||
*/
|
||||
public MetadataVocabulary getVocabulary() {
|
||||
|
||||
return vocabulary;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the validator.
|
||||
*
|
||||
* @return the validator
|
||||
*/
|
||||
public MetadataValidator getValidator() {
|
||||
|
||||
return validator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the tagging.
|
||||
*
|
||||
* @return the tagging
|
||||
*/
|
||||
public MetadataTagging getTagging() {
|
||||
|
||||
return tagging;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the grouping.
|
||||
*
|
||||
* @return the grouping
|
||||
*/
|
||||
public MetadataGrouping getGrouping() {
|
||||
|
||||
return grouping;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the field name.
|
||||
*
|
||||
* @param fieldName the fieldName to set
|
||||
*/
|
||||
public void setFieldName(String fieldName) {
|
||||
|
||||
this.fieldName = fieldName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the mandatory.
|
||||
*
|
||||
* @param mandatory the mandatory to set
|
||||
*/
|
||||
public void setMandatory(Boolean mandatory) {
|
||||
|
||||
this.mandatory = mandatory;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the data type.
|
||||
*
|
||||
* @param dataType the dataType to set
|
||||
*/
|
||||
public void setDataType(DataType dataType) {
|
||||
|
||||
this.dataType = dataType;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the default value.
|
||||
*
|
||||
* @param defaultValue the defaultValue to set
|
||||
*/
|
||||
public void setDefaultValue(String defaultValue) {
|
||||
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the note.
|
||||
*
|
||||
* @param note the note to set
|
||||
*/
|
||||
public void setNote(String note) {
|
||||
|
||||
this.note = note;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the vocabulary.
|
||||
*
|
||||
* @param vocabulary the vocabulary to set
|
||||
*/
|
||||
public void setVocabulary(MetadataVocabulary vocabulary) {
|
||||
|
||||
this.vocabulary = vocabulary;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the validator.
|
||||
*
|
||||
* @param validator the validator to set
|
||||
*/
|
||||
public void setValidator(MetadataValidator validator) {
|
||||
|
||||
this.validator = validator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the tagging.
|
||||
*
|
||||
* @param tagging the tagging to set
|
||||
*/
|
||||
public void setTagging(MetadataTagging tagging) {
|
||||
|
||||
this.tagging = tagging;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the grouping.
|
||||
*
|
||||
* @param grouping the grouping to set
|
||||
*/
|
||||
public void setGrouping(MetadataGrouping grouping) {
|
||||
|
||||
this.grouping = grouping;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("MetadataField [categoryRef=");
|
||||
builder.append(categoryRef);
|
||||
builder.append(", fieldName=");
|
||||
builder.append(fieldName);
|
||||
builder.append(", mandatory=");
|
||||
builder.append(mandatory);
|
||||
builder.append(", maxOccurs=");
|
||||
builder.append(maxOccurs);
|
||||
builder.append(", dataType=");
|
||||
builder.append(dataType);
|
||||
builder.append(", defaultValue=");
|
||||
builder.append(defaultValue);
|
||||
builder.append(", note=");
|
||||
builder.append(note);
|
||||
builder.append(", vocabulary=");
|
||||
builder.append(vocabulary);
|
||||
builder.append(", validator=");
|
||||
builder.append(validator);
|
||||
builder.append(", tagging=");
|
||||
builder.append(tagging);
|
||||
builder.append(", grouping=");
|
||||
builder.append(grouping);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataFormat.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 8, 2016
|
||||
*/
|
||||
@XmlRootElement(name="metadataformat")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class MetadataFormat implements Serializable{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -5881074882343424963L;
|
||||
|
||||
public static final String LOCAL_NAME_METADATA_TYPE = "type";
|
||||
|
||||
public static final String LOCAL_NAME_METADATA_FORMAT = "metadataformat";
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata format.
|
||||
*/
|
||||
public MetadataFormat() {
|
||||
}
|
||||
|
||||
@XmlElement(name = "metadatafield")
|
||||
private List<MetadataField> metadataFields;
|
||||
|
||||
@XmlAttribute(name = LOCAL_NAME_METADATA_TYPE, required=true)
|
||||
private String type = "";
|
||||
|
||||
@XmlTransient
|
||||
private String metadataSource = null;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata fields.
|
||||
*
|
||||
* @return the metadataFields
|
||||
*/
|
||||
public List<MetadataField> getMetadataFields() {
|
||||
|
||||
return metadataFields;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the type.
|
||||
*
|
||||
* @return the type
|
||||
*/
|
||||
public String getType() {
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the type.
|
||||
*
|
||||
* @param type the type to set
|
||||
*/
|
||||
public void setType(String type) {
|
||||
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the metadata.
|
||||
*
|
||||
* @param Field the field
|
||||
*/
|
||||
public void addMetadata(MetadataField Field){
|
||||
if(this.metadataFields==null)
|
||||
this.metadataFields = new ArrayList<MetadataField>();
|
||||
|
||||
this.metadataFields.add(Field);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata source.
|
||||
*
|
||||
* @return the metadata source
|
||||
*/
|
||||
public String getMetadataSource() {
|
||||
|
||||
return metadataSource;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the metadata source.
|
||||
*
|
||||
* @param metadataSource the new metadata source
|
||||
*/
|
||||
public void setMetadataSource(String metadataSource) {
|
||||
|
||||
this.metadataSource = metadataSource;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("MetadataFormat [metadataFields=");
|
||||
builder.append(metadataFields);
|
||||
builder.append(", type=");
|
||||
builder.append(type);
|
||||
builder.append(", metadataSource=");
|
||||
builder.append(metadataSource);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlValue;
|
||||
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.adapter.TaggingGroupingAdapter;
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataGrouping.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Mar 21, 2017
|
||||
*/
|
||||
@XmlRootElement(name = "grouping")
|
||||
@XmlAccessorType (XmlAccessType.FIELD)
|
||||
public class MetadataGrouping implements Serializable{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 4684835556193102991L;
|
||||
|
||||
@XmlAttribute
|
||||
private Boolean create = false;
|
||||
|
||||
@XmlAttribute
|
||||
private Boolean propagateUp = false;
|
||||
|
||||
@XmlJavaTypeAdapter(TaggingGroupingAdapter.class)
|
||||
@XmlValue
|
||||
private TaggingGroupingValue groupingValue = null;
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata grouping.
|
||||
*/
|
||||
public MetadataGrouping() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata grouping.
|
||||
*
|
||||
* @param create the create
|
||||
* @param groupingValue the grouping value
|
||||
*/
|
||||
public MetadataGrouping(Boolean create, TaggingGroupingValue groupingValue) {
|
||||
|
||||
this.create = create;
|
||||
this.groupingValue = groupingValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the creates the.
|
||||
*
|
||||
* @return the create
|
||||
*/
|
||||
public Boolean getCreate() {
|
||||
|
||||
return create;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the grouping value.
|
||||
*
|
||||
* @return the groupingValue
|
||||
*/
|
||||
public TaggingGroupingValue getGroupingValue() {
|
||||
|
||||
return groupingValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the creates the.
|
||||
*
|
||||
* @param create the create to set
|
||||
*/
|
||||
public void setCreate(Boolean create) {
|
||||
|
||||
this.create = create;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the grouping value.
|
||||
*
|
||||
* @param groupingValue the groupingValue to set
|
||||
*/
|
||||
public void setGroupingValue(TaggingGroupingValue groupingValue) {
|
||||
|
||||
this.groupingValue = groupingValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return the propagateUp
|
||||
*/
|
||||
public Boolean getPropagateUp() {
|
||||
|
||||
return propagateUp;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param propagateUp the propagateUp to set
|
||||
*/
|
||||
public void setPropagateUp(Boolean propagateUp) {
|
||||
|
||||
this.propagateUp = propagateUp;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("MetadataGrouping [create=");
|
||||
builder.append(create);
|
||||
builder.append(", propagateUp=");
|
||||
builder.append(propagateUp);
|
||||
builder.append(", groupingValue=");
|
||||
builder.append(groupingValue);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlValue;
|
||||
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.adapter.TaggingGroupingAdapter;
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataTagging.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Mar 21, 2017
|
||||
*/
|
||||
@XmlRootElement(name = "tagging")
|
||||
@XmlAccessorType (XmlAccessType.FIELD)
|
||||
public class MetadataTagging implements Serializable{
|
||||
|
||||
|
||||
public static final String DEFAULT_SEPARATOR = "-";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 641412896487091012L;
|
||||
|
||||
@XmlAttribute
|
||||
private Boolean create = false;
|
||||
|
||||
@XmlAttribute
|
||||
private String separator = DEFAULT_SEPARATOR;
|
||||
|
||||
@XmlJavaTypeAdapter(TaggingGroupingAdapter.class)
|
||||
@XmlValue
|
||||
private TaggingGroupingValue taggingValue = null;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata tagging.
|
||||
*/
|
||||
public MetadataTagging() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata tagging.
|
||||
*
|
||||
* @param create the create
|
||||
* @param separator the separator
|
||||
* @param taggingValue the tagging value
|
||||
*/
|
||||
public MetadataTagging(Boolean create, String separator, TaggingGroupingValue taggingValue) {
|
||||
|
||||
super();
|
||||
this.create = create;
|
||||
this.separator = separator;
|
||||
this.taggingValue = taggingValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the creates the.
|
||||
*
|
||||
* @return the create
|
||||
*/
|
||||
public Boolean getCreate() {
|
||||
|
||||
return create;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the separator.
|
||||
*
|
||||
* @return the separator
|
||||
*/
|
||||
public String getSeparator() {
|
||||
|
||||
return separator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the tagging value.
|
||||
*
|
||||
* @return the taggingValue
|
||||
*/
|
||||
public TaggingGroupingValue getTaggingValue() {
|
||||
|
||||
return taggingValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the creates the.
|
||||
*
|
||||
* @param create the create to set
|
||||
*/
|
||||
public void setCreate(Boolean create) {
|
||||
|
||||
this.create = create;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the separator.
|
||||
*
|
||||
* @param separator the separator to set
|
||||
*/
|
||||
public void setSeparator(String separator) {
|
||||
|
||||
this.separator = separator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the tagging value.
|
||||
*
|
||||
* @param taggingValue the taggingValue to set
|
||||
*/
|
||||
public void setTaggingValue(TaggingGroupingValue taggingValue) {
|
||||
|
||||
this.taggingValue = taggingValue;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("MetadataTagging [create=");
|
||||
builder.append(create);
|
||||
builder.append(", separator=");
|
||||
builder.append(separator);
|
||||
builder.append(", taggingValue=");
|
||||
builder.append(taggingValue);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataValidator.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 8, 2016
|
||||
*/
|
||||
@XmlRootElement(name = "metadatavalidator")
|
||||
@XmlAccessorType (XmlAccessType.FIELD)
|
||||
public class MetadataValidator implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -5394122378302593873L;
|
||||
private String regularExpression;
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata validator.
|
||||
*/
|
||||
public MetadataValidator() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata validator.
|
||||
*
|
||||
* @param regularExpression the regular expression
|
||||
*/
|
||||
public MetadataValidator(String regularExpression) {
|
||||
|
||||
super();
|
||||
this.regularExpression = regularExpression;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the regular expression.
|
||||
*
|
||||
* @return the regularExpression
|
||||
*/
|
||||
public String getRegularExpression() {
|
||||
|
||||
return regularExpression;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the regular expression.
|
||||
*
|
||||
* @param regularExpression the regularExpression to set
|
||||
*/
|
||||
public void setRegularExpression(String regularExpression) {
|
||||
|
||||
this.regularExpression = regularExpression;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("MetadataValidator [regularExpression=");
|
||||
builder.append(regularExpression);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataVocabulary.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Sep 12, 2016
|
||||
*/
|
||||
@XmlRootElement(name = "metadatavocabulary")
|
||||
@XmlAccessorType (XmlAccessType.FIELD)
|
||||
public class MetadataVocabulary implements Serializable{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 506451021936766592L;
|
||||
|
||||
private List<String> vocabularyField;
|
||||
|
||||
@XmlAttribute
|
||||
private Boolean isMultiSelection = false;
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata vocabulary.
|
||||
*/
|
||||
public MetadataVocabulary() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata vocabulary.
|
||||
*
|
||||
* @param vocabularyFields the vocabulary fields
|
||||
*/
|
||||
public MetadataVocabulary(List<String> vocabularyFields) {
|
||||
|
||||
super();
|
||||
this.vocabularyField = vocabularyFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new metadata vocabulary.
|
||||
*
|
||||
* @param vocabularyField the vocabulary field
|
||||
* @param isMultiSelection the is multi selection
|
||||
*/
|
||||
public MetadataVocabulary(List<String> vocabularyField, Boolean isMultiSelection) {
|
||||
|
||||
super();
|
||||
this.vocabularyField = vocabularyField;
|
||||
this.isMultiSelection = isMultiSelection;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the vocabulary fields.
|
||||
*
|
||||
* @return the vocabularyField
|
||||
*/
|
||||
public List<String> getVocabularyFields() {
|
||||
|
||||
return vocabularyField;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Sets the vocabulary field.
|
||||
*
|
||||
* @param vocabularyField the vocabularyField to set
|
||||
*/
|
||||
public void setVocabularyField(List<String> vocabularyField) {
|
||||
|
||||
this.vocabularyField = vocabularyField;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the vocabulary field.
|
||||
*
|
||||
* @return the vocabularyField
|
||||
*/
|
||||
public List<String> getVocabularyField() {
|
||||
|
||||
return vocabularyField;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Checks if is multi selection.
|
||||
*
|
||||
* @return the isMultiSelection
|
||||
*/
|
||||
public Boolean isMultiSelection() {
|
||||
|
||||
return isMultiSelection;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Sets the checks if is multi selection.
|
||||
*
|
||||
* @param isMultiSelection the isMultiSelection to set
|
||||
*/
|
||||
public void setIsMultiSelection(Boolean isMultiSelection) {
|
||||
|
||||
this.isMultiSelection = isMultiSelection;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("MetadataVocabulary [vocabularyField=");
|
||||
builder.append(vocabularyField);
|
||||
builder.append(", isMultiSelection=");
|
||||
builder.append(isMultiSelection);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
|
||||
/**
|
||||
* The Class NamespaceCategories.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* May 19, 2017
|
||||
*/
|
||||
@XmlRootElement(name="namespaces")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class NamespaceCategories {
|
||||
|
||||
@XmlElement(name = "namespace")
|
||||
private List<NamespaceCategory> namespaceCategories;
|
||||
|
||||
/**
|
||||
* Instantiates a new namespace categories.
|
||||
*/
|
||||
public NamespaceCategories() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new namespace categories.
|
||||
*
|
||||
* @param namespaceCategories the namespace categories
|
||||
*/
|
||||
public NamespaceCategories(List<NamespaceCategory> namespaceCategories) {
|
||||
this.namespaceCategories = namespaceCategories;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the namespace categories.
|
||||
*
|
||||
* @return the namespaceCategories
|
||||
*/
|
||||
public List<NamespaceCategory> getNamespaceCategories() {
|
||||
|
||||
return namespaceCategories;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Sets the namespace categories.
|
||||
*
|
||||
* @param namespaceCategories the namespaceCategories to set
|
||||
*/
|
||||
public void setNamespaceCategories(List<NamespaceCategory> namespaceCategories) {
|
||||
|
||||
this.namespaceCategories = namespaceCategories;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("NamespaceCategories [namespaceCategories=");
|
||||
builder.append(namespaceCategories);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,182 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlID;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.Namespace;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Class NamespaceCategory.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* May 19, 2017
|
||||
*/
|
||||
@XmlRootElement(name = "namespace")
|
||||
@XmlAccessorType (XmlAccessType.FIELD)
|
||||
public class NamespaceCategory implements Namespace, Serializable{
|
||||
|
||||
|
||||
/** The Constant serialVersionUID. */
|
||||
private static final long serialVersionUID = -1632300992065668875L;
|
||||
|
||||
@XmlAttribute(required = true)
|
||||
@XmlID
|
||||
private String id = null;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String name = null;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String title = null;
|
||||
|
||||
private String description = "";
|
||||
|
||||
/**
|
||||
* Instantiates a new namespace category.
|
||||
*/
|
||||
public NamespaceCategory() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new namespace category.
|
||||
*
|
||||
* @param id the id
|
||||
* @param name the name
|
||||
* @param title the title
|
||||
*/
|
||||
public NamespaceCategory(String id, String name, String title) {
|
||||
|
||||
super();
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new namespace category.
|
||||
*
|
||||
* @param id the id
|
||||
* @param name the name
|
||||
* @param title the title
|
||||
* @param description the description
|
||||
*/
|
||||
public NamespaceCategory(String id, String name, String title, String description) {
|
||||
|
||||
super();
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the id.
|
||||
*
|
||||
* @return the id
|
||||
*/
|
||||
public String getId() {
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the title.
|
||||
*
|
||||
* @return the title
|
||||
*/
|
||||
public String getTitle() {
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the description.
|
||||
*
|
||||
* @return the description
|
||||
*/
|
||||
public String getDescription() {
|
||||
|
||||
return description;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the id.
|
||||
*
|
||||
* @param id the id to set
|
||||
*/
|
||||
public void setId(String id) {
|
||||
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the namespace category qualifier name. The QName is a unique name to identify the category. It corresponds to {@link NamespaceCategory#id}
|
||||
* @return the namespace category q name
|
||||
*/
|
||||
public String getNamespaceCategoryQName(){
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the title.
|
||||
*
|
||||
* @param title the title to set
|
||||
*/
|
||||
public void setTitle(String title) {
|
||||
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the description.
|
||||
*
|
||||
* @param description the description to set
|
||||
*/
|
||||
public void setDescription(String description) {
|
||||
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("NamespaceCategory [id=");
|
||||
builder.append(id);
|
||||
builder.append(", name=");
|
||||
builder.append(name);
|
||||
builder.append(", title=");
|
||||
builder.append(title);
|
||||
builder.append(", description=");
|
||||
builder.append(description);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.jaxb;
|
||||
|
||||
import javax.xml.bind.annotation.XmlEnum;
|
||||
|
||||
|
||||
/**
|
||||
* The Enum TaggingGroupingValue.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Mar 21, 2017
|
||||
*/
|
||||
@XmlEnum
|
||||
public enum TaggingGroupingValue {
|
||||
|
||||
onFieldName("onFieldName"),
|
||||
onValue("onValue"),
|
||||
onFieldName_onValue("onFieldName_onValue"),
|
||||
onValue_onFieldName("onValue_onFieldName");
|
||||
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* Instantiates a new tagging grouping value.
|
||||
*
|
||||
* @param value the value
|
||||
*/
|
||||
TaggingGroupingValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Value.
|
||||
*
|
||||
* @return the string
|
||||
*/
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* From value.
|
||||
*
|
||||
* @param value the value
|
||||
* @return the TaggingGroupingValue matching the input value or default value {@link TaggingGroupingValue#onValue}
|
||||
*/
|
||||
public static TaggingGroupingValue fromValue(String value) {
|
||||
|
||||
try{
|
||||
for (TaggingGroupingValue tgv : TaggingGroupingValue.values()) {
|
||||
if(tgv.value.equals(value))
|
||||
return tgv;
|
||||
}
|
||||
}catch(Exception e){
|
||||
return TaggingGroupingValue.onValue;
|
||||
}
|
||||
|
||||
return TaggingGroupingValue.onValue;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,197 @@
|
|||
package org.gcube.common.metadataprofilediscovery.reader;
|
||||
|
||||
import static org.gcube.resources.discovery.icclient.ICFactory.client;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
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.metadataprofilediscovery.bean.MetadataProfile;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat;
|
||||
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
||||
import org.gcube.common.scope.impl.ScopeBean;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* The Class MedataFormatDiscovery.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 8, 2016
|
||||
*/
|
||||
public class MetadataFormatDiscovery {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(MetadataFormatDiscovery.class);
|
||||
public static final String DATA_CATALOGUE_METADATA_SECONDARY_TYPE = "DataCatalogueMetadata";
|
||||
private String secondaryType;
|
||||
private ScopeBean scope;
|
||||
private List<MetadataProfile> metadataProfiles;
|
||||
|
||||
/**
|
||||
* Instantiates a new medata format reader.
|
||||
*
|
||||
* @param scope - the scope to be searched
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public MetadataFormatDiscovery(ScopeBean scope) throws Exception {
|
||||
this.scope = scope;
|
||||
this.secondaryType = DATA_CATALOGUE_METADATA_SECONDARY_TYPE;
|
||||
this.metadataProfiles = readMetadataProfilesFromInfrastrucure();
|
||||
}
|
||||
|
||||
/**
|
||||
* this method looks up the applicationProfile profile among the ones available in the infrastructure.
|
||||
*
|
||||
* @return the applicationProfile profile
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private List<MetadataProfile> readMetadataProfilesFromInfrastrucure() throws Exception {
|
||||
logger.trace("read secondary type: "+secondaryType);
|
||||
|
||||
if(this.scope==null)
|
||||
throw new Exception("Scope is null");
|
||||
|
||||
String scopeString = this.scope.toString();
|
||||
logger.trace("read scope: "+scopeString);
|
||||
|
||||
List<MetadataProfile> list = new ArrayList<MetadataProfile>();
|
||||
|
||||
try {
|
||||
|
||||
// ScopeProvider.instance.set(scopeString);
|
||||
// logger.info("scope provider set instance: "+scopeString);
|
||||
|
||||
// ScopeProvider.instance.set(scopeString);
|
||||
logger.info("Using scope from ScopeProvider: "+scopeString);
|
||||
|
||||
String queryString = QueryForResourceUtil.getGcubeGenericQueryStringForSecondaryType(secondaryType);
|
||||
logger.trace("queryString: " +queryString);
|
||||
Query q = new QueryBox(queryString);
|
||||
|
||||
DiscoveryClient<String> client = client();
|
||||
List<String> metaProfile = client.submit(q);
|
||||
|
||||
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 : metaProfile) {
|
||||
try{
|
||||
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
Document doc = docBuilder.parse(new InputSource(new StringReader(elem)));
|
||||
Node node = doc.getDocumentElement();
|
||||
XPathHelper helper = new XPathHelper(node);
|
||||
MetadataProfile meta = getMetadataProfileFromResource(doc, helper);
|
||||
list.add(meta);
|
||||
}catch(Exception e){
|
||||
logger.error("Error while trying to fetch resource with secondary type "+secondaryType+" from the infrastructure, scope: "+scopeString,e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Error while trying to fetch applicationProfile "+secondaryType+" from the infrastructure, "+e);
|
||||
return list;
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the metadata type from resource.
|
||||
*
|
||||
* @param helper the helper
|
||||
* @return the metadata type from resource
|
||||
* @throws MetadataProfileNotFoundException the application profile not found exception
|
||||
*/
|
||||
private MetadataProfile getMetadataProfileFromResource(Document doc, XPathHelper helper) throws MetadataProfileNotFoundException{
|
||||
|
||||
try {
|
||||
|
||||
MetadataProfile metadataProfile = new MetadataProfile();
|
||||
List<String> id = helper.evaluate("/Resource/ID/text()");
|
||||
|
||||
if(id==null || id.isEmpty())
|
||||
throw new MetadataProfileNotFoundException("Resource ID not found for "+helper.toString());
|
||||
else{
|
||||
metadataProfile.setId(id.get(0));
|
||||
}
|
||||
|
||||
List<String> name = helper.evaluate("/Resource/Profile/Name/text()");
|
||||
|
||||
if(name==null || name.isEmpty())
|
||||
throw new MetadataProfileNotFoundException("Resource Name not found for Resource Id: "+metadataProfile.getId());
|
||||
else
|
||||
metadataProfile.setName(name.get(0));
|
||||
|
||||
logger.info("Building Profile for Resource Name: "+metadataProfile.getName());
|
||||
|
||||
List<String> description = helper.evaluate("/Resource/Profile/Description/text()");
|
||||
|
||||
if(description==null || description.isEmpty())
|
||||
logger.info("Description not found for Resource ID: "+metadataProfile.getId()+", continuing.. ");
|
||||
else
|
||||
metadataProfile.setDescription(description.get(0));
|
||||
|
||||
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 (within Resource) Id: "+metadataProfile.getId());
|
||||
else
|
||||
metadataProfile.setMetadataType(metadataType);
|
||||
|
||||
return metadataProfile;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("An error occurred in getMetadataProfileFromResource ", e);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the secondary type.
|
||||
*
|
||||
* @return the secondary type
|
||||
*/
|
||||
public String getSecondaryType() {
|
||||
return secondaryType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the scope.
|
||||
*
|
||||
* @return the scope
|
||||
*/
|
||||
public ScopeBean getScope() {
|
||||
return scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the metadata types.
|
||||
*
|
||||
* @return the metadataTypes
|
||||
*/
|
||||
public List<MetadataProfile> getMetadataProfiles() {
|
||||
|
||||
return metadataProfiles;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,258 @@
|
|||
package org.gcube.common.metadataprofilediscovery.reader;
|
||||
|
||||
import static org.gcube.resources.discovery.icclient.ICFactory.client;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
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 org.gcube.common.metadataprofilediscovery.jaxb.MetadataField;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat;
|
||||
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
||||
import org.gcube.common.scope.impl.ScopeBean;
|
||||
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.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
|
||||
/**
|
||||
* The Class MetadataFormatReader.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* May 19, 2017
|
||||
*/
|
||||
public class MetadataFormatReader {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(MetadataFormatReader.class);
|
||||
private ScopeBean scope;
|
||||
private MetadataFormat metadataFormat;
|
||||
private String resourceID;
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new medata format reader.
|
||||
*
|
||||
* @param scope the scope
|
||||
* @param resourceID the resource id
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public MetadataFormatReader(ScopeBean scope, String resourceID) throws Exception {
|
||||
this.scope = scope;
|
||||
this.resourceID = resourceID;
|
||||
this.metadataFormat = getMetadataFormatByResourceID(resourceID);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata format by id.
|
||||
*
|
||||
* @param resourceID the resource id
|
||||
* @return the metadata format by id
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private MetadataFormat getMetadataFormatByResourceID(String resourceID) throws Exception {
|
||||
logger.trace("Getting MedataFormat for resourceID: "+resourceID);
|
||||
|
||||
if(this.scope==null)
|
||||
throw new Exception("Scope is null");
|
||||
|
||||
String scopeString = this.scope.toString();
|
||||
logger.trace("read scope: "+scopeString);
|
||||
|
||||
MetadataFormat mf = new MetadataFormat();
|
||||
|
||||
try {
|
||||
|
||||
logger.info("Using scope from ScopeProvider: "+scopeString);
|
||||
|
||||
String queryString = QueryForResourceUtil.queryForGenericResourceById(resourceID);
|
||||
logger.trace("queryString: " +queryString);
|
||||
Query q = new QueryBox(queryString);
|
||||
|
||||
DiscoveryClient<String> client = client();
|
||||
List<String> appProfile = client.submit(q);
|
||||
|
||||
if (appProfile == null || appProfile.size() == 0)
|
||||
throw new MetadataProfileNotFoundException("Your resourceID "+resourceID+" is not registered in the infrastructure, the scope is "+scopeString);
|
||||
else {
|
||||
String theResource = null;
|
||||
try{
|
||||
theResource = appProfile.get(0);
|
||||
// logger.trace("Resource with resourceID "+resourceID+" matched "+theResource);
|
||||
logger.debug("Resource (Metadata Format) with resourceID "+resourceID+" found");
|
||||
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
Node node = docBuilder.parse(new InputSource(new StringReader(theResource))).getDocumentElement();
|
||||
XPathHelper helper = new XPathHelper(node);
|
||||
// List<MetadataField> fields = getMetadataFieldsFromResource(helper);
|
||||
// mf.setMetadataFields(fields);
|
||||
logger.debug("Unmarshalling it..");
|
||||
mf = getMetadataFormatFromResource(helper);
|
||||
String metadataSource = getMetadataFormatSourceFromResource(helper);
|
||||
mf.setMetadataSource(metadataSource);
|
||||
}catch(Exception e){
|
||||
logger.error("Error while parsing Resource "+theResource+" from the infrastructure, the scope is "+scopeString,e);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Error while trying to fetch resourceID "+resourceID+" from the infrastructure, the scope is "+scopeString,e);
|
||||
return mf;
|
||||
} finally{
|
||||
// ScopeProvider.instance.reset();
|
||||
}
|
||||
|
||||
return mf;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata format source from resource.
|
||||
*
|
||||
* @param helper the helper
|
||||
* @return the metadata format source from resource
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private String getMetadataFormatSourceFromResource(XPathHelper helper) throws Exception{
|
||||
|
||||
try {
|
||||
|
||||
List<String> metadataFormatSource = helper.evaluate("/Resource/Profile/Body/metadataformat");
|
||||
|
||||
if(metadataFormatSource==null || metadataFormatSource.isEmpty())
|
||||
throw new Exception("metadataformat not found in the body, consider to add <metadataformat>");
|
||||
|
||||
return metadataFormatSource.get(0);
|
||||
|
||||
}catch(Exception e){
|
||||
logger.error("An error occurred in getMetadataFormatSourceFromResource ", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata format from resource.
|
||||
*
|
||||
* @param helper the helper
|
||||
* @return the metadata format from resource
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private MetadataFormat getMetadataFormatFromResource(XPathHelper helper) throws Exception{
|
||||
|
||||
try {
|
||||
|
||||
List<String> metadataFormatSource = helper.evaluate("/Resource/Profile/Body/metadataformat");
|
||||
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(MetadataFormat.class);
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
|
||||
if(metadataFormatSource==null || metadataFormatSource.size()==0)
|
||||
throw new Exception("Resource does not contain <metadataformat> in the body");
|
||||
|
||||
InputStream stream = new ByteArrayInputStream(metadataFormatSource.get(0).getBytes());
|
||||
MetadataFormat mtdf = (MetadataFormat) jaxbUnmarshaller.unmarshal(stream);
|
||||
logger.debug("returning metadata format with medata type: "+mtdf.getType());
|
||||
|
||||
return mtdf;
|
||||
|
||||
}catch(Exception e){
|
||||
logger.error("An error occurred in getMetadataFormatSourceFromResource ", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata fields from resource.
|
||||
*
|
||||
* @param helper the helper
|
||||
* @return the metadata fields from resource
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private List<MetadataField> getMetadataFieldsFromResource(XPathHelper helper) throws Exception{
|
||||
|
||||
try {
|
||||
|
||||
List<String> metadatafields = helper.evaluate("/Resource/Profile/Body/metadataformat/metadatafield");
|
||||
|
||||
if(metadatafields==null || metadatafields.isEmpty())
|
||||
throw new Exception("Metadata fields not found");
|
||||
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(MetadataField.class);
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
|
||||
// for (String string : metadatafields) {
|
||||
// logger.debug("mf "+string);
|
||||
// }
|
||||
|
||||
List<MetadataField> mfs = new ArrayList<MetadataField>();
|
||||
logger.debug("MetadataFields are: "+metadatafields.size());
|
||||
|
||||
for (String mfield : metadatafields) {
|
||||
try{
|
||||
InputStream stream = new ByteArrayInputStream(mfield.getBytes());
|
||||
MetadataField mtdf = (MetadataField) jaxbUnmarshaller.unmarshal(stream);
|
||||
logger.debug("Unmarshalled: "+mtdf);
|
||||
mfs.add(mtdf);
|
||||
}catch(Exception e){
|
||||
logger.error("An error occurred during unmarshall performing on "+mfield+", skipping this metadatafield");
|
||||
}
|
||||
}
|
||||
|
||||
return mfs;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("An error occurred in getMetadataFieldsFromResource ", e);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Gets the scope.
|
||||
*
|
||||
* @return the scope
|
||||
*/
|
||||
public ScopeBean getScope() {
|
||||
|
||||
return scope;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the metadata format.
|
||||
*
|
||||
* @return the metadataFormat
|
||||
*/
|
||||
public MetadataFormat getMetadataFormat() {
|
||||
|
||||
return metadataFormat;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the resource id.
|
||||
*
|
||||
* @return the resourceID
|
||||
*/
|
||||
public String getResourceID() {
|
||||
|
||||
return resourceID;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package org.gcube.common.metadataprofilediscovery.reader;
|
||||
|
||||
/**
|
||||
* The Class ApplicationProfileNotFoundException.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 7, 2016
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class MetadataProfileNotFoundException extends Exception {
|
||||
|
||||
/**
|
||||
* Instantiates a new application profile not found exception.
|
||||
*
|
||||
* @param message the message
|
||||
*/
|
||||
public MetadataProfileNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.reader;
|
||||
|
||||
import static org.gcube.resources.discovery.icclient.ICFactory.client;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
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 org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategories;
|
||||
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
||||
import org.gcube.common.scope.impl.ScopeBean;
|
||||
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.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
|
||||
/**
|
||||
* The Class NamespaceCategoryReader.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Apr 26, 2017
|
||||
*/
|
||||
public class NamespaceCategoryReader {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(NamespaceCategoryReader.class);
|
||||
|
||||
private static final String GENERIC_RESOURCE_NAMESPACES_NAME = "Namespaces Catalogue Categories";
|
||||
private static final String GENERIC_RESOURCE_NAMESPACES_SECONDARY_TYPE = "DataCatalogueNamespace";
|
||||
|
||||
private ScopeBean scope;
|
||||
|
||||
private NamespaceCategories namespaces;
|
||||
|
||||
/**
|
||||
* Instantiates a new medata format reader.
|
||||
*
|
||||
* @param scope the scope
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public NamespaceCategoryReader(ScopeBean scope) throws Exception {
|
||||
this.scope = scope;
|
||||
readNamespaceCategory();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the metadata format by id.
|
||||
*
|
||||
* @return the metadata format by id
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private void readNamespaceCategory() throws Exception {
|
||||
logger.trace("Getting Namespace Category");
|
||||
|
||||
if(this.scope==null)
|
||||
throw new Exception("Scope is null");
|
||||
|
||||
String scopeString = this.scope.toString();
|
||||
logger.trace("read scope: "+scopeString);
|
||||
|
||||
namespaces = new NamespaceCategories();
|
||||
|
||||
try {
|
||||
|
||||
logger.info("Using scope from ScopeProvider: "+scopeString);
|
||||
|
||||
String queryString = QueryForResourceUtil.getGcubeGenericQueryStringForSecondaryTypeAndName(GENERIC_RESOURCE_NAMESPACES_NAME, GENERIC_RESOURCE_NAMESPACES_SECONDARY_TYPE);
|
||||
logger.trace("queryString: " +queryString);
|
||||
Query q = new QueryBox(queryString);
|
||||
|
||||
DiscoveryClient<String> client = client();
|
||||
List<String> appProfile = client.submit(q);
|
||||
|
||||
if (appProfile == null || appProfile.size() == 0)
|
||||
throw new MetadataProfileNotFoundException("Your resource is not registered in the infrastructure, the scope is "+scopeString);
|
||||
else {
|
||||
String theResource = null;
|
||||
try{
|
||||
theResource = appProfile.get(0);
|
||||
logger.debug("Resource (Namespaces Catalogue Categories) found");
|
||||
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);
|
||||
}catch(Exception e){
|
||||
logger.error("Error while parsing Resource "+theResource+" from the infrastructure, the scope is "+scopeString,e);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Error while trying to fetch resource with name " + GENERIC_RESOURCE_NAMESPACES_NAME + " and secondary type " + GENERIC_RESOURCE_NAMESPACES_SECONDARY_TYPE +
|
||||
" from the infrastructure, the scope is "+scopeString, e);
|
||||
throw new Exception("Error while trying to fetch resource with name " + GENERIC_RESOURCE_NAMESPACES_NAME + " and secondary type " + GENERIC_RESOURCE_NAMESPACES_SECONDARY_TYPE +
|
||||
" from the infrastructure, the scope is "+scopeString, e);
|
||||
} finally{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read namespace category from resource.
|
||||
*
|
||||
* @param helper the helper
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
private void readNamespaceCategoryFromResource(XPathHelper helper) throws Exception{
|
||||
|
||||
try {
|
||||
|
||||
List<String> namespaceSources = helper.evaluate("/Resource/Profile/Body/namespaces");
|
||||
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(NamespaceCategories.class);
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
|
||||
if(namespaceSources==null || namespaceSources.size()==0){
|
||||
throw new Exception("Resource does not contain <namespaces> <namespace>...</namespace> </namespaces> in the body");
|
||||
}
|
||||
|
||||
InputStream stream = new ByteArrayInputStream(namespaceSources.get(0).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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the namespaces.
|
||||
*
|
||||
* @return the namespaces
|
||||
*/
|
||||
public NamespaceCategories getNamespaces() {
|
||||
|
||||
return namespaces;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("NamespaceCategoryReader [scope=");
|
||||
builder.append(scope);
|
||||
builder.append(", namespaces=");
|
||||
builder.append(namespaces);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package org.gcube.common.metadataprofilediscovery.reader;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class PropertyFileNotFoundException extends Exception {
|
||||
public PropertyFileNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery.reader;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Class QueryForResourceUtil.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Apr 26, 2017
|
||||
*/
|
||||
public class QueryForResourceUtil {
|
||||
|
||||
|
||||
/**
|
||||
* Query for generic resource by id. Returns a query string to get a generic resource by input resource id
|
||||
*
|
||||
* @param resourceId the resource id
|
||||
* @return the string
|
||||
*/
|
||||
public static synchronized String queryForGenericResourceById(String resourceId){
|
||||
|
||||
return String.format("declare namespace ic = 'http://gcube-system.org/namespaces/informationsystem/registry'; " +
|
||||
"for $resource in collection('/db/Profiles')//Document/Data/ic:Profile/Resource " +
|
||||
"where ($resource/ID/text() eq '%s') return $resource", resourceId);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the gcube generic query string for secondary type.
|
||||
*
|
||||
* @param secondaryType the secondary type
|
||||
* @return the gcube generic query string for secondary type
|
||||
*/
|
||||
public static synchronized String getGcubeGenericQueryStringForSecondaryType(String secondaryType){
|
||||
|
||||
return "for $profile in collection('/db/Profiles/GenericResource')//Resource" +
|
||||
" where $profile/Profile/SecondaryType/string() eq '"+secondaryType+"'" +
|
||||
" return $profile";
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the gcube generic query string for secondary type.
|
||||
* @param name the resource name
|
||||
* @param secondaryType the secondary type
|
||||
* @return the gcube generic query string for secondary type
|
||||
*/
|
||||
public static String getGcubeGenericQueryStringForSecondaryTypeAndName(String name, String secondaryType){
|
||||
|
||||
return "for $profile in collection('/db/Profiles/GenericResource')//Resource " +
|
||||
"where $profile/Profile/SecondaryType/string() eq '" + secondaryType + "' and $profile/Profile/Name/string() " +
|
||||
" eq '" + name + "'" +
|
||||
"return $profile";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="metadataformat">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="metadatafield" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="xs:string" name="fieldName" />
|
||||
<xs:element type="xs:boolean" name="mandatory"
|
||||
minOccurs="0" maxOccurs="1" />
|
||||
<xs:element name="dataType">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="String" />
|
||||
<xs:enumeration value="Time" />
|
||||
<xs:enumeration value="Time_Interval" />
|
||||
<xs:enumeration value="Times_ListOf" />
|
||||
<xs:enumeration value="Text" />
|
||||
<xs:enumeration value="Boolean" />
|
||||
<xs:enumeration value="Number" />
|
||||
<xs:enumeration value="GeoJSON" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element type="xs:string" name="maxOccurs"
|
||||
minOccurs="0" maxOccurs="1" />
|
||||
<xs:element type="xs:string" name="defaultValue"
|
||||
minOccurs="0" maxOccurs="1" />
|
||||
<xs:element type="xs:string" name="note" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
<xs:element name="vocabulary" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="xs:string" name="vocabularyField"
|
||||
minOccurs="1" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:boolean" name="isMultiSelection" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="validator" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="xs:string" name="regularExpression" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="tagging" type="TaggingType"
|
||||
minOccurs="0" maxOccurs="1">
|
||||
</xs:element>
|
||||
<xs:element name="grouping" type="GroupingType"
|
||||
minOccurs="0" maxOccurs="1">
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="categoryref" use="optional" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="NotEmpty" use="required" name="type" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:simpleType name="TaggingGroupingValue">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="onFieldName" />
|
||||
<xs:enumeration value="onValue" />
|
||||
<xs:enumeration value="onFieldName_onValue" />
|
||||
<xs:enumeration value="onValue_onFieldName" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:complexType name="TaggingType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="TaggingGroupingValue">
|
||||
<xs:attribute type="xs:boolean" name="create" />
|
||||
<xs:attribute type="NotEmpty" name="separator" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="GroupingType">
|
||||
<xs:simpleContent id="TaggingGroupingValue">
|
||||
<xs:extension base="TaggingGroupingValue">
|
||||
<xs:attribute type="xs:boolean" name="create" />
|
||||
<xs:attribute type="xs:boolean" name="propagateUp" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:simpleType name="NotEmpty">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:minLength value="1" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:schema>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:category="http://www.w3.org/TR/html4/">
|
||||
<xs:element name="namespaces">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="namespace" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="xs:string" name="name" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
<xs:element type="xs:string" name="title" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
<xs:element type="xs:string" name="description"
|
||||
minOccurs="0" maxOccurs="1" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="id" use="required" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:unique name="unique-namespace-id">
|
||||
<xs:selector xpath="namespace" />
|
||||
<xs:field xpath="@id" />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
</xs:schema>
|
|
@ -0,0 +1,70 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
/**
|
||||
* The Class TestDataCatalogueMetadataFormatReader.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 8, 2016
|
||||
*/
|
||||
public class TestDataCatalogueMetadataFormatReader {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(TestDataCatalogueMetadataFormatReader.class);
|
||||
|
||||
/**
|
||||
* Test.
|
||||
*/
|
||||
// @Test
|
||||
public void test() {
|
||||
try {
|
||||
String scopeString = "/gcube/devsec/devVRE";
|
||||
ScopeProvider.instance.set(scopeString);
|
||||
DataCalogueMetadataFormatReader reader = new DataCalogueMetadataFormatReader();
|
||||
int i = 0;
|
||||
|
||||
List<NamespaceCategory> categs = reader.getListOfNamespaceCategories();
|
||||
for (NamespaceCategory namespaceCategory : categs) {
|
||||
logger.trace("\n\n "+ ++i +".) Category: "+namespaceCategory);
|
||||
}
|
||||
|
||||
i = 0;
|
||||
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));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static String PROFILE_EXAMPLE_FILENAME = "EmptyProfileExample.xml";
|
||||
|
||||
// @Test
|
||||
public void validateAgainstProfileSchema() throws Exception {
|
||||
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(PROFILE_EXAMPLE_FILENAME);
|
||||
DataCalogueMetadataFormatReader.validateProfile(inputStream);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,210 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.MetadataField;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.MetadataFormat;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategories;
|
||||
import org.gcube.common.metadataprofilediscovery.jaxb.NamespaceCategory;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* The Class TestJaxbMetadataMarshUnmarsh.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 7, 2016
|
||||
*/
|
||||
public class TestJaxbMetadataMarshUnmarsh {
|
||||
|
||||
static MetadataField ckanMetadata;
|
||||
static MetadataFormat metadatas;
|
||||
static String tmpFileXML = "." + File.separator + "CkanMetadatas.xml";
|
||||
static String tmpCategoriesXML = "." + File.separator + "NamespacesCatalogueCategories.xml";
|
||||
private ArrayList<NamespaceCategory> ckanCategories;
|
||||
public static int MAX_CATEGORIES = 3;
|
||||
|
||||
/**
|
||||
* Test.
|
||||
*/
|
||||
// @Test
|
||||
public void test() {
|
||||
|
||||
/*metadatas = new MetadataFormat();
|
||||
|
||||
ckanCategories = new ArrayList<MetadataCategory>();
|
||||
|
||||
for (int i=0; i<MAX_CATEGORIES; i++) {
|
||||
ckanCategories.add(new MetadataCategory("cat "+i, "title cat "+i, "description "+i));
|
||||
}
|
||||
|
||||
metadatas.setMetadataCategories(ckanCategories);
|
||||
|
||||
|
||||
ckanMetadata = new MetadataField();
|
||||
ckanMetadata.setFieldName("Name");
|
||||
ckanMetadata.setMandatory(true);
|
||||
ckanMetadata.setDefaultValue("default value");
|
||||
ckanMetadata.setDataType(DataType.Time);
|
||||
|
||||
ckanMetadata.setCategoryRef(ckanCategories.get(new Random().nextInt(MAX_CATEGORIES)).getId());
|
||||
List<String> vocabulary = new ArrayList<String>();
|
||||
vocabulary.add("field1");
|
||||
vocabulary.add("field2");
|
||||
vocabulary.add("field3");
|
||||
MetadataVocabulary cvc = new MetadataVocabulary(vocabulary);
|
||||
ckanMetadata.setVocabulary(cvc);
|
||||
cvc.setIsMultiSelection(true);
|
||||
ckanMetadata.setNote("shown as suggestions in the insert/update metadata form of CKAN");
|
||||
MetadataValidator validator = new MetadataValidator("a regular expression for validating values");
|
||||
ckanMetadata.setValidator(validator);
|
||||
metadatas.addMetadata(ckanMetadata);
|
||||
|
||||
ckanMetadata = new MetadataField();
|
||||
ckanMetadata.setFieldName("Accessibility");
|
||||
ckanMetadata.setMandatory(true);
|
||||
ckanMetadata.setDefaultValue("virtual/public");
|
||||
|
||||
ckanMetadata.setTagging(new MetadataTagging(true, ":", TaggingGroupingValue.onValue_onFieldName));
|
||||
|
||||
MetadataGrouping grouping = new MetadataGrouping();
|
||||
grouping.setCreate(true);
|
||||
grouping.setGroupingValue(TaggingGroupingValue.onValue);
|
||||
ckanMetadata.setGrouping(grouping);
|
||||
List<String> vocabulary2 = new ArrayList<String>();
|
||||
vocabulary2.add("virtual/public");
|
||||
vocabulary2.add("virtual/private");
|
||||
vocabulary2.add("transactional");
|
||||
MetadataVocabulary cvc2 = new MetadataVocabulary(vocabulary2);
|
||||
ckanMetadata.setVocabulary(cvc2);
|
||||
ckanMetadata.setNote("shown as suggestions in the insert metadata form of CKAN");
|
||||
MetadataValidator validator2 = new MetadataValidator("a regular expression for validating values");
|
||||
ckanMetadata.setValidator(validator2);
|
||||
|
||||
metadatas.addMetadata(ckanMetadata);*/
|
||||
|
||||
try {
|
||||
|
||||
//marshalingExample();
|
||||
unMarshalingMetadataFields();
|
||||
//unMarshalingCategories();
|
||||
}
|
||||
catch (JAXBException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Marshaling example.
|
||||
*
|
||||
* @throws JAXBException the JAXB exception
|
||||
*/
|
||||
private static void marshalingExample() throws JAXBException
|
||||
{
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(MetadataFormat.class);
|
||||
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
|
||||
|
||||
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
|
||||
|
||||
//Marshal the employees list in console
|
||||
// jaxbMarshaller.marshal(employees, System.out);
|
||||
|
||||
//Marshal the employees list in file
|
||||
jaxbMarshaller.marshal(metadatas, new File(tmpFileXML));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Un marshaling example.
|
||||
*
|
||||
* @throws JAXBException the JAXB exception
|
||||
*/
|
||||
private static void unMarshalingMetadataFields() throws JAXBException
|
||||
{
|
||||
//unMarshalingCategories();
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(MetadataFormat.class);
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
|
||||
//We had written this file in marshalling example
|
||||
MetadataFormat mtds = (MetadataFormat) jaxbUnmarshaller.unmarshal(new File(tmpFileXML));
|
||||
|
||||
System.out.println("Metadata Format");
|
||||
System.out.println(mtds);
|
||||
|
||||
// System.out.println("Metadata Categories");
|
||||
// if(mtds.getMetadataCategories()!=null){
|
||||
// for (MetadataCategory cat : mtds.getMetadataCategories()) {
|
||||
// System.out.println(cat);
|
||||
// System.out.println(cat.getCategoryQName());
|
||||
// }
|
||||
// }
|
||||
|
||||
System.out.println("\n\nMetadata Fields");
|
||||
for (MetadataField field : mtds.getMetadataFields()) {
|
||||
System.out.println(field);
|
||||
System.out.println("Category Ref: "+field.getCategoryRef());
|
||||
System.out.println("Category CategoryField Q Name: "+field.getCategoryFieldQName());
|
||||
System.out.println("QName: "+field.getCategoryFieldQName());
|
||||
System.out.println("MaxOccurs: "+field.getMaxOccurs());
|
||||
|
||||
// System.out.println(field.getGrouping());
|
||||
// System.out.println(field.getTagging());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Un marshaling example.
|
||||
*
|
||||
* @throws JAXBException the JAXB exception
|
||||
*/
|
||||
private static void unMarshalingCategories() throws JAXBException
|
||||
{
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(NamespaceCategories.class);
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
|
||||
//We had written this file in marshalling example
|
||||
NamespaceCategories mtds = (NamespaceCategories) jaxbUnmarshaller.unmarshal(new File(tmpCategoriesXML));
|
||||
|
||||
System.out.println("NamespaceCategories: ");
|
||||
System.out.println(mtds);
|
||||
|
||||
// System.out.println("Metadata Categories");
|
||||
// if(mtds.getMetadataCategories()!=null){
|
||||
// for (MetadataCategory cat : mtds.getMetadataCategories()) {
|
||||
// System.out.println(cat);
|
||||
// System.out.println(cat.getCategoryQName());
|
||||
// }
|
||||
// }
|
||||
|
||||
System.out.println("\nCategories: ");
|
||||
for (NamespaceCategory category : mtds.getNamespaceCategories()) {
|
||||
System.out.println(category);
|
||||
|
||||
// System.out.println(field.getGrouping());
|
||||
// System.out.println(field.getTagging());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
//System.out.println(DataType.valueOf("aa"));
|
||||
try {
|
||||
unMarshalingMetadataFields();
|
||||
}
|
||||
catch (JAXBException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.bean.MetadataProfile;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* The Class TestMetadataFormatDiscovery.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 8, 2016
|
||||
*/
|
||||
public class TestMetadataFormatDiscovery {
|
||||
|
||||
/**
|
||||
* Test.
|
||||
*/
|
||||
// @Test
|
||||
public void test() {
|
||||
|
||||
String scopeString = "/gcube/devsec/devVRE";
|
||||
final ScopeBean scope = new ScopeBean(scopeString);
|
||||
MetadataFormatDiscovery reader;
|
||||
try {
|
||||
ScopeProvider.instance.set(scopeString);
|
||||
reader = new MetadataFormatDiscovery(scope);
|
||||
//System.out.println(reader.getMetadataProfiles());
|
||||
|
||||
for (MetadataProfile metaProfile : reader.getMetadataProfiles()) {
|
||||
System.out.println(metaProfile.getId() +", name: "+metaProfile.getName() +", type: "+metaProfile.getMetadataType());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.common.metadataprofilediscovery;
|
||||
|
||||
import org.gcube.common.metadataprofilediscovery.reader.MetadataFormatReader;
|
||||
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
|
||||
*/
|
||||
public class TestMetadataFormatReader {
|
||||
|
||||
// @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();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue