/** * 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); } }
Document modsDoc = s.build(modsFile); MCRXMLHelper.validate(modsDoc, MODS_V3_XSD_URI); Element modsRoot = modsDoc.getRootElement(); if (!modsRoot.getNamespace().equals(MCRConstants.MODS_NAMESPACE)) {
private void setSubmittedValues(MCRBinding binding, String[] values) throws JDOMException, JaxenException { List<Object> boundNodes = binding.getBoundNodes(); while (boundNodes.size() < values.length) { binding.cloneBoundElement(boundNodes.size() - 1); } for (int i = 0; i < values.length; i++) { String value = values[i] == null ? "" : values[i].trim(); value = MCRXMLFunctions.normalizeUnicode(value); value = MCRXMLHelper.removeIllegalChars(value); binding.setValue(i, value); } removeXPaths2CheckResubmission(binding); binding.detach(); }
@MCRCommand(syntax = "load mods document from file {0} for project {1}", help = "Load MODS document {0} as MyCoRe Object for project {1}", order = 20) public static void loadFromFile(String modsFileName, String projectID) throws JDOMException, IOException, MCRActiveLinkException, SAXException, MCRPersistenceException, MCRAccessException { File modsFile = new File(modsFileName); if (!modsFile.isFile()) { throw new MCRException(MessageFormat.format("File {0} is not a file.", modsFile.getAbsolutePath())); } SAXBuilder s = new SAXBuilder(XMLReaders.NONVALIDATING, null, null); Document modsDoc = s.build(modsFile); //force validation against MODS XSD MCRXMLHelper.validate(modsDoc, MODS_V3_XSD_URI); Element modsRoot = modsDoc.getRootElement(); if (!modsRoot.getNamespace().equals(MCRConstants.MODS_NAMESPACE)) { throw new MCRException( MessageFormat.format("File {0} is not a MODS document.", modsFile.getAbsolutePath())); } if (modsRoot.getName().equals("modsCollection")) { List<Element> modsElements = modsRoot.getChildren("mods", MCRConstants.MODS_NAMESPACE); for (Element mods : modsElements) { saveAsMyCoReObject(projectID, mods); } } else { saveAsMyCoReObject(projectID, modsRoot); } }
@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); } }