diff --git a/dspace-api/src/main/java/org/dspace/eperson/EPersonServiceImpl.java b/dspace-api/src/main/java/org/dspace/eperson/EPersonServiceImpl.java index af8b13a05e..e7c42f67a5 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/EPersonServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/eperson/EPersonServiceImpl.java @@ -143,6 +143,11 @@ public class EPersonServiceImpl extends DSpaceObjectServiceImpl impleme @Override public List findAll(Context context, int sortField) throws SQLException { + return findAll(context, sortField, -1, -1); + } + + @Override + public List findAll(Context context, int sortField, int pageSize, int offset) throws SQLException { String sortColumn = null; MetadataField metadataFieldSort = null; switch (sortField) @@ -165,7 +170,7 @@ public class EPersonServiceImpl extends DSpaceObjectServiceImpl impleme default: metadataFieldSort = metadataFieldService.findByElement(context, "eperson", "lastname", null); } - return ePersonDAO.findAll(context, metadataFieldSort, sortColumn); + return ePersonDAO.findAll(context, metadataFieldSort, sortColumn, pageSize, offset); } @Override diff --git a/dspace-api/src/main/java/org/dspace/eperson/GroupServiceImpl.java b/dspace-api/src/main/java/org/dspace/eperson/GroupServiceImpl.java index 2a56b03600..5bd5858530 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/GroupServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/eperson/GroupServiceImpl.java @@ -278,14 +278,20 @@ public class GroupServiceImpl extends DSpaceObjectServiceImpl implements throw new UnsupportedOperationException("You can only find all groups sorted by name with this method"); } } - + @Override public List findAll(Context context, List metadataSortFields) throws SQLException + { + return findAll(context, metadataSortFields, -1, -1); + } + + @Override + public List findAll(Context context, List metadataSortFields, int pageSize, int offset) throws SQLException { if (CollectionUtils.isEmpty(metadataSortFields)) { - return groupDAO.findAll(context); + return groupDAO.findAll(context, pageSize, offset); } else { - return groupDAO.findAll(context, metadataSortFields); + return groupDAO.findAll(context, metadataSortFields, pageSize, offset); } } diff --git a/dspace-api/src/main/java/org/dspace/eperson/dao/EPersonDAO.java b/dspace-api/src/main/java/org/dspace/eperson/dao/EPersonDAO.java index e01f08017a..90f0877147 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/dao/EPersonDAO.java +++ b/dspace-api/src/main/java/org/dspace/eperson/dao/EPersonDAO.java @@ -42,7 +42,7 @@ public interface EPersonDAO extends DSpaceObjectDAO, DSpaceObjectLegacy public List findNotActiveSince(Context context, Date date) throws SQLException; - public List findAll(Context context, MetadataField metadataFieldSort, String sortColumn) throws SQLException; + public List findAll(Context context, MetadataField metadataFieldSort, String sortColumn, int pageSize, int offset) throws SQLException; public List findAllSubscribers(Context context) throws SQLException; diff --git a/dspace-api/src/main/java/org/dspace/eperson/dao/GroupDAO.java b/dspace-api/src/main/java/org/dspace/eperson/dao/GroupDAO.java index ac50863ecc..e079dbfe3d 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/dao/GroupDAO.java +++ b/dspace-api/src/main/java/org/dspace/eperson/dao/GroupDAO.java @@ -42,19 +42,27 @@ public interface GroupDAO extends DSpaceObjectDAO, DSpaceObjectLegacySupp * Find all groups ordered by the specified metadata fields ascending * @param context The DSpace context * @param sortMetadataFields The metadata fields to sort on + * @param pageSize + * how many results return + * @param offset + * the position of the first result to return * @return A list of all groups, ordered by metadata fields * @throws SQLException if database error */ - List findAll(Context context, List sortMetadataFields) throws SQLException; + List findAll(Context context, List metadataSortFields, int pageSize, int offset) throws SQLException; /** * Find all groups ordered by name ascending * @param context The DSpace context + * @param pageSize + * how many results return + * @param offset + * the position of the first result to return * @return A list of all groups, ordered by name * @throws SQLException if database error */ - List findAll(Context context) throws SQLException; - + List findAll(Context context, int pageSize, int offset) throws SQLException; + /** * Find all groups that the given ePerson belongs to * @param context The DSpace context diff --git a/dspace-api/src/main/java/org/dspace/eperson/dao/impl/EPersonDAOImpl.java b/dspace-api/src/main/java/org/dspace/eperson/dao/impl/EPersonDAOImpl.java index f03d128168..4e36fe0c8c 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/dao/impl/EPersonDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/eperson/dao/impl/EPersonDAOImpl.java @@ -83,7 +83,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO implements } @Override - public List findAll(Context context, MetadataField metadataSortField, String sortField) throws SQLException { + public List findAll(Context context, MetadataField metadataSortField, String sortField, int pageSize, int offset) throws SQLException { String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase(); List sortFields = ListUtils.EMPTY_LIST; @@ -92,7 +92,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO implements sortFields = Collections.singletonList(metadataSortField); } - Query query = getSearchQuery(context, queryString, null, ListUtils.EMPTY_LIST, sortFields, sortField); + Query query = getSearchQuery(context, queryString, null, ListUtils.EMPTY_LIST, sortFields, sortField, pageSize, offset); return list(query); } @@ -132,6 +132,10 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO implements } protected Query getSearchQuery(Context context, String queryString, String queryParam, List queryFields, List sortFields, String sortField) throws SQLException { + return getSearchQuery(context, queryString, queryParam, queryFields, sortFields, sortField, -1, -1); + } + + protected Query getSearchQuery(Context context, String queryString, String queryParam, List queryFields, List sortFields, String sortField, int pageSize, int offset) throws SQLException { StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append(queryString); @@ -150,6 +154,12 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO implements } Query query = createQuery(context, queryBuilder.toString()); + if (pageSize > 0) { + query.setMaxResults(pageSize); + } + if (offset > 0) { + query.setFirstResult(offset); + } if(StringUtils.isNotBlank(queryParam)) { query.setParameter("queryParam", "%"+queryParam.toLowerCase()+"%"); } diff --git a/dspace-api/src/main/java/org/dspace/eperson/dao/impl/GroupDAOImpl.java b/dspace-api/src/main/java/org/dspace/eperson/dao/impl/GroupDAOImpl.java index c239661bdd..147e5aa484 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/dao/impl/GroupDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/eperson/dao/impl/GroupDAOImpl.java @@ -54,7 +54,7 @@ public class GroupDAOImpl extends AbstractHibernateDSODAO implements Grou } @Override - public List findAll(Context context, List sortMetadataFields) throws SQLException + public List findAll(Context context, List sortMetadataFields, int pageSize, int offset) throws SQLException { StringBuilder queryBuilder = new StringBuilder(); String groupTableName = "g"; @@ -64,16 +64,33 @@ public class GroupDAOImpl extends AbstractHibernateDSODAO implements Grou addMetadataSortQuery(queryBuilder, sortMetadataFields, null); Query query = createQuery(context, queryBuilder.toString()); + if (pageSize > 0) { + query.setMaxResults(pageSize); + } + if (offset > 0) { + query.setFirstResult(offset); + } for (MetadataField sortField : sortMetadataFields) { query.setParameter(sortField.toString(), sortField.getID()); } return list(query); } +// @Override +// public List findAll(Context context) throws SQLException { +// return findAll() +// } + @Override - public List findAll(Context context) throws SQLException { + public List findAll(Context context, int pageSize, int offset) throws SQLException { Query query = createQuery(context, "SELECT g FROM Group g ORDER BY g.name ASC"); + if (pageSize > 0) { + query.setMaxResults(pageSize); + } + if (offset > 0) { + query.setFirstResult(offset); + } query.setCacheable(true); return list(query); diff --git a/dspace-api/src/main/java/org/dspace/eperson/service/EPersonService.java b/dspace-api/src/main/java/org/dspace/eperson/service/EPersonService.java index 25c95efdff..9bf7035153 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/service/EPersonService.java +++ b/dspace-api/src/main/java/org/dspace/eperson/service/EPersonService.java @@ -124,7 +124,7 @@ public interface EPersonService extends DSpaceObjectService, DSpaceObje throws SQLException; /** - * Find all the epeople that match a particular query + * @deprecated use the paginated method. Find all the epeople in a specific order *
    *
  • ID
  • *
  • LASTNAME
  • @@ -136,12 +136,37 @@ public interface EPersonService extends DSpaceObjectService, DSpaceObje * The relevant DSpace Context. * @param sortField * which field to sort EPersons by - * @return array of EPerson objects + * @return list of EPerson objects * @throws SQLException * An exception that provides information on a database access error or other errors. */ + @Deprecated public List findAll(Context context, int sortField) throws SQLException; + + /** + * Find all the epeople in a specific order + *
      + *
    • ID
    • + *
    • LASTNAME
    • + *
    • EMAIL
    • + *
    • NETID
    • + *
    + * + * @param context + * The relevant DSpace Context. + * @param sortField + * which field to sort EPersons by + * @param pageSize + * how many results return + * @param offset + * the position of the first result to return + * @return list of EPerson objects + * @throws SQLException + * An exception that provides information on a database access error or other errors. + */ + public List findAll(Context context, int sortField, int pageSize, int offset) + throws SQLException; /** * Create a new eperson diff --git a/dspace-api/src/main/java/org/dspace/eperson/service/GroupService.java b/dspace-api/src/main/java/org/dspace/eperson/service/GroupService.java index 25af68efa4..1d9ebea6ff 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/service/GroupService.java +++ b/dspace-api/src/main/java/org/dspace/eperson/service/GroupService.java @@ -188,13 +188,28 @@ public interface GroupService extends DSpaceObjectService, DSpaceObjectLe * The relevant DSpace Context. * @param metadataSortFields * metadata fields to sort by, leave empty to sort by Name + * @param pageSize + * how many results return + * @param offset + * the position of the first result to return + * @return List of all groups in the site + * @throws SQLException if error + */ + public List findAll(Context context, List metadataSortFields, int pageSize, int offset) throws SQLException; + + /** + * @deprecated Please use {@code findAll(Context context, List metadataFieldsSort, int pageSize, int offset)} instead + * + * @param context + * The relevant DSpace Context. + * @param metadataSortFields + * metadata fields to sort by, leave empty to sort by Name * * @return List of all groups in the site * @throws SQLException if error */ public List findAll(Context context, List metadataSortFields) throws SQLException; - /** * DEPRECATED: Please use {@code findAll(Context context, List metadataFieldsSort)} instead * @param context DSpace context diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/EPersonConverter.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/EPersonConverter.java new file mode 100644 index 0000000000..651c67f214 --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/EPersonConverter.java @@ -0,0 +1,63 @@ +/** + * 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.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.dspace.app.rest.model.EPersonGroupRest; +import org.dspace.app.rest.model.EPersonRest; +import org.dspace.eperson.EPerson; +import org.dspace.eperson.Group; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * This is the converter from/to the EPerson in the DSpace API data model and the + * REST data model + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +@Component +public class EPersonConverter extends DSpaceObjectConverter { + @Autowired(required = true) + private EPersonGroupConverter epersonGroupConverter; + + private static final Logger log = Logger.getLogger(EPersonConverter.class); + + @Override + public EPersonRest fromModel(EPerson obj) { + EPersonRest eperson = super.fromModel(obj); + eperson.setLastActive(obj.getLastActive()); + eperson.setNetid(obj.getNetid()); + eperson.setCanLogIn(obj.canLogIn()); + eperson.setRequireCertificate(obj.getRequireCertificate()); + eperson.setSelfRegistered(obj.getSelfRegistered()); + eperson.setEmail(obj.getEmail()); + List groups = new ArrayList(); + for (Group g : obj.getGroups()) { + groups.add(epersonGroupConverter.convert(g)); + } + eperson.setGroups(groups); + return eperson; + } + + @Override + public EPerson toModel(EPersonRest obj) { + // TODO Auto-generated method stub + return null; + } + + @Override + protected EPersonRest newInstance() { + return new EPersonRest(); + } + +} diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/EPersonGroupConverter.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/EPersonGroupConverter.java new file mode 100644 index 0000000000..371f376fab --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/converter/EPersonGroupConverter.java @@ -0,0 +1,54 @@ +/** + * 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.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.dspace.app.rest.model.EPersonGroupRest; +import org.dspace.eperson.Group; +import org.springframework.stereotype.Component; + +/** + * This is the converter from/to the EPerson Group in the DSpace API data model + * and the REST data model + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +@Component +public class EPersonGroupConverter extends DSpaceObjectConverter { + + private static final Logger log = Logger.getLogger(EPersonGroupConverter.class); + + @Override + public EPersonGroupRest fromModel(Group obj) { + EPersonGroupRest epersongroup = super.fromModel(obj); + epersongroup.setPermanent(obj.isPermanent()); + List groups = new ArrayList(); + for (Group g : obj.getMemberGroups()) { + groups.add(convert(g)); + } + epersongroup.setGroups(groups); + + return epersongroup; + } + + @Override + public Group toModel(EPersonGroupRest obj) { + // TODO Auto-generated method stub + return null; + } + + @Override + protected EPersonGroupRest newInstance() { + return new EPersonGroupRest(); + } + +} diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/EPersonGroupRest.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/EPersonGroupRest.java new file mode 100644 index 0000000000..6f23743a4e --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/EPersonGroupRest.java @@ -0,0 +1,68 @@ +/** + * 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.List; + +import org.dspace.app.rest.RestResourceController; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * The EPerson Group REST Resource + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +public class EPersonGroupRest extends DSpaceObjectRest { + public static final String NAME = "epersongroup"; + + private String name; + + private boolean permanent; + + // FIXME this should be annotated with @JsonIgnore but right now only simple + // rest resource can be embedded not list, see + // https://jira.duraspace.org/browse/DS-3483 + private List groups; + + @Override + public String getType() { + return NAME; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isPermanent() { + return permanent; + } + + public void setPermanent(boolean permanent) { + this.permanent = permanent; + } + + public List getGroups() { + return groups; + } + + public void setGroups(List groups) { + this.groups = groups; + } + + @Override + @JsonIgnore + 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/EPersonRest.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/EPersonRest.java new file mode 100644 index 0000000000..4aa86aa45b --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/EPersonRest.java @@ -0,0 +1,109 @@ +/** + * 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 java.util.List; + +import org.dspace.app.rest.RestResourceController; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * The EPerson REST Resource + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ +public class EPersonRest extends DSpaceObjectRest { + public static final String NAME = "eperson"; + + private String netid; + + private Date lastActive; + + private boolean canLogIn; + + private String email; + + private boolean requireCertificate = false; + + private boolean selfRegistered = false; + + // FIXME this should be annotated with @JsonIgnore but right now only simple + // rest resource can be embedded not list, see + // https://jira.duraspace.org/browse/DS-3483 + private List groups; + + @Override + public String getType() { + return NAME; + } + + public String getNetid() { + return netid; + } + + public void setNetid(String netid) { + this.netid = netid; + } + + public Date getLastActive() { + return lastActive; + } + + public void setLastActive(Date lastActive) { + this.lastActive = lastActive; + } + + public boolean isCanLogIn() { + return canLogIn; + } + + public void setCanLogIn(boolean canLogIn) { + this.canLogIn = canLogIn; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public boolean isRequireCertificate() { + return requireCertificate; + } + + public void setRequireCertificate(boolean requireCertificate) { + this.requireCertificate = requireCertificate; + } + + public boolean isSelfRegistered() { + return selfRegistered; + } + + public void setSelfRegistered(boolean selfRegistered) { + this.selfRegistered = selfRegistered; + } + + public List getGroups() { + return groups; + } + + public void setGroups(List groups) { + this.groups = groups; + } + + @Override + @JsonIgnore + 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/EPersonGroupResource.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/EPersonGroupResource.java new file mode 100644 index 0000000000..8b75d55cbd --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/EPersonGroupResource.java @@ -0,0 +1,25 @@ +/** + * 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.EPersonGroupRest; +import org.dspace.app.rest.utils.Utils; + +/** + * EPerson 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(EPersonGroupRest.NAME) +public class EPersonGroupResource extends DSpaceResource { + public EPersonGroupResource(EPersonGroupRest group, Utils utils, String... rels) { + super(group, utils, rels); + } +} diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/EPersonResource.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/EPersonResource.java new file mode 100644 index 0000000000..b86ffcf132 --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/model/hateoas/EPersonResource.java @@ -0,0 +1,25 @@ +/** + * 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.EPersonRest; +import org.dspace.app.rest.utils.Utils; + +/** + * EPerson 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(EPersonRest.NAME) +public class EPersonResource extends DSpaceResource { + public EPersonResource(EPersonRest eperson, Utils utils, String... rels) { + super(eperson, utils, rels); + } +} diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/EPersonGroupRestRepository.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/EPersonGroupRestRepository.java new file mode 100644 index 0000000000..d7b4d07fa1 --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/EPersonGroupRestRepository.java @@ -0,0 +1,79 @@ +/** + * 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 java.util.UUID; + +import org.dspace.app.rest.converter.EPersonGroupConverter; +import org.dspace.app.rest.model.EPersonGroupRest; +import org.dspace.app.rest.model.hateoas.EPersonGroupResource; +import org.dspace.core.Context; +import org.dspace.eperson.Group; +import org.dspace.eperson.factory.EPersonServiceFactory; +import org.dspace.eperson.service.GroupService; +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 EPerson Rest object + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ + +@Component(EPersonGroupRest.NAME) +public class EPersonGroupRestRepository extends DSpaceRestRepository { + GroupService gs = EPersonServiceFactory.getInstance().getGroupService(); + + @Autowired + EPersonGroupConverter converter; + + @Override + public EPersonGroupRest findOne(Context context, UUID id) { + Group group = null; + try { + group = gs.find(context, id); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + if (group == null) { + return null; + } + return converter.fromModel(group); + } + + @Override + public Page findAll(Context context, Pageable pageable) { + List groups = null; + int total = 0; + try { + total = gs.countTotal(context); + groups = gs.findAll(context, null, pageable.getPageSize(), pageable.getOffset()); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + Page page = new PageImpl(groups, pageable, total).map(converter); + return page; + } + + @Override + public Class getDomainClass() { + return EPersonGroupRest.class; + } + + @Override + public EPersonGroupResource wrapResource(EPersonGroupRest eperson, String... rels) { + return new EPersonGroupResource(eperson, utils, rels); + } + +} \ No newline at end of file diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/EPersonRestRepository.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/EPersonRestRepository.java new file mode 100644 index 0000000000..fa377692ac --- /dev/null +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/EPersonRestRepository.java @@ -0,0 +1,79 @@ +/** + * 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 java.util.UUID; + +import org.dspace.app.rest.converter.EPersonConverter; +import org.dspace.app.rest.model.EPersonRest; +import org.dspace.app.rest.model.hateoas.EPersonResource; +import org.dspace.core.Context; +import org.dspace.eperson.EPerson; +import org.dspace.eperson.factory.EPersonServiceFactory; +import org.dspace.eperson.service.EPersonService; +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 EPerson Rest object + * + * @author Andrea Bollini (andrea.bollini at 4science.it) + * + */ + +@Component(EPersonRest.NAME) +public class EPersonRestRepository extends DSpaceRestRepository { + EPersonService es = EPersonServiceFactory.getInstance().getEPersonService(); + + @Autowired + EPersonConverter converter; + + @Override + public EPersonRest findOne(Context context, UUID id) { + EPerson eperson = null; + try { + eperson = es.find(context, id); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + if (eperson == null) { + return null; + } + return converter.fromModel(eperson); + } + + @Override + public Page findAll(Context context, Pageable pageable) { + List epersons = null; + int total = 0; + try { + total = es.countTotal(context); + epersons = es.findAll(context, EPerson.ID, pageable.getPageSize(), pageable.getOffset()); + } catch (SQLException e) { + throw new RuntimeException(e.getMessage(), e); + } + Page page = new PageImpl(epersons, pageable, total).map(converter); + return page; + } + + @Override + public Class getDomainClass() { + return EPersonRest.class; + } + + @Override + public EPersonResource wrapResource(EPersonRest eperson, String... rels) { + return new EPersonResource(eperson, utils, rels); + } + +} \ No newline at end of file