package eu.europeana.cloud.service.mcs.rest; /** * @author akrystian */ import com.qmino.miredot.annotations.ReturnType; import eu.europeana.cloud.common.response.CloudTagsResponse; import eu.europeana.cloud.common.response.ResultSlice; import eu.europeana.cloud.common.utils.RevisionUtils; import eu.europeana.cloud.service.mcs.DataSetService; import eu.europeana.cloud.service.mcs.exception.DataSetNotExistsException; import eu.europeana.cloud.service.mcs.exception.ProviderNotExistsException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import org.springframework.security.acls.model.MutableAclService; import org.springframework.stereotype.Component; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Date; import java.util.List; import static eu.europeana.cloud.common.web.ParamConstants.*; /** * Resource to manage data sets. */ @Path("/data-providers/{" + P_PROVIDER + "}/data-sets/{" + P_DATASET + "}/representations/{" + P_REPRESENTATIONNAME + "}/revisions/{" + P_REVISION_NAME + "}/revisionProvider/{" + P_REVISION_PROVIDER_ID + "}") @Component @Scope("request") public class DataSetRevisionsResource { @Autowired private DataSetService dataSetService; @Value("${numberOfElementsOnPage}") private int numberOfElementsOnPage; @Autowired private MutableAclService mutableAclService; /** * Lists cloudIds from data set. Result is returned in * slices. * * @param providerId identifier of the dataset's provider. * @param dataSetId identifier of a data set. * @param representationName representation name. * @param revisionName name of the revision * @param revisionProviderId provider of revision * @param revisionTimestamp timestamp used for identifying revision, must be in UTC format * @param startFrom reference to next slice of result. If not provided, * first slice of result will be returned. * @return slice of cloud id with tags of the revision list. * @throws DataSetNotExistsException no such data set exists. * @summary get representation versions from a data set */ @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @ReturnType("eu.europeana.cloud.common.response.ResultSlice<CloudTagsResponse>") public Response getDataSetContents(@PathParam(P_PROVIDER) String providerId, @PathParam(P_DATASET) String dataSetId, @PathParam(P_REPRESENTATIONNAME) String representationName, @PathParam(P_REVISION_NAME) String revisionName, @PathParam(P_REVISION_PROVIDER_ID) String revisionProviderId, @QueryParam(F_REVISION_TIMESTAMP) String revisionTimestamp, @QueryParam(F_START_FROM) String startFrom, @QueryParam(F_LIMIT) int limitParam) throws DataSetNotExistsException, ProviderNotExistsException { // when limitParam is specified we can retrieve more results than configured number of elements per page final int limitWithNextSlice = (limitParam > 0 && limitParam <= 10000) ? limitParam : numberOfElementsOnPage; // validate parameters if (revisionTimestamp == null) throw new WebApplicationException("Revision timestamp parameter cannot be null"); DateTime timestamp = new DateTime(revisionTimestamp, DateTimeZone.UTC); ResultSlice<CloudTagsResponse> result = dataSetService.getDataSetsRevisions(providerId, dataSetId, revisionProviderId, revisionName, timestamp.toDate(), representationName, startFrom, limitWithNextSlice); return Response.ok(result).build(); } }