package org.bbaw.wsp.cms.mdsystem.metadata.general.extractor; import java.util.HashMap; import org.bbaw.wsp.cms.mdsystem.metadata.general.WSPMetadataRecord; import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; /** * This class is able to parse a MODS file that has the specified values of the * old knowledge store. * * @author Sascha Feldmann (wsp-shk1) * */ public class ModsMetadataExtractor extends MetadataExtractor { /** * Create a new ModsMetadataParser instance. * * @param uri * - the URI to the knowledge store metadata record. * @throws ApplicationException * @throws IllegalArgumentException * if the uri is null, empty or doesn't refer to an existing file. */ public ModsMetadataExtractor(final String uri, final HashMap<String, String> namespaces) throws ApplicationException { super(uri, namespaces); } /** * Parse the record and return an {@link WSPMetadataRecord} object. * * @return an {@link WSPMetadataRecord} object. */ public WSPMetadataRecord parse() { final WSPMetadataRecord modsObject = new WSPMetadataRecord(); final String id = parseID(); modsObject.setID(id); final String url = parseURL(); modsObject.setUrl(url); final String title = parseTitle(); modsObject.setTitle(title); final String mods_abstract = parseAbstract(); modsObject.setMods_abstract(mods_abstract); final String publisher = parsePublisher(); modsObject.setPublisher(publisher); final String dateIssued = parseDateIssued(); modsObject.setDateIssued(dateIssued); final String[] persIds = parsePersonalIds(); modsObject.setPersonals(persIds); final String placeTerm = parsePlaceTerm(); modsObject.setPlaceTerm(placeTerm); final String[] topics = parseTopics(); modsObject.setTopics(topics); final String[] geographics = parseGeographics(); modsObject.setGeographics(geographics); final String temporalStart = parseTemporalStart(); modsObject.setTemporalStart(temporalStart); final String temporalEnd = parseTemporalEnd(); modsObject.setTemporalEnd(temporalEnd); return modsObject; } private String parseTemporalEnd() { return (String) buildXPath("//mods:subject/mods:temporal[@point='end']/text()", false); } private String parseTemporalStart() { return (String) buildXPath("//mods:subject/mods:temporal[@point='start']/text()", false); } private String[] parseGeographics() { return (String[]) buildXPath("//mods:subject/mods:geographic/text()", true); } private String[] parseTopics() { return (String[]) buildXPath("//mods:subject/mods:topic/text()", true); } private String parseDateIssued() { return (String) buildXPath("//mods:originInfo/mods:dateIssued/text()", false); } private String parsePublisher() { return (String) buildXPath("//mods:originInfo/mods:publisher/text()", false); } private String parseAbstract() { return (String) buildXPath("//mods:abstract/text()", false); } private String parseTitle() { return (String) buildXPath("//mods:titleInfo/mods:title/text()", false); } private String parsePlaceTerm() { return (String) buildXPath("//mods:originInfo/mods:place/mods:placeTerm/text()", false); } private String parseID() { return (String) buildXPath("//mods:recordIdentifier/text()", false); } private String[] parsePersonalIds() { return (String[]) buildXPath("//mods:name[@type='personal']/@ID", true); } private String parseURL() { return (String) buildXPath("//mods:url/text()", false); } }