From 1e6fc73f7dde50c9d05dcb4556c026ce71db6025 Mon Sep 17 00:00:00 2001 From: Jose Ignacio Recuerda Cambil Date: Thu, 11 Oct 2018 16:56:30 +0200 Subject: [PATCH] TSK-715 - Merge WorkbasketAccessItem entities and remove the extended one --- .../pro/taskana/WorkbasketAccessItem.java | 7 + .../taskana/WorkbasketAccessItemExtended.java | 16 -- .../taskana/WorkbasketAccessItemQuery.java | 134 ++++++--- .../java/pro/taskana/WorkbasketService.java | 20 -- .../WorkbasketAccessItemExtendedImpl.java | 42 --- .../impl/WorkbasketAccessItemImpl.java | 12 + .../impl/WorkbasketAccessItemQueryImpl.java | 272 ++++++++++++++---- .../taskana/impl/WorkbasketServiceImpl.java | 15 - .../pro/taskana/mappings/QueryMapper.java | 63 +--- .../mappings/WorkbasketAccessMapper.java | 5 +- .../QueryWorkbasketAccessItemsAccTest.java | 35 +++ ...yWorkbasketAccessItemsExtendedAccTest.java | 98 ------- ...WorkbasketControllerRestDocumentation.java | 6 +- ...WorkbasketAccessItemControllerIntTest.java | 77 ++--- .../rest/WorkbasketAccessItemController.java | 32 +-- .../WorkbasketAccesItemExtendedResource.java | 23 -- .../WorkbasketAccessItemResource.java | 11 + .../WorkbasketAccessItemAssembler.java | 36 +++ ...WorkbasketAccessItemExtendedAssembler.java | 71 ----- .../WorkbasketAccessItemsAssembler.java | 30 ++ .../WorkbasketAccessItemAssemblerTest.java | 4 + ...basketAccessItemExtendedAssemblerTest.java | 80 ------ 22 files changed, 511 insertions(+), 578 deletions(-) delete mode 100644 lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemExtended.java delete mode 100644 lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemExtendedImpl.java delete mode 100644 lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsExtendedAccTest.java delete mode 100644 rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccesItemExtendedResource.java delete mode 100644 rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssembler.java create mode 100644 rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemsAssembler.java delete mode 100644 rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssemblerTest.java diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java index 91e68be6e..9800f27e1 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java +++ b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java @@ -21,6 +21,13 @@ public interface WorkbasketAccessItem { */ String getWorkbasketId(); + /** + * Returns the Key of the referenced workbasket. + * + * @return the workbasket Key + */ + String getWorkbasketKey(); + /** * Returns the group id or user id for which this WorkbasketAccessItem controls access permissions. * diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemExtended.java b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemExtended.java deleted file mode 100644 index aac356780..000000000 --- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemExtended.java +++ /dev/null @@ -1,16 +0,0 @@ -package pro.taskana; - -/** - * Interface for WorkbasketAccessItemExtended. This interface is used to control access of users to workbaskets. - * - * @author mmr - */ -public interface WorkbasketAccessItemExtended extends WorkbasketAccessItem { - - /** - * Returns the Key of the referenced workbasket. - * - * @return the workbasket key - */ - String getWorkbasketKey(); -} diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java index 1c14ae17d..669e6c2fd 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java +++ b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java @@ -3,53 +3,103 @@ package pro.taskana; /** * WorkbasketAccessItemQuery for generating dynamic SQL. */ -public interface WorkbasketAccessItemQuery - extends AbstractWorkbasketAccessItemQuery { +public interface WorkbasketAccessItemQuery extends BaseQuery { /** - * Extended version of {@link WorkbasketAccessItemQuery}. + * Add your unique entry id to your query as filter. + * + * @param ids + * the unique entry IDs + * @return the query */ - interface Extended extends AbstractWorkbasketAccessItemQuery { + WorkbasketAccessItemQuery idIn(String... ids); - /** - * Add your unique entry workbasket key to your query as filter. - * - * @param keys - * the unique entry Keys - * @return the query - */ - Extended workbasketKeyIn(String... keys); + /** + * Add your workbasket id to your query. + * + * @param workbasketId + * the workbasket Id + * @return the query + */ + WorkbasketAccessItemQuery workbasketIdIn(String... workbasketId); - /** - * Sort the query result by workbasket key. - * - * @param sortDirection - * Determines whether the result is sorted in ascending or descending order. If sortDirection is null, - * the result is sorted in ascending order - * @return the query - */ - Extended orderByWorkbasketKey(SortDirection sortDirection); + /** + * Add your unique entry workbasket key to your query as filter. + * + * @param keys + * the unique entry Keys + * @return the query + */ + WorkbasketAccessItemQuery workbasketKeyIn(String... keys); - /** - * Add keys to your query. The keys are compared case-insensitively to the keys of access items with the SQL LIKE - * operator. You may add a wildcard like '%' to search generically. If you specify multiple keys they are connected - * with an OR operator, this is, the query searches access items workbaskets whose keys are like key1 or like key2, etc. - * - * @param key - * the keys as Strings - * @return the query - */ - Extended workbasketKeyLike(String... key); + /** + * Add keys to your query. The keys are compared case-insensitively to the keys of access items with the SQL LIKE + * operator. You may add a wildcard like '%' to search generically. If you specify multiple keys they are connected + * with an OR operator, this is, the query searches access items workbaskets whose keys are like key1 or like key2, etc. + * + * @param key + * the keys as Strings + * @return the query + */ + WorkbasketAccessItemQuery workbasketKeyLike(String... key); - /** - * Add keys to your query. The keys are compared case-insensitively to the keys of access items with the SQL LIKE - * operator. You may add a wildcard like '%' to search generically. If you specify multiple keys they are connected - * with an OR operator, this is, the query searches access items whose ids are like id1 or like id2, etc. - * - * @param ids - * the ids as Strings - * @return the query - */ - Extended accessIdLike(String... ids); - } + /** + * Add your accessIds to your query. + * + * @param accessId + * as access Ids + * @return the query + */ + WorkbasketAccessItemQuery accessIdIn(String... accessId); + + /** + * Add keys to your query. The keys are compared case-insensitively to the keys of access items with the SQL LIKE + * operator. You may add a wildcard like '%' to search generically. If you specify multiple keys they are connected + * with an OR operator, this is, the query searches access items whose ids are like id1 or like id2, etc. + * + * @param ids + * the ids as Strings + * @return the query + */ + WorkbasketAccessItemQuery accessIdLike(String... ids); + + /** + * Sort the query result by workbasket id. + * + * @param sortDirection + * Determines whether the result is sorted in ascending or descending order. If sortDirection is null, + * the result is sorted in ascending order + * @return the query + */ + WorkbasketAccessItemQuery orderByWorkbasketId(SortDirection sortDirection); + + /** + * Sort the query result by workbasket key. + * + * @param sortDirection + * Determines whether the result is sorted in ascending or descending order. If sortDirection is null, + * the result is sorted in ascending order + * @return the query + */ + WorkbasketAccessItemQuery orderByWorkbasketKey(SortDirection sortDirection); + + /** + * Sort the query result by access Id. + * + * @param sortDirection + * Determines whether the result is sorted in ascending or descending order. If sortDirection is null, + * the result is sorted in ascending order + * @return the query + */ + WorkbasketAccessItemQuery orderByAccessId(SortDirection sortDirection); + + /** + * Sort the query result by Id. + * + * @param sortDirection + * Determines whether the result is sorted in ascending or descending order. If sortDirection is null, + * the result is sorted in ascending order + * @return the query + */ + WorkbasketAccessItemQuery orderById(SortDirection sortDirection); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java index 913685d3e..fface7d41 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java @@ -87,17 +87,6 @@ public interface WorkbasketService { */ WorkbasketAccessItem newWorkbasketAccessItem(String workbasketId, String accessId); - /** - * Returns a new WorkbasketAccessItemExtended which is not persisted. - * - * @param workbasketId - * the workbasket id used to identify the referenced workbasket - * @param accessId - * the group id or user id for which access is controlled - * @return new WorkbasketAccessItem - */ - WorkbasketAccessItemExtended newWorkbasketAccessItemExtended(String workbasketId, String accessId); - /** * Create and persist a new {@link WorkbasketAccessItem} with a WorkbasketId, an accessId and permissions. * @@ -215,15 +204,6 @@ public interface WorkbasketService { */ WorkbasketAccessItemQuery createWorkbasketAccessItemQuery() throws NotAuthorizedException; - /** - * This method provides a query builder for querying the database. - * - * @return a {@link WorkbasketAccessItemQuery.Extended} - * @throws NotAuthorizedException - * if the current user is not member of role BUSINESS_ADMIN or ADMIN - */ - WorkbasketAccessItemQuery.Extended createWorkbasketAccessItemExtendedQuery() throws NotAuthorizedException; - /** * Returns a new workbasket which is not persisted. * diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemExtendedImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemExtendedImpl.java deleted file mode 100644 index c7ba08e50..000000000 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemExtendedImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package pro.taskana.impl; - -import java.util.Objects; - -import pro.taskana.WorkbasketAccessItemExtended; - -/** - * WorkbasketAccessItemExtendedImpl Entity. - */ -public class WorkbasketAccessItemExtendedImpl extends WorkbasketAccessItemImpl implements WorkbasketAccessItemExtended { - - private String workbasketKey; - - @Override - public String getWorkbasketKey() { - return workbasketKey; - } - - public void setWorkbasketKey(String workbasketKey) { - this.workbasketKey = workbasketKey; - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), workbasketKey); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof WorkbasketAccessItemExtendedImpl)) { - return false; - } - if (!super.equals(o)) { - return false; - } - WorkbasketAccessItemExtendedImpl that = (WorkbasketAccessItemExtendedImpl) o; - return Objects.equals(workbasketKey, that.workbasketKey); - } -} diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java index fca8f2772..d6a0c7413 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java @@ -10,6 +10,7 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem { private String id; private String workbasketId; + private String workbasketKey; private String accessId; private String accessName; private boolean permRead; @@ -60,6 +61,15 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem { this.workbasketId = workbasketId; } + @Override + public String getWorkbasketKey() { + return workbasketKey; + } + + public void setWorkbasketKey(String workbasketKey) { + this.workbasketKey = workbasketKey; + } + /* * (non-Javadoc) * @see pro.taskana.impl.WorkbasketAccessItem#getAccessId() @@ -408,6 +418,8 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem { builder.append(id); builder.append(", workbasketId="); builder.append(workbasketId); + builder.append(", workbasketKey="); + builder.append(workbasketKey); builder.append(", accessId="); builder.append(accessId); builder.append(", permRead="); diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java index 3945fb769..bfa77eb53 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java @@ -1,108 +1,258 @@ package pro.taskana.impl; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.ibatis.exceptions.PersistenceException; +import org.apache.ibatis.session.RowBounds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import pro.taskana.TaskanaEngine; import pro.taskana.WorkbasketAccessItem; -import pro.taskana.WorkbasketAccessItemExtended; import pro.taskana.WorkbasketAccessItemQuery; +import pro.taskana.exceptions.TaskanaRuntimeException; +import pro.taskana.impl.util.LoggerUtils; /** * WorkbasketAccessItemQueryImpl for generating dynamic SQL. */ -public class WorkbasketAccessItemQueryImpl - extends AbstractWorkbasketAccessItemQueryImpl - implements WorkbasketAccessItemQuery { +public class WorkbasketAccessItemQueryImpl implements WorkbasketAccessItemQuery { private static final String LINK_TO_MAPPER = "pro.taskana.mappings.QueryMapper.queryWorkbasketAccessItems"; - private static final String LINK_TO_VALUE_MAPPER = "pro.taskana.mappings.QueryMapper.queryWorkbasketAccessItemColumnValues"; + private static final String LINK_TO_COUNTER = "pro.taskana.mappings.QueryMapper.countQueryWorkbasketAccessItems"; + private static final String LINK_TO_VALUEMAPPER = "pro.taskana.mappings.QueryMapper.queryWorkbasketAccessItemColumnValues"; + private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketQueryImpl.class); + private String columnName; + private String[] accessIdIn; + private String[] accessIdLike; + private String[] workbasketIdIn; + private String[] workbasketKeyIn; + private String[] workbasketKeyLike; + private String[] idIn; + + private TaskanaEngineImpl taskanaEngine; + private List orderBy; + private List orderColumns; WorkbasketAccessItemQueryImpl(TaskanaEngine taskanaEngine) { - super(taskanaEngine); + this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine; + orderBy = new ArrayList<>(); + orderColumns = new ArrayList<>(); } @Override - WorkbasketAccessItemQuery _this() { + public WorkbasketAccessItemQuery idIn(String... ids) { + this.idIn = ids; return this; } @Override - String getLinkToMapper() { - return LINK_TO_MAPPER; + public WorkbasketAccessItemQuery workbasketIdIn(String... id) { + this.workbasketIdIn = id; + return this; } @Override - String getLinkToValueMapper() { - return LINK_TO_VALUE_MAPPER; + public WorkbasketAccessItemQuery workbasketKeyIn(String... keys) { + this.workbasketKeyIn = keys; + return this; } - /** - * Extended version of {@link WorkbasketAccessItemQueryImpl}. - */ - public static class Extended - extends AbstractWorkbasketAccessItemQueryImpl - implements WorkbasketAccessItemQuery.Extended { + @Override + public WorkbasketAccessItemQuery workbasketKeyLike(String... key) { + this.workbasketKeyLike = toUpperCopy(key); + return this; + } - private static final String LINK_TO_MAPPER_EXTENDED = "pro.taskana.mappings.QueryMapper.queryWorkbasketAccessItemsExtended"; - private static final String LINK_TO_VALUE_MAPPER_EXTENDED = "pro.taskana.mappings.QueryMapper.queryWorkbasketAccessItemExtendedColumnValues"; + @Override + public WorkbasketAccessItemQuery accessIdIn(String... accessId) { + this.accessIdIn = accessId; + WorkbasketQueryImpl.lowercaseAccessIds(this.accessIdIn); + return this; + } - private String[] workbasketKeyIn; - private String[] workbasketKeyLike; - private String[] accessIdLike; + @Override + public WorkbasketAccessItemQuery accessIdLike(String... ids) { + this.accessIdLike = toUpperCopy(ids); + return this; + } - Extended(TaskanaEngine taskanaEngine) { - super(taskanaEngine); + @Override + public WorkbasketAccessItemQuery orderById(SortDirection sortDirection) { + return addOrderCriteria("ID", sortDirection); + } + + @Override + public WorkbasketAccessItemQuery orderByWorkbasketId(SortDirection sortDirection) { + return addOrderCriteria("WORKBASKET_ID", sortDirection); + } + + @Override + public WorkbasketAccessItemQuery orderByWorkbasketKey(SortDirection sortDirection) { + return addOrderCriteria("WB.KEY", sortDirection); + } + + @Override + public WorkbasketAccessItemQuery orderByAccessId(SortDirection sortDirection) { + return addOrderCriteria("ACCESS_ID", sortDirection); + } + + @Override + public List list() { + LOGGER.debug("entry to list(), this = {}", this); + List result = new ArrayList<>(); + try { + taskanaEngine.openConnection(); + List foundAccessItms = taskanaEngine.getSqlSession() + .selectList(LINK_TO_MAPPER, this); + result.addAll(foundAccessItms); + return result; + } finally { + taskanaEngine.returnConnection(); + if (LOGGER.isDebugEnabled()) { + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects, + LoggerUtils.listToString(result)); + } } + } - @Override - WorkbasketAccessItemQuery.Extended _this() { - return this; + @Override + public List listValues(String columnName, SortDirection sortDirection) { + LOGGER.debug("Entry to listValues(dbColumnName={}) this = {}", columnName, this); + List result = null; + try { + taskanaEngine.openConnection(); + this.columnName = columnName; + this.orderBy.clear(); + this.addOrderCriteria(columnName, sortDirection); + result = taskanaEngine.getSqlSession().selectList(LINK_TO_VALUEMAPPER, this); + return result; + } finally { + taskanaEngine.returnConnection(); + if (LOGGER.isDebugEnabled()) { + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("Exit from listValues. Returning {} resulting Objects: {} ", numberOfResultObjects, + LoggerUtils.listToString(result)); + } } + } - @Override - String getLinkToMapper() { - return LINK_TO_MAPPER_EXTENDED; + @Override + public List list(int offset, int limit) { + LOGGER.debug("entry to list(offset = {}, limit = {}), this = {}", offset, limit, this); + List result = new ArrayList<>(); + try { + taskanaEngine.openConnection(); + RowBounds rowBounds = new RowBounds(offset, limit); + List foundAccessItms = taskanaEngine.getSqlSession() + .selectList(LINK_TO_MAPPER, this, rowBounds); + result.addAll(foundAccessItms); + return result; + } catch (PersistenceException e) { + if (e.getMessage().contains("ERRORCODE=-4470")) { + TaskanaRuntimeException ex = new TaskanaRuntimeException( + "The offset beginning was set over the amount of result-rows.", e.getCause()); + ex.setStackTrace(e.getStackTrace()); + throw ex; + } + throw e; + } finally { + taskanaEngine.returnConnection(); + if (LOGGER.isDebugEnabled()) { + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects, + LoggerUtils.listToString(result)); + } } + } - @Override - String getLinkToValueMapper() { - return LINK_TO_VALUE_MAPPER_EXTENDED; + @Override + public WorkbasketAccessItem single() { + LOGGER.debug("entry to single(), this = {}", this); + WorkbasketAccessItem accessItm = null; + try { + taskanaEngine.openConnection(); + accessItm = taskanaEngine.getSqlSession().selectOne(LINK_TO_MAPPER, this); + return accessItm; + } finally { + taskanaEngine.returnConnection(); + LOGGER.debug("exit from single(). Returning result {} ", accessItm); } + } - @Override - public WorkbasketAccessItemQuery.Extended workbasketKeyIn(String... keys) { - this.workbasketKeyIn = keys; - return this; + @Override + public long count() { + LOGGER.debug("entry to count(), this = {}", this); + Long rowCount = null; + try { + taskanaEngine.openConnection(); + rowCount = taskanaEngine.getSqlSession().selectOne(LINK_TO_COUNTER, this); + return (rowCount == null) ? 0L : rowCount; + } finally { + taskanaEngine.returnConnection(); + LOGGER.debug("exit from count(). Returning result {} ", rowCount); } + } - @Override - public WorkbasketAccessItemQuery.Extended orderByWorkbasketKey(SortDirection sortDirection) { - return addOrderCriteria("WB.KEY", sortDirection); - } + private WorkbasketAccessItemQuery addOrderCriteria(String colName, SortDirection sortDirection) { + String orderByDirection = " " + (sortDirection == null ? SortDirection.ASCENDING.toString() : sortDirection.toString()); + orderBy.add(colName + orderByDirection); + orderColumns.add(colName); + return this; + } - @Override - public WorkbasketAccessItemQuery.Extended workbasketKeyLike(String... key) { - this.workbasketKeyLike = toUpperCopy(key); - return this; - } + public String[] getIdIn() { + return this.idIn; + } - @Override - public WorkbasketAccessItemQuery.Extended accessIdLike(String... ids) { - this.accessIdLike = toUpperCopy(ids); - return this; - } + public String[] getAccessIdIn() { + return accessIdIn; + } - public String[] getWorkbasketKeyIn() { - return workbasketKeyIn; - } + public String[] getAccessIdLike() { + return accessIdLike; + } - public String[] getAccessIdLike() { - return accessIdLike; - } + public String[] getWorkbasketIdIn() { + return workbasketIdIn; + } - public String[] getWorkbasketKeyLike() { - return workbasketKeyLike; - } + public List getOrderBy() { + return orderBy; + } + public List getOrderColumns() { + return orderColumns; + } + + public String getColumnName() { + return columnName; + } + + public String[] getWorkbasketKeyIn() { + return workbasketKeyIn; + } + + public String[] getWorkbasketKeyLike() { + return workbasketKeyLike; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("WorkbasketAccessItemQueryImpl [idIn="); + builder.append(Arrays.toString(idIn)); + builder.append(", accessIdIn="); + builder.append(Arrays.toString(accessIdIn)); + builder.append(", workbasketIdIn="); + builder.append(Arrays.toString(workbasketIdIn)); + builder.append(", orderBy="); + builder.append(orderBy); + builder.append("]"); + return builder.toString(); } } - diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java index 15cc9f325..7ab4b0f6e 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java @@ -14,7 +14,6 @@ import pro.taskana.TaskanaEngine; import pro.taskana.TaskanaRole; import pro.taskana.Workbasket; import pro.taskana.WorkbasketAccessItem; -import pro.taskana.WorkbasketAccessItemExtended; import pro.taskana.WorkbasketAccessItemQuery; import pro.taskana.WorkbasketPermission; import pro.taskana.WorkbasketQuery; @@ -159,14 +158,6 @@ public class WorkbasketServiceImpl implements WorkbasketService { return accessItem; } - @Override - public WorkbasketAccessItemExtended newWorkbasketAccessItemExtended(String workbasketId, String accessId) { - WorkbasketAccessItemExtendedImpl accessItem = new WorkbasketAccessItemExtendedImpl(); - accessItem.setWorkbasketId(workbasketId); - accessItem.setAccessId(accessId); - return accessItem; - } - @Override public WorkbasketAccessItem createWorkbasketAccessItem(WorkbasketAccessItem workbasketAccessItem) throws InvalidArgumentException, NotAuthorizedException, WorkbasketNotFoundException { @@ -803,10 +794,4 @@ public class WorkbasketServiceImpl implements WorkbasketService { return new WorkbasketAccessItemQueryImpl(this.taskanaEngine); } - @Override - public WorkbasketAccessItemQuery.Extended createWorkbasketAccessItemExtendedQuery() throws NotAuthorizedException { - taskanaEngine.checkRoleMembership(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN); - return new WorkbasketAccessItemQueryImpl.Extended(this.taskanaEngine); - } - } diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java index fe6e7c6e1..f8bcbe3f0 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java @@ -13,7 +13,6 @@ import pro.taskana.impl.ClassificationSummaryImpl; import pro.taskana.impl.ObjectReferenceQueryImpl; import pro.taskana.impl.TaskQueryImpl; import pro.taskana.impl.TaskSummaryImpl; -import pro.taskana.impl.WorkbasketAccessItemExtendedImpl; import pro.taskana.impl.WorkbasketAccessItemImpl; import pro.taskana.impl.WorkbasketQueryImpl; import pro.taskana.impl.WorkbasketSummaryImpl; @@ -554,55 +553,17 @@ public interface QueryMapper { @Result(property = "markedForDeletion", column = "MARKED_FOR_DELETION")}) List queryWorkbasketSummaries(WorkbasketQueryImpl workbasketQuery); - @Select("") - @Results({ - @Result(property = "id", column = "ID"), - @Result(property = "workbasketId", column = "WORKBASKET_ID"), - @Result(property = "accessId", column = "ACCESS_ID"), - @Result(property = "accessName", column = "ACCESS_NAME"), - @Result(property = "permRead", column = "PERM_READ"), - @Result(property = "permOpen", column = "PERM_OPEN"), - @Result(property = "permAppend", column = "PERM_APPEND"), - @Result(property = "permTransfer", column = "PERM_TRANSFER"), - @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"), - @Result(property = "permCustom1", column = "PERM_CUSTOM_1"), - @Result(property = "permCustom2", column = "PERM_CUSTOM_2"), - @Result(property = "permCustom3", column = "PERM_CUSTOM_3"), - @Result(property = "permCustom4", column = "PERM_CUSTOM_4"), - @Result(property = "permCustom5", column = "PERM_CUSTOM_5"), - @Result(property = "permCustom6", column = "PERM_CUSTOM_6"), - @Result(property = "permCustom7", column = "PERM_CUSTOM_7"), - @Result(property = "permCustom8", column = "PERM_CUSTOM_8"), - @Result(property = "permCustom9", column = "PERM_CUSTOM_9"), - @Result(property = "permCustom10", column = "PERM_CUSTOM_10"), - @Result(property = "permCustom11", column = "PERM_CUSTOM_11"), - @Result(property = "permCustom12", column = "PERM_CUSTOM_12")}) - List queryWorkbasketAccessItems(WorkbasketAccessItemQuery accessItemQuery); - @Select("") List queryWorkbasketAccessItemColumnValues(WorkbasketAccessItemQuery accessItemQuery); - @Select("") - List queryWorkbasketAccessItemExtendedColumnValues( - WorkbasketAccessItemQuery.Extended accessItemExtendedQuery); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java b/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java index 61327f563..1e740b75d 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java @@ -46,13 +46,14 @@ public interface WorkbasketAccessMapper { @Result(property = "permCustom12", column = "PERM_CUSTOM_12")}) WorkbasketAccessItemImpl findById(@Param("id") String id); - @Select("") @Results(value = { @Result(property = "id", column = "ID"), @Result(property = "workbasketId", column = "WORKBASKET_ID"), + @Result(property = "workbasketKey", column = "KEY"), @Result(property = "accessId", column = "ACCESS_ID"), @Result(property = "accessName", column = "ACCESS_NAME"), @Result(property = "permRead", column = "PERM_READ"), diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java index aaf9e883b..e19a11a9a 100644 --- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java @@ -47,6 +47,11 @@ public class QueryWorkbasketAccessItemsAccTest extends AbstractAccTest { assertNotNull(columnValueList); assertEquals(9, columnValueList.size()); + columnValueList = workbasketService.createWorkbasketAccessItemQuery() + .listValues("WB.KEY", null); + assertNotNull(columnValueList); + assertEquals(24, columnValueList.size()); + long countEntries = workbasketService.createWorkbasketAccessItemQuery().count(); assertTrue(columnValueList.size() < countEntries); // DISTINCT } @@ -108,6 +113,36 @@ public class QueryWorkbasketAccessItemsAccTest extends AbstractAccTest { Assert.assertEquals(3L, results.size()); } + @WithAccessId( + userName = "dummy", + groupNames = {"businessadmin"}) + @Test + public void testQueryAccessItemsForAccessIdsWorkbasketKeyLike() + throws NotAuthorizedException { + WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); + List results = workbasketService.createWorkbasketAccessItemQuery() + .workbasketKeyLike("GPK_KSC%") + .list(); + Assert.assertEquals(4L, results.size()); + } + + @WithAccessId( + userName = "dummy", + groupNames = {"businessadmin"}) + @Test + public void testQueryAccessItemsForAccessIdsWorkbasketKeyLikeAndOrderAsc() + throws NotAuthorizedException { + WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); + List results = workbasketService.createWorkbasketAccessItemQuery() + .workbasketKeyLike("GPK_KSC%") + .orderByWorkbasketKey(SortDirection.ASCENDING) + .list(); + Assert.assertEquals(4L, results.size()); + Assert.assertEquals("GPK_KSC", results.get(0).getWorkbasketKey()); + Assert.assertEquals("GPK_KSC_2", results.get(3).getWorkbasketKey()); + + } + @WithAccessId( userName = "dummy", groupNames = {"businessadmin"}) diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsExtendedAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsExtendedAccTest.java deleted file mode 100644 index f9b04904b..000000000 --- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsExtendedAccTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package acceptance.workbasket; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import java.util.List; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -import acceptance.AbstractAccTest; -import pro.taskana.BaseQuery.SortDirection; -import pro.taskana.WorkbasketAccessItemExtended; -import pro.taskana.WorkbasketService; -import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.security.JAASRunner; -import pro.taskana.security.WithAccessId; - -/** - * Acceptance test for all "query access items extended for workbaskets" scenarios. - */ -@RunWith(JAASRunner.class) -public class QueryWorkbasketAccessItemsExtendedAccTest extends AbstractAccTest { - - public QueryWorkbasketAccessItemsExtendedAccTest() { - super(); - } - - @WithAccessId( - userName = "dummy", - groupNames = {"businessadmin"}) - @Test - public void testQueryWorkbasketAccessItemExtendedValuesForColumnName() throws NotAuthorizedException { - WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); - List columnValueList = workbasketService.createWorkbasketAccessItemExtendedQuery() - .listValues("WORKBASKET_ID", null); - assertNotNull(columnValueList); - assertEquals(24, columnValueList.size()); - - columnValueList = workbasketService.createWorkbasketAccessItemExtendedQuery() - .listValues("ACCESS_ID", null); - assertNotNull(columnValueList); - assertEquals(9, columnValueList.size()); - - columnValueList = workbasketService.createWorkbasketAccessItemExtendedQuery() - .listValues("WB.KEY", null); - assertNotNull(columnValueList); - assertEquals(24, columnValueList.size()); - - long countEntries = workbasketService.createWorkbasketAccessItemExtendedQuery().count(); - assertTrue(columnValueList.size() < countEntries); // DISTINCT - } - - @WithAccessId( - userName = "dummy", - groupNames = {"businessadmin"}) - @Test - public void testQueryAccessItemsForAccessIds() - throws NotAuthorizedException { - WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); - List results = workbasketService.createWorkbasketAccessItemExtendedQuery() - .accessIdIn("user_1_1", "group_1") - .list(); - Assert.assertEquals(8L, results.size()); - } - - @WithAccessId( - userName = "dummy", - groupNames = {"businessadmin"}) - @Test - public void testQueryAccessItemsForAccessIdsWorkbasketKeyLike() - throws NotAuthorizedException { - WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); - List results = workbasketService.createWorkbasketAccessItemExtendedQuery() - .workbasketKeyLike("GPK_KSC%") - .list(); - Assert.assertEquals(4L, results.size()); - } - - @WithAccessId( - userName = "dummy", - groupNames = {"businessadmin"}) - @Test - public void testQueryAccessItemsForAccessIdsWorkbasketKeyLikeAndOrderAsc() - throws NotAuthorizedException { - WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); - List results = workbasketService.createWorkbasketAccessItemExtendedQuery() - .workbasketKeyLike("GPK_KSC%") - .orderByWorkbasketKey(SortDirection.ASCENDING) - .list(); - Assert.assertEquals(4L, results.size()); - Assert.assertEquals("GPK_KSC", results.get(0).getWorkbasketKey()); - Assert.assertEquals("GPK_KSC_2", results.get(3).getWorkbasketKey()); - - } - -} diff --git a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java index 2d1dc8df0..1954c508d 100644 --- a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java +++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java @@ -107,6 +107,7 @@ public class WorkbasketControllerRestDocumentation { accessItemFieldDescriptionsMap.put("_embedded.accessItems.accessItemId", "Unique ID"); accessItemFieldDescriptionsMap.put("_embedded.accessItems.workbasketId", "The workbasket"); + accessItemFieldDescriptionsMap.put("_embedded.accessItems.workbasketKey", "The workbasket key"); accessItemFieldDescriptionsMap.put("_embedded.accessItems.accessId", "The access id, this ACL entry refers to. This could be either a userid or a full qualified group id (both lower case)"); accessItemFieldDescriptionsMap.put("_embedded.accessItems.accessName", ""); @@ -115,7 +116,7 @@ public class WorkbasketControllerRestDocumentation { accessItemFieldDescriptionsMap.put("_embedded.accessItems.permOpen", "The permission to view the content (the tasks) of a workbasket"); accessItemFieldDescriptionsMap.put("_embedded.accessItems.permAppend", - "The permission to add tasks to the workbasket (required for creation and tranferring of tasks)"); + "The permission to add tasks to the workbasket (required for creation and transferring of tasks)"); accessItemFieldDescriptionsMap.put("_embedded.accessItems.permTransfer", "The permission to transfer tasks (out of the current workbasket)"); accessItemFieldDescriptionsMap.put("_embedded.accessItems.permDistribute", @@ -199,11 +200,12 @@ public class WorkbasketControllerRestDocumentation { }; accessItemFieldDescriptors = new FieldDescriptor[] { - fieldWithPath("_embedded.accessItems[].accessItemId").description( accessItemFieldDescriptionsMap.get("_embedded.accessItems.accessItemId")), fieldWithPath("_embedded.accessItems[].workbasketId").description( accessItemFieldDescriptionsMap.get("_embedded.accessItems.workbasketId")), + fieldWithPath("_embedded.accessItems[].workbasketKey").description( + accessItemFieldDescriptionsMap.get("_embedded.accessItems.workbasketKey")), fieldWithPath("_embedded.accessItems[].accessId").description( accessItemFieldDescriptionsMap.get("_embedded.accessItems.accessId")), fieldWithPath("_embedded.accessItems[].accessName").description( diff --git a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java index 67ecb198c..1e006af74 100644 --- a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java +++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java @@ -1,7 +1,13 @@ package pro.taskana.rest; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.Collections; + import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; @@ -13,22 +19,27 @@ import org.springframework.core.ParameterizedTypeReference; import org.springframework.hateoas.Link; import org.springframework.hateoas.PagedResources; import org.springframework.hateoas.hal.Jackson2HalModule; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; -import pro.taskana.rest.resource.WorkbasketAccesItemExtendedResource; -import java.util.Collections; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.Assert.*; +import pro.taskana.rest.resource.WorkbasketAccessItemResource; @FixMethodOrder(MethodSorters.NAME_ASCENDING) @RunWith(SpringRunner.class) @SpringBootTest(classes = RestConfiguration.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = {"devMode=true"}) + properties = {"devMode=true"}) public class WorkbasketAccessItemControllerIntTest { String url = "http://127.0.0.1:"; @@ -47,34 +58,36 @@ public class WorkbasketAccessItemControllerIntTest { @Test public void testGetAllWorkbasketAccessItems() { - ResponseEntity> response = template.exchange( - url + port + "/v1/workbasket-access-items", HttpMethod.GET, request, - new ParameterizedTypeReference>() { - }); + ResponseEntity> response = template.exchange( + url + port + "/v1/workbasket-access-items", HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); assertNotNull(response.getBody().getLink(Link.REL_SELF)); } @Test public void testGetWorkbasketAccessItemsKeepingFilters() { String parameters = "/v1/workbasket-access-items/?sort-by=workbasket-key&order=asc&page=1&page-size=9&access-ids=user_1_1"; - ResponseEntity> response = template.exchange( - url + port + parameters, HttpMethod.GET, request, - new ParameterizedTypeReference>() { - }); + ResponseEntity> response = template.exchange( + url + port + parameters, HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertTrue(response.getBody() - .getLink(Link.REL_SELF) - .getHref() - .endsWith(parameters)); + .getLink(Link.REL_SELF) + .getHref() + .endsWith(parameters)); } @Test public void testThrowsExceptionIfInvalidFilterIsUsed() { try { template.exchange( - url + port + "/v1/workbasket-access-items/?sort-by=workbasket-key&order=asc&page=1&page-size=9&invalid=user_1_1", HttpMethod.GET, request, - new ParameterizedTypeReference>() { - }); + url + port + + "/v1/workbasket-access-items/?sort-by=workbasket-key&order=asc&page=1&page-size=9&invalid=user_1_1", + HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); fail(); } catch (HttpClientErrorException e) { assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode()); @@ -85,17 +98,17 @@ public class WorkbasketAccessItemControllerIntTest { @Test public void testGetSecondPageSortedByWorkbasketKey() { String parameters = "/v1/workbasket-access-items/?sort-by=workbasket-key&order=asc&page=2&page-size=9&access-ids=user_1_1"; - ResponseEntity> response = template.exchange( - url + port + parameters, HttpMethod.GET, request, - new ParameterizedTypeReference>() { - }); + ResponseEntity> response = template.exchange( + url + port + parameters, HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); assertEquals(1, response.getBody().getContent().size()); assertEquals("user_1_1", response.getBody().getContent().iterator().next().accessId); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertTrue(response.getBody() - .getLink(Link.REL_SELF) - .getHref() - .endsWith(parameters)); + .getLink(Link.REL_SELF) + .getHref() + .endsWith(parameters)); assertNotNull(response.getBody().getLink(Link.REL_FIRST)); assertNotNull(response.getBody().getLink(Link.REL_LAST)); assertEquals(9, response.getBody().getMetadata().getSize()); @@ -108,9 +121,9 @@ public class WorkbasketAccessItemControllerIntTest { public void testRemoveWorkbasketAccessItemsOfUser() { String parameters = "/v1/workbasket-access-items/?access-id=user_1_1"; ResponseEntity response = template.exchange( - url + port + parameters, HttpMethod.DELETE, request, - new ParameterizedTypeReference() { - }); + url + port + parameters, HttpMethod.DELETE, request, + new ParameterizedTypeReference() { + }); assertNull(response.getBody()); assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode()); } @@ -119,7 +132,7 @@ public class WorkbasketAccessItemControllerIntTest { public void testGetBadRequestIfTryingToDeleteAccessItemsForGroup() { String parameters = "/v1/workbasket-access-items/?access-id=cn=DevelopersGroup,ou=groups,o=TaskanaTest"; try { - ResponseEntity response = template.exchange( + ResponseEntity response = template.exchange( url + port + parameters, HttpMethod.DELETE, request, new ParameterizedTypeReference() { }); diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketAccessItemController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketAccessItemController.java index fdb1db124..e98d78598 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketAccessItemController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketAccessItemController.java @@ -17,14 +17,14 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import pro.taskana.BaseQuery; -import pro.taskana.WorkbasketAccessItemExtended; +import pro.taskana.WorkbasketAccessItem; import pro.taskana.WorkbasketAccessItemQuery; import pro.taskana.WorkbasketService; import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.ldap.LdapClient; -import pro.taskana.rest.resource.WorkbasketAccesItemExtendedResource; -import pro.taskana.rest.resource.assembler.WorkbasketAccessItemExtendedAssembler; +import pro.taskana.rest.resource.WorkbasketAccessItemResource; +import pro.taskana.rest.resource.assembler.WorkbasketAccessItemAssembler; /** * Controller for Workbasket access. @@ -57,22 +57,22 @@ public class WorkbasketAccessItemController extends AbstractPagingController { * This GET method return all workbasketAccessItems that correspond the given data. * * @param params filter, order and access ids. - * @return all WorkbasketAccesItemExtendedResource. + * @return all WorkbasketAccesItemResource. * @throws NotAuthorizedException if the user is not authorized. * @throws InvalidArgumentException if some argument is invalid. */ @GetMapping - public ResponseEntity> getWorkbasketAccessItems( + public ResponseEntity> getWorkbasketAccessItems( @RequestParam MultiValueMap params) throws NotAuthorizedException, InvalidArgumentException { - WorkbasketAccessItemQuery.Extended query = workbasketService.createWorkbasketAccessItemExtendedQuery(); + WorkbasketAccessItemQuery query = workbasketService.createWorkbasketAccessItemQuery(); query = getAccessIds(query, params); query = applyFilterParams(query, params); query = applySortingParams(query, params); PagedResources.PageMetadata pageMetadata = null; - List workbasketAccessItemsExtended; + List workbasketAccessItems; String page = params.getFirst(PAGING_PAGE); String pageSize = params.getFirst(PAGING_PAGE_SIZE); params.remove(PAGING_PAGE); @@ -82,18 +82,18 @@ public class WorkbasketAccessItemController extends AbstractPagingController { // paging long totalElements = query.count(); pageMetadata = initPageMetadata(pageSize, page, totalElements); - workbasketAccessItemsExtended = query.listPage((int) pageMetadata.getNumber(), + workbasketAccessItems = query.listPage((int) pageMetadata.getNumber(), (int) pageMetadata.getSize()); } else if (page == null && pageSize == null) { // not paging - workbasketAccessItemsExtended = query.list(); + workbasketAccessItems = query.list(); } else { throw new InvalidArgumentException("Paging information is incomplete."); } - WorkbasketAccessItemExtendedAssembler assembler = new WorkbasketAccessItemExtendedAssembler(); - PagedResources pagedResources = assembler.toResources( - workbasketAccessItemsExtended, + WorkbasketAccessItemAssembler assembler = new WorkbasketAccessItemAssembler(); + PagedResources pagedResources = assembler.toResources( + workbasketAccessItems, pageMetadata); return new ResponseEntity<>(pagedResources, HttpStatus.OK); @@ -112,7 +112,7 @@ public class WorkbasketAccessItemController extends AbstractPagingController { @RequestParam("access-id") String accessId) throws NotAuthorizedException, InvalidArgumentException { if (!ldapClient.isGroup(accessId)) { - List workbasketAccessItemList = workbasketService.createWorkbasketAccessItemExtendedQuery() + List workbasketAccessItemList = workbasketService.createWorkbasketAccessItemQuery() .accessIdIn(accessId) .list(); @@ -127,7 +127,7 @@ public class WorkbasketAccessItemController extends AbstractPagingController { return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } - private WorkbasketAccessItemQuery.Extended getAccessIds(WorkbasketAccessItemQuery.Extended query, + private WorkbasketAccessItemQuery getAccessIds(WorkbasketAccessItemQuery query, MultiValueMap params) throws InvalidArgumentException { if (params.containsKey(ACCESS_IDS)) { String[] accessIds = extractVerticalBarSeparatedFields(params.get(ACCESS_IDS)); @@ -137,7 +137,7 @@ public class WorkbasketAccessItemController extends AbstractPagingController { return query; } - private WorkbasketAccessItemQuery.Extended applyFilterParams(WorkbasketAccessItemQuery.Extended query, + private WorkbasketAccessItemQuery applyFilterParams(WorkbasketAccessItemQuery query, MultiValueMap params) throws InvalidArgumentException { if (params.containsKey(WORKBASKET_KEY)) { String[] keys = extractCommaSeparatedFields(params.get(WORKBASKET_KEY)); @@ -160,7 +160,7 @@ public class WorkbasketAccessItemController extends AbstractPagingController { return query; } - private WorkbasketAccessItemQuery.Extended applySortingParams(WorkbasketAccessItemQuery.Extended query, + private WorkbasketAccessItemQuery applySortingParams(WorkbasketAccessItemQuery query, MultiValueMap params) throws IllegalArgumentException { // sorting diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccesItemExtendedResource.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccesItemExtendedResource.java deleted file mode 100644 index 0f2eb4fe9..000000000 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccesItemExtendedResource.java +++ /dev/null @@ -1,23 +0,0 @@ -package pro.taskana.rest.resource; - -import org.springframework.hateoas.core.Relation; - -import javax.validation.constraints.NotNull; - -/** - * Resource class for {@link pro.taskana.WorkbasketAccessItem}. - */ -@Relation(collectionRelation = "accessItems") -public class WorkbasketAccesItemExtendedResource extends WorkbasketAccessItemResource { - - @NotNull - public String workbasketKey; - - public String getWorkbasketKey() { - return workbasketKey; - } - - public void setWorkbasketKey(String workbasketKey) { - this.workbasketKey = workbasketKey; - } -} diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResource.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResource.java index c346e0449..d845764f8 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResource.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResource.java @@ -16,6 +16,9 @@ public class WorkbasketAccessItemResource extends ResourceSupport { @NotNull public String workbasketId; + @NotNull + public String workbasketKey; + @NotNull public String accessId; @@ -55,6 +58,14 @@ public class WorkbasketAccessItemResource extends ResourceSupport { this.workbasketId = workbasketId; } + public String getWorkbasketKey() { + return workbasketKey; + } + + public void setWorkbasketKey(String workbasketKey) { + this.workbasketKey = workbasketKey; + } + public String getAccessId() { return accessId; } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssembler.java index 897c53693..b2e6ac844 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssembler.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssembler.java @@ -2,10 +2,16 @@ package pro.taskana.rest.resource.assembler; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static pro.taskana.rest.resource.assembler.AbstractRessourcesAssembler.getBuilderForOriginalUri; + +import java.util.List; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.hateoas.Link; +import org.springframework.hateoas.PagedResources; import org.springframework.stereotype.Component; +import org.springframework.web.util.UriComponentsBuilder; import pro.taskana.WorkbasketAccessItem; import pro.taskana.WorkbasketService; @@ -52,4 +58,34 @@ public class WorkbasketAccessItemAssembler { .withRel("workbasket")); return resource; } + + public PagedResources toResources(List workbasketAccessItems, + PagedResources.PageMetadata pageMetadata) { + WorkbasketAccessItemsAssembler assembler = new WorkbasketAccessItemsAssembler(); + List resources = assembler.toResources(workbasketAccessItems); + + PagedResources pagedResources = new PagedResources( + resources, + pageMetadata); + + UriComponentsBuilder original = getBuilderForOriginalUri(); + pagedResources.add(new Link(original.toUriString()).withSelfRel()); + if (pageMetadata != null) { + pagedResources.add(new Link(original.replaceQueryParam("page", 1).toUriString()).withRel(Link.REL_FIRST)); + pagedResources.add(new Link(original.replaceQueryParam("page", pageMetadata.getTotalPages()).toUriString()) + .withRel(Link.REL_LAST)); + if (pageMetadata.getNumber() > 1) { + pagedResources + .add(new Link(original.replaceQueryParam("page", pageMetadata.getNumber() - 1).toUriString()) + .withRel(Link.REL_PREVIOUS)); + } + if (pageMetadata.getNumber() < pageMetadata.getTotalPages()) { + pagedResources + .add(new Link(original.replaceQueryParam("page", pageMetadata.getNumber() + 1).toUriString()) + .withRel(Link.REL_NEXT)); + } + } + + return pagedResources; + } } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssembler.java deleted file mode 100644 index 65d342844..000000000 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssembler.java +++ /dev/null @@ -1,71 +0,0 @@ -package pro.taskana.rest.resource.assembler; - -import org.springframework.beans.BeanUtils; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.PagedResources; -import org.springframework.hateoas.mvc.ResourceAssemblerSupport; -import org.springframework.stereotype.Component; -import org.springframework.web.util.UriComponentsBuilder; -import pro.taskana.WorkbasketAccessItemExtended; -import pro.taskana.rest.WorkbasketAccessItemController; -import pro.taskana.rest.resource.WorkbasketAccesItemExtendedResource; - -import java.util.List; - -import static pro.taskana.rest.resource.assembler.AbstractRessourcesAssembler.getBuilderForOriginalUri; - -/** - * Transforms {@link WorkbasketAccessItemExtended} to its resource counterpart {@link WorkbasketAccesItemExtendedResource} and vice versa. - */ -@Component -public class WorkbasketAccessItemExtendedAssembler extends ResourceAssemblerSupport { - - /** - * Creates a new {@link ResourceAssemblerSupport} using the given controller class and resource type. - */ - public WorkbasketAccessItemExtendedAssembler() { - super(WorkbasketAccessItemController.class, WorkbasketAccesItemExtendedResource.class); - } - - @Override - public WorkbasketAccesItemExtendedResource toResource(WorkbasketAccessItemExtended workbasketAccessItemExtended) { - WorkbasketAccesItemExtendedResource resource = createResourceWithId(workbasketAccessItemExtended.getId(), workbasketAccessItemExtended); - resource.removeLinks(); - BeanUtils.copyProperties(workbasketAccessItemExtended, resource); - // named different so needs to be set by hand - resource.setAccessItemId(workbasketAccessItemExtended.getId()); - return resource; - } - - public PagedResources toResources(List workbasketAccessItems, - PagedResources.PageMetadata pageMetadata) { - - WorkbasketAccessItemExtendedAssembler assembler = new WorkbasketAccessItemExtendedAssembler(); - List resources = assembler.toResources(workbasketAccessItems); - - PagedResources pagedResources = new PagedResources( - resources, - pageMetadata); - - UriComponentsBuilder original = getBuilderForOriginalUri(); - pagedResources.add(new Link(original.toUriString()).withSelfRel()); - if (pageMetadata != null) { - pagedResources.add(new Link(original.replaceQueryParam("page", 1).toUriString()).withRel(Link.REL_FIRST)); - pagedResources.add(new Link(original.replaceQueryParam("page", pageMetadata.getTotalPages()).toUriString()) - .withRel(Link.REL_LAST)); - if (pageMetadata.getNumber() > 1) { - pagedResources - .add(new Link(original.replaceQueryParam("page", pageMetadata.getNumber() - 1).toUriString()) - .withRel(Link.REL_PREVIOUS)); - } - if (pageMetadata.getNumber() < pageMetadata.getTotalPages()) { - pagedResources - .add(new Link(original.replaceQueryParam("page", pageMetadata.getNumber() + 1).toUriString()) - .withRel(Link.REL_NEXT)); - } - } - - return pagedResources; - } - -} diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemsAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemsAssembler.java new file mode 100644 index 000000000..cb607222d --- /dev/null +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemsAssembler.java @@ -0,0 +1,30 @@ +package pro.taskana.rest.resource.assembler; + +import org.springframework.beans.BeanUtils; +import org.springframework.hateoas.mvc.ResourceAssemblerSupport; + +import pro.taskana.WorkbasketAccessItem; +import pro.taskana.rest.WorkbasketAccessItemController; +import pro.taskana.rest.resource.WorkbasketAccessItemResource; + +/** + * Mapper to convert from a list of WorkbasketAccessItem to a WorkbasketAccessItemResource. + */ +public class WorkbasketAccessItemsAssembler + extends ResourceAssemblerSupport { + + public WorkbasketAccessItemsAssembler() { + super(WorkbasketAccessItemController.class, WorkbasketAccessItemResource.class); + } + + @Override + public WorkbasketAccessItemResource toResource(WorkbasketAccessItem workbasketAccessItem) { + WorkbasketAccessItemResource resource = createResourceWithId(workbasketAccessItem.getId(), + workbasketAccessItem); + resource.removeLinks(); + BeanUtils.copyProperties(workbasketAccessItem, resource); + resource.setAccessItemId(workbasketAccessItem.getId()); + return resource; + } + +} diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssemblerTest.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssemblerTest.java index e1cab0af7..48c45e0e9 100644 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssemblerTest.java +++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemAssemblerTest.java @@ -12,6 +12,7 @@ import pro.taskana.WorkbasketAccessItem; import pro.taskana.WorkbasketService; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.WorkbasketNotFoundException; +import pro.taskana.impl.WorkbasketAccessItemImpl; import pro.taskana.rest.TestConfiguration; import pro.taskana.rest.resource.WorkbasketAccessItemResource; @@ -33,6 +34,7 @@ public class WorkbasketAccessItemAssemblerTest { throws NotAuthorizedException, WorkbasketNotFoundException { // given WorkbasketAccessItem accessItem = workbasketService.newWorkbasketAccessItem("1", "2"); + ((WorkbasketAccessItemImpl) accessItem).setWorkbasketKey("workbasketKey"); accessItem.setPermDistribute(false); accessItem.setPermOpen(true); accessItem.setPermAppend(false); @@ -62,6 +64,7 @@ public class WorkbasketAccessItemAssemblerTest { // given WorkbasketAccessItemResource resource = new WorkbasketAccessItemResource(); resource.setAccessId("10"); + resource.setWorkbasketKey("workbasketKey"); resource.setAccessItemId("120"); resource.setWorkbasketId("1"); resource.setPermRead(true); @@ -90,6 +93,7 @@ public class WorkbasketAccessItemAssemblerTest { private void testEquality(WorkbasketAccessItem accessItem, WorkbasketAccessItemResource resource) { Assert.assertEquals(accessItem.getAccessId(), resource.accessId); + Assert.assertEquals(accessItem.getWorkbasketKey(), resource.workbasketKey); Assert.assertEquals(accessItem.getId(), resource.accessItemId); Assert.assertEquals(accessItem.getWorkbasketId(), resource.workbasketId); Assert.assertEquals(accessItem.isPermAppend(), resource.permAppend); diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssemblerTest.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssemblerTest.java deleted file mode 100644 index 0a55eec9e..000000000 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/resource/assembler/WorkbasketAccessItemExtendedAssemblerTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package pro.taskana.rest.resource.assembler; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import pro.taskana.WorkbasketAccessItemExtended; -import pro.taskana.WorkbasketService; -import pro.taskana.impl.WorkbasketAccessItemExtendedImpl; -import pro.taskana.rest.TestConfiguration; -import pro.taskana.rest.resource.WorkbasketAccesItemExtendedResource; - -/** - * Test for {@link WorkbasketAccessItemExtendedAssembler}. - */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {TestConfiguration.class}) -@WebAppConfiguration -public class WorkbasketAccessItemExtendedAssemblerTest { - - @Autowired - WorkbasketAccessItemExtendedAssembler workbasketAccessItemExtendedAssembler; - - @Autowired - WorkbasketService workbasketService; - - @Test - public void workbasketAccessItemExtendedToResource() { - // given - WorkbasketAccessItemExtended workbasketAccessItemExtended = workbasketService.newWorkbasketAccessItemExtended("workbasketId", - "accessId"); - - ((WorkbasketAccessItemExtendedImpl) workbasketAccessItemExtended).setWorkbasketKey("workbasketKey"); - - ((WorkbasketAccessItemExtendedImpl) workbasketAccessItemExtended).setId("id"); - workbasketAccessItemExtended.setAccessName("Name"); - workbasketAccessItemExtended.setPermAppend(true); - workbasketAccessItemExtended.setPermCustom1(true); - workbasketAccessItemExtended.setPermCustom2(true); - workbasketAccessItemExtended.setPermCustom3(true); - workbasketAccessItemExtended.setPermCustom4(true); - workbasketAccessItemExtended.setPermCustom5(true); - workbasketAccessItemExtended.setPermCustom6(true); - workbasketAccessItemExtended.setPermCustom7(true); - workbasketAccessItemExtended.setPermCustom8(true); - workbasketAccessItemExtended.setPermCustom9(true); - workbasketAccessItemExtended.setPermCustom10(true); - workbasketAccessItemExtended.setPermCustom11(true); - workbasketAccessItemExtended.setPermCustom12(true); - workbasketAccessItemExtended.setPermDistribute(true); - workbasketAccessItemExtended.setPermOpen(true); - workbasketAccessItemExtended.setPermRead(true); - workbasketAccessItemExtended.setPermTransfer(true); - workbasketAccessItemExtended.setPermDistribute(true); - // when - WorkbasketAccesItemExtendedResource workbasketAccesItemExtendedResource = workbasketAccessItemExtendedAssembler.toResource(workbasketAccessItemExtended); - // then - Assert.assertEquals(workbasketAccessItemExtended.getWorkbasketId(), workbasketAccesItemExtendedResource.workbasketId); - Assert.assertEquals(workbasketAccessItemExtended.getWorkbasketKey(), workbasketAccesItemExtendedResource.workbasketKey); - Assert.assertEquals(workbasketAccessItemExtended.getId(), workbasketAccesItemExtendedResource.accessItemId); - Assert.assertEquals(workbasketAccessItemExtended.getAccessId(), workbasketAccesItemExtendedResource.accessId); - Assert.assertEquals(workbasketAccessItemExtended.getAccessName(), workbasketAccesItemExtendedResource.accessName); - Assert.assertEquals(workbasketAccessItemExtended.isPermAppend(), workbasketAccesItemExtendedResource.permAppend); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom1(), workbasketAccesItemExtendedResource.permCustom1); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom2(), workbasketAccesItemExtendedResource.permCustom2); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom3(), workbasketAccesItemExtendedResource.permCustom3); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom4(), workbasketAccesItemExtendedResource.permCustom4); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom5(), workbasketAccesItemExtendedResource.permCustom5); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom6(), workbasketAccesItemExtendedResource.permCustom6); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom7(), workbasketAccesItemExtendedResource.permCustom7); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom8(), workbasketAccesItemExtendedResource.permCustom8); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom9(), workbasketAccesItemExtendedResource.permCustom9); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom10(), workbasketAccesItemExtendedResource.permCustom10); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom11(), workbasketAccesItemExtendedResource.permCustom11); - Assert.assertEquals(workbasketAccessItemExtended.isPermCustom12(), workbasketAccesItemExtendedResource.permCustom12); - } -}