diff --git a/dspace-api/src/main/java/org/dspace/content/WorkspaceItemServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/WorkspaceItemServiceImpl.java index 8239f6a4f2..559fc14626 100644 --- a/dspace-api/src/main/java/org/dspace/content/WorkspaceItemServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/WorkspaceItemServiceImpl.java @@ -171,6 +171,11 @@ public class WorkspaceItemServiceImpl implements WorkspaceItemService { public List findAll(Context context) throws SQLException { return workspaceItemDAO.findAll(context); } + + @Override + public List findAll(Context context, Integer limit, Integer offset) throws SQLException { + return workspaceItemDAO.findAll(context, limit, offset); + } @Override public void update(Context context, WorkspaceItem workspaceItem) throws SQLException, AuthorizeException { diff --git a/dspace-api/src/main/java/org/dspace/content/dao/WorkspaceItemDAO.java b/dspace-api/src/main/java/org/dspace/content/dao/WorkspaceItemDAO.java index 4d9f536c04..9348f0656b 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/WorkspaceItemDAO.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/WorkspaceItemDAO.java @@ -35,6 +35,8 @@ public interface WorkspaceItemDAO extends GenericDAO { public List findAll(Context context) throws SQLException; + public List findAll(Context context, Integer limit, Integer offset) throws SQLException; + public List findWithSupervisedGroup(Context context) throws SQLException; public List findBySupervisedGroupMember(Context context, EPerson ePerson) throws SQLException; diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/WorkspaceItemDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/WorkspaceItemDAOImpl.java index 9585474ad5..870b6b858e 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/impl/WorkspaceItemDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/WorkspaceItemDAOImpl.java @@ -71,6 +71,16 @@ public class WorkspaceItemDAOImpl extends AbstractHibernateDAO im criteria.addOrder(Order.asc("item")); return list(criteria); } + + @Override + public List findAll(Context context, Integer limit, Integer offset) throws SQLException + { + Criteria criteria = createCriteria(context, WorkspaceItem.class); + criteria.addOrder(Order.asc("item")); + criteria.setFirstResult(offset); + criteria.setMaxResults(limit); + return list(criteria); + } @Override public List findWithSupervisedGroup(Context context) throws SQLException { diff --git a/dspace-api/src/main/java/org/dspace/content/service/WorkspaceItemService.java b/dspace-api/src/main/java/org/dspace/content/service/WorkspaceItemService.java index b8640d7b1e..137b9b765d 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/WorkspaceItemService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/WorkspaceItemService.java @@ -125,6 +125,23 @@ public interface WorkspaceItemService extends InProgressSubmissionService findAll(Context context) throws SQLException; + + /** + * Get all workspace items in the whole system, paginated. + * + * @param context + * the context object + * @param limit + * limit + * @param offset + * offset + * + * @return a page of workspace items + * @throws SQLException + * if database error + */ + public List findAll(Context context, Integer limit, Integer offset) throws SQLException; + /** * Delete the workspace item. The entry in workspaceitem, the unarchived diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/WorkspaceItemConverter.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/WorkspaceItemConverter.java new file mode 100644 index 0000000000..1bf1a13a6c --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/WorkspaceItemConverter.java @@ -0,0 +1,56 @@ +/** + * 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.app.rest.converter; + +import java.sql.SQLException; + +import org.apache.log4j.Logger; +import org.dspace.app.rest.model.WorkspaceItemRest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * This is the converter from/to the WorkspaceItem in the DSpace API data model and the + * REST data model + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +@Component +public class WorkspaceItemConverter extends DSpaceConverter { + + private static final Logger log = Logger.getLogger(WorkspaceItemConverter.class); + + @Autowired + private EPersonConverter epersonConverter; + + @Autowired + private ItemConverter itemConverter; + + @Override + public WorkspaceItemRest fromModel(org.dspace.content.WorkspaceItem obj) { + WorkspaceItemRest witem = new WorkspaceItemRest(); + witem.setId(obj.getID()); + witem.setItem(itemConverter.convert(obj.getItem())); + try { + witem.setSubmitter(epersonConverter.convert(obj.getSubmitter())); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + + // 1. retrieve the submission definition + // 2. iterate over the submission section to allow to plugin additional info + return witem; + } + + @Override + public org.dspace.content.WorkspaceItem toModel(WorkspaceItemRest obj) { + return null; + } + +} diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/RestModel.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/RestModel.java index 10aa3d8434..22b1f61233 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/RestModel.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/RestModel.java @@ -23,6 +23,7 @@ public interface RestModel extends Serializable { public static final String DISCOVER = "discover"; public static final String CONFIGURATION = "config"; public static final String INTEGRATION = "integration"; + public static final String SUBMISSION = "submission"; @JsonIgnore public String getCategory(); diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/WorkspaceItemRest.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/WorkspaceItemRest.java new file mode 100644 index 0000000000..15dd268407 --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/WorkspaceItemRest.java @@ -0,0 +1,83 @@ +/** + * 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.app.rest.model; + +import java.util.Date; + +import org.dspace.app.rest.RestResourceController; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * The WorkspaceItem REST Resource + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +public class WorkspaceItemRest extends BaseObjectRest { + public static final String NAME = "workspaceitem"; + public static final String CATEGORY = RestModel.SUBMISSION; + + private Date lastModified = new Date(); + + @JsonIgnore + private ItemRest item; + + @JsonIgnore + private SubmissionDefinitionRest submissionDefinition; + + @JsonIgnore + private EPersonRest submitter; + + @Override + public String getCategory() { + return CATEGORY; + } + + @Override + public String getType() { + return NAME; + } + + public Date getLastModified() { + return lastModified; + } + + public void setLastModified(Date lastModified){ + this.lastModified = lastModified; + } + + public ItemRest getItem() { + return item; + } + + public void setItem(ItemRest item) { + this.item = item; + } + + public SubmissionDefinitionRest getSubmissionDefinition() { + return submissionDefinition; + } + + public void setSubmissionDefinition(SubmissionDefinitionRest submissionDefinition) { + this.submissionDefinition = submissionDefinition; + } + + public EPersonRest getSubmitter() { + return submitter; + } + + public void setSubmitter(EPersonRest submitter) { + this.submitter = submitter; + } + + @Override + public Class getController() { + return RestResourceController.class; + } +} \ No newline at end of file diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/WorkspaceItemResource.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/WorkspaceItemResource.java new file mode 100644 index 0000000000..626dd28477 --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/WorkspaceItemResource.java @@ -0,0 +1,26 @@ +/** + * 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.app.rest.model.hateoas; + +import org.dspace.app.rest.model.WorkspaceItemRest; +import org.dspace.app.rest.model.hateoas.annotations.RelNameDSpaceResource; +import org.dspace.app.rest.utils.Utils; + +/** + * WorkspaceItem Rest HAL Resource. The HAL Resource wraps the REST Resource + * adding support for the links and embedded resources + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +@RelNameDSpaceResource(WorkspaceItemRest.NAME) +public class WorkspaceItemResource extends DSpaceResource { + public WorkspaceItemResource(WorkspaceItemRest witem, Utils utils, String... rels) { + super(witem, utils, rels); + } +} diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java new file mode 100644 index 0000000000..9a617ef7ff --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java @@ -0,0 +1,83 @@ +/** + * 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.app.rest.repository; + +import java.sql.SQLException; +import java.util.List; + +import org.dspace.app.rest.converter.WorkspaceItemConverter; +import org.dspace.app.rest.model.WorkspaceItemRest; +import org.dspace.app.rest.model.hateoas.WorkspaceItemResource; +import org.dspace.content.WorkspaceItem; +import org.dspace.content.service.WorkspaceItemService; +import org.dspace.core.Context; +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.stereotype.Component; + +/** + * This is the repository responsible to manage WorkspaceItem Rest object + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ + +@Component(WorkspaceItemRest.CATEGORY + "." + WorkspaceItemRest.NAME) +public class WorkspaceItemRestRepository extends DSpaceRestRepository { + + @Autowired + WorkspaceItemService wis; + + @Autowired + WorkspaceItemConverter converter; + + + public WorkspaceItemRestRepository() { + } + + @Override + public WorkspaceItemRest findOne(Context context, Integer id) { + WorkspaceItem witem = null; + try { + witem = wis.find(context, id); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + if (witem == null) { + return null; + } + return converter.fromModel(witem); + } + + @Override + public Page findAll(Context context, Pageable pageable) { + List witems = null; + int total = 0; + try { + total = wis.countTotal(context); + witems = wis.findAll(context, pageable.getPageSize(), pageable.getOffset()); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + Page page = new PageImpl(witems, pageable, total).map(converter); + return page; + } + + @Override + public Class getDomainClass() { + return WorkspaceItemRest.class; + } + + @Override + public WorkspaceItemResource wrapResource(WorkspaceItemRest witem, String... rels) { + return new WorkspaceItemResource(witem, utils, rels); + } + +} \ No newline at end of file