/** * Two mergers are equal if they wrap elements that are deep equals. */ @Override public boolean equals(Object obj) { if (obj instanceof MCRMerger) { return MCRXMLHelper.deepEqual(this.element, ((MCRMerger) obj).element); } else { return super.equals(obj); } }
@Override public boolean shareableMetadataChanged(MCRObject oldVersion, MCRObject newVersion) { final MCRObjectMetadata md = newVersion.getMetadata(); final MCRObjectMetadata mdold = oldVersion.getMetadata(); //if any metadata changed we need to update children boolean metadataChanged = !MCRXMLHelper.deepEqual(md.createXML(), mdold.createXML()); if (!metadataChanged) { LOGGER.info("Metadata did not change on update of {}", newVersion.getId()); } return metadataChanged; }
@Override public void updateJob(Map<String, String> parameters) throws MCRPersistentIdentifierException { MCRDigitalObjectIdentifier doi = getDOIFromJob(parameters); String idString = parameters.get(CONTEXT_OBJ); MCRObjectID objectID = MCRObjectID.getInstance(idString); this.validateJobUserRights(objectID); MCRObject object = MCRMetadataManager.retrieveMCRObject(objectID); Document newDataciteMetadata = transformToDatacite(doi, object); MCRDataciteClient dataciteClient = getDataciteClient(); try { URI uri = dataciteClient.resolveDOI(doi); URI registeredURI = getRegisteredURI(object); if (!uri.equals(registeredURI)) { LOGGER.info("Sending new URL({}) to Datacite!", registeredURI); dataciteClient.mintDOI(doi, registeredURI); } } catch (URISyntaxException e) { throw new MCRPersistentIdentifierException("Error while updating URL!", e); } Document oldDataciteMetadata = dataciteClient.resolveMetadata(doi); if (!MCRXMLHelper.deepEqual(newDataciteMetadata, oldDataciteMetadata)) { LOGGER.info("Sending new Metadata of {} to Datacite!", idString); dataciteClient.deleteMetadata(doi); dataciteClient.storeMetadata(newDataciteMetadata); } }