Integrating projections into feature-external-sources

This commit is contained in:
Raf Ponsaerts
2019-11-26 10:48:14 +01:00
parent 070480418b
commit 7a935f4f8b
13 changed files with 43 additions and 46 deletions

View File

@@ -21,6 +21,7 @@ import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.MetadataValueDTO;
import org.dspace.content.Site;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.packager.DSpaceAIPIngester;
@@ -38,7 +39,6 @@ import org.dspace.eperson.factory.EPersonServiceFactory;
import org.dspace.eperson.service.EPersonService;
import org.dspace.handle.factory.HandleServiceFactory;
import org.dspace.handle.service.HandleService;
import org.dspace.content.MetadataValueDTO;
import org.jdom.Element;
import org.jdom.Namespace;

View File

@@ -28,6 +28,7 @@ import org.dspace.content.Community;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.MetadataValue;
import org.dspace.content.MetadataValueDTO;
import org.dspace.content.Site;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService;
@@ -39,7 +40,6 @@ import org.dspace.core.Context;
import org.dspace.core.SelfNamedPlugin;
import org.dspace.handle.factory.HandleServiceFactory;
import org.dspace.handle.service.HandleService;
import org.dspace.content.MetadataValueDTO;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;

View File

@@ -29,6 +29,7 @@ import org.dspace.content.Community;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.MetadataValue;
import org.dspace.content.MetadataValueDTO;
import org.dspace.content.Site;
import org.dspace.content.authority.Choices;
import org.dspace.content.factory.ContentServiceFactory;
@@ -40,7 +41,6 @@ import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.core.factory.CoreServiceFactory;
import org.dspace.handle.factory.HandleServiceFactory;
import org.dspace.content.MetadataValueDTO;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;

View File

@@ -28,9 +28,9 @@ import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dspace.content.DCPersonName;
import org.dspace.content.MetadataValueDTO;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.content.MetadataValueDTO;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

View File

@@ -25,11 +25,11 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dspace.content.MetadataValueDTO;
import org.dspace.external.OrcidRestConnector;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.external.provider.orcid.xml.XMLtoBio;
import org.dspace.content.MetadataValueDTO;
import org.json.JSONObject;
import org.orcid.jaxb.model.common_v2.OrcidId;
import org.orcid.jaxb.model.record_v2.Person;

View File

