/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.wui.api.controllers;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import javax.ws.rs.core.MultivaluedMap;
import javax.xml.transform.TransformerException;
import org.roda.core.RodaCoreFactory;
import org.roda.core.common.ConsumesOutputStream;
import org.roda.core.common.EntityResponse;
import org.roda.core.common.StreamResponse;
import org.roda.core.common.UserUtility;
import org.roda.core.data.common.RodaConstants;
import org.roda.core.data.exceptions.AlreadyExistsException;
import org.roda.core.data.exceptions.AuthorizationDeniedException;
import org.roda.core.data.exceptions.GenericException;
import org.roda.core.data.exceptions.InvalidParameterException;
import org.roda.core.data.exceptions.IsStillUpdatingException;
import org.roda.core.data.exceptions.JobAlreadyStartedException;
import org.roda.core.data.exceptions.NotFoundException;
import org.roda.core.data.exceptions.RequestNotValidException;
import org.roda.core.data.v2.common.ObjectPermissionResult;
import org.roda.core.data.v2.formats.Format;
import org.roda.core.data.v2.index.IndexResult;
import org.roda.core.data.v2.index.IsIndexed;
import org.roda.core.data.v2.index.facet.Facets;
import org.roda.core.data.v2.index.filter.Filter;
import org.roda.core.data.v2.index.select.SelectedItems;
import org.roda.core.data.v2.index.select.SelectedItemsList;
import org.roda.core.data.v2.index.sort.Sorter;
import org.roda.core.data.v2.index.sublist.Sublist;
import org.roda.core.data.v2.ip.AIP;
import org.roda.core.data.v2.ip.DIP;
import org.roda.core.data.v2.ip.DIPFile;
import org.roda.core.data.v2.ip.File;
import org.roda.core.data.v2.ip.IndexedAIP;
import org.roda.core.data.v2.ip.IndexedDIP;
import org.roda.core.data.v2.ip.IndexedFile;
import org.roda.core.data.v2.ip.IndexedRepresentation;
import org.roda.core.data.v2.ip.Permissions;
import org.roda.core.data.v2.ip.Permissions.PermissionType;
import org.roda.core.data.v2.ip.Representation;
import org.roda.core.data.v2.ip.TransferredResource;
import org.roda.core.data.v2.ip.metadata.DescriptiveMetadata;
import org.roda.core.data.v2.ip.metadata.PreservationMetadata.PreservationMetadataType;
import org.roda.core.data.v2.jobs.Report;
import org.roda.core.data.v2.jobs.Reports;
import org.roda.core.data.v2.log.LogEntry.LOG_ENTRY_STATE;
import org.roda.core.data.v2.risks.IndexedRisk;
import org.roda.core.data.v2.risks.Risk;
import org.roda.core.data.v2.risks.RiskIncidence;
import org.roda.core.data.v2.user.User;
import org.roda.core.data.v2.validation.ValidationException;
import org.roda.core.index.utils.IterableIndexResult;
import org.roda.core.storage.ContentPayload;
import org.roda.core.storage.fs.FSPathContentPayload;
import org.roda.core.storage.fs.FSUtils;
import org.roda.core.util.IdUtils;
import org.roda.wui.client.browse.bundle.BrowseAIPBundle;
import org.roda.wui.client.browse.bundle.BrowseFileBundle;
import org.roda.wui.client.browse.bundle.BrowseRepresentationBundle;
import org.roda.wui.client.browse.bundle.DescriptiveMetadataEditBundle;
import org.roda.wui.client.browse.bundle.DescriptiveMetadataVersionsBundle;
import org.roda.wui.client.browse.bundle.DipBundle;
import org.roda.wui.client.browse.bundle.PreservationEventViewBundle;
import org.roda.wui.client.browse.bundle.SupportedMetadataTypeBundle;
import org.roda.wui.client.planning.MitigationPropertiesBundle;
import org.roda.wui.client.planning.RiskMitigationBundle;
import org.roda.wui.client.planning.RiskVersionsBundle;
import org.roda.wui.common.ControllerAssistant;
import org.roda.wui.common.RodaWuiController;
/**
* FIXME 1) verify all checkObject*Permissions (because now also a permission
* for insert is available)
*/
public class Browser extends RodaWuiController {
private Browser() {
super();
}
public static BrowseAIPBundle retrieveBrowseAipBundle(User user, String aipId, Locale locale,
List<String> aipFieldsToReturn)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
aipFieldsToReturn.addAll(new ArrayList<String>(RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN));
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, aipFieldsToReturn);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
BrowseAIPBundle browseAipBundle = BrowserHelper.retrieveBrowseAipBundle(user, aip, locale);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId);
return browseAipBundle;
}
public static BrowseRepresentationBundle retrieveBrowseRepresentationBundle(User user, String aipId,
String representationId, Locale locale, List<String> representationFieldsToReturn)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
List<String> aipFieldsWithPermissions = new ArrayList<>(Arrays.asList(RodaConstants.AIP_STATE,
RodaConstants.INDEX_UUID, RodaConstants.AIP_GHOST, RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL));
aipFieldsWithPermissions.addAll(RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), representationFieldsToReturn);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, representation.getAipId(), aipFieldsWithPermissions);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
BrowseRepresentationBundle browseRepresentationBundle = BrowserHelper.retrieveBrowseRepresentationBundle(aip,
representation, locale);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
return browseRepresentationBundle;
}
public static BrowseFileBundle retrieveBrowseFileBundle(User user, String aipId, String representationId,
List<String> filePath, String fileId, List<String> fileFieldsToReturn)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
List<String> aipFieldsWithPermissions = new ArrayList<>(Arrays.asList(RodaConstants.AIP_STATE,
RodaConstants.INDEX_UUID, RodaConstants.AIP_GHOST, RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL));
aipFieldsWithPermissions.addAll(RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, aipFieldsWithPermissions);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
List<String> representationFields = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.REPRESENTATION_AIP_ID,
RodaConstants.REPRESENTATION_ID, RodaConstants.REPRESENTATION_TYPE, RodaConstants.REPRESENTATION_ORIGINAL);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aip.getId(), representationId), representationFields);
String fileUUID = IdUtils.getFileId(aip.getId(), representationId, filePath, fileId);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, fileFieldsToReturn);
// delegate
BrowseFileBundle browseFileBundle = BrowserHelper.retrieveBrowseFileBundle(aip, representation, file, user);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
return browseFileBundle;
}
public static DescriptiveMetadataEditBundle retrieveDescriptiveMetadataEditBundle(User user, String aipId,
String representationId, String metadataId, String type, String version, Locale locale)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
List<String> aipFields = new ArrayList<>(RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
aipFields.addAll(Arrays.asList(RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL, RodaConstants.AIP_PARENT_ID));
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, aipFields);
IndexedRepresentation rep = null;
if (representationId != null) {
rep = BrowserHelper.retrieve(IndexedRepresentation.class, IdUtils.getRepresentationId(aipId, representationId),
Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.REPRESENTATION_ID));
}
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
DescriptiveMetadataEditBundle bundle = BrowserHelper.retrieveDescriptiveMetadataEditBundle(user, aip, rep,
metadataId, type, version, locale);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return bundle;
}
public static DescriptiveMetadataEditBundle retrieveDescriptiveMetadataEditBundle(User user, String aipId,
String representationId, String metadataId, Locale locale)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
List<String> aipFields = new ArrayList<>(RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
aipFields.addAll(Arrays.asList(RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL, RodaConstants.AIP_PARENT_ID));
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, aipFields);
IndexedRepresentation rep = null;
if (representationId != null) {
rep = BrowserHelper.retrieve(IndexedRepresentation.class, IdUtils.getRepresentationId(aipId, representationId),
Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.REPRESENTATION_ID));
}
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
DescriptiveMetadataEditBundle bundle = BrowserHelper.retrieveDescriptiveMetadataEditBundle(user, aip, rep,
metadataId, locale);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return bundle;
}
public static DescriptiveMetadataVersionsBundle retrieveDescriptiveMetadataVersionsBundle(User user, String aipId,
String representationId, String metadataId, Locale locale)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
DescriptiveMetadataVersionsBundle bundle = BrowserHelper.retrieveDescriptiveMetadataVersionsBundle(aipId,
representationId, metadataId, locale);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return bundle;
}
public static DipBundle retrieveDipBundle(User user, String dipUUID, String dipFileUUID)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedDIP dip = BrowserHelper.retrieve(IndexedDIP.class, dipUUID, RodaConstants.DIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, dip, PermissionType.READ);
// delegate
DipBundle bundle = BrowserHelper.retrieveDipBundle(dipUUID, dipFileUUID, user);
// register action
String aipId = null;
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_ID_PARAM,
dipUUID, RodaConstants.CONTROLLER_DIP_FILE_ID_PARAM, dipFileUUID);
return bundle;
}
public static <T extends IsIndexed> IndexResult<T> find(final Class<T> classToReturn, final Filter filter,
final Sorter sorter, final Sublist sublist, final Facets facets, final User user, final boolean justActive,
final List<String> fieldsToReturn) throws GenericException, AuthorizationDeniedException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
// delegate
final IndexResult<T> ret = BrowserHelper.find(classToReturn, filter, sorter, sublist, facets, user, justActive,
fieldsToReturn);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_CLASS_PARAM,
classToReturn.getSimpleName(), RodaConstants.CONTROLLER_FILTER_PARAM, filter,
RodaConstants.CONTROLLER_SORTER_PARAM, sorter, RodaConstants.CONTROLLER_SUBLIST_PARAM, sublist);
return ret;
}
public static <T extends IsIndexed> IterableIndexResult<T> findAll(final Class<T> classToReturn, final Filter filter,
final Sorter sorter, final Sublist sublist, final Facets facets, final User user, final boolean justActive,
final List<String> fieldsToReturn) throws GenericException, AuthorizationDeniedException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
// delegate
final IterableIndexResult<T> result = BrowserHelper.findAll(classToReturn, filter, sorter, sublist, facets, user,
justActive, fieldsToReturn);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_CLASS_PARAM,
classToReturn.getSimpleName(), RodaConstants.CONTROLLER_FILTER_PARAM, filter,
RodaConstants.CONTROLLER_SORTER_PARAM, sorter, RodaConstants.CONTROLLER_SUBLIST_PARAM, sublist,
RodaConstants.CONTROLLER_JUST_ACTIVE_PARAM, justActive);
return result;
}
public static <T extends IsIndexed> Long count(final User user, final Class<T> classToReturn, final Filter filter,
boolean justActive) throws AuthorizationDeniedException, GenericException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
// delegate
final Long count = BrowserHelper.count(classToReturn, filter, justActive, user);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_CLASS_PARAM,
classToReturn.getSimpleName(), RodaConstants.CONTROLLER_FILTER_PARAM, filter.toString());
return count;
}
public static <T extends IsIndexed> T retrieve(final User user, final Class<T> classToReturn, final String id,
final List<String> fieldsToReturn) throws AuthorizationDeniedException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
// delegate
final T ret = BrowserHelper.retrieve(classToReturn, id, fieldsToReturn);
// checking object permissions
controllerAssistant.checkObjectPermissions(user, ret, PermissionType.READ);
// register action
String aipId = classToReturn.equals(IndexedAIP.class) ? id : null;
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_CLASS_PARAM,
classToReturn.getSimpleName());
return ret;
}
public static <T extends IsIndexed> List<T> retrieve(final User user, final Class<T> classToReturn,
final SelectedItems<T> selectedItems, final List<String> fieldsToReturn)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
final List<T> objects = BrowserHelper.retrieve(classToReturn, selectedItems, fieldsToReturn);
for (T obj : objects) {
controllerAssistant.checkObjectPermissions(user, obj, PermissionType.READ);
}
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_ITEMS_PARAM,
selectedItems);
return objects;
}
public static <T extends IsIndexed> void delete(final User user, final Class<T> classToReturn,
final SelectedItems<T> ids)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
controllerAssistant.checkObjectPermissions(user, ids, PermissionType.DELETE);
// delegate
BrowserHelper.delete(user, classToReturn, ids);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_CLASS_PARAM,
classToReturn.getSimpleName());
}
public static <T extends IsIndexed> List<String> suggest(final User user, final Class<T> classToReturn,
final String field, final String query, boolean allowPartial)
throws AuthorizationDeniedException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user, classToReturn);
// delegate
final List<String> ret = BrowserHelper.suggest(classToReturn, field, query, user, allowPartial);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_CLASS_PARAM,
classToReturn.getSimpleName(), RodaConstants.CONTROLLER_FIELD_PARAM, field, RodaConstants.CONTROLLER_QUERY_PARAM,
query);
return ret;
}
/*
* ---------------------------------------------------------------------------
* ---------------- REST related methods - start -----------------------------
* ---------------------------------------------------------------------------
*/
public static EntityResponse retrieveAIPRepresentation(User user, String aipId, String representationId,
String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetAIPRepresentationParams(acceptFormat);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, representation.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipRepresentation = BrowserHelper.retrieveAIPRepresentation(representation, acceptFormat);
// register action
controllerAssistant.registerAction(user, representation.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.REPRESENTATION_ID, representation.getId());
return aipRepresentation;
}
public static StreamResponse retrieveAIPRepresentationPart(User user, String aipId, String representationId,
String part) throws GenericException, NotFoundException, AuthorizationDeniedException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, representation, PermissionType.READ);
// delegate
StreamResponse aipRepresentation = BrowserHelper.retrieveAIPRepresentationPart(representation, part);
// register action
controllerAssistant.registerAction(user, representation.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.REPRESENTATION_ID, representation.getId(), RodaConstants.CONTROLLER_PART_PARAM, part);
return aipRepresentation;
}
public static EntityResponse listAIPDescriptiveMetadata(User user, String aipId, String start, String limit,
String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListAIPDescriptiveMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipDescriptiveMetadataList = BrowserHelper.listAIPDescriptiveMetadata(aipId, start, limit,
acceptFormat);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_START_PARAM, start, RodaConstants.CONTROLLER_LIMIT_PARAM, limit);
return aipDescriptiveMetadataList;
}
public static EntityResponse listRepresentationDescriptiveMetadata(User user, String aipId, String representationId,
String start, String limit, String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListAIPDescriptiveMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, representation, PermissionType.READ);
// delegate
EntityResponse aipDescriptiveMetadataList = BrowserHelper.listRepresentationDescriptiveMetadata(
representation.getAipId(), representation.getId(), start, limit, acceptFormat);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_START_PARAM, start,
RodaConstants.CONTROLLER_LIMIT_PARAM, limit);
return aipDescriptiveMetadataList;
}
public static EntityResponse retrieveAIPDescriptiveMetadata(User user, String aipId, String metadataId,
String acceptFormat, String language) throws AuthorizationDeniedException, GenericException, TransformerException,
NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetAIPDescriptiveMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipDescritiveMetadata = BrowserHelper.retrieveAIPDescritiveMetadata(aipId, metadataId, acceptFormat,
language);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
metadataId);
return aipDescritiveMetadata;
}
public static EntityResponse retrieveRepresentationDescriptiveMetadata(User user, String aipId,
String representationId, String metadataId, String versionId, String acceptFormat, String language)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetAIPDescriptiveMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, representation, PermissionType.READ);
// delegate
EntityResponse aipDescritiveMetadata;
if (versionId == null) {
aipDescritiveMetadata = BrowserHelper.retrieveRepresentationDescriptiveMetadata(representation.getAipId(),
representation.getId(), metadataId, acceptFormat, language);
} else {
aipDescritiveMetadata = BrowserHelper.retrieveRepresentationDescriptiveMetadataVersion(representation.getAipId(),
representation.getId(), metadataId, versionId, acceptFormat, language);
}
// register action
controllerAssistant.registerAction(user, representation.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.API_PATH_PARAM_REPRESENTATION_ID, representationId, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
metadataId);
return aipDescritiveMetadata;
}
public static EntityResponse retrieveAIPDescriptiveMetadataVersion(User user, String aipId, String metadataId,
String versionId, String acceptFormat, String language) throws AuthorizationDeniedException, GenericException,
TransformerException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetAIPDescriptiveMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipDescritiveMetadata = BrowserHelper.retrieveAIPDescritiveMetadataVersion(aipId, metadataId,
versionId, acceptFormat, language);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
metadataId, RodaConstants.CONTROLLER_VERSION_ID_PARAM, versionId);
return aipDescritiveMetadata;
}
public static EntityResponse listAIPPreservationMetadata(User user, String aipId, String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListAIPMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipPreservationMetadataList = BrowserHelper.listAIPPreservationMetadata(aipId, acceptFormat);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId);
return aipPreservationMetadataList;
}
public static EntityResponse retrieveAIPRepresentationPreservationMetadata(User user, String aipId,
String representationId, String startAgent, String limitAgent, String startEvent, String limitEvent,
String startFile, String limitFile, String acceptFormat) throws AuthorizationDeniedException, GenericException,
TransformerException, NotFoundException, RequestNotValidException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetAIPRepresentationPreservationMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation rep = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, rep, PermissionType.READ);
// delegate
EntityResponse aipRepresentationPreservationMetadata = BrowserHelper.retrieveAIPRepresentationPreservationMetadata(
rep.getAipId(), rep.getId(), startAgent, limitAgent, startEvent, limitEvent, startFile, limitFile, acceptFormat);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_START_AGENT_PARAM,
startAgent, RodaConstants.CONTROLLER_LIMIT_AGENT_PARAM, limitAgent, RodaConstants.CONTROLLER_START_EVENT_PARAM,
startEvent, RodaConstants.CONTROLLER_LIMIT_EVENT_PARAM, limitEvent, RodaConstants.CONTROLLER_START_FILE_PARAM,
startFile, RodaConstants.CONTROLLER_LIMIT_FILE_PARAM, limitFile);
return aipRepresentationPreservationMetadata;
}
public static EntityResponse retrieveAIPRepresentationPreservationMetadataFile(User user, String fileUUID,
String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListAIPMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, file, PermissionType.READ);
// delegate
EntityResponse aipRepresentationPreservationMetadataFile = BrowserHelper
.retrieveAIPRepresentationPreservationMetadataFile(file.getAipId(), file.getRepresentationId(), file.getPath(),
file.getId(), acceptFormat);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
return aipRepresentationPreservationMetadataFile;
}
public static EntityResponse retrievePreservationMetadataEvent(User user, String id, String aipId,
String representationUUID, String fileUUID, boolean onlyDetails, String acceptFormat, String language)
throws RequestNotValidException, GenericException, NotFoundException, AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetPreservationMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
if (aipId != null) {
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
}
// delegate
EntityResponse event = BrowserHelper.retrievePreservationMetadataEvent(id, aipId, representationUUID, fileUUID,
onlyDetails, acceptFormat, language);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_UUID_PARAM, representationUUID,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
return event;
}
public static void createOrUpdatePreservationMetadataWithAIP(User user, String aipId, String fileId, InputStream is,
String fileName, boolean create) throws AuthorizationDeniedException, GenericException, NotFoundException,
RequestNotValidException, ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
String id = fileId == null ? fileName : fileId;
// delegate
BrowserHelper.createOrUpdateAIPRepresentationPreservationMetadataFile(aipId, null, new ArrayList<>(), id, is,
create);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId);
}
public static void createOrUpdatePreservationMetadataWithRepresentation(User user, String aipId,
String representationId, String fileId, InputStream is, String fileName, boolean create)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation rep = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, rep, PermissionType.UPDATE);
String id = fileId == null ? fileName : fileId;
// delegate
BrowserHelper.createOrUpdateAIPRepresentationPreservationMetadataFile(rep.getAipId(), rep.getId(),
new ArrayList<>(), id, is, create);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
}
public static void createOrUpdatePreservationMetadataWithFile(User user, String fileUUID, InputStream is,
boolean create) throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, file, PermissionType.UPDATE);
// delegate
BrowserHelper.createOrUpdateAIPRepresentationPreservationMetadataFile(file.getAipId(), file.getRepresentationId(),
file.getPath(), file.getId(), is, create);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
}
public static void deletePreservationMetadataWithAIP(User user, String aipId, String id, String type)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
BrowserHelper.deletePreservationMetadataFile(PreservationMetadataType.valueOf(type), aipId, null, id, false);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_ID_PARAM, id);
}
public static void deletePreservationMetadataWithRepresentation(User user, String aipId, String representationId,
String id, String type) throws AuthorizationDeniedException, GenericException, NotFoundException,
RequestNotValidException, ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation rep = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, rep, PermissionType.UPDATE);
// delegate
BrowserHelper.deletePreservationMetadataFile(PreservationMetadataType.valueOf(type), rep.getAipId(), rep.getId(),
id, false);
// register action
controllerAssistant.registerAction(user, rep.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_ID_PARAM, id);
}
public static EntityResponse listOtherMetadata(User user, String aipId, String representationId, String type,
String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListAIPMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipOtherMetadataList = BrowserHelper.listOtherMetadata(aipId, representationId, null, null, type,
acceptFormat);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
return aipOtherMetadataList;
}
public static EntityResponse listOtherMetadata(User user, String fileUUID, String type, String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListAIPMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, file.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse aipOtherMetadataList = BrowserHelper.listOtherMetadata(file.getAipId(), file.getRepresentationId(),
file.getPath(), file.getId(), type, acceptFormat);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
return aipOtherMetadataList;
}
public static EntityResponse retrieveOtherMetadata(User user, String aipId, String representationId, String type,
String suffix, String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetOtherMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse otherMetadata = BrowserHelper.retrieveOtherMetadata(aipId, representationId, null, null, type,
suffix, acceptFormat);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
return otherMetadata;
}
public static EntityResponse retrieveOtherMetadata(User user, String fileUUID, String type, String suffix,
String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetOtherMetadataParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, file.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
EntityResponse otherMetadata = BrowserHelper.retrieveOtherMetadata(file.getAipId(), file.getRepresentationId(),
file.getPath(), file.getId(), type, suffix, acceptFormat);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
return otherMetadata;
}
public static void createOrUpdateOtherMetadata(User user, String aipId, String representationId, String type,
InputStream is, String fileName) throws AuthorizationDeniedException, GenericException, NotFoundException,
RequestNotValidException, ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
String name = fileName;
if (name.contains(".")) {
name = name.substring(name.lastIndexOf('.'));
}
// delegate
BrowserHelper.createOrUpdateOtherMetadataFile(aipId, representationId, null, null, type, name, is);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
}
public static void createOrUpdateOtherMetadata(User user, String fileUUID, String type, InputStream is,
String fileName) throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, file.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
String name = fileName;
if (name.contains(".")) {
name = name.substring(name.lastIndexOf('.'));
}
// delegate
BrowserHelper.createOrUpdateOtherMetadataFile(file.getAipId(), file.getRepresentationId(), file.getPath(),
file.getId(), type, name, is);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
}
public static void deleteOtherMetadata(User user, String aipId, String representationId, String suffix, String type)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
BrowserHelper.deleteOtherMetadataFile(aipId, representationId, null, null, suffix, type);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId);
}
public static void deleteOtherMetadata(User user, String fileUUID, String suffix, String type)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
ValidationException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, file.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
BrowserHelper.deleteOtherMetadataFile(file.getAipId(), file.getRepresentationId(), file.getPath(), file.getId(),
suffix, type);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_UUID_PARAM, fileUUID);
}
/*
* ---------------------------------------------------------------------------
* ---------------- REST related methods - end -------------------------------
* ---------------------------------------------------------------------------
*/
public static IndexedAIP moveAIPInHierarchy(User user, SelectedItems<IndexedAIP> selected, String parentId,
String details) throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException,
AlreadyExistsException, ValidationException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, selected, PermissionType.UPDATE);
if (parentId != null) {
IndexedAIP parentAip = BrowserHelper.retrieve(IndexedAIP.class, parentId,
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, parentAip, PermissionType.CREATE);
}
// delegate
IndexedAIP returnAIP = BrowserHelper.moveAIPInHierarchy(user, selected, parentId, details);
// register action
controllerAssistant.registerAction(user, parentId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected, RodaConstants.CONTROLLER_TO_PARENT_PARAM, parentId);
return returnAIP;
}
public static AIP createAIP(User user, String parentId, String type) throws AuthorizationDeniedException,
GenericException, NotFoundException, RequestNotValidException, AlreadyExistsException {
if (parentId == null) {
return createAIPTop(user, type);
} else {
return createAIPBelow(user, parentId, type);
}
}
public static AIP createAIPTop(User user, String type) throws AuthorizationDeniedException, GenericException,
NotFoundException, RequestNotValidException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
Permissions permissions = new Permissions();
permissions.setUserPermissions(user.getId(), new HashSet<PermissionType>(Arrays.asList(PermissionType.values())));
// delegate
String parentId = null;
AIP aip = BrowserHelper.createAIP(user, parentId, type, permissions);
// register action
controllerAssistant.registerAction(user, aip.getId(), LOG_ENTRY_STATE.SUCCESS);
return aip;
}
public static AIP createAIPBelow(User user, String parentId, String type) throws AuthorizationDeniedException,
GenericException, NotFoundException, RequestNotValidException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
Permissions permissions = new Permissions();
if (parentId != null) {
IndexedAIP parentSDO = BrowserHelper.retrieve(IndexedAIP.class, parentId,
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, parentSDO, PermissionType.CREATE);
Permissions parentPermissions = parentSDO.getPermissions();
for (String name : parentPermissions.getUsernames()) {
permissions.setUserPermissions(name, parentPermissions.getUserPermissions(name));
}
for (String name : parentPermissions.getGroupnames()) {
permissions.setGroupPermissions(name, parentPermissions.getGroupPermissions(name));
}
} else {
throw new RequestNotValidException("Creating AIP that should be below another with a null parentId");
}
permissions.setUserPermissions(user.getId(), new HashSet<PermissionType>(Arrays.asList(PermissionType.values())));
// delegate
AIP aip = BrowserHelper.createAIP(user, parentId, type, permissions);
// register action
controllerAssistant.registerAction(user, aip.getId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_PARENT_ID_PARAM, parentId);
return aip;
}
public static AIP updateAIP(User user, AIP aip) throws AuthorizationDeniedException, GenericException,
RequestNotValidException, NotFoundException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP indexedAip = BrowserHelper.retrieve(IndexedAIP.class, aip.getId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, indexedAip, PermissionType.UPDATE);
// delegate
AIP updatedAip = BrowserHelper.updateAIP(user, aip);
// register action
controllerAssistant.registerAction(user, aip.getId(), LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_PARAM,
aip);
return updatedAip;
}
public static void deleteAIP(User user, SelectedItems<IndexedAIP> aips, String details)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, aips, PermissionType.DELETE);
// delegate
BrowserHelper.deleteAIP(user, aips, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM, aips);
}
public static void deleteRepresentation(User user, SelectedItems<IndexedRepresentation> representations,
String details) throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, representations, PermissionType.DELETE);
// delegate
BrowserHelper.deleteRepresentation(user, representations, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
representations);
}
public static void deleteFile(User user, SelectedItems<IndexedFile> files, String details)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, files, PermissionType.DELETE);
// delegate
BrowserHelper.deleteFile(user, files, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM, files);
}
public static DescriptiveMetadata createDescriptiveMetadataFile(User user, String aipId, String representationId,
String metadataId, String metadataType, String metadataVersion, ContentPayload metadataPayload)
throws AuthorizationDeniedException, GenericException, ValidationException, NotFoundException,
RequestNotValidException, AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
DescriptiveMetadata ret = BrowserHelper.createDescriptiveMetadataFile(aipId, representationId, metadataId,
metadataType, metadataVersion, metadataPayload);
// register action
controllerAssistant.registerAction(user, aip.getId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_AIP_ID_PARAM, aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return ret;
}
public static DescriptiveMetadata updateDescriptiveMetadataFile(User user, String aipId, String representationId,
String metadataId, String metadataType, String metadataVersion, ContentPayload metadataPayload)
throws AuthorizationDeniedException, GenericException, ValidationException, NotFoundException,
RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_USER, user.getId());
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.UPDATED.toString());
DescriptiveMetadata ret = BrowserHelper.updateDescriptiveMetadataFile(aipId, representationId, metadataId,
metadataType, metadataVersion, metadataPayload, properties);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return ret;
}
public static void deleteDescriptiveMetadataFile(User user, String aipId, String representationId, String metadataId)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.DELETE);
// delegate
BrowserHelper.deleteDescriptiveMetadataFile(aipId, representationId, metadataId);
// register action
controllerAssistant.registerAction(user, aip.getId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_AIP_ID_PARAM, aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
}
public static void deleteRepresentationDescriptiveMetadataFile(User user, String aipId, String representationId,
String metadataId)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.DELETE);
// delegate
BrowserHelper.deleteDescriptiveMetadataFile(aipId, representationId, metadataId);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
metadataId);
}
public static DescriptiveMetadata retrieveDescriptiveMetadataFile(User user, String aipId, String metadataId)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
DescriptiveMetadata dm = BrowserHelper.retrieveMetadataFile(aipId, metadataId);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return dm;
}
public static Representation createRepresentation(User user, String aipId, String representationId, String type,
String details) throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.CREATE);
// delegate
Representation updatedRep = BrowserHelper.createRepresentation(user, aipId, representationId, type, details);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_TYPE_PARAM,
type);
return updatedRep;
}
public static Representation updateRepresentation(User user, Representation representation)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
AlreadyExistsException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, representation.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
Representation updatedRep = BrowserHelper.updateRepresentation(representation);
// register action
controllerAssistant.registerAction(user, representation.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_PARAM, representation);
return updatedRep;
}
public static void deleteRepresentation(User user, String aipId, String representationId)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation rep = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, rep, PermissionType.DELETE);
// delegate
BrowserHelper.deleteRepresentation(rep.getAipId(), rep.getId());
// register action
controllerAssistant.registerAction(user, rep.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_AIP_ID_PARAM, rep.getAipId(), RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM,
rep.getId());
}
public static EntityResponse retrieveAIPRepresentationFile(User user, String fileUuid, String acceptFormat)
throws GenericException, AuthorizationDeniedException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetFileParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
List<String> fileFields = new ArrayList<>(RodaConstants.FILE_FIELDS_TO_RETURN);
fileFields.add(RodaConstants.FILE_ISDIRECTORY);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUuid, fileFields);
controllerAssistant.checkObjectPermissions(user, file, PermissionType.READ);
// delegate
EntityResponse aipRepresentationFile = BrowserHelper.retrieveAIPRepresentationFile(file, acceptFormat);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.FILE_REPRESENTATION_ID, file.getRepresentationId(), RodaConstants.FILE_PATH, file.getPath(),
RodaConstants.FILE_FILE_ID, file.getId());
return aipRepresentationFile;
}
public static DescriptiveMetadata updateAIPDescriptiveMetadataFile(User user, String aipId, String metadataId,
String metadataType, String metadataVersion, InputStream is) throws GenericException, AuthorizationDeniedException,
NotFoundException, RequestNotValidException, AlreadyExistsException, ValidationException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_USER, user.getId());
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.UPDATED.toString());
DescriptiveMetadata ret = BrowserHelper.createOrUpdateAIPDescriptiveMetadataFile(aipId, null, metadataId,
metadataType, metadataVersion, properties, is, false);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return ret;
}
public static DescriptiveMetadata updateRepresentationDescriptiveMetadataFile(User user, String aipId,
String representationId, String metadataId, String metadataType, String metadataVersion, InputStream is)
throws GenericException, AuthorizationDeniedException, NotFoundException, RequestNotValidException,
AlreadyExistsException, ValidationException {
ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, representation, PermissionType.UPDATE);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_USER, user.getId());
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.UPDATED.toString());
DescriptiveMetadata ret = BrowserHelper.createOrUpdateAIPDescriptiveMetadataFile(representation.getAipId(),
representation.getId(), metadataId, metadataType, metadataVersion, properties, is, false);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
metadataId);
return ret;
}
public static DescriptiveMetadata createAIPDescriptiveMetadataFile(User user, String aipId, String metadataId,
String metadataType, String metadataVersion, InputStream is) throws GenericException, AuthorizationDeniedException,
NotFoundException, RequestNotValidException, AlreadyExistsException, ValidationException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_USER, user.getId());
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.CREATED.toString());
DescriptiveMetadata ret = BrowserHelper.createOrUpdateAIPDescriptiveMetadataFile(aipId, null, metadataId,
metadataType, metadataVersion, properties, is, true);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_METADATA_ID_PARAM, metadataId);
return ret;
}
public static DescriptiveMetadata createRepresentationDescriptiveMetadataFile(User user, String aipId,
String representationId, String metadataId, String metadataType, String metadataVersion, InputStream is)
throws GenericException, AuthorizationDeniedException, NotFoundException, RequestNotValidException,
AlreadyExistsException, ValidationException {
ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedRepresentation representation = BrowserHelper.retrieve(IndexedRepresentation.class,
IdUtils.getRepresentationId(aipId, representationId), RodaConstants.REPRESENTATION_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, representation, PermissionType.UPDATE);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_USER, user.getId());
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.CREATED.toString());
DescriptiveMetadata ret = BrowserHelper.createOrUpdateAIPDescriptiveMetadataFile(representation.getAipId(),
representation.getId(), metadataId, metadataType, metadataVersion, properties, is, true);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
metadataId);
return ret;
}
public static TransferredResource createTransferredResourcesFolder(User user, String parentUUID, String folderName,
boolean forceCommit)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
UserUtility.checkTransferredResourceAccess(user, Arrays.asList(parentUUID));
// delegate
try {
TransferredResource transferredResource = BrowserHelper.createTransferredResourcesFolder(parentUUID, folderName,
forceCommit);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_PARENT_PARAM,
parentUUID, RodaConstants.CONTROLLER_FOLDERNAME_PARAM, folderName, RodaConstants.CONTROLLER_SUCCESS_PARAM,
true);
return transferredResource;
} catch (GenericException e) {
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_PARENT_PARAM,
parentUUID, RodaConstants.CONTROLLER_FOLDERNAME_PARAM, folderName, RodaConstants.CONTROLLER_SUCCESS_PARAM,
false, RodaConstants.CONTROLLER_ERROR_PARAM, e.getMessage());
throw e;
}
}
public static void deleteTransferredResources(User user, SelectedItems<TransferredResource> selected)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteTransferredResources(selected, user);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static TransferredResource reindexTransferredResource(User user, String path)
throws IsStillUpdatingException, AuthorizationDeniedException, NotFoundException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
TransferredResource resource = BrowserHelper.reindexTransferredResource(path);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_PATH_PARAM, path);
return resource;
}
public static TransferredResource createTransferredResourceFile(User user, String parentUUID, String fileName,
InputStream inputStream, boolean forceCommit) throws AuthorizationDeniedException, GenericException,
AlreadyExistsException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
UserUtility.checkTransferredResourceAccess(user, Arrays.asList(parentUUID));
// delegate
try {
TransferredResource transferredResource = BrowserHelper.createTransferredResourceFile(parentUUID, fileName,
inputStream, forceCommit);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_PATH_PARAM, parentUUID,
RodaConstants.CONTROLLER_FILENAME_PARAM, fileName, RodaConstants.CONTROLLER_SUCCESS_PARAM, true);
return transferredResource;
} catch (GenericException e) {
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_PATH_PARAM, parentUUID,
RodaConstants.CONTROLLER_FILENAME_PARAM, fileName, RodaConstants.CONTROLLER_SUCCESS_PARAM, false,
RodaConstants.CONTROLLER_ERROR_PARAM, e.getMessage());
throw e;
}
}
public static ConsumesOutputStream retrieveClassificationPlan(User user, String filename)
throws GenericException, RequestNotValidException, NotFoundException, AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check permissions
controllerAssistant.checkRoles(user);
// delegate
ConsumesOutputStream classificationPlan = BrowserHelper.retrieveClassificationPlan(user, filename);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
return classificationPlan;
}
public static void updateTransferredResources(User user, Optional<String> folderRelativePath, boolean waitToFinish)
throws IsStillUpdatingException, AuthorizationDeniedException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.updateTransferredResources(folderRelativePath, waitToFinish);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
}
public static void updateTransferredResource(User user, Optional<String> folderRelativePath, InputStream is,
String name, boolean waitToFinish)
throws IsStillUpdatingException, AuthorizationDeniedException, GenericException, IOException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check permissions
controllerAssistant.checkRoles(user);
// delegate
Path filePath = Files.createTempFile("descriptive", ".tmp");
Files.copy(is, filePath, StandardCopyOption.REPLACE_EXISTING);
ContentPayload payload = new FSPathContentPayload(filePath);
BrowserHelper.updateTransferredResource(folderRelativePath, payload, name, waitToFinish);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
FSUtils.deletePath(filePath);
}
public static List<SupportedMetadataTypeBundle> retrieveSupportedMetadata(User user, String aipId,
String representationId, Locale locale) throws AuthorizationDeniedException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check permissions
controllerAssistant.checkRoles(user);
List<String> aipFields = new ArrayList<>(RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
aipFields.addAll(Arrays.asList(RodaConstants.AIP_TITLE, RodaConstants.AIP_LEVEL, RodaConstants.AIP_PARENT_ID));
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, aipFields);
IndexedRepresentation rep = null;
if (representationId != null) {
rep = BrowserHelper.retrieve(IndexedRepresentation.class, IdUtils.getRepresentationId(aipId, representationId),
Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.REPRESENTATION_ID));
}
// check object permissions
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.READ);
// delegate
List<SupportedMetadataTypeBundle> supportedMetadata = BrowserHelper.retrieveSupportedMetadata(user, aip, rep,
locale);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.LOCALE, locale);
return supportedMetadata;
}
public static EntityResponse retrieveTransferredResource(User user, String resourceId, String acceptFormat)
throws AuthorizationDeniedException, NotFoundException, RequestNotValidException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
EntityResponse response = BrowserHelper.retrieveTransferredResource(
BrowserHelper.retrieve(TransferredResource.class, resourceId, new ArrayList<>()), acceptFormat);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RESOURCE_ID_PARAM,
resourceId);
return response;
}
public static PreservationEventViewBundle retrievePreservationEventViewBundle(User user, String eventId)
throws AuthorizationDeniedException, NotFoundException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
PreservationEventViewBundle resource = BrowserHelper.retrievePreservationEventViewBundle(eventId);
controllerAssistant.checkObjectPermissions(user, resource.getEvent(), PermissionType.READ);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_INDEX_PRESERVATION_EVENT_ID_PARAM, eventId);
return resource;
}
public static void revertDescriptiveMetadataVersion(User user, String aipId, String representationId,
String descriptiveMetadataId, String versionId)
throws AuthorizationDeniedException, RequestNotValidException, NotFoundException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_USER, user.getId());
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.REVERTED.toString());
BrowserHelper.revertDescriptiveMetadataVersion(aipId, representationId, descriptiveMetadataId, versionId,
properties);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM, aipId,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
descriptiveMetadataId, RodaConstants.CONTROLLER_VERSION_ID_PARAM, versionId);
}
public static void deleteDescriptiveMetadataVersion(User user, String aipId, String representationId,
String descriptiveMetadataId, String versionId)
throws NotFoundException, GenericException, RequestNotValidException, AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.DELETE);
// delegate
BrowserHelper.deleteDescriptiveMetadataVersion(aipId, representationId, descriptiveMetadataId, versionId);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM, aipId,
RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId, RodaConstants.CONTROLLER_METADATA_ID_PARAM,
descriptiveMetadataId, RodaConstants.CONTROLLER_VERSION_ID_PARAM, versionId);
}
public static void updateAIPPermissions(User user, List<IndexedAIP> aips, Permissions permissions, String details,
boolean recursive) throws AuthorizationDeniedException, GenericException, NotFoundException,
RequestNotValidException, JobAlreadyStartedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
for (IndexedAIP aip : aips) {
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
BrowserHelper.updateAIPPermissions(user, aip, permissions, details, recursive);
}
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIPS_PARAM, aips,
RodaConstants.CONTROLLER_PERMISSIONS_PARAM, permissions);
}
public static void updateDIPPermissions(User user, List<IndexedDIP> dips, Permissions permissions, String details)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
for (IndexedDIP dip : dips) {
controllerAssistant.checkObjectPermissions(user, dip, PermissionType.UPDATE);
BrowserHelper.updateDIPPermissions(dip, permissions, details);
}
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIPS_PARAM, dips,
RodaConstants.CONTROLLER_PERMISSIONS_PARAM, permissions);
}
public static void updateRisk(User user, Risk risk, int incidences)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.UPDATED.toString());
BrowserHelper.updateRisk(risk, user, properties, true, incidences);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_PARAM, risk,
RodaConstants.CONTROLLER_MESSAGE_PARAM, RodaConstants.VersionAction.UPDATED.toString());
}
public static void updateFormat(User user, Format format)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.updateFormat(format, true);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_FORMAT_PARAM, format);
}
public static Risk createRisk(User user, Risk risk)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Risk ret = BrowserHelper.createRisk(risk, user, true);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_PARAM, risk);
return ret;
}
public static Format createFormat(User user, Format format)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Format ret = BrowserHelper.createFormat(format, true);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_FORMAT_PARAM, format);
return ret;
}
public static void revertRiskVersion(User user, String riskId, String versionId)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Map<String, String> properties = new HashMap<>();
properties.put(RodaConstants.VERSION_ACTION, RodaConstants.VersionAction.REVERTED.toString());
int incidences = 0;
try {
IndexedRisk indexedRisk = RodaCoreFactory.getIndexService().retrieve(IndexedRisk.class, riskId,
Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.RISK_INCIDENCES_COUNT));
incidences = indexedRisk.getIncidencesCount();
} catch (NotFoundException e) {
// do nothing
}
BrowserHelper.revertRiskVersion(riskId, versionId, properties, incidences);
// register action
controllerAssistant.registerAction(user, versionId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_ID_PARAM,
riskId, RodaConstants.CONTROLLER_VERSION_ID_PARAM, versionId, RodaConstants.CONTROLLER_MESSAGE_PARAM,
RodaConstants.VersionAction.REVERTED.toString());
}
/**
* @param user
* The user
* @param selected
* The filter to select the AIPs to export
* @param acceptFormat
* The output format
* @return
* @throws GenericException
* @throws AuthorizationDeniedException
* @throws NotFoundException
* @throws RequestNotValidException
* @throws IOException
*/
public static StreamResponse exportAIP(User user, SelectedItems<IndexedAIP> selected, String acceptFormat)
throws GenericException, AuthorizationDeniedException, NotFoundException, RequestNotValidException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateExportAIPParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, selected, PermissionType.READ);
// delegate
StreamResponse aipExport = BrowserHelper.retrieveAIPs(selected, acceptFormat);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
return aipExport;
}
public static StreamResponse retrieveAIPPart(User user, String aipId, String part)
throws RequestNotValidException, AuthorizationDeniedException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP indexedAIP = BrowserHelper.retrieve(IndexedAIP.class, aipId,
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, indexedAIP, PermissionType.READ);
// delegate
StreamResponse aip = BrowserHelper.retrieveAIPPart(indexedAIP, part);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_PART_PARAM, part);
return aip;
}
public static void deleteRiskVersion(User user, String riskId, String versionId)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteRiskVersion(riskId, versionId);
// register action
controllerAssistant.registerAction(user, versionId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_ID_PARAM,
riskId, RodaConstants.CONTROLLER_VERSION_ID_PARAM, versionId);
}
public static RiskVersionsBundle retrieveRiskVersions(User user, String riskId)
throws AuthorizationDeniedException, NotFoundException, GenericException, RequestNotValidException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
RiskVersionsBundle ret = BrowserHelper.retrieveRiskVersions(riskId);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_ID_PARAM, riskId);
return ret;
}
public static boolean hasRiskVersions(User user, String id)
throws AuthorizationDeniedException, RequestNotValidException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
boolean ret = BrowserHelper.hasRiskVersions(id);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_ID_PARAM, id);
return ret;
}
public static Risk retrieveRiskVersion(User user, String riskId, String selectedVersion)
throws AuthorizationDeniedException, RequestNotValidException, GenericException, NotFoundException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Risk ret = BrowserHelper.retrieveRiskVersion(riskId, selectedVersion);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_RISK_ID_PARAM, riskId,
RodaConstants.CONTROLLER_SELECTED_VERSION_PARAM, selectedVersion);
return ret;
}
public static RiskMitigationBundle retrieveShowMitigationTerms(User user, int preMitigationProbability,
int preMitigationImpact, int posMitigationProbability, int posMitigationImpact)
throws AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
RiskMitigationBundle ret = BrowserHelper.retrieveShowMitigationTerms(preMitigationProbability, preMitigationImpact,
posMitigationProbability, posMitigationImpact);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_PRE_MITIGATION_PROBABILITY_PARAM, preMitigationProbability,
RodaConstants.CONTROLLER_PRE_MITIGATION_IMPACT_PARAM, preMitigationImpact,
RodaConstants.CONTROLLER_POS_MITIGATION_PROBABILITY_PARAM, posMitigationProbability,
RodaConstants.CONTROLLER_POS_MITIGATION_IMPACT_PARAM, posMitigationImpact);
return ret;
}
public static List<String> retrieveMitigationSeverityLimits(User user) throws AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
List<String> ret = BrowserHelper.retrieveShowMitigationTerms();
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
return ret;
}
public static MitigationPropertiesBundle retrieveAllMitigationProperties(User user)
throws AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
MitigationPropertiesBundle ret = BrowserHelper.retrieveAllMitigationProperties();
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
return ret;
}
public static void deleteRisk(User user, SelectedItems<IndexedRisk> selected)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
InvalidParameterException, JobAlreadyStartedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteRisk(user, selected);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static void deleteFormat(User user, SelectedItems<Format> selected)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteFormat(user, selected);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static void updateRiskCounters(User user)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.updateRiskCounters();
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS);
}
public static void appraisal(User user, SelectedItems<IndexedAIP> selected, boolean accept, String rejectReason,
Locale locale) throws GenericException, AuthorizationDeniedException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
controllerAssistant.checkObjectPermissions(user, selected, PermissionType.UPDATE);
// delegate
BrowserHelper.appraisal(user, selected, accept, rejectReason, locale);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM, selected,
RodaConstants.CONTROLLER_ACCEPT_PARAM, accept, RodaConstants.CONTROLLER_REJECT_REASON_PARAM, rejectReason);
}
public static String retrieveDescriptiveMetadataPreview(User user, SupportedMetadataTypeBundle bundle)
throws AuthorizationDeniedException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check permissions
controllerAssistant.checkRoles(user);
// delegate
String payload = BrowserHelper.retrieveDescriptiveMetadataPreview(bundle);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_TEMPLATE_PARAM,
bundle.getLabel());
return payload;
}
public static String renameTransferredResource(User user, String transferredResourceId, String newName)
throws GenericException, RequestNotValidException, AuthorizationDeniedException, AlreadyExistsException,
IsStillUpdatingException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
String ret = BrowserHelper.renameTransferredResource(transferredResourceId, newName);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_TRANSFERRED_RESOURCE_ID_PARAM, transferredResourceId);
return ret;
}
public static IndexedFile renameFolder(User user, String folderUUID, String newName, String details)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, AlreadyExistsException,
NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
IndexedFile ret = BrowserHelper.renameFolder(user, folderUUID, newName, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_FILE_UUID_PARAM,
folderUUID);
return ret;
}
public static void moveFiles(User user, String aipId, String representationId,
SelectedItems<IndexedFile> selectedFiles, IndexedFile toFolder, String details) throws AuthorizationDeniedException,
GenericException, RequestNotValidException, AlreadyExistsException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.moveFiles(user, aipId, representationId, selectedFiles, toFolder, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM, aipId,
RodaConstants.CONTROLLER_FILES_PARAM, selectedFiles, RodaConstants.CONTROLLER_FILE_PARAM, toFolder);
}
public static IndexedFile createFolder(User user, String aipId, String representationId, String folderUUID,
String newName, String details) throws AuthorizationDeniedException, GenericException, RequestNotValidException,
AlreadyExistsException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
IndexedFile ret = BrowserHelper.createFolder(user, aipId, representationId, folderUUID, newName, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_FILE_UUID_PARAM,
folderUUID);
return ret;
}
public static String moveTransferredResource(User user, SelectedItems<TransferredResource> selected,
TransferredResource transferredResource) throws AuthorizationDeniedException, GenericException,
RequestNotValidException, AlreadyExistsException, IsStillUpdatingException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
String ret = BrowserHelper.moveTransferredResource(user, selected, transferredResource);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM, selected,
RodaConstants.CONTROLLER_TRANSFERRED_RESOURCE_PARAM, transferredResource);
return ret;
}
public static List<TransferredResource> retrieveSelectedTransferredResource(User user,
SelectedItems<TransferredResource> selected)
throws GenericException, RequestNotValidException, AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
List<TransferredResource> ret = BrowserHelper.retrieveSelectedTransferredResource(selected);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
return ret;
}
public static File createFile(User user, String aipId, String representationId, List<String> directoryPath,
String fileId, InputStream is, String details) throws AuthorizationDeniedException, GenericException,
RequestNotValidException, NotFoundException, AlreadyExistsException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, aipId, RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.CREATE);
// delegate
Path file = Files.createTempFile("descriptive", ".tmp");
Files.copy(is, file, StandardCopyOption.REPLACE_EXISTING);
ContentPayload payload = new FSPathContentPayload(file);
File updatedFile = BrowserHelper.createFile(user, aipId, representationId, directoryPath, fileId, payload, details);
BrowserHelper.commit(IndexedFile.class);
// register action
controllerAssistant.registerAction(user, aipId, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM,
aipId, RodaConstants.CONTROLLER_REPRESENTATION_ID_PARAM, representationId,
RodaConstants.CONTROLLER_DIRECTORY_PATH_PARAM, directoryPath, RodaConstants.CONTROLLER_FILE_ID_PARAM, fileId);
return updatedFile;
}
public static File updateFile(User user, File file, InputStream is, boolean createIfNotExists, boolean notify)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
AlreadyExistsException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedAIP aip = BrowserHelper.retrieve(IndexedAIP.class, file.getAipId(),
RodaConstants.AIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, aip, PermissionType.UPDATE);
// delegate
Path temp = Files.createTempFile("descriptive", ".tmp");
Files.copy(is, temp, StandardCopyOption.REPLACE_EXISTING);
ContentPayload payload = new FSPathContentPayload(temp);
File updatedFile = BrowserHelper.updateFile(file, payload, createIfNotExists, notify);
// register action
controllerAssistant.registerAction(user, file.getAipId(), LOG_ENTRY_STATE.SUCCESS,
RodaConstants.CONTROLLER_FILE_PARAM, file);
return updatedFile;
}
public static void deleteFile(User user, String fileUUID, String details)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
IndexedFile file = BrowserHelper.retrieve(IndexedFile.class, fileUUID, RodaConstants.FILE_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, file, PermissionType.DELETE);
// delegate
BrowserHelper.deleteFile(user, SelectedItemsList.create(IndexedFile.class, fileUUID), details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_FILE_UUID_PARAM,
fileUUID);
}
public static void updateRiskIncidence(User user, RiskIncidence incidence)
throws AuthorizationDeniedException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.updateRiskIncidence(incidence);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_INCIDENCE_PARAM,
incidence);
}
public static Reports listReports(User user, String id, String resourceOrSip, int start, int limit,
String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListingParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Reports reportList;
if (id == null || resourceOrSip == null) {
reportList = BrowserHelper.listReports(start, limit);
} else {
if (RodaConstants.CONTROLLER_SIP_PARAM.equals(resourceOrSip)) {
reportList = BrowserHelper.listTransferredResourcesReportsWithSIP(id, start, limit);
} else {
if (RodaConstants.CONTROLLER_ID_OBJECT_RESOURCE_PATH.equals(resourceOrSip)) {
reportList = BrowserHelper.listTransferredResourcesReports(IdUtils.getTransferredResourceUUID(id), start,
limit);
} else {
reportList = BrowserHelper.listTransferredResourcesReports(id, start, limit);
}
}
}
// register action
controllerAssistant.registerAction(user, id, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_ID_PARAM, id,
RodaConstants.CONTROLLER_ID_OBJECT_PARAM, resourceOrSip, RodaConstants.CONTROLLER_START_PARAM, start,
RodaConstants.CONTROLLER_LIMIT_PARAM, limit);
return reportList;
}
public static Report lastReport(User user, String id, String resourceOrSip, String acceptFormat)
throws RequestNotValidException, AuthorizationDeniedException, NotFoundException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateListingParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Reports reportList;
if (id == null || resourceOrSip == null) {
reportList = BrowserHelper.listReports(0, 1);
} else {
if (RodaConstants.CONTROLLER_SIP_PARAM.equals(resourceOrSip)) {
reportList = BrowserHelper.listTransferredResourcesReportsWithSIP(id, 0, 1);
} else {
if (RodaConstants.CONTROLLER_ID_OBJECT_RESOURCE_PATH.equals(resourceOrSip)) {
reportList = BrowserHelper.listTransferredResourcesReports(IdUtils.getTransferredResourceUUID(id), 0, 1);
} else {
reportList = BrowserHelper.listTransferredResourcesReports(id, 0, 1);
}
}
}
// register action
controllerAssistant.registerAction(user, id, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_ID_PARAM, id,
RodaConstants.CONTROLLER_ID_OBJECT_PARAM, resourceOrSip, RodaConstants.CONTROLLER_START_PARAM, 0,
RodaConstants.CONTROLLER_LIMIT_PARAM, 1);
if (reportList.getObjects().isEmpty()) {
throw new NotFoundException("Could not find report for id: " + id);
} else {
return reportList.getObjects().get(0);
}
}
public static void deleteRiskIncidences(User user, SelectedItems<RiskIncidence> selected)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
InvalidParameterException, JobAlreadyStartedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteRiskIncidences(user, selected);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static void updateMultipleIncidences(User user, SelectedItems<RiskIncidence> selected, String status,
String severity, Date mitigatedOn, String mitigatedBy, String mitigatedDescription)
throws AuthorizationDeniedException, RequestNotValidException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.updateMultipleIncidences(selected, status, severity, mitigatedOn, mitigatedBy, mitigatedDescription);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static DIP createDIP(User user, DIP dip) throws GenericException, AuthorizationDeniedException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
DIP createdDip = BrowserHelper.createDIP(dip);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_PARAM, dip);
return createdDip;
}
public static DIP updateDIP(User user, DIP dip)
throws AuthorizationDeniedException, GenericException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
DIP updatedDIP = BrowserHelper.updateDIP(dip);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_PARAM, dip);
return updatedDIP;
}
public static void deleteDIPs(User user, SelectedItems<IndexedDIP> dips)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteDIPs(dips, user);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_ID_PARAM, dips);
}
public static EntityResponse retrieveDIP(User user, String dipId, String acceptFormat)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetDIPParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
IndexedDIP dip = RodaCoreFactory.getIndexService().retrieve(IndexedDIP.class, dipId,
RodaConstants.DIP_PERMISSIONS_FIELDS_TO_RETURN);
controllerAssistant.checkObjectPermissions(user, dip, PermissionType.READ);
// delegate
EntityResponse dipResponse = BrowserHelper.retrieveDIP(dipId, acceptFormat);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.DIP_ID, dipId);
return dipResponse;
}
public static EntityResponse retrieveDIPFile(User user, String fileUUID, String acceptFormat)
throws GenericException, AuthorizationDeniedException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// validate input
BrowserHelper.validateGetFileParams(acceptFormat);
// check user permissions
controllerAssistant.checkRoles(user);
DIPFile file = RodaCoreFactory.getIndexService().retrieve(DIPFile.class, fileUUID,
Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.DIPFILE_ID, RodaConstants.DIPFILE_DIP_ID));
controllerAssistant.checkObjectPermissions(user, file, PermissionType.READ);
// delegate
EntityResponse aipRepresentationFile = BrowserHelper.retrieveDIPFile(fileUUID, acceptFormat);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.DIPFILE_UUID, fileUUID);
return aipRepresentationFile;
}
public static DIPFile createDIPFile(User user, String dipId, List<String> directoryPath, String fileId, long size,
InputStream is) throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
AlreadyExistsException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
Path file = Files.createTempFile("descriptive", ".tmp");
Files.copy(is, file, StandardCopyOption.REPLACE_EXISTING);
ContentPayload payload = new FSPathContentPayload(file);
DIPFile updatedFile = BrowserHelper.createDIPFile(dipId, directoryPath, fileId, size, payload, true);
BrowserHelper.commit(DIPFile.class);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_ID_PARAM, dipId,
RodaConstants.CONTROLLER_DIRECTORY_PATH_PARAM, directoryPath, RodaConstants.CONTROLLER_FILE_ID_PARAM, fileId);
return updatedFile;
}
public static DIPFile createDIPFileWithParentUUID(User user, String parentUUID, String filename, long size,
InputStream is) throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
AlreadyExistsException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
DIPFile dipFile = BrowserHelper.retrieve(DIPFile.class, parentUUID, RodaConstants.DIPFILE_FIELDS_TO_RETURN);
// delegate
Path filePath = Files.createTempFile("descriptive", ".tmp");
Files.copy(is, filePath, StandardCopyOption.REPLACE_EXISTING);
ContentPayload payload = new FSPathContentPayload(filePath);
List<String> newFileDirectoryPath = dipFile.getPath();
newFileDirectoryPath.add(dipFile.getId());
DIPFile file = BrowserHelper.createDIPFile(dipFile.getDipId(), newFileDirectoryPath, filename, size, payload, true);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_FILE_UUID_PARAM,
parentUUID, RodaConstants.CONTROLLER_FILENAME_PARAM, filename);
return file;
}
public static String createDIPFolder(User user, String dipId, String folderUUID, String newName)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, AlreadyExistsException,
NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
String ret = BrowserHelper.createDIPFolder(dipId, folderUUID, newName);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_ID_PARAM, dipId,
RodaConstants.CONTROLLER_DIP_FILE_UUID_PARAM, folderUUID);
return ret;
}
public static DIPFile updateDIPFile(User user, String fileUUID, String filename, long size, InputStream is)
throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException,
AlreadyExistsException, IOException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
DIPFile dipFile = BrowserHelper.retrieve(DIPFile.class, fileUUID, RodaConstants.DIPFILE_FIELDS_TO_RETURN);
Path filePath = Files.createTempFile("descriptive", ".tmp");
Files.copy(is, filePath, StandardCopyOption.REPLACE_EXISTING);
ContentPayload payload = new FSPathContentPayload(filePath);
DIPFile file = BrowserHelper.updateDIPFile(dipFile.getDipId(), dipFile.getPath(), dipFile.getId(), filename, size,
payload, true);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_DIP_FILE_PARAM, file);
FSUtils.deletePath(filePath);
return file;
}
public static void deleteDIPFile(User user, SelectedItems<DIPFile> files)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.deleteDIPFiles(files, user);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM, files);
}
public static void createFormatIdentificationJob(User user, SelectedItems<?> selected) throws GenericException,
AuthorizationDeniedException, JobAlreadyStartedException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.createFormatIdentificationJob(user, selected);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static void changeRepresentationType(User user, SelectedItems<IndexedRepresentation> selected, String newType,
String details) throws AuthorizationDeniedException, GenericException, RequestNotValidException, NotFoundException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
BrowserHelper.changeRepresentationType(user, selected, newType, details);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_SELECTED_PARAM,
selected);
}
public static ObjectPermissionResult verifyPermissions(User user, String username, String permissionType,
MultivaluedMap<String, String> queryParams)
throws AuthorizationDeniedException, GenericException, NotFoundException, RequestNotValidException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
ObjectPermissionResult result = BrowserHelper.verifyPermissions(username, permissionType, queryParams);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_USERNAME_PARAM, username,
RodaConstants.CONTROLLER_PERMISSION_TYPE_PARAM, permissionType);
return result;
}
public static boolean hasDocumentation(User user, String aipId)
throws AuthorizationDeniedException, RequestNotValidException, GenericException {
final ControllerAssistant controllerAssistant = new ControllerAssistant() {};
// check user permissions
controllerAssistant.checkRoles(user);
// delegate
boolean hasDocumentation = BrowserHelper.hasDocumentation(aipId);
// register action
controllerAssistant.registerAction(user, LOG_ENTRY_STATE.SUCCESS, RodaConstants.CONTROLLER_AIP_ID_PARAM, aipId);
return hasDocumentation;
}
}