package eu.europeana.cloud.service.dps.utils.files.counter; import eu.europeana.cloud.common.model.Representation; import eu.europeana.cloud.mcs.driver.DataSetServiceClient; import eu.europeana.cloud.mcs.driver.RepresentationIterator; import eu.europeana.cloud.service.commons.urls.UrlParser; import eu.europeana.cloud.service.commons.urls.UrlPart; import eu.europeana.cloud.service.dps.DpsTask; import eu.europeana.cloud.service.dps.PluginParameterKeys; import eu.europeana.cloud.service.dps.rest.exceptions.TaskSubmissionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.MalformedURLException; import java.util.List; /** * Created by Tarek on 4/6/2016. * File counters inside a dataset task */ public class DatasetFilesCounter extends FilesCounter { private DataSetServiceClient dataSetServiceClient; private static final Logger LOGGER = LoggerFactory.getLogger(DatasetFilesCounter.class); DatasetFilesCounter(DataSetServiceClient dataSetServiceClient) { this.dataSetServiceClient = dataSetServiceClient; } public int getFilesCount(DpsTask task, String authorizationHeader) throws TaskSubmissionException { int size = 0; List<String> dataSets = task.getInputData().get(DpsTask.DATASET_URLS); String representationName = task.getParameter(PluginParameterKeys.REPRESENTATION_NAME); dataSetServiceClient.useAuthorizationHeader(authorizationHeader); for (String dataSet : dataSets) { try { UrlParser urlParser = new UrlParser(dataSet); RepresentationIterator iterator = dataSetServiceClient.getRepresentationIterator(urlParser.getPart(UrlPart.DATA_PROVIDERS), urlParser.getPart(UrlPart.DATA_SETS)); while (iterator.hasNext()) { Representation representation = iterator.next(); if (representationName == null || representation.getRepresentationName().equals(representationName)) { size += representation.getFiles().size(); } } } catch (MalformedURLException ex) { LOGGER.error("URL in task's dataset list is malformed. Submission terminated. Wrong entry: " + dataSet); throw new TaskSubmissionException("Malformed URL in task: " + dataSet + ". Submission process stopped."); } catch (Exception ex) { LOGGER.error("an exception happened !! " + ex.getMessage()); throw new RuntimeException(ex.getMessage() + ". Submission process stopped"); } } return size; } }