@@ -30,9 +30,9 @@ import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.Logger;
import org.dspace.app.sherpa.SHERPAJournal;
import org.dspace.app.sherpa.SHERPAResponse;
import org.dspace.content.MetadataValueDTO;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.content.MetadataValueDTO;
/**
* This class is the implementation of the ExternalDataProvider interface that will deal with SherpaJournal External

View File

@@ -24,9 +24,9 @@ import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.Logger;
import org.dspace.app.sherpa.SHERPAPublisher;
import org.dspace.app.sherpa.SHERPAResponse;
import org.dspace.content.MetadataValueDTO;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.content.MetadataValueDTO;
/**
* This class is the implementation of the ExternalDataProvider interface that will deal with SherpaPublisher External

View File

@@ -15,9 +15,9 @@ import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.dspace.content.MetadataValueDTO;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.content.MetadataValueDTO;
public class MockDataProvider implements ExternalDataProvider {

View File

@@ -8,6 +8,7 @@
package org.dspace.app.rest.converter;
import org.dspace.app.rest.model.ExternalSourceEntryRest;
import org.dspace.app.rest.projection.Projection;
import org.dspace.external.model.ExternalDataObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -21,20 +22,18 @@ public class ExternalSourceEntryRestConverter implements DSpaceConverter<Externa
@Autowired
private MetadataValueDTOListConverter metadataConverter;
@Override
public ExternalSourceEntryRest fromModel(ExternalDataObject externalDataObject) {
public ExternalSourceEntryRest convert(ExternalDataObject modelObject, Projection projection) {
ExternalSourceEntryRest externalSourceEntryRest = new ExternalSourceEntryRest();
externalSourceEntryRest.setId(externalDataObject.getId());
externalSourceEntryRest.setExternalSource(externalDataObject.getSource());
externalSourceEntryRest.setDisplay(externalDataObject.getDisplayValue());
externalSourceEntryRest.setValue(externalDataObject.getValue());
externalSourceEntryRest.setExternalSource(externalDataObject.getSource());
externalSourceEntryRest.setMetadata(metadataConverter.convert(externalDataObject.getMetadata()));
externalSourceEntryRest.setId(modelObject.getId());
externalSourceEntryRest.setExternalSource(modelObject.getSource());
externalSourceEntryRest.setDisplay(modelObject.getDisplayValue());
externalSourceEntryRest.setValue(modelObject.getValue());
externalSourceEntryRest.setExternalSource(modelObject.getSource());
externalSourceEntryRest.setMetadata(metadataConverter.convert(modelObject.getMetadata()));
return externalSourceEntryRest;
}
@Override
public ExternalDataObject toModel(ExternalSourceEntryRest obj) {
return null;
public Class<ExternalDataObject> getModelClass() {
return ExternalDataObject.class;
}
}

View File

@@ -8,6 +8,7 @@
package org.dspace.app.rest.converter;
import org.dspace.app.rest.model.ExternalSourceRest;
import org.dspace.app.rest.projection.Projection;
import org.dspace.external.provider.ExternalDataProvider;
import org.springframework.stereotype.Component;
@@ -17,17 +18,15 @@ import org.springframework.stereotype.Component;
@Component
public class ExternalSourceRestConverter implements DSpaceConverter<ExternalDataProvider, ExternalSourceRest> {
@Override
public ExternalSourceRest fromModel(ExternalDataProvider obj) {
public ExternalSourceRest convert(ExternalDataProvider modelObject, Projection projection) {
ExternalSourceRest externalSourceRest = new ExternalSourceRest();
externalSourceRest.setId(obj.getSourceIdentifier());
externalSourceRest.setName(obj.getSourceIdentifier());
externalSourceRest.setId(modelObject.getSourceIdentifier());
externalSourceRest.setName(modelObject.getSourceIdentifier());
externalSourceRest.setHierarchical(false);
return externalSourceRest;
}
@Override
public ExternalDataProvider toModel(ExternalSourceRest obj) {
return null;
public Class<ExternalDataProvider> getModelClass() {
return ExternalDataProvider.class;
}
}

View File

@@ -16,7 +16,7 @@ import org.dspace.app.rest.utils.Utils;
*/
@RelNameDSpaceResource(ExternalSourceRest.NAME)
public class ExternalSourceResource extends DSpaceResource<ExternalSourceRest> {
public ExternalSourceResource(ExternalSourceRest externalSourceRest, Utils utils, String... rels) {
super(externalSourceRest, utils, rels);
public ExternalSourceResource(ExternalSourceRest externalSourceRest, Utils utils) {
super(externalSourceRest, utils);
}
}

View File

@@ -10,18 +10,18 @@ package org.dspace.app.rest.repository;
import java.util.List;
import java.util.Optional;
import org.dspace.app.rest.converter.ConverterService;
import org.dspace.app.rest.converter.ExternalSourceEntryRestConverter;
import org.dspace.app.rest.converter.ExternalSourceRestConverter;
import org.dspace.app.rest.model.ExternalSourceEntryRest;
import org.dspace.app.rest.model.ExternalSourceRest;
import org.dspace.app.rest.model.hateoas.ExternalSourceResource;
import org.dspace.app.rest.projection.Projection;
import org.dspace.core.Context;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.external.service.ExternalDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
import org.springframework.stereotype.Component;
@@ -42,6 +42,9 @@ public class ExternalSourceRestRepository extends DSpaceRestRepository<ExternalS
@Autowired
private ExternalSourceEntryRestConverter externalSourceEntryRestConverter;
@Autowired
ConverterService converter;
/**
* This method will retrieve one ExternalSourceEntryResource based on the ExternalSource for the given
* externalSourceName and with the given entryId
@@ -57,8 +60,7 @@ public class ExternalSourceRestRepository extends DSpaceRestRepository<ExternalS
entryId);
ExternalDataObject dataObject = externalDataObject.orElseThrow(() -> new ResourceNotFoundException(
"Couldn't find an ExternalSource for source: " + externalSourceName + " and ID: " + entryId));
return externalSourceEntryRestConverter.fromModel(dataObject);
return converter.toRest(dataObject, Projection.DEFAULT);
}
/**
@@ -70,39 +72,36 @@ public class ExternalSourceRestRepository extends DSpaceRestRepository<ExternalS
* @param pageable The pagination object
* @return A paginated list of ExternalSourceEntryResource objects that comply with the params
*/
public Page<ExternalSourceEntryRest> getExternalSourceEntries(String externalSourceName, String query, String parent,
Pageable pageable) {
public Page<ExternalSourceEntryRest> getExternalSourceEntries(String externalSourceName, String query,
String parent, Pageable pageable) {
if (externalDataService.getExternalDataProvider(externalSourceName) == null) {
throw new ResourceNotFoundException("The externalSource for: " + externalSourceName + " couldn't be found");
}
List<ExternalDataObject> externalDataObjects = externalDataService
.searchExternalDataObjects(externalSourceName, query, pageable.getOffset(), pageable.getPageSize());
int numberOfResults = externalDataService.getNumberOfResults(externalSourceName, query);
Page<ExternalSourceEntryRest> page = new PageImpl(externalDataObjects, pageable, numberOfResults)
.map(externalSourceEntryRestConverter);
return page;
return converter.toRestPage(externalDataObjects, pageable, numberOfResults,
utils.obtainProjection(true));
}
@Override
public ExternalSourceRest findOne(Context context, String externalSourceName) {
ExternalDataProvider externalDataProvider = externalDataService.getExternalDataProvider(externalSourceName);
if (externalDataProvider == null) {
throw new ResourceNotFoundException("ExternalDataProvider for: " + externalSourceName + " couldn't be found");
throw new ResourceNotFoundException("ExternalDataProvider for: " +
externalSourceName + " couldn't be found");
}
return externalSourceRestConverter.fromModel(externalDataProvider);
return converter.toRest(externalDataProvider, Projection.DEFAULT);
}
@Override
public Page<ExternalSourceRest> findAll(Context context, Pageable pageable) {
List<ExternalDataProvider> externalSources = externalDataService.getExternalDataProviders();
Page<ExternalSourceRest> page = utils.getPage(externalSources, pageable).map(externalSourceRestConverter);
return page; }
return converter.toRestPage(externalSources, pageable, externalSources.size(),
utils.obtainProjection(true));
}
public Class<ExternalSourceRest> getDomainClass() {
return ExternalSourceRest.class;
}
public ExternalSourceResource wrapResource(ExternalSourceRest model, String... rels) {
return new ExternalSourceResource(model, utils, rels);
}
}

View File

@@ -15,9 +15,9 @@ import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.dspace.content.MetadataValueDTO;
import org.dspace.external.model.ExternalDataObject;
import org.dspace.external.provider.ExternalDataProvider;
import org.dspace.content.MetadataValueDTO;
public class MockDataProvider implements ExternalDataProvider {