DS-4166 community feedback: implement the IndexableObject interface only where really needed

This commit is contained in:
Andrea Bollini
2019-03-28 12:06:22 +01:00
parent 1252075ac9
commit 689ac4e3bd
37 changed files with 105 additions and 80 deletions

View File

@@ -20,6 +20,7 @@ import com.sun.syndication.feed.module.opensearch.OpenSearchModule;
import com.sun.syndication.feed.module.opensearch.entity.OSQuery; import com.sun.syndication.feed.module.opensearch.entity.OSQuery;
import com.sun.syndication.feed.module.opensearch.impl.OpenSearchModuleImpl; import com.sun.syndication.feed.module.opensearch.impl.OpenSearchModuleImpl;
import com.sun.syndication.io.FeedException; import com.sun.syndication.io.FeedException;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.util.service.OpenSearchService; import org.dspace.app.util.service.OpenSearchService;
import org.dspace.browse.IndexableObject; import org.dspace.browse.IndexableObject;
@@ -119,7 +120,7 @@ public class OpenSearchServiceImpl implements OpenSearchService {
@Override @Override
public String getResultsString(Context context, String format, String query, int totalResults, int start, public String getResultsString(Context context, String format, String query, int totalResults, int start,
int pageSize, int pageSize,
DSpaceObject scope, List<IndexableObject> results, IndexableObject scope, List<IndexableObject> results,
Map<String, String> labels) throws IOException { Map<String, String> labels) throws IOException {
try { try {
return getResults(context, format, query, totalResults, start, pageSize, scope, results, labels) return getResults(context, format, query, totalResults, start, pageSize, scope, results, labels)
@@ -133,7 +134,7 @@ public class OpenSearchServiceImpl implements OpenSearchService {
@Override @Override
public Document getResultsDoc(Context context, String format, String query, int totalResults, int start, public Document getResultsDoc(Context context, String format, String query, int totalResults, int start,
int pageSize, int pageSize,
DSpaceObject scope, List<IndexableObject> results, Map<String, String> labels) IndexableObject scope, List<IndexableObject> results, Map<String, String> labels)
throws IOException { throws IOException {
try { try {
return getResults(context, format, query, totalResults, start, pageSize, scope, results, labels) return getResults(context, format, query, totalResults, start, pageSize, scope, results, labels)
@@ -145,7 +146,7 @@ public class OpenSearchServiceImpl implements OpenSearchService {
} }
protected SyndicationFeed getResults(Context context, String format, String query, int totalResults, int start, protected SyndicationFeed getResults(Context context, String format, String query, int totalResults, int start,
int pageSize, DSpaceObject scope, int pageSize, IndexableObject scope,
List<IndexableObject> results, Map<String, String> labels) { List<IndexableObject> results, Map<String, String> labels) {
// Encode results in requested format // Encode results in requested format
if ("rss".equals(format)) { if ("rss".equals(format)) {

View File

@@ -180,11 +180,11 @@ public class SyndicationFeed {
* *
* @param request request * @param request request
* @param context context * @param context context
* @param dso DSpaceObject * @param dso the scope
* @param items array of objects * @param items array of objects
* @param labels label map * @param labels label map
*/ */
public void populate(HttpServletRequest request, Context context, DSpaceObject dso, public void populate(HttpServletRequest request, Context context, IndexableObject dso,
List<IndexableObject> items, Map<String, String> labels) { List<IndexableObject> items, Map<String, String> labels) {
String logoURL = null; String logoURL = null;
String objectURL = null; String objectURL = null;
@@ -209,6 +209,7 @@ public class SyndicationFeed {
if (cols != null && cols.length() > 1 && cols.contains(col.getHandle())) { if (cols != null && cols.length() > 1 && cols.contains(col.getHandle())) {
podcastFeed = true; podcastFeed = true;
} }
objectURL = resolveURL(request, col);
} else if (dso.getType() == Constants.COMMUNITY) { } else if (dso.getType() == Constants.COMMUNITY) {
Community comm = (Community) dso; Community comm = (Community) dso;
defaultTitle = comm.getName(); defaultTitle = comm.getName();
@@ -218,8 +219,9 @@ public class SyndicationFeed {
if (comms != null && comms.length() > 1 && comms.contains(comm.getHandle())) { if (comms != null && comms.length() > 1 && comms.contains(comm.getHandle())) {
podcastFeed = true; podcastFeed = true;
} }
objectURL = resolveURL(request, comm);
} }
objectURL = resolveURL(request, dso);
if (logo != null) { if (logo != null) {
logoURL = urlOfBitstream(request, logo); logoURL = urlOfBitstream(request, logo);
} }

View File

@@ -84,7 +84,7 @@ public interface OpenSearchService {
* @param totalResults - the hit count * @param totalResults - the hit count
* @param start - start result index * @param start - start result index
* @param pageSize - page size * @param pageSize - page size
* @param scope - search scope, null or community/collection handle * @param scope - search scope, null or the community/collection
* @param results the retreived DSpace objects satisfying search * @param results the retreived DSpace objects satisfying search
* @param labels labels to apply - format specific * @param labels labels to apply - format specific
* @return formatted search results * @return formatted search results
@@ -92,7 +92,7 @@ public interface OpenSearchService {
*/ */
public String getResultsString(Context context, String format, String query, int totalResults, int start, public String getResultsString(Context context, String format, String query, int totalResults, int start,
int pageSize, int pageSize,
DSpaceObject scope, List<IndexableObject> results, IndexableObject scope, List<IndexableObject> results,
Map<String, String> labels) throws IOException; Map<String, String> labels) throws IOException;
/** /**
@@ -104,7 +104,7 @@ public interface OpenSearchService {
* @param totalResults - the hit count * @param totalResults - the hit count
* @param start - start result index * @param start - start result index
* @param pageSize - page size * @param pageSize - page size
* @param scope - search scope, null or community/collection handle * @param scope - search scope, null or the community/collection
* @param results the retreived DSpace objects satisfying search * @param results the retreived DSpace objects satisfying search
* @param labels labels to apply - format specific * @param labels labels to apply - format specific
* @return formatted search results * @return formatted search results
@@ -112,7 +112,7 @@ public interface OpenSearchService {
*/ */
public Document getResultsDoc(Context context, String format, String query, int totalResults, int start, public Document getResultsDoc(Context context, String format, String query, int totalResults, int start,
int pageSize, int pageSize,
DSpaceObject scope, List<IndexableObject> results, Map<String, String> labels) IndexableObject scope, List<IndexableObject> results, Map<String, String> labels)
throws IOException; throws IOException;
public DSpaceObject resolveScope(Context context, String scope) throws SQLException; public DSpaceObject resolveScope(Context context, String scope) throws SQLException;

View File

@@ -12,6 +12,7 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import javax.persistence.Cacheable; import javax.persistence.Cacheable;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
@@ -26,6 +27,7 @@ import javax.persistence.Table;
import javax.persistence.Transient; import javax.persistence.Transient;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.browse.IndexableObject;
import org.dspace.content.comparator.NameAscendingComparator; import org.dspace.content.comparator.NameAscendingComparator;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService; import org.dspace.content.service.CollectionService;
@@ -53,7 +55,7 @@ import org.hibernate.proxy.HibernateProxyHelper;
@Table(name = "collection") @Table(name = "collection")
@Cacheable @Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, include = "non-lazy") @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, include = "non-lazy")
public class Collection extends DSpaceObject implements DSpaceObjectLegacySupport { public class Collection extends DSpaceObject implements DSpaceObjectLegacySupport, IndexableObject<UUID> {
@Column(name = "collection_id", insertable = false, updatable = false) @Column(name = "collection_id", insertable = false, updatable = false)
private Integer legacyId; private Integer legacyId;

View File

@@ -11,6 +11,7 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import javax.persistence.Cacheable; import javax.persistence.Cacheable;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
@@ -26,6 +27,7 @@ import javax.persistence.Transient;
import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.browse.IndexableObject;
import org.dspace.content.comparator.NameAscendingComparator; import org.dspace.content.comparator.NameAscendingComparator;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CommunityService; import org.dspace.content.service.CommunityService;
@@ -49,7 +51,7 @@ import org.hibernate.proxy.HibernateProxyHelper;
@Table(name = "community") @Table(name = "community")
@Cacheable @Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, include = "non-lazy") @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, include = "non-lazy")
public class Community extends DSpaceObject implements DSpaceObjectLegacySupport { public class Community extends DSpaceObject implements DSpaceObjectLegacySupport, IndexableObject<UUID> {
/** /**
* log4j category * log4j category
*/ */

View File

@@ -11,6 +11,7 @@ import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@@ -26,7 +27,6 @@ import javax.persistence.Transient;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.dspace.authorize.ResourcePolicy; import org.dspace.authorize.ResourcePolicy;
import org.dspace.browse.IndexableObject;
import org.dspace.core.ReloadableEntity; import org.dspace.core.ReloadableEntity;
import org.dspace.handle.Handle; import org.dspace.handle.Handle;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
@@ -37,8 +37,7 @@ import org.hibernate.annotations.GenericGenerator;
@Entity @Entity
@Inheritance(strategy = InheritanceType.JOINED) @Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "dspaceobject") @Table(name = "dspaceobject")
public abstract class DSpaceObject implements Serializable, ReloadableEntity<java.util.UUID>, public abstract class DSpaceObject implements Serializable, ReloadableEntity<java.util.UUID> {
IndexableObject<UUID> {
@Id @Id
@GeneratedValue(generator = "system-uuid") @GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2") @GenericGenerator(name = "system-uuid", strategy = "uuid2")

View File

@@ -13,6 +13,7 @@ import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
@@ -29,6 +30,7 @@ import javax.persistence.TemporalType;
import javax.persistence.Transient; import javax.persistence.Transient;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.browse.IndexableObject;
import org.dspace.content.comparator.NameAscendingComparator; import org.dspace.content.comparator.NameAscendingComparator;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.ItemService; import org.dspace.content.service.ItemService;
@@ -53,7 +55,7 @@ import org.hibernate.proxy.HibernateProxyHelper;
*/ */
@Entity @Entity
@Table(name = "item") @Table(name = "item")
public class Item extends DSpaceObject implements DSpaceObjectLegacySupport { public class Item extends DSpaceObject implements DSpaceObjectLegacySupport, IndexableObject<UUID> {
/** /**
* log4j logger * log4j logger

View File

@@ -21,8 +21,8 @@ import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService; import org.dspace.content.service.CommunityService;
import org.dspace.content.service.DSpaceObjectLegacySupportService; import org.dspace.content.service.DSpaceObjectLegacySupportService;
import org.dspace.content.service.DSpaceObjectService; import org.dspace.content.service.DSpaceObjectService;
import org.dspace.content.service.FindableObjectService;
import org.dspace.content.service.InProgressSubmissionService; import org.dspace.content.service.InProgressSubmissionService;
import org.dspace.content.service.IndexableObjectService;
import org.dspace.content.service.InstallItemService; import org.dspace.content.service.InstallItemService;
import org.dspace.content.service.ItemService; import org.dspace.content.service.ItemService;
import org.dspace.content.service.MetadataFieldService; import org.dspace.content.service.MetadataFieldService;
@@ -43,11 +43,11 @@ import org.dspace.workflow.factory.WorkflowServiceFactory;
public abstract class ContentServiceFactory { public abstract class ContentServiceFactory {
/** /**
* Return the list of all the available implementation of the IndexableObjectService interface * Return the list of all the available implementation of the FindableObjectService interface
* *
* @return the list of IndexableObjectService * @return the list of FindableObjectService
*/ */
public abstract List<IndexableObjectService> getIndexableObjectServices(); public abstract List<FindableObjectService> getFindableObjectServices();
public abstract List<DSpaceObjectService<? extends DSpaceObject>> getDSpaceObjectServices(); public abstract List<DSpaceObjectService<? extends DSpaceObject>> getDSpaceObjectServices();
@@ -108,15 +108,15 @@ public abstract class ContentServiceFactory {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends IndexableObject<PK>, PK extends Serializable> IndexableObjectService<T, PK> public <T extends IndexableObject<PK>, PK extends Serializable> FindableObjectService<T, PK>
getIndexableObjectService(int type) { getFindableObjectService(int type) {
for (int i = 0; i < getIndexableObjectServices().size(); i++) { for (int i = 0; i < getFindableObjectServices().size(); i++) {
IndexableObjectService objectService = getIndexableObjectServices().get(i); FindableObjectService objectService = getFindableObjectServices().get(i);
if (objectService.getSupportsTypeConstant() == type) { if (objectService.getSupportsTypeConstant() == type) {
return (IndexableObjectService<T, PK>) objectService; return (FindableObjectService<T, PK>) objectService;
} }
} }
throw new UnsupportedOperationException("Unknown Browsable DSpace type: " + type); throw new UnsupportedOperationException("Unknown Findable Object type: " + type);
} }
public DSpaceObjectLegacySupportService<? extends DSpaceObject> getDSpaceLegacyObjectService(int type) { public DSpaceObjectLegacySupportService<? extends DSpaceObject> getDSpaceLegacyObjectService(int type) {

View File

@@ -17,7 +17,7 @@ import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService; import org.dspace.content.service.CommunityService;
import org.dspace.content.service.DSpaceObjectLegacySupportService; import org.dspace.content.service.DSpaceObjectLegacySupportService;
import org.dspace.content.service.DSpaceObjectService; import org.dspace.content.service.DSpaceObjectService;
import org.dspace.content.service.IndexableObjectService; import org.dspace.content.service.FindableObjectService;
import org.dspace.content.service.InstallItemService; import org.dspace.content.service.InstallItemService;
import org.dspace.content.service.ItemService; import org.dspace.content.service.ItemService;
import org.dspace.content.service.MetadataFieldService; import org.dspace.content.service.MetadataFieldService;
@@ -70,8 +70,8 @@ public class ContentServiceFactoryImpl extends ContentServiceFactory {
private SiteService siteService; private SiteService siteService;
@Override @Override
public List<IndexableObjectService> getIndexableObjectServices() { public List<FindableObjectService> getFindableObjectServices() {
return new DSpace().getServiceManager().getServicesByType(IndexableObjectService.class); return new DSpace().getServiceManager().getServicesByType(FindableObjectService.class);
} }
@Override @Override

View File

@@ -28,7 +28,7 @@ import org.dspace.core.Context;
* @param <T> class type * @param <T> class type
* @author kevinvandevelde at atmire.com * @author kevinvandevelde at atmire.com
*/ */
public interface DSpaceObjectService<T extends DSpaceObject> extends IndexableObjectService<T, UUID> { public interface DSpaceObjectService<T extends DSpaceObject> extends FindableObjectService<T, UUID> {
/** /**
* Get a proper name for the object. This may return <code>null</code>. * Get a proper name for the object. This may return <code>null</code>.
@@ -398,7 +398,6 @@ public interface DSpaceObjectService<T extends DSpaceObject> extends IndexableOb
public void delete(Context context, T dso) throws SQLException, AuthorizeException, IOException; public void delete(Context context, T dso) throws SQLException, AuthorizeException, IOException;
void addAndShiftRightMetadata(Context context, T dso, String schema, String element, String qualifier, String lang, void addAndShiftRightMetadata(Context context, T dso, String schema, String element, String qualifier, String lang,
String value, String authority, int confidence, int index) throws SQLException; String value, String authority, int confidence, int index) throws SQLException;

View File

@@ -10,22 +10,20 @@ package org.dspace.content.service;
import java.io.Serializable; import java.io.Serializable;
import java.sql.SQLException; import java.sql.SQLException;
import org.dspace.browse.IndexableObject;
import org.dspace.core.Context; import org.dspace.core.Context;
/** /**
* Service interface class for any IndexableObject. * Base Service interface class for any Persistent Entity findable by a primary key.
* All IndexableObject service classes should implement this class since it offers some basic methods which all
* IndexableObjects are required to have.
* *
* @param <T> class type * @param <T> class type of the persistent entity
* @param <PK> class type of the primary key
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
public interface IndexableObjectService<T extends IndexableObject<PK>, PK extends Serializable> { public interface FindableObjectService<T, PK extends Serializable> {
/** /**
* Generic find for when the precise type of an IndexableObject is not known * Generic find for when the precise type of an Entity is not known
* *
* @param context - the context * @param context - the context
* @param id - id within table of type'd objects * @param id - id within table of type'd objects

View File

@@ -26,7 +26,7 @@ import org.dspace.core.Context;
* @author kevinvandevelde at atmire.com * @author kevinvandevelde at atmire.com
*/ */
public interface InProgressSubmissionService<T extends InProgressSubmission<ID>, ID extends Serializable> public interface InProgressSubmissionService<T extends InProgressSubmission<ID>, ID extends Serializable>
extends IndexableObjectService<T, ID> { extends FindableObjectService<T, ID> {
/** /**
* Deletes submission wrapper, doesn't delete item contents * Deletes submission wrapper, doesn't delete item contents

View File

@@ -2230,7 +2230,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
} }
if (uid != null) { if (uid != null) {
o = (IndexableObject) contentServiceFactory.getIndexableObjectService(type).find(context, uid); o = (IndexableObject) contentServiceFactory.getFindableObjectService(type).find(context, uid);
} }
if (o == null) { if (o == null) {
@@ -2275,7 +2275,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
SolrDocument doc = (SolrDocument) iter.next(); SolrDocument doc = (SolrDocument) iter.next();
IndexableObject o = (IndexableObject)contentServiceFactory IndexableObject o = (IndexableObject)contentServiceFactory
.getIndexableObjectService((Integer) doc.getFirstValue(RESOURCE_TYPE_FIELD)) .getFindableObjectService((Integer) doc.getFirstValue(RESOURCE_TYPE_FIELD))
.find(context, UUID.fromString((String) doc.getFirstValue(RESOURCE_ID_FIELD))); .find(context, UUID.fromString((String) doc.getFirstValue(RESOURCE_ID_FIELD)));
if (o != null) { if (o != null) {

View File

@@ -11,7 +11,7 @@ import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.service.IndexableObjectService; import org.dspace.content.service.FindableObjectService;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.service.DSpaceCRUDService; import org.dspace.service.DSpaceCRUDService;
@@ -26,7 +26,7 @@ import org.dspace.xmlworkflow.storedcomponents.XmlWorkflowItem;
* @author kevinvandevelde at atmire.com * @author kevinvandevelde at atmire.com
*/ */
public interface ClaimedTaskService extends DSpaceCRUDService<ClaimedTask>, public interface ClaimedTaskService extends DSpaceCRUDService<ClaimedTask>,
IndexableObjectService<ClaimedTask, Integer> { FindableObjectService<ClaimedTask, Integer> {
public List<ClaimedTask> findByWorkflowItem(Context context, XmlWorkflowItem workflowItem) throws SQLException; public List<ClaimedTask> findByWorkflowItem(Context context, XmlWorkflowItem workflowItem) throws SQLException;

View File

@@ -12,7 +12,7 @@ import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.service.IndexableObjectService; import org.dspace.content.service.FindableObjectService;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.service.DSpaceCRUDService; import org.dspace.service.DSpaceCRUDService;
@@ -26,7 +26,7 @@ import org.dspace.xmlworkflow.storedcomponents.XmlWorkflowItem;
* *
* @author kevinvandevelde at atmire.com * @author kevinvandevelde at atmire.com
*/ */
public interface PoolTaskService extends DSpaceCRUDService<PoolTask>, IndexableObjectService<PoolTask, Integer> { public interface PoolTaskService extends DSpaceCRUDService<PoolTask>, FindableObjectService<PoolTask, Integer> {
public List<PoolTask> findByEperson(Context context, EPerson ePerson) public List<PoolTask> findByEperson(Context context, EPerson ePerson)
throws SQLException, AuthorizeException, IOException; throws SQLException, AuthorizeException, IOException;

View File

@@ -12,6 +12,8 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -22,7 +24,6 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.app.rest.utils.ContextUtil; import org.dspace.app.rest.utils.ContextUtil;
import org.dspace.app.rest.utils.ScopeResolver; import org.dspace.app.rest.utils.ScopeResolver;
import org.dspace.app.util.SyndicationFeed; import org.dspace.app.util.SyndicationFeed;
@@ -31,7 +32,6 @@ import org.dspace.app.util.service.OpenSearchService;
import org.dspace.authorize.factory.AuthorizeServiceFactory; import org.dspace.authorize.factory.AuthorizeServiceFactory;
import org.dspace.authorize.service.AuthorizeService; import org.dspace.authorize.service.AuthorizeService;
import org.dspace.browse.IndexableObject; import org.dspace.browse.IndexableObject;
import org.dspace.content.DSpaceObject;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService; import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService; import org.dspace.content.service.CommunityService;
@@ -43,13 +43,11 @@ import org.dspace.discovery.SearchServiceException;
import org.dspace.discovery.SearchUtils; import org.dspace.discovery.SearchUtils;
import org.dspace.discovery.configuration.DiscoveryConfiguration; import org.dspace.discovery.configuration.DiscoveryConfiguration;
import org.dspace.discovery.configuration.DiscoverySearchFilter; import org.dspace.discovery.configuration.DiscoverySearchFilter;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.w3c.dom.Document; import org.w3c.dom.Document;
/** /**
@@ -114,7 +112,7 @@ public class OpenSearchController {
} }
// then the rest - we are processing the query // then the rest - we are processing the query
DSpaceObject container = null; IndexableObject<UUID> container = null;
// support pagination parameters // support pagination parameters
DiscoverQuery queryArgs = new DiscoverQuery(); DiscoverQuery queryArgs = new DiscoverQuery();

View File

@@ -22,7 +22,7 @@ import org.springframework.stereotype.Component;
* @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it) * @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it)
*/ */
@Component @Component
public class AuthorityEntryRestConverter extends DSpaceConverter<Choice, AuthorityEntryRest> { public class AuthorityEntryRestConverter implements DSpaceConverter<Choice, AuthorityEntryRest> {
@Override @Override
public AuthorityEntryRest fromModel(Choice choice) { public AuthorityEntryRest fromModel(Choice choice) {

View File

@@ -23,7 +23,7 @@ import org.springframework.stereotype.Component;
* @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it) * @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it)
*/ */
@Component @Component
public class AuthorityRestConverter extends DSpaceConverter<ChoiceAuthority, AuthorityRest> { public class AuthorityRestConverter implements DSpaceConverter<ChoiceAuthority, AuthorityRest> {
@Override @Override
public AuthorityRest fromModel(ChoiceAuthority step) { public AuthorityRest fromModel(ChoiceAuthority step) {

View File

@@ -8,6 +8,7 @@
package org.dspace.app.rest.converter; package org.dspace.app.rest.converter;
import org.dspace.app.rest.model.BitstreamFormatRest; import org.dspace.app.rest.model.BitstreamFormatRest;
import org.dspace.content.BitstreamFormat;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@@ -17,9 +18,9 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class BitstreamFormatConverter extends DSpaceConverter<org.dspace.content.BitstreamFormat, BitstreamFormatRest> { public class BitstreamFormatConverter implements DSpaceConverter<BitstreamFormat, BitstreamFormatRest> {
@Override @Override
public BitstreamFormatRest fromModel(org.dspace.content.BitstreamFormat obj) { public BitstreamFormatRest fromModel(BitstreamFormat obj) {
BitstreamFormatRest bf = new BitstreamFormatRest(); BitstreamFormatRest bf = new BitstreamFormatRest();
bf.setDescription(obj.getDescription()); bf.setDescription(obj.getDescription());
bf.setExtensions(bf.getExtensions()); bf.setExtensions(bf.getExtensions());
@@ -31,7 +32,7 @@ public class BitstreamFormatConverter extends DSpaceConverter<org.dspace.content
} }
@Override @Override
public org.dspace.content.BitstreamFormat toModel(BitstreamFormatRest obj) { public BitstreamFormat toModel(BitstreamFormatRest obj) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }

View File

@@ -23,7 +23,7 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class BrowseIndexConverter extends DSpaceConverter<BrowseIndex, BrowseIndexRest> { public class BrowseIndexConverter implements DSpaceConverter<BrowseIndex, BrowseIndexRest> {
@Override @Override
public BrowseIndexRest fromModel(BrowseIndex obj) { public BrowseIndexRest fromModel(BrowseIndex obj) {
BrowseIndexRest bir = new BrowseIndexRest(); BrowseIndexRest bir = new BrowseIndexRest();

View File

@@ -23,7 +23,7 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class ClaimedTaskConverter public class ClaimedTaskConverter
extends IndexableDSpaceObjectConverter<ClaimedTask, org.dspace.app.rest.model.ClaimedTaskRest> { implements IndexableDSpaceObjectConverter<ClaimedTask, org.dspace.app.rest.model.ClaimedTaskRest> {
private static final Logger log = Logger.getLogger(ClaimedTaskConverter.class); private static final Logger log = Logger.getLogger(ClaimedTaskConverter.class);

View File

@@ -19,6 +19,7 @@ import org.dspace.app.rest.model.ResourcePolicyRest;
import org.dspace.app.rest.utils.ContextUtil; import org.dspace.app.rest.utils.ContextUtil;
import org.dspace.authorize.ResourcePolicy; import org.dspace.authorize.ResourcePolicy;
import org.dspace.authorize.service.AuthorizeService; import org.dspace.authorize.service.AuthorizeService;
import org.dspace.browse.IndexableObject;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.service.CollectionService; import org.dspace.content.service.CollectionService;
@@ -37,7 +38,8 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class CollectionConverter public class CollectionConverter
extends DSpaceObjectConverter<org.dspace.content.Collection, org.dspace.app.rest.model.CollectionRest> { extends DSpaceObjectConverter<org.dspace.content.Collection, org.dspace.app.rest.model.CollectionRest>
implements IndexableDSpaceObjectConverter<Collection, CollectionRest> {
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(CollectionConverter.class); private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(CollectionConverter.class);
@@ -110,4 +112,9 @@ public class CollectionConverter
protected Class<org.dspace.content.Collection> getModelClass() { protected Class<org.dspace.content.Collection> getModelClass() {
return org.dspace.content.Collection.class; return org.dspace.content.Collection.class;
} }
@Override
public boolean supportsModel(IndexableObject idxo) {
return idxo instanceof Collection;
}
} }

View File

@@ -12,6 +12,7 @@ import java.util.List;
import org.dspace.app.rest.model.CollectionRest; import org.dspace.app.rest.model.CollectionRest;
import org.dspace.app.rest.model.CommunityRest; import org.dspace.app.rest.model.CommunityRest;
import org.dspace.browse.IndexableObject;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.Community; import org.dspace.content.Community;
@@ -26,7 +27,9 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class CommunityConverter public class CommunityConverter
extends DSpaceObjectConverter<org.dspace.content.Community, org.dspace.app.rest.model.CommunityRest> { extends DSpaceObjectConverter<org.dspace.content.Community, org.dspace.app.rest.model.CommunityRest>
implements IndexableDSpaceObjectConverter<Community, CommunityRest> {
@Autowired @Autowired
private BitstreamConverter bitstreamConverter; private BitstreamConverter bitstreamConverter;
@@ -77,4 +80,9 @@ public class CommunityConverter
protected Class<org.dspace.content.Community> getModelClass() { protected Class<org.dspace.content.Community> getModelClass() {
return org.dspace.content.Community.class; return org.dspace.content.Community.class;
} }
@Override
public boolean supportsModel(IndexableObject idxo) {
return idxo instanceof Community;
}
} }

View File

@@ -9,9 +9,9 @@ package org.dspace.app.rest.converter;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.Converter;
public abstract class DSpaceConverter<M, R> implements Converter<M, R> { public interface DSpaceConverter<M, R> extends Converter<M, R> {
@Override @Override
public R convert(M source) { public default R convert(M source) {
return fromModel(source); return fromModel(source);
} }

View File

@@ -7,7 +7,6 @@
*/ */
package org.dspace.app.rest.converter; package org.dspace.app.rest.converter;
import org.dspace.browse.IndexableObject;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -20,8 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
public abstract class DSpaceObjectConverter<M extends DSpaceObject, R extends org.dspace.app.rest.model public abstract class DSpaceObjectConverter<M extends DSpaceObject, R extends org.dspace.app.rest.model
.DSpaceObjectRest> .DSpaceObjectRest> implements DSpaceConverter<M, R> {
extends IndexableDSpaceObjectConverter<M, R> {
@Autowired(required = true) @Autowired(required = true)
private MetadataConverter metadataConverter; private MetadataConverter metadataConverter;
@@ -43,7 +41,7 @@ public abstract class DSpaceObjectConverter<M extends DSpaceObject, R extends or
return null; return null;
} }
public boolean supportsModel(IndexableObject object) { public boolean supportsModel(DSpaceObject object) {
return object != null && object.getClass().equals(getModelClass()); return object != null && object.getClass().equals(getModelClass());
} }

View File

@@ -17,7 +17,7 @@ import org.dspace.browse.IndexableObject;
* @param <R> the Class in the DSpace REST data model * @param <R> the Class in the DSpace REST data model
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
public abstract class IndexableDSpaceObjectConverter<M extends IndexableObject, public interface IndexableDSpaceObjectConverter<M extends IndexableObject,
R extends org.dspace.app.rest.model.RestAddressableModel> extends DSpaceConverter<M, R> { R extends org.dspace.app.rest.model.RestAddressableModel> extends DSpaceConverter<M, R> {
/** /**
@@ -26,6 +26,6 @@ public abstract class IndexableDSpaceObjectConverter<M extends IndexableObject,
* the IndexableObject to check * the IndexableObject to check
* @return true if the actual converter implementation is able to manage the supplied IndexableObject * @return true if the actual converter implementation is able to manage the supplied IndexableObject
*/ */
public abstract boolean supportsModel(IndexableObject idxo); public boolean supportsModel(IndexableObject idxo);
} }

View File

@@ -13,6 +13,7 @@ import java.util.List;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.model.BitstreamRest; import org.dspace.app.rest.model.BitstreamRest;
import org.dspace.app.rest.model.ItemRest; import org.dspace.app.rest.model.ItemRest;
import org.dspace.browse.IndexableObject;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Bundle; import org.dspace.content.Bundle;
import org.dspace.content.Collection; import org.dspace.content.Collection;
@@ -27,7 +28,10 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class ItemConverter extends DSpaceObjectConverter<org.dspace.content.Item, org.dspace.app.rest.model.ItemRest> { public class ItemConverter
extends DSpaceObjectConverter<org.dspace.content.Item, org.dspace.app.rest.model.ItemRest>
implements IndexableDSpaceObjectConverter<Item, ItemRest> {
@Autowired(required = true) @Autowired(required = true)
private CollectionConverter collectionConverter; private CollectionConverter collectionConverter;
@Autowired(required = true) @Autowired(required = true)
@@ -85,4 +89,8 @@ public class ItemConverter extends DSpaceObjectConverter<org.dspace.content.Item
return Item.class; return Item.class;
} }
@Override
public boolean supportsModel(IndexableObject idxo) {
return idxo instanceof Item;
}
} }

View File

@@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class MetadataFieldConverter extends DSpaceConverter<org.dspace.content.MetadataField, MetadataFieldRest> { public class MetadataFieldConverter implements DSpaceConverter<org.dspace.content.MetadataField, MetadataFieldRest> {
@Autowired(required = true) @Autowired(required = true)
private MetadataSchemaConverter metadataSchemaConverter; private MetadataSchemaConverter metadataSchemaConverter;

View File

@@ -17,7 +17,7 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class MetadataSchemaConverter extends DSpaceConverter<org.dspace.content.MetadataSchema, MetadataSchemaRest> { public class MetadataSchemaConverter implements DSpaceConverter<org.dspace.content.MetadataSchema, MetadataSchemaRest> {
@Override @Override
public MetadataSchemaRest fromModel(org.dspace.content.MetadataSchema obj) { public MetadataSchemaRest fromModel(org.dspace.content.MetadataSchema obj) {
MetadataSchemaRest schema = new MetadataSchemaRest(); MetadataSchemaRest schema = new MetadataSchemaRest();

View File

@@ -23,7 +23,7 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class PoolTaskConverter public class PoolTaskConverter
extends IndexableDSpaceObjectConverter<PoolTask, org.dspace.app.rest.model.PoolTaskRest> { implements IndexableDSpaceObjectConverter<PoolTask, org.dspace.app.rest.model.PoolTaskRest> {
private static final Logger log = Logger.getLogger(PoolTaskConverter.class); private static final Logger log = Logger.getLogger(PoolTaskConverter.class);

View File

@@ -20,7 +20,7 @@ import org.springframework.stereotype.Component;
* @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it) * @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it)
*/ */
@Component @Component
public class ResourcePolicyConverter extends DSpaceConverter<ResourcePolicy, ResourcePolicyRest> { public class ResourcePolicyConverter implements DSpaceConverter<ResourcePolicy, ResourcePolicyRest> {
@Autowired @Autowired
ResourcePolicyService resourcePolicyService; ResourcePolicyService resourcePolicyService;

View File

@@ -35,7 +35,7 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class SubmissionDefinitionConverter extends DSpaceConverter<SubmissionConfig, SubmissionDefinitionRest> { public class SubmissionDefinitionConverter implements DSpaceConverter<SubmissionConfig, SubmissionDefinitionRest> {
private static final Logger log = org.apache.logging.log4j.LogManager private static final Logger log = org.apache.logging.log4j.LogManager
.getLogger(SubmissionDefinitionConverter.class); .getLogger(SubmissionDefinitionConverter.class);

View File

@@ -36,7 +36,7 @@ import org.springframework.stereotype.Component;
* @author Andrea Bollini (andrea.bollini at 4science.it) * @author Andrea Bollini (andrea.bollini at 4science.it)
*/ */
@Component @Component
public class SubmissionFormConverter extends DSpaceConverter<DCInputSet, SubmissionFormRest> { public class SubmissionFormConverter implements DSpaceConverter<DCInputSet, SubmissionFormRest> {
private static final String INPUT_TYPE_ONEBOX = "onebox"; private static final String INPUT_TYPE_ONEBOX = "onebox";
private static final String INPUT_TYPE_NAME = "name"; private static final String INPUT_TYPE_NAME = "name";

View File

@@ -23,7 +23,7 @@ import org.springframework.stereotype.Component;
* @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it) * @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it)
*/ */
@Component @Component
public class SubmissionSectionConverter extends DSpaceConverter<SubmissionStepConfig, SubmissionSectionRest> { public class SubmissionSectionConverter implements DSpaceConverter<SubmissionStepConfig, SubmissionSectionRest> {
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(SubmissionSectionConverter.class); private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(SubmissionSectionConverter.class);

View File

@@ -38,7 +38,7 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class WorkflowItemConverter public class WorkflowItemConverter
extends IndexableDSpaceObjectConverter<XmlWorkflowItem, org.dspace.app.rest.model.WorkflowItemRest> { implements IndexableDSpaceObjectConverter<XmlWorkflowItem, org.dspace.app.rest.model.WorkflowItemRest> {
private static final Logger log = Logger.getLogger(WorkflowItemConverter.class); private static final Logger log = Logger.getLogger(WorkflowItemConverter.class);

View File

@@ -37,7 +37,7 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class WorkspaceItemConverter public class WorkspaceItemConverter
extends implements
IndexableDSpaceObjectConverter<org.dspace.content.WorkspaceItem, org.dspace.app.rest.model.WorkspaceItemRest> { IndexableDSpaceObjectConverter<org.dspace.content.WorkspaceItem, org.dspace.app.rest.model.WorkspaceItemRest> {
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(WorkspaceItemConverter.class); private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(WorkspaceItemConverter.class);

View File

@@ -12,7 +12,7 @@ import java.util.UUID;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.content.DSpaceObject; import org.dspace.browse.IndexableObject;
import org.dspace.content.service.CollectionService; import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService; import org.dspace.content.service.CommunityService;
import org.dspace.core.Context; import org.dspace.core.Context;
@@ -33,8 +33,8 @@ public class ScopeResolver {
@Autowired @Autowired
CommunityService communityService; CommunityService communityService;
public DSpaceObject resolveScope(Context context, String scope) { public IndexableObject<UUID> resolveScope(Context context, String scope) {
DSpaceObject scopeObj = null; IndexableObject<UUID> scopeObj = null;
if (StringUtils.isNotBlank(scope)) { if (StringUtils.isNotBlank(scope)) {
try { try {
UUID uuid = UUID.fromString(scope); UUID uuid = UUID.fromString(scope);