/** * 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.submit.step; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dspace.app.util.SubmissionInfo; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Item; import org.dspace.content.MetadataValue; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.ItemService; import org.dspace.core.Context; import org.dspace.importer.external.exception.MetadataSourceException; import org.dspace.importer.external.datamodel.ImportRecord; import org.dspace.importer.external.metadatamapping.MetadatumDTO; import org.dspace.importer.external.service.ImportService; import org.dspace.submit.AbstractProcessingStep; import org.dspace.utils.DSpace; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; /** * Created by jonas - jonas@atmire.com on 06/11/15. */ public class XMLUIStartSubmissionLookupStep extends AbstractProcessingStep { private static String publicationUrl = null; private static Logger log = Logger.getLogger(XMLUIStartSubmissionLookupStep.class); private ItemService itemService = ContentServiceFactory.getInstance().getItemService(); @Override public int doProcessing(Context context, HttpServletRequest request, HttpServletResponse response, SubmissionInfo subInfo) throws ServletException, IOException, AuthorizeException, SQLException { String publicationID = request.getParameter("publication_id"); if (StringUtils.isNotBlank(publicationID)) { /* Get an instance of the ImportService to be able to retrieve records based on several factors, such as url, publicationID, etc*/ ImportService importService = new DSpace().getServiceManager().getServiceByName("importService", ImportService.class); Item item = subInfo.getSubmissionItem().getItem(); try { ImportRecord record = importService.getRecord(getPublicationUrl(), publicationID); for (MetadataValue metadatum : itemService.getMetadata(item, Item.ANY, Item.ANY, Item.ANY, Item.ANY)) { itemService.clearMetadata(context, item, metadatum.getMetadataField().getMetadataSchema().getName(), metadatum.getMetadataField().getElement(), metadatum.getMetadataField().getQualifier(), metadatum.getLanguage()); } for (MetadatumDTO metadatum : record.getValueList()) { itemService.addMetadata(context, item, metadatum.getSchema(), metadatum.getElement(), metadatum.getQualifier(),null, metadatum.getValue()); } itemService.update(context, item); context.dispatchEvents(); } catch (MetadataSourceException e) { log.error(e); } } return 0; } @Override public int getNumberOfPages(HttpServletRequest request, SubmissionInfo subInfo) throws ServletException { return 1; } public String getPublicationUrl(){ if(publicationUrl==null){ publicationUrl=configurationService.getProperty("publication-lookup.url", "*"); } return publicationUrl; } }