package eu.europeana.cloud.service.mcs.rest; import eu.europeana.cloud.service.mcs.DataSetService; import eu.europeana.cloud.service.mcs.exception.DataSetNotExistsException; import eu.europeana.cloud.service.mcs.exception.RepresentationNotExistsException; import static eu.europeana.cloud.common.web.ParamConstants.F_CLOUDID; import static eu.europeana.cloud.common.web.ParamConstants.F_REPRESENTATIONNAME; import static eu.europeana.cloud.common.web.ParamConstants.F_VER; import static eu.europeana.cloud.common.web.ParamConstants.P_DATASET; import static eu.europeana.cloud.common.web.ParamConstants.P_PROVIDER; import com.qmino.miredot.annotations.ReturnType; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; /** * Resource to assign and unassign representations to/from data sets. */ @Path("/data-providers/{" + P_PROVIDER + "}/data-sets/{" + P_DATASET + "}/assignments") @Component @Scope("request") public class DataSetAssignmentsResource { @Autowired private DataSetService dataSetService; /** * Assigns representation into a data set. * <strong>Write permissions required.</strong> * * * @param providerId identifier of provider(required) * @param dataSetId identifier of data set (required) * @param recordId cloud id of record (required) * @param schema schema of representation (required) * @param representationVersion version of representation. If not provided, * latest persistent version will be assigned to data set. * @throws DataSetNotExistsException no such data set exists * @throws RepresentationNotExistsException no such representation exists. * @statuscode 204 object assigned. */ @POST @PreAuthorize("hasPermission(#dataSetId.concat('/').concat(#providerId), 'eu.europeana.cloud.common.model.DataSet', write)") public void addAssignment(@PathParam(P_PROVIDER) String providerId, @PathParam(P_DATASET) String dataSetId, @FormParam(F_CLOUDID) String recordId, @FormParam(F_REPRESENTATIONNAME) String schema, @FormParam(F_VER) String representationVersion) throws DataSetNotExistsException, RepresentationNotExistsException { ParamUtil.require(F_CLOUDID, recordId); ParamUtil.require(F_REPRESENTATIONNAME, schema); dataSetService.addAssignment(providerId, dataSetId, recordId, schema, representationVersion); } /** * Unassigns representation from a data set. If representation was not * assigned to a data set, nothing happens. * <strong>Write permissions required.</strong> * *@summary Unassign representation from a data set. * @param providerId identifier of provider(required) * @param dataSetId identifier of data set (required) * @param recordId cloud id of record (required) * @param schema schema of representation (required) * @throws DataSetNotExistsException no such data set exists */ @DELETE @PreAuthorize("hasPermission(#dataSetId.concat('/').concat(#providerId), 'eu.europeana.cloud.common.model.DataSet', write)") public void removeAssignment(@PathParam(P_PROVIDER) String providerId, @PathParam(P_DATASET) String dataSetId, @QueryParam(F_CLOUDID) String recordId, @QueryParam(F_REPRESENTATIONNAME) String schema, @QueryParam(F_VER) String versionId) throws DataSetNotExistsException { ParamUtil.require(F_CLOUDID, recordId); ParamUtil.require(F_REPRESENTATIONNAME, schema); ParamUtil.require(F_VER, versionId); dataSetService.removeAssignment(providerId, dataSetId, recordId, schema, versionId); } }