/** * '$RCSfile$' * Copyright: 2000-2019 Regents of the University of California and the * National Center for Ecological Analysis and Synthesis * * '$Author: $' * '$Date: $' * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.ucsb.nceas.metacat.doi.datacite; import java.text.SimpleDateFormat; import org.apache.log4j.Logger; import org.dataone.client.v2.itk.D1Client; import org.dataone.service.exceptions.InvalidRequest; import org.dataone.service.exceptions.ServiceFailure; import org.dataone.service.types.v1.Identifier; import org.dataone.service.types.v2.Node; import org.dataone.service.types.v2.ObjectFormat; import org.dataone.service.types.v2.SystemMetadata; import org.w3c.dom.Document; import edu.ucsb.nceas.ezid.profile.DataCiteProfile; import edu.ucsb.nceas.ezid.profile.DataCiteProfileResourceTypeValues; import edu.ucsb.nceas.ezid.profile.ErcMissingValueCode; import edu.ucsb.nceas.metacat.dataone.MNodeService; /** * Default factory to generate a simple datacite metadata xml string * @author tao * */ public class DefaultDataCiteFactory extends DataCiteMetadataFactory { private static Logger logMetacat = Logger.getLogger(DefaultDataCiteFactory.class); /** * Method to generate the data cite xml document */ @Override public String generateMetadata(Identifier identifier, SystemMetadata sysmeta) throws InvalidRequest, ServiceFailure { if(identifier != null && sysmeta != null) { try { String language = "English"; Document doc = generateROOTDoc(); //identifier String scheme = DOI; String id = removeIdSchemePrefix(identifier.getValue(), scheme); addIdentifier(doc, id, scheme); //creator String affiliation = null; String nameIdentifier = null; String nameIdentifierSchemeURI = null; String nameIdentifierScheme = null; appendCreator(sysmeta.getRightsHolder().getValue(), doc, affiliation, nameIdentifier, nameIdentifierSchemeURI, nameIdentifierScheme); //title appendTitle(ErcMissingValueCode.UNKNOWN.toString(), doc, language); //publish Node node = MNodeService.getInstance(null).getCapabilities(); addPublisher(doc,node.getName()); //publication year SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); String year = sdf.format(sysmeta.getDateUploaded()); addPublicationYear(doc, year); // type //String resourceType = lookupResourceType(sysmeta); String resourceType = null; //only set the attribute to "dataset" addResourceType(doc, DataCiteProfileResourceTypeValues.DATASET.toString(), resourceType); // format String format = lookupFormat(sysmeta); if(format != null) { appendFormat(doc, format); } return serializeDoc(doc); } catch (InvalidRequest e) { throw e; } catch (Exception e) { e.printStackTrace(); throw new ServiceFailure("1030", e.getMessage()); } } else { return null; } } /** * It can handle all namespace */ @Override public boolean canProcess(String namespace) { return true; } }