gcubedatacatalogue-metadata.../src/main/java/org/gcube/datacatalogue/metadatadiscovery/DataCalogueMetadataFormatRe...

86 lines
3.0 KiB
Java

package org.gcube.datacatalogue.metadatadiscovery;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.scope.impl.ScopeBean;
import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataProfile;
import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat;
import org.gcube.datacatalogue.metadatadiscovery.reader.MetadataFormatDiscovery;
import org.gcube.datacatalogue.metadatadiscovery.reader.MetadataFormatReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The Class DataCalogueMetadataReader.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 8, 2016
*/
public class DataCalogueMetadataFormatReader implements DataCatalogueMetadataDiscovery{
private MetadataFormatDiscovery medataFormatDiscovery;
private final ScopeBean scope;
private Map<String, MetadataFormat> hash = new HashMap<String, MetadataFormat>();
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("DataCalogueMetadataFormatReader read scope "+scopeString +" from ScopeProvider");
if(scopeString==null || scopeString.isEmpty())
throw new Exception("Please set a valid scope into ScopeProvider");
scope = new ScopeBean(scopeString);
medataFormatDiscovery = new MetadataFormatDiscovery(scope);
logger.info("MedataFormatDiscovery has retrieved: "+medataFormatDiscovery.getMetadataProfiles().size() +" metadata type/s");
logger.debug("filling cache for MedataFormat");
for (MetadataProfile mT : medataFormatDiscovery.getMetadataProfiles()) {
if(mT==null)
continue;
MetadataFormatReader reader = new MetadataFormatReader(scope, mT.getId());
hash.put(mT.getId(), reader.getMetadataFormat());
logger.debug("MetadataType id: "+mT.getId() +" cached as: "+reader.getMetadataFormat());
}
}
/* (non-Javadoc)
* @see org.gcube.datacatalogue.metadatadiscovery.DataCatalogueMetadataDiscovery#getListOfMetadataTypes()
*/
@Override
public List<MetadataProfile> getListOfMetadataProfiles() throws Exception {
return medataFormatDiscovery.getMetadataProfiles();
}
/* (non-Javadoc)
* @see org.gcube.datacatalogue.metadatadiscovery.DataCatalogueMetadataDiscovery#getMetadataFormatForMetadataType(org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType)
*/
@Override
public MetadataFormat getMetadataFormatForMetadataProfile(MetadataProfile profile) throws Exception {
if(profile==null)
throw new Exception("Input "+ MetadataProfile.class.getSimpleName() + " is null");
MetadataFormat format = hash.get(profile.getId());
if(format!=null)
return format;
MetadataFormatReader reader = new MetadataFormatReader(scope, profile.getId());
return reader.getMetadataFormat();
}
}