@Override public Map<String, Object> getPreCalculatedFields() { Map<String, Object> preCalculatedFields = new HashMap<>(); // indexing file size and number preCalculatedFields.put(RodaConstants.REPRESENTATION_SIZE_IN_BYTES, sizeInBytes); preCalculatedFields.put(RodaConstants.REPRESENTATION_NUMBER_OF_DATA_FILES, numberOfDataFiles); preCalculatedFields.put(RodaConstants.REPRESENTATION_NUMBER_OF_DATA_FOLDERS, numberOfDataFolders); // indexing active state and permissions preCalculatedFields.put(RodaConstants.INDEX_STATE, SolrUtils.formatEnum(aip.getState())); preCalculatedFields.put(RodaConstants.INGEST_SIP_IDS, aip.getIngestSIPIds()); preCalculatedFields.put(RodaConstants.INGEST_JOB_ID, aip.getIngestJobId()); preCalculatedFields.put(RodaConstants.INGEST_UPDATE_JOB_IDS, aip.getIngestUpdateJobIds()); preCalculatedFields.put(RodaConstants.AIP_ANCESTORS, ancestors); preCalculatedFields.putAll(SolrUtils.getPermissionsAsPreCalculatedFields(aip.getPermissions())); return preCalculatedFields; }
@Override public Map<String, Object> getPreCalculatedFields() { Map<String, Object> preCalculatedFields = new HashMap<>(); if (aip != null) { preCalculatedFields.put(RodaConstants.INDEX_STATE, SolrUtils.formatEnum(aip.getState())); preCalculatedFields.putAll(SolrUtils.getPermissionsAsPreCalculatedFields(aip.getPermissions())); } else { preCalculatedFields.put(RodaConstants.INDEX_STATE, SolrUtils.formatEnum(AIPState.ACTIVE)); } return preCalculatedFields; }
@Override public Map<String, Object> getPreCalculatedFields() { Map<String, Object> preCalculatedFields = new HashMap<>(); // indexing AIP inherited info preCalculatedFields.put(RodaConstants.INDEX_STATE, SolrUtils.formatEnum(aip.getState())); preCalculatedFields.put(RodaConstants.INGEST_SIP_IDS, aip.getIngestSIPIds()); preCalculatedFields.put(RodaConstants.INGEST_JOB_ID, aip.getIngestJobId()); preCalculatedFields.put(RodaConstants.INGEST_UPDATE_JOB_IDS, aip.getIngestUpdateJobIds()); preCalculatedFields.put(RodaConstants.FILE_ANCESTORS, ancestors); preCalculatedFields.putAll(SolrUtils.getPermissionsAsPreCalculatedFields(aip.getPermissions())); return preCalculatedFields; }
private Permissions addParentPermissions(Permissions permissions, String parentId) throws RequestNotValidException, NotFoundException, GenericException, AuthorizationDeniedException { if (parentId != null) { AIP parentAIP = this.retrieveAIP(parentId); Set<String> parentGroupnames = parentAIP.getPermissions().getGroupnames(); Set<String> parentUsernames = parentAIP.getPermissions().getUsernames(); Set<String> groupnames = permissions.getGroupnames(); Set<String> usernames = permissions.getUsernames(); for (String user : parentUsernames) { if (!usernames.contains(user)) { permissions.setUserPermissions(user, parentAIP.getPermissions().getUserPermissions(user)); } } for (String group : parentGroupnames) { if (!groupnames.contains(group)) { permissions.setGroupPermissions(group, parentAIP.getPermissions().getGroupPermissions(group)); } } } return permissions; }
} else if (AIP.class.getName().equals(objectClass)) { AIP aip = this.retrieveAIP(id); Permissions permissions = aip.getPermissions(); Set<PermissionType> userPermissions = permissions.getUserPermissions(username);
private ReturnWithExceptions<Void, ModelObserver> preservationEventsPermissionsUpdated(final AIP aip) { ReturnWithExceptions<Void, ModelObserver> ret = new ReturnWithExceptions<>(this); try (CloseableIterable<OptionalWithCause<PreservationMetadata>> preservationMetadata = model .listPreservationMetadata(aip.getId(), true)) { for (OptionalWithCause<PreservationMetadata> opm : preservationMetadata) { if (opm.isPresent()) { PreservationMetadata pm = opm.get(); if (PreservationMetadataType.EVENT.equals(pm.getType())) { preservationEventPermissionsUpdated(pm, aip.getPermissions(), aip.getState()).addTo(ret); } } else { LOGGER.error("Cannot index premis event", opm.getCause()); ret.add(opm.getCause()); } } } catch (RequestNotValidException | NotFoundException | GenericException | AuthorizationDeniedException | IOException e) { LOGGER.error("Cannot index preservation events", e); ret.add(e); } return ret; }
private ReturnWithExceptions<Void, ModelObserver> representationPermissionsUpdated(final AIP aip, final Representation representation) { ReturnWithExceptions<Void, ModelObserver> ret = new ReturnWithExceptions<>(this); SolrUtils.update(index, IndexedRepresentation.class, IdUtils.getRepresentationId(representation), SolrUtils.getPermissionsAsPreCalculatedFields(aip.getPermissions()), (ModelObserver) this).addTo(ret); if (ret.isEmpty()) { try (CloseableIterable<OptionalWithCause<File>> allFiles = model.listFilesUnder(representation.getAipId(), representation.getId(), true)) { for (OptionalWithCause<File> file : allFiles) { if (file.isPresent()) { SolrUtils.update(index, IndexedFile.class, IdUtils.getFileId(file.get()), SolrUtils.getPermissionsAsPreCalculatedFields(aip.getPermissions()), (ModelObserver) this).addTo(ret); } else { LOGGER.error("Cannot do a partial update on file", file.getCause()); ret.add(file.getCause()); } } } catch (AuthorizationDeniedException | IOException | NotFoundException | GenericException | RequestNotValidException e) { LOGGER.error("Cannot do a partial update", e); ret.add(e); } } return ret; }
@Override public ReturnWithExceptions<Void, ModelObserver> aipPermissionsUpdated(AIP aip) { ReturnWithExceptions<Void, ModelObserver> ret = new ReturnWithExceptions<>(this); // change AIP SolrUtils.update(index, IndexedAIP.class, aip.getId(), SolrUtils.getPermissionsAsPreCalculatedFields(aip.getPermissions()), (ModelObserver) this).addTo(ret); if (ret.isEmpty()) { // change Representations, Files and Preservation events representationsPermissionsUpdated(aip).addTo(ret); preservationEventsPermissionsUpdated(aip).addTo(ret); } return ret; }
dip.setId(IdUtils.createUUID()); dip.setFileIds(links); dip.setPermissions(aip.getPermissions()); dip.setTitle(dipTitle); dip.setDescription(dipDescription);
dip.setId(IdUtils.createUUID()); dip.setFileIds(links); dip.setPermissions(aip.getPermissions()); dip.setTitle(dipTitle); dip.setDescription(dipDescription);
public static AIP earkSIPToAIP(SIP sip, String username, Permissions fullPermissions, ModelService model, List<String> ingestSIPIds, String ingestJobId, Optional<String> parentId, String ingestSIPUUID, Plugin<?> plugin) throws RequestNotValidException, NotFoundException, GenericException, AlreadyExistsException, AuthorizationDeniedException, ValidationException, IOException, LockingException { AIPState state = AIPState.INGEST_PROCESSING; Permissions permissions = new Permissions(); boolean notify = false; String aipType = IngestHelper.getType(sip); AIP aip = model.createAIP(state, parentId.orElse(null), aipType, permissions, ingestSIPUUID, ingestSIPIds, ingestJobId, notify, username); PluginHelper.acquireObjectLock(aip, plugin); // process IP information processIPInformation(model, sip, aip.getId(), notify, false); // process IPRepresentation information for (IPRepresentation representation : sip.getRepresentations()) { processIPRepresentationInformation(model, representation, aip.getId(), notify, false, username, null); } model.notifyAipCreated(aip.getId()); AIP createdAIP = model.retrieveAIP(aip.getId()); // Set Permissions Permissions readPermissions = PermissionUtils.grantReadPermissionToUserGroup(model, createdAIP, aip.getPermissions()); Permissions finalPermissions = PermissionUtils.grantAllPermissions(username, readPermissions, fullPermissions); createdAIP.setPermissions(finalPermissions); model.updateAIP(createdAIP, username); return model.retrieveAIP(aip.getId()); }
dip.setId(IdUtils.createUUID()); dip.setFileIds(links); dip.setPermissions(aip.getPermissions()); dip.setTitle(dipTitle); dip.setDescription(dipDescription);