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 hash = new HashMap(); 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 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(); } }