/** * 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.importer.external.service; import org.dspace.importer.external.datamodel.ImportRecord; import org.dspace.importer.external.metadatamapping.MetadataFieldMapping; import org.dspace.importer.external.metadatamapping.contributor.MetadataContributor; import org.dspace.importer.external.service.components.MetadataSource; import org.dspace.importer.external.service.components.AbstractRemoteMetadataSource; import org.dspace.importer.external.metadatamapping.transform.GenerateQueryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import java.util.LinkedList; /** * This class is a partial implementation of {@link MetadataSource}. It provides assistance with mapping metadata from source format to DSpace format. * AbstractImportSourceService has a generic type set 'RecordType'. * In the importer implementation this type set should be the class of the records received from the remote source's response. * * @author Roeland Dillen (roeland at atmire dot com) * */ public abstract class AbstractImportMetadataSourceService<RecordType> extends AbstractRemoteMetadataSource implements MetadataSource { private GenerateQueryService generateQueryForItem = null; private MetadataFieldMapping<RecordType, MetadataContributor<RecordType>> metadataFieldMapping; /** * Retrieve the {@link GenerateQueryService} * @return A GenerateForQueryService object set to this class */ public GenerateQueryService getGenerateQueryForItem() { return generateQueryForItem; } /** * Set the {@link GenerateQueryService} used to create a * {@link org.dspace.importer.external.datamodel.Query} for a DSpace * {@link org.dspace.content.Item}. * * @param generateQueryForItem the query generator to be used. */ @Autowired public void setGenerateQueryForItem(GenerateQueryService generateQueryForItem) { this.generateQueryForItem = generateQueryForItem; } /** * Retrieve the MetadataFieldMapping containing the mapping between RecordType and Metadata * @return The configured MetadataFieldMapping */ public MetadataFieldMapping<RecordType, MetadataContributor<RecordType>> getMetadataFieldMapping() { return metadataFieldMapping; } /** * Sets the MetadataFieldMapping to base the mapping of RecordType and * @param metadataFieldMapping the map to be used. */ @Required public void setMetadataFieldMapping( MetadataFieldMapping<RecordType, MetadataContributor<RecordType>> metadataFieldMapping) { this.metadataFieldMapping = metadataFieldMapping; } /** * Return an ImportRecord constructed from the results in a RecordType * @param recordType The record type to retrieve the DCValueMapping from * @return An {@link ImportRecord}, This is based on the results retrieved from the recordTypeMapping */ public ImportRecord transformSourceRecords(RecordType recordType){ return new ImportRecord(new LinkedList<>(getMetadataFieldMapping().resultToDCValueMapping(recordType))); } }