/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.sword2; import org.dspace.content.Item; import org.dspace.content.MetadataField; import org.dspace.content.MetadataValue; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.ItemService; import org.dspace.core.ConfigurationManager; import java.util.HashMap; import java.util.List; import java.util.Properties; public class AbstractSimpleDC { protected HashMap<String, String> dcMap = null; protected HashMap<String, String> atomMap = null; protected ItemService itemService = ContentServiceFactory.getInstance() .getItemService(); protected void loadMetadataMaps() { if (this.dcMap == null) { // we should load our DC map from configuration this.dcMap = new HashMap<>(); Properties props = ConfigurationManager .getProperties("swordv2-server"); for (Object key : props.keySet()) { String keyString = (String) key; if (keyString.startsWith("simpledc.")) { String k = keyString.substring("simpledc.".length()); String v = (String) props.get(key); this.dcMap.put(k, v); } } } if (this.atomMap == null) { this.atomMap = new HashMap<>(); Properties props = ConfigurationManager .getProperties("swordv2-server"); for (Object key : props.keySet()) { String keyString = (String) key; if (keyString.startsWith("atom.")) { String k = keyString.substring("atom.".length()); String v = (String) props.get(key); this.atomMap.put(k, v); } } } } protected SimpleDCMetadata getMetadata(Item item) { this.loadMetadataMaps(); SimpleDCMetadata md = new SimpleDCMetadata(); List<MetadataValue> all = itemService .getMetadata(item, Item.ANY, Item.ANY, Item.ANY, Item.ANY); for (MetadataValue dcv : all) { MetadataField field = dcv.getMetadataField(); String valueMatch = field.getMetadataSchema().getName() + "." + field.getElement(); if (field.getQualifier() != null) { valueMatch += "." + field.getQualifier(); } // look for the metadata in the dublin core map for (String key : this.dcMap.keySet()) { String value = this.dcMap.get(key); if (valueMatch.equals(value)) { md.addDublinCore(key, dcv.getValue()); } } // look for the metadata in the atom map for (String key : this.atomMap.keySet()) { String value = this.atomMap.get(key); if (valueMatch.equals(value)) { md.addAtom(key, dcv.getValue()); } } } return md; } }