/** * 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); }
/** * Obtain values from XML an create value object ContentRelation. * * @param xml The content relation XML (validated by schema). * @return ContentRelation * @throws InvalidContentException Thrown if content is invalid * @throws MissingAttributeValueException Thrown if attribute value is missing * @throws SystemException Thrown if internal error occur * @throws de.escidoc.core.common.exceptions.application.invalid.XmlCorruptedException */ private static ContentRelationCreate parseContentRelation(final String xml) throws MissingAttributeValueException, InvalidContentException, SystemException, XmlCorruptedException { final StaxParser sp = new StaxParser(); final ContentRelationHandler contentRelationHandler = new ContentRelationHandler(sp); sp.addHandler(contentRelationHandler); try { sp.parse(xml); } catch (final InvalidContentException e) { throw new InvalidContentException(e.getMessage(), e); } catch (final RelationPredicateNotFoundException e) { // shouldn't happen throw new SystemException(e); } catch (final XmlCorruptedException e) { throw new XmlCorruptedException(e.getMessage(), e); } catch (final MissingAttributeValueException e) { throw new MissingAttributeValueException(e.getMessage(), e); } catch (final InvalidStatusException e) { // shouldn't happen throw new SystemException(e); } catch (final SystemException e) { throw new SystemException(null, e); } catch (final Exception e) { XmlUtility.handleUnexpectedStaxParserException(null, e); } return contentRelationHandler.getContentRelation(); }
/** * 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); }
/** * Gets the revocation date in ISO8601 format. * * @return Returns the creation date in ISO8601 format. */ public String getIso8601RevocationDate() { if (getRevocationDate() == null) { return null; } return XmlUtility.normalizeDate(getRevocationDate()); }
/** * Gets the date of last modification in ISO8601 format. <br> * The maximum of creation date and revocation date is returned for this. * * @return Returns the creation date in ISO8601 format. */ public String getIso8601LastModificationDate() { final Date lastModificationDate = getLastModificationDate(); if (lastModificationDate == null) { return null; } return XmlUtility.normalizeDate(lastModificationDate); }
@Override public StartElement startElement(final StartElement element) throws XMLStreamException { final String curPath = parser.getCurPath(); if (this.inside) { this.deepLevel++; writeElement(element); final int attCount = element.getAttributeCount(); for (int i = 0; i < attCount; i++) { final Attribute curAtt = element.getAttribute(i); writeAttribute( curAtt.getNamespace(), element.getLocalName(), curAtt.getLocalName(), curAtt.getValue(), curAtt.getPrefix()); } } else { if (curPath.endsWith("components/component")) { final int indexObjid = element.indexOfAttribute(null, "objid"); final int indexHref = element.indexOfAttribute(Constants.XLINK_NS_URI, "href"); if (!(indexObjid > -1 && element.getAttribute(indexObjid).getValue().length() > 0 || indexHref > -1 && Utility.getId(element.getAttribute(indexHref).getValue()).length() > 0)) { // start new component if there is no ID final ByteArrayOutputStream out = new ByteArrayOutputStream(); this.writer = XmlUtility.createXmlStreamWriter(out); outputStreams.add(out); this.inside = true; this.deepLevel++; writeElement(element); final int attCount = element.getAttributeCount(); for (int i = 0; i < attCount; i++) { final Attribute curAtt = element.getAttribute(i); writeAttribute( curAtt.getNamespace(), element.getLocalName(), curAtt.getLocalName(), curAtt.getValue(), curAtt.getPrefix()); } } } } return element; }
/** * Creates a new initialized writer.<br> * The writer's prefixes are initialized to the values of the prefixMap. * * @param out * @return Returns the initialized <code>XmlStreamWriter</code>X instance. * @throws javax.xml.stream.XMLStreamException */ private XMLStreamWriter newInitializedWriter(final ByteArrayOutputStream out) throws XMLStreamException { final XMLStreamWriter writer = XmlUtility.createXmlStreamWriterNamespaceRepairing(out); if (this.namespaceMap != null && !namespaceMap.isEmpty()) { for (final Entry<String, String> stringStringEntry : namespaceMap.entrySet()) { final String prefix = stringStringEntry.getValue(); if (prefix != null) { writer.setPrefix(prefix, stringStringEntry.getKey()); } else { writer.setDefaultNamespace(stringStringEntry.getKey()); } } } return writer; }
/** * @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); }
/** * Gets the Href of this role grant. * * @return Returns the Href */ public String getHref() { return this.getUserAccountByUserId() != null ? XmlUtility.getUserAccountGrantHref(this.getUserAccountByUserId().getId(), this.getId()) : XmlUtility.getUserGroupGrantHref(this.getUserGroupByGroupId().getId(), this.getId()); }