package org.gcube.data.spd.obisplugin.search; import static org.gcube.data.spd.obisplugin.search.query.MappingUtils.getAsString; import java.util.List; import java.util.Map; import org.gcube.data.spd.model.products.DataProvider; import org.gcube.data.spd.model.products.DataSet; import org.gcube.data.spd.obisplugin.Constants; import org.gcube.data.spd.obisplugin.search.query.MappingUtils; import org.gcube.data.spd.obisplugin.search.query.QueryByIdentifier; import org.gcube.data.spd.obisplugin.search.query.QueryType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DataSetRetreiver { private static Logger log = LoggerFactory.getLogger(DataSetRetreiver.class); @SuppressWarnings("unchecked") public static DataSet get(String baseURL, String key) throws Exception { log.debug("Dataset Get: [ key={}, baseURL={} ]", key, baseURL); DataSet dataset = new DataSet(key); long start = System.currentTimeMillis(); QueryByIdentifier datasetQuery = new QueryByIdentifier(baseURL, key, QueryType.Dataset); Map listMaps = MappingUtils.getObjectMapping(datasetQuery.build()); log.debug("Dataset Retrieved: " + listMaps); if (listMaps != null) { List> results = (List>) listMaps.get("results"); if (results != null && !results.isEmpty()) { Map mapping = results.get(0); log.debug("Dataset Name: " + getAsString(mapping, "title")); dataset.setName(getAsString(mapping, "title")); String citation = getAsString(mapping, "citation"); if (citation == null) { List> institutionMapping = (List>) mapping .get("institutes"); if (institutionMapping != null && !institutionMapping.isEmpty()) { if (getAsString(institutionMapping.get(0), "name") != null) citation = getAsString(institutionMapping.get(0), "name"); dataset.setCitation(citation); } } else { dataset.setCitation(citation); } String providerKey = key; List> providerMapping = (List>) mapping.get("nodes"); DataProvider provider = new DataProvider(providerKey); if (providerMapping != null && !providerMapping.isEmpty()) { Map pMapping = (Map) providerMapping.get(0); provider.setName(getAsString(pMapping, "name")); } else { provider.setName(Constants.REPOSITORY_NAME); } dataset.setDataProvider(provider); } } log.trace("[Benchmark] time to retrieve dataset is " + (System.currentTimeMillis() - start)); return dataset; } }