/** * Assign persistent identifier to a Content-relation object. * * @param id The Id of the Content-relation witch is to assign with an ObjectPid. * @param taskParam XML snippet with parameter for the persistent identifier system. * @return The assigned persistent identifier for the Content-relation. * @throws ContentRelationNotFoundException Thrown if the object with id is does not exist or is * no Item. * @throws LockingException Thrown if the Item is locked * @throws MissingMethodParameterException Thrown if a parameter is missing within {@code * taskParam}. * @throws OptimisticLockingException Thrown if Item was altered in the mean time. * @throws PidAlreadyAssignedException Thrown if a Content-relation is already assigned a PID. * @throws SystemException Thrown in case of internal error. */ @Override public String assignObjectPid(final String id, final String taskParam) throws ContentRelationNotFoundException, LockingException, MissingMethodParameterException, OptimisticLockingException, SystemException, PidAlreadyAssignedException, XmlCorruptedException { final ContentRelationCreate cr = setContentRelation(id); if (cr.getProperties().getPid() != null) { throw new PidAlreadyAssignedException( "A content relation with id " + id + " is already assigned a PID"); } final TaskParamHandler taskParameter = XmlUtility.parseTaskParam(taskParam); checkLocked(cr); Utility.checkOptimisticLockingCriteria( cr.getProperties().getLastModificationDate(), taskParameter.getLastModificationDate(), "Content-relation " + cr.getObjid()); String pid = taskParameter.getPid(); if (pid == null) { // get PID from external PID System pid = getPid(id, taskParam); } cr.getProperties().setPid(pid); cr.persist(); return prepareResponse(cr, pid); }
/** * Unlock a Content Relation for other user access. * * @param id Objid of Content Relation * @param param XML TaskParam * @return Result XML data structure * @throws ContentRelationNotFoundException e * @throws LockingException e * @throws InvalidContentException e * @throws MissingMethodParameterException e * @throws SystemException e * @throws OptimisticLockingException e * @throws InvalidStatusException Thrown if resource is not locked. */ @Override public String unlock(final String id, final String param) throws ContentRelationNotFoundException, LockingException, MissingMethodParameterException, SystemException, OptimisticLockingException, InvalidContentException, InvalidStatusException, XmlCorruptedException { final ContentRelationCreate cr = setContentRelation(id); final TaskParamHandler taskParameter = XmlUtility.parseTaskParam(param); Utility.checkOptimisticLockingCriteria( cr.getProperties().getLastModificationDate(), taskParameter.getLastModificationDate(), "Content relation " + id); if (cr.getProperties().isLocked()) { lockHandler.unlock(cr.getObjid()); cr.getProperties().setLockStatus(LockStatus.UNLOCKED); cr.getProperties().setLockOwnerId(null); cr.getProperties().setLockOwnerId(null); cr.getProperties().setLockDate((DateTime) null); } fireContentRelationModified(cr, this.contentRelationXmlProvider.getContentRelationXml(cr)); return Utility.prepareReturnXml(cr.getProperties().getLastModificationDate(), null); }
/** * Submit the Content Relation. * * @param id objid of ContentRelation * @param param Task parameter * @return XML result * @throws ContentRelationNotFoundException e * @throws LockingException e * @throws InvalidStatusException e * @throws MissingMethodParameterException e * @throws SystemException e * @throws OptimisticLockingException e * @throws InvalidContentException e */ @Override public String submit(final String id, final String param) throws ContentRelationNotFoundException, LockingException, InvalidStatusException, MissingMethodParameterException, SystemException, OptimisticLockingException, InvalidContentException, XmlCorruptedException { final ContentRelationCreate cr = setContentRelation(id); final TaskParamHandler taskParameter = XmlUtility.parseTaskParam(param); checkLocked(cr); validateToSubmitStatus(cr); // check optimistic locking criteria Utility.checkOptimisticLockingCriteria( cr.getProperties().getLastModificationDate(), taskParameter.getLastModificationDate(), "Content relation " + id); cr.getProperties().setStatus(StatusType.SUBMITTED); // set status comment if (taskParameter.getComment() != null) { cr.getProperties().setStatusComment(taskParameter.getComment()); } else { cr.getProperties().setStatusComment("Status changed to 'submitted'"); } cr.persistProperties(true); // load metadata content to resource enrichWithMetadataContent(cr); fireContentRelationModified(cr, this.contentRelationXmlProvider.getContentRelationXml(cr)); return Utility.prepareReturnXml(cr.getProperties().getLastModificationDate(), null); }
/** * @param id objid of ContentRelation * @param param Task parameter * @return XML result * @throws ContentRelationNotFoundException e * @throws LockingException e * @throws InvalidStatusException e * @throws MissingMethodParameterException e * @throws SystemException e * @throws OptimisticLockingException e * @throws InvalidContentException e */ @Override public String release(final String id, final String param) throws ContentRelationNotFoundException, LockingException, InvalidStatusException, MissingMethodParameterException, SystemException, OptimisticLockingException, InvalidContentException, XmlCorruptedException { final ContentRelationCreate cr = setContentRelation(id); final TaskParamHandler taskParameter = XmlUtility.parseTaskParam(param); checkLocked(cr); checkReleased(cr); if (cr.getProperties().getStatus() != StatusType.SUBMITTED) { throw new InvalidStatusException( "The object is not in state '" + Constants.STATUS_SUBMITTED + "' and can not be " + Constants.STATUS_RELEASED + '.'); } Utility.checkOptimisticLockingCriteria( cr.getProperties().getLastModificationDate(), taskParameter.getLastModificationDate(), "Content relation " + id); cr.getProperties().setStatus(StatusType.RELEASED); // set status comment if (taskParameter.getComment() != null) { cr.getProperties().setStatusComment(taskParameter.getComment()); } else { cr.getProperties().setStatusComment("Status changed to 'released'"); } cr.persistProperties(true); // load metadata content to resource enrichWithMetadataContent(cr); fireContentRelationModified(cr, this.contentRelationXmlProvider.getContentRelationXml(cr)); return Utility.prepareReturnXml(cr.getProperties().getLastModificationDate(), null); }
/** * Update Content Relation. * * @param id objid of Content Relation * @param xmlData XML representation of Content Relation * @return XML representation of updated Content Relation * @throws ContentRelationNotFoundException Thrown if no Content Relation could be found under * provided objid * @throws OptimisticLockingException Thrown if resource is updated in the meantime and last * modification date differs * @throws InvalidStatusException Thrown if resource has invalid status to update * @throws MissingAttributeValueException Thrown if attribute value is missing * @throws LockingException Thrown if resource is locked through other user * @throws MissingMethodParameterException Thrown if method parameter is missing * @throws ReferencedResourceNotFoundException Thrown if referenced resource does not exist. * @throws RelationPredicateNotFoundException Thrown if the predicate is not registered. * @throws InvalidContentException Thrown if content is invalid * @throws SystemException Thrown if internal error occur */ @Override public String update(final String id, final String xmlData) throws ContentRelationNotFoundException, OptimisticLockingException, InvalidContentException, InvalidStatusException, LockingException, MissingAttributeValueException, MissingMethodParameterException, SystemException, ReferencedResourceNotFoundException, RelationPredicateNotFoundException, XmlCorruptedException { // instance of stored Content Relation final ContentRelationCreate cr = setContentRelation(id); // instance of the update representation final ContentRelationCreate updatedCR = parseContentRelation(xmlData); Utility.checkOptimisticLockingCriteria( cr.getProperties().getLastModificationDate(), updatedCR.getLastModificationDate(), "Content Relation " + cr.getObjid()); enrichWithMetadataContent(cr); checkLocked(cr); checkReleased(cr); validate(updatedCR); // now compare this.contentRelation with updatedCR and transfer data boolean resourceChanged = false; if (cr.merge(updatedCR) > 0) { cr.persist(); resourceChanged = true; } final String result = this.contentRelationXmlProvider.getContentRelationXml(cr); if (resourceChanged) { fireContentRelationModified(cr, result); } return result; }