public void deleteObject(MCRObject object) throws SwordServerException { try { object .getStructure() .getDerivates() .stream() .map(MCRMetaLinkID::getXLinkHrefID) .forEach(id -> { try { MCRMetadataManager.deleteMCRDerivate(id); } catch (Exception e) { throw new MCRException(e); } }); MCRMetadataManager.delete(object); } catch (MCRActiveLinkException | MCRAccessException | MCRException e) { Throwable ex = e; if (e instanceof MCRException && Optional.ofNullable(e.getCause()).map(Object::getClass) .filter(MCRAccessException.class::isAssignableFrom).isPresent()) { //unwrapp ex = e.getCause(); } throw new SwordServerException("Error while deleting Object.", ex); } }
if (!isHost(relatedItem) || object.getStructure().getParentID() == null) { MCRObjectID relatedID; try { object.getStructure().setParent(relatedID); if (object.getStructure().getParentID() == null) { LOGGER.info("Setting {} as parent of {}", href, oid); object.getStructure().setParent(relatedID); } else if (!object.getStructure().getParentID().equals(relatedID)) { LOGGER.info("Setting {} as parent of {}", href, oid); object.getStructure().setParent(relatedID);
@Override public void distributeMetadata(MCRObject holder) throws MCRPersistenceException, MCRAccessException { MCRMODSWrapper holderWrapper = new MCRMODSWrapper(holder); List<MCRMetaLinkID> children = holder.getStructure().getChildren(); if (!children.isEmpty()) { LOGGER.info("Update inherited metadata");
@Override public void receiveMetadata(MCRObject child) { MCRMODSWrapper childWrapper = new MCRMODSWrapper(child); MCRObjectID parentID = child.getStructure().getParentID(); LOGGER.debug("Removing old inherited Metadata."); childWrapper.removeInheritedMetadata(); if (parentID != null && MCRMODSWrapper.isSupported(parentID)) { MCRObject parent = MCRMetadataManager.retrieveMCRObject(parentID); MCRMODSWrapper parentWrapper = new MCRMODSWrapper(parent); inheritToChild(parentWrapper, childWrapper); } for (Element relatedItem : childWrapper.getLinkedRelatedItems()) { String type = relatedItem.getAttributeValue("type"); String holderId = relatedItem.getAttributeValue("href", MCRConstants.XLINK_NAMESPACE); LOGGER.info("receive metadata from {} document {}", type, holderId); if ((holderId == null || parentID != null && parentID.toString().equals(holderId)) && MCRMODSRelationshipType.host.name().equals(type)) { //already received metadata from parent; continue; } MCRObjectID holderObjectID = MCRObjectID.getInstance(holderId); if (MCRMODSWrapper.isSupported(holderObjectID)) { MCRObject targetObject = MCRMetadataManager.retrieveMCRObject(holderObjectID); MCRMODSWrapper targetWrapper = new MCRMODSWrapper(targetObject); relatedItem.addContent(targetWrapper.getMODS().cloneContent()); } } }
private MCRObjectID createRelatedObject(Element relatedItem, MCRObjectID childID) throws MCRPersistenceException, MCRAccessException { MCRMODSWrapper wrapper = new MCRMODSWrapper(); MCRObject object = wrapper.getMCRObject(); MCRObjectID oid = MCRObjectID.getNextFreeId(childID.getBase()); if (oid.equals(childID)) { oid = MCRObjectID.getNextFreeId(childID.getBase()); } object.setId(oid); if (isHost(relatedItem)) { object.getStructure().addChild(new MCRMetaLinkID("child", childID, childID.toString(), childID.toString())); } Element mods = cloneRelatedItem(relatedItem); wrapper.setMODS(mods); LOGGER.info("create object {}", oid); MCRMetadataManager.create(object); return oid; }
@Override protected void handleObjectUpdated(final MCREvent evt, final MCRObject obj) { if (!MCRMODSWrapper.isSupported(obj)) { return; } handleObjectCreated(evt, obj); //may have to reindex children, if they inherit any information for (MCRMetaLinkID childLinkID : obj.getStructure().getChildren()) { MCRObjectID childID = childLinkID.getXLinkHrefID(); if (MCRMetadataManager.exists(childID)) { MCREvent childEvent = new MCREvent(childID.getTypeId(), MCREvent.INDEX_EVENT); childEvent.put("object", MCRMetadataManager.retrieve(childID)); MCREventManager.instance().handleEvent(childEvent); } } }
/** * Get the full path of the main file of the first derivate. * * @return the mainfile of the first derivate related to the given mcrid or * null if there are no derivates related to the given mcrid */ public static String getSupportedMainFileByOwner(String mcrID) { MCRObjectID objectID = null; try { objectID = MCRObjectID.getInstance(mcrID); } catch (Exception e) { return null; } MCRObject obj = MCRMetadataManager.retrieveMCRObject(objectID); List<MCRMetaLinkID> derivates = obj.getStructure().getDerivates(); if (derivates.size() > 0) { return derivates.get(0) + "/" + ADAPTER.getSupportedMainFile(derivates.get(0).toString()); } return null; }
for (MCRMetaLinkID check : mcrObj.getStructure().getDerivates()) { if (derIDString.equals(check.getXLinkLabel()) || derIDString.equals(check.getXLinkTitle())) { matchedDerID = check.getXLinkHref();
List<MCRMetaLinkID> derivates = obj.getStructure().getDerivates(); GenericEntity<List<MCRMetaLinkID>> entity = new GenericEntity<List<MCRMetaLinkID>>(derivates) { };
List<MCRObjectIDDate> objIdDates = retrieveMCRObject(mcrObjID).getStructure().getDerivates().stream() .map(MCRMetaLinkID::getXLinkHrefID).filter(MCRMetadataManager::exists).map(id -> new MCRObjectIDDate() { long lastModified;
MCRObjectID derID = null; if (overwriteOnExistingLabel) { for (MCRMetaLinkID derLink : mcrObj.getStructure().getDerivates()) { if (label.equals(derLink.getXLinkLabel()) || label.equals(derLink.getXLinkTitle())) { derID = derLink.getXLinkHrefID();