TSK-147 Introduce Workbasket summary to be returned in lists and from all queries.

This commit is contained in:
BerndBreier 2018-01-11 14:30:07 +01:00 committed by Holger Hagen
parent 46fe48fd36
commit dea6f498ed
15 changed files with 437 additions and 219 deletions

View File

@ -3,6 +3,7 @@ package pro.taskana;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List; import java.util.List;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
/** /**
@ -126,7 +127,7 @@ public interface Workbasket {
* *
* @return distributionTargets * @return distributionTargets
*/ */
List<Workbasket> getDistributionTargets(); List<WorkbasketSummary> getDistributionTargets();
/** /**
* Sets the list of distribution targets for this workbasket. * Sets the list of distribution targets for this workbasket.
@ -134,5 +135,132 @@ public interface Workbasket {
* @param distributionTargets * @param distributionTargets
* the distribution targets of the workbasket * the distribution targets of the workbasket
*/ */
void setDistributionTargets(List<Workbasket> distributionTargets); void setDistributionTargets(List<WorkbasketSummary> distributionTargets);
/**
* Return the value for the custom1 attribute.
*
* @return custom1
*/
String getCustom1();
/**
* Sets the value for custom1 Attribute.
*
* @param custom1
* the custom1 property of the workbasket
*/
void setCustom1(String custom1);
/**
* Return the value for the custom2 attribute.
*
* @return custom2
*/
String getCustom2();
/**
* Sets the value for custom2 attribute.
*
* @param custom2
* the custom2 property of the workbasket
*/
void setCustom2(String custom2);
/**
* Return the value for the custom3 attribute.
*
* @return custom3
*/
String getCustom3();
/**
* Sets the value for custom3 attribute.
*
* @param custom3
* the custom3 property of the workbasket
*/
void setCustom3(String custom3);
/**
* Return the value for the custom4 attribute.
*
* @return custom4
*/
String getCustom4();
/**
* Sets the value for custom4 attribute.
*
* @param custom4
* the custom4 property of the workbasket
*/
void setCustom4(String custom4);
/**
* Return the value for the orgLevel1 attribute.
*
* @return orgLevel1
*/
String getOrgLevel1();
/**
* Sets the value for orgLevel1 attribute.
*
* @param orgLevel1
* the orgLevel1 property of the workbasket
*/
void setOrgLevel1(String orgLevel1);
/**
* Return the value for the orgLevel2 attribute.
*
* @return orgLevel2
*/
String getOrgLevel2();
/**
* Sets the value for orgLevel2 attribute.
*
* @param orgLevel2
* the orgLevel2 property of the workbasket
*/
void setOrgLevel2(String orgLevel2);
/**
* Return the value for the orgLevel3 attribute.
*
* @return orgLevel3
*/
String getOrgLevel3();
/**
* Sets the value for orgLevel3 attribute.
*
* @param orgLevel3
* the orgLevel3 property of the workbasket
*/
void setOrgLevel3(String orgLevel3);
/**
* Return the value for the orgLevel4 attribute.
*
* @return orgLevel4
*/
String getOrgLevel4();
/**
* Sets the value for orgLevel4 attribute.
*
* @param orgLevel4
* the orgLevel4 property of the workbasket
*/
void setOrgLevel4(String orgLevel4);
/**
* Return a summary of the current workbasket.
*
* @return the WorkbasketSummary object for the current work basket
*/
WorkbasketSummary asSummary();
} }

View File

@ -4,12 +4,13 @@ import java.util.Date;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
/** /**
* WorkitemQuery for generating dynamic sql. * WorkitemQuery for generating dynamic sql.
*/ */
public interface WorkbasketQuery extends BaseQuery<Workbasket> { public interface WorkbasketQuery extends BaseQuery<WorkbasketSummary> {
/** /**
* Add your keys to your query. * Add your keys to your query.

View File

@ -7,6 +7,7 @@ import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
/** /**
* This service manages Workbaskets. * This service manages Workbaskets.
@ -44,9 +45,9 @@ public interface WorkbasketService {
/** /**
* Get all available Workbaskets without checking any permission. * Get all available Workbaskets without checking any permission.
* *
* @return a list containing all Workbaskets * @return a list containing all Workbasket Summaries
*/ */
List<Workbasket> getWorkbaskets(); List<WorkbasketSummary> getWorkbaskets();
/** /**
* Create a new Workbasket. * Create a new Workbasket.
@ -143,6 +144,16 @@ public interface WorkbasketService {
*/ */
List<WorkbasketAccessItem> getWorkbasketAuthorizations(String workbasketKey); List<WorkbasketAccessItem> getWorkbasketAuthorizations(String workbasketKey);
/**
* This method returns the workbaskets for which the current user has all permissions specified in the permissions
* list.
*
* @param permission
* a List of WorkbasketAuthorization enums
* @return the summaries of all Workbaskets for which the current user has the specified authorizations
*/
List<WorkbasketSummary> getWorkbaskets(List<WorkbasketAuthorization> permission);
/** /**
* This method provides a query builder for querying the database. * This method provides a query builder for querying the database.
* *
@ -157,13 +168,4 @@ public interface WorkbasketService {
*/ */
Workbasket newWorkbasket(); Workbasket newWorkbasket();
/**
* This method returns the workbaskets for which the current user has all permissions specified in the permissions
* list.
*
* @param permissions
* a List of WorkbasketAuthorization enums
* @return all Workbaskets for which the current user has the specified authorizations
*/
List<Workbasket> getWorkbaskets(List<WorkbasketAuthorization> permissions);
} }

View File

@ -5,6 +5,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
/** /**
@ -21,7 +22,7 @@ public class WorkbasketImpl implements Workbasket {
private String owner; private String owner;
private String domain; private String domain;
private WorkbasketType type; private WorkbasketType type;
private List<Workbasket> distributionTargets = new ArrayList<>(); private List<WorkbasketSummary> distributionTargets = new ArrayList<>();
private String custom1; private String custom1;
private String custom2; private String custom2;
private String custom3; private String custom3;
@ -122,79 +123,112 @@ public class WorkbasketImpl implements Workbasket {
} }
@Override @Override
public List<Workbasket> getDistributionTargets() { public List<WorkbasketSummary> getDistributionTargets() {
return distributionTargets; return distributionTargets;
} }
@Override @Override
public void setDistributionTargets(List<Workbasket> distributionTargets) { public void setDistributionTargets(List<WorkbasketSummary> distributionTargets) {
this.distributionTargets = distributionTargets; this.distributionTargets = distributionTargets;
} }
@Override
public String getCustom1() { public String getCustom1() {
return custom1; return custom1;
} }
@Override
public void setCustom1(String custom1) { public void setCustom1(String custom1) {
this.custom1 = custom1; this.custom1 = custom1;
} }
@Override
public String getCustom2() { public String getCustom2() {
return custom2; return custom2;
} }
@Override
public void setCustom2(String custom2) { public void setCustom2(String custom2) {
this.custom2 = custom2; this.custom2 = custom2;
} }
@Override
public String getCustom3() { public String getCustom3() {
return custom3; return custom3;
} }
@Override
public void setCustom3(String custom3) { public void setCustom3(String custom3) {
this.custom3 = custom3; this.custom3 = custom3;
} }
@Override
public String getCustom4() { public String getCustom4() {
return custom4; return custom4;
} }
@Override
public void setCustom4(String custom4) { public void setCustom4(String custom4) {
this.custom4 = custom4; this.custom4 = custom4;
} }
@Override
public String getOrgLevel1() { public String getOrgLevel1() {
return orgLevel1; return orgLevel1;
} }
@Override
public void setOrgLevel1(String orgLevel1) { public void setOrgLevel1(String orgLevel1) {
this.orgLevel1 = orgLevel1; this.orgLevel1 = orgLevel1;
} }
@Override
public String getOrgLevel2() { public String getOrgLevel2() {
return orgLevel2; return orgLevel2;
} }
@Override
public void setOrgLevel2(String orgLevel2) { public void setOrgLevel2(String orgLevel2) {
this.orgLevel2 = orgLevel2; this.orgLevel2 = orgLevel2;
} }
@Override
public String getOrgLevel3() { public String getOrgLevel3() {
return orgLevel3; return orgLevel3;
} }
@Override
public void setOrgLevel3(String orgLevel3) { public void setOrgLevel3(String orgLevel3) {
this.orgLevel3 = orgLevel3; this.orgLevel3 = orgLevel3;
} }
@Override
public String getOrgLevel4() { public String getOrgLevel4() {
return orgLevel4; return orgLevel4;
} }
@Override
public void setOrgLevel4(String orgLevel4) { public void setOrgLevel4(String orgLevel4) {
this.orgLevel4 = orgLevel4; this.orgLevel4 = orgLevel4;
} }
@Override
public WorkbasketSummary asSummary() {
WorkbasketSummary result = new WorkbasketSummary();
result.setId(this.getId());
result.setKey(this.getKey());
result.setName(this.getName());
result.setDescription(this.getDescription());
result.setOwner(this.getOwner());
result.setDomain(this.getDomain());
result.setType(this.getType());
result.setOrgLevel1(this.getOrgLevel1());
result.setOrgLevel2(this.getOrgLevel2());
result.setOrgLevel3(this.getOrgLevel3());
result.setOrgLevel4(this.getOrgLevel4());
return result;
}
@Override @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
@ -237,4 +271,5 @@ public class WorkbasketImpl implements Workbasket {
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }
} }

View File

@ -9,12 +9,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import pro.taskana.TaskanaEngine; import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketQuery; import pro.taskana.WorkbasketQuery;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.impl.util.LoggerUtils; import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
import pro.taskana.model.mappings.WorkbasketAccessMapper; import pro.taskana.model.mappings.WorkbasketAccessMapper;
import pro.taskana.security.CurrentUserContext; import pro.taskana.security.CurrentUserContext;
@ -130,18 +130,17 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
String[] accessIds; String[] accessIds;
// Check pre-conditions // Check pre-conditions
if (permission == null) { if (permission == null) {
throw new InvalidArgumentException("Permission can´t be null."); throw new InvalidArgumentException("Permission cannot be null.");
} }
if (CurrentUserContext.getAccessIds() != null && CurrentUserContext.getAccessIds().size() > 0) { List<String> ucAccessIds = CurrentUserContext.getAccessIds();
accessIds = new String[CurrentUserContext.getAccessIds().size()]; if (ucAccessIds != null && ucAccessIds.size() > 0) {
accessIds = CurrentUserContext.getAccessIds().toArray(accessIds); accessIds = new String[ucAccessIds.size()];
accessIds = ucAccessIds.toArray(accessIds);
} else { } else {
throw new InvalidArgumentException("CurrentUserContext need to have at least one accessId."); throw new InvalidArgumentException("CurrentUserContext need to have at least one accessId.");
} }
// set up permissions and ids // set up permissions and ids
accessIds = new String[CurrentUserContext.getAccessIds().size()];
accessIds = CurrentUserContext.getAccessIds().toArray(accessIds);
this.authorization = permission; this.authorization = permission;
this.accessId = accessIds; this.accessId = accessIds;
lowercaseAccessIds(); lowercaseAccessIds();
@ -150,9 +149,9 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
} }
@Override @Override
public List<Workbasket> list() { public List<WorkbasketSummary> list() {
LOGGER.debug("entry to list(), this = {}", this); LOGGER.debug("entry to list(), this = {}", this);
List<Workbasket> workbaskets = null; List<WorkbasketSummary> workbaskets = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
workbaskets = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); workbaskets = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this);
@ -168,9 +167,9 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
} }
@Override @Override
public List<Workbasket> list(int offset, int limit) { public List<WorkbasketSummary> list(int offset, int limit) {
LOGGER.debug("entry to list(offset = {}, limit = {}), this = {}", offset, limit, this); LOGGER.debug("entry to list(offset = {}, limit = {}), this = {}", offset, limit, this);
List<Workbasket> workbaskets = null; List<WorkbasketSummary> workbaskets = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
RowBounds rowBounds = new RowBounds(offset, limit); RowBounds rowBounds = new RowBounds(offset, limit);
@ -187,9 +186,9 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
} }
@Override @Override
public Workbasket single() { public WorkbasketSummary single() {
LOGGER.debug("entry to single(), this = {}", this); LOGGER.debug("entry to single(), this = {}", this);
WorkbasketImpl workbasket = null; WorkbasketSummary workbasket = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
workbasket = taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); workbasket = taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this);
@ -204,98 +203,50 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
return accessId; return accessId;
} }
public void setAccessId(String[] accessId) {
this.accessId = accessId;
}
public WorkbasketAuthorization getAuthorization() { public WorkbasketAuthorization getAuthorization() {
return authorization; return authorization;
} }
public void setAuthorization(WorkbasketAuthorization authorization) {
this.authorization = authorization;
}
public String[] getName() { public String[] getName() {
return name; return name;
} }
public void setName(String[] name) {
this.name = name;
}
public String[] getKey() { public String[] getKey() {
return key; return key;
} }
public void setKey(String[] key) {
this.key = key;
}
public String[] getDomain() { public String[] getDomain() {
return domain; return domain;
} }
public void setDomain(String[] domain) {
this.domain = domain;
}
public WorkbasketType[] getType() { public WorkbasketType[] getType() {
return type; return type;
} }
public void setType(WorkbasketType[] type) {
this.type = type;
}
public Date getCreatedAfter() { public Date getCreatedAfter() {
return createdAfter; return createdAfter;
} }
public void setCreatedAfter(Date createdAfter) {
this.createdAfter = createdAfter;
}
public Date getCreatedBefore() { public Date getCreatedBefore() {
return createdBefore; return createdBefore;
} }
public void setCreatedBefore(Date createdBefore) {
this.createdBefore = createdBefore;
}
public Date getModifiedAfter() { public Date getModifiedAfter() {
return modifiedAfter; return modifiedAfter;
} }
public void setModifiedAfter(Date modifiedAfter) {
this.modifiedAfter = modifiedAfter;
}
public Date getModifiedBefore() { public Date getModifiedBefore() {
return modifiedBefore; return modifiedBefore;
} }
public void setModifiedBefore(Date modifiedBefore) {
this.modifiedBefore = modifiedBefore;
}
public String getDescription() { public String getDescription() {
return description; return description;
} }
public void setDescription(String description) {
this.description = description;
}
public String[] getOwner() { public String[] getOwner() {
return owner; return owner;
} }
public void setOwner(String[] owner) {
this.owner = owner;
}
@Override @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();

View File

@ -20,6 +20,7 @@ import pro.taskana.impl.util.IdGenerator;
import pro.taskana.impl.util.LoggerUtils; import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.mappings.DistributionTargetMapper; import pro.taskana.model.mappings.DistributionTargetMapper;
import pro.taskana.model.mappings.WorkbasketAccessMapper; import pro.taskana.model.mappings.WorkbasketAccessMapper;
import pro.taskana.model.mappings.WorkbasketMapper; import pro.taskana.model.mappings.WorkbasketMapper;
@ -96,19 +97,19 @@ public class WorkbasketServiceImpl implements WorkbasketService {
} }
@Override @Override
public List<Workbasket> getWorkbaskets(List<WorkbasketAuthorization> permissions) { public List<WorkbasketSummary> getWorkbaskets(List<WorkbasketAuthorization> permissions) {
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to getWorkbaskets(permissions = {})", LoggerUtils.listToString(permissions)); LOGGER.debug("entry to getWorkbaskets(permissions = {})", LoggerUtils.listToString(permissions));
} }
List<Workbasket> result = null; List<WorkbasketSummary> result = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
// use a set to avoid duplicates // use a set to avoid duplicates
Set<Workbasket> workbaskets = new HashSet<>(); Set<WorkbasketSummary> workbaskets = new HashSet<>();
for (String accessId : CurrentUserContext.getAccessIds()) { for (String accessId : CurrentUserContext.getAccessIds()) {
workbaskets.addAll(workbasketMapper.findByPermission(permissions, accessId)); workbaskets.addAll(workbasketMapper.findByPermission(permissions, accessId));
} }
result = new ArrayList<Workbasket>(); result = new ArrayList<WorkbasketSummary>();
result.addAll(workbaskets); result.addAll(workbaskets);
return result; return result;
} finally { } finally {
@ -122,13 +123,12 @@ public class WorkbasketServiceImpl implements WorkbasketService {
} }
@Override @Override
public List<Workbasket> getWorkbaskets() { public List<WorkbasketSummary> getWorkbaskets() {
LOGGER.debug("entry to getWorkbaskets()"); LOGGER.debug("entry to getWorkbaskets()");
List<Workbasket> workbaskets = new ArrayList<>(); List<WorkbasketSummary> workbaskets = new ArrayList<>();
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
List<WorkbasketImpl> results = workbasketMapper.findAll(); workbaskets = workbasketMapper.findAll();
results.stream().forEach(w -> workbaskets.add(w));
return workbaskets; return workbaskets;
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
@ -159,7 +159,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
workbasketMapper.insert(workbasket); workbasketMapper.insert(workbasket);
LOGGER.debug("Method createWorkbasket() created Workbasket '{}'", workbasket); LOGGER.debug("Method createWorkbasket() created Workbasket '{}'", workbasket);
if (workbasket.getDistributionTargets() != null) { if (workbasket.getDistributionTargets() != null) {
for (Workbasket distributionTarget : workbasket.getDistributionTargets()) { for (WorkbasketSummary distributionTarget : workbasket.getDistributionTargets()) {
// validate that all distribution targets exist // validate that all distribution targets exist
this.getWorkbasket(distributionTarget.getId()); this.getWorkbasket(distributionTarget.getId());
distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId()); distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId());
@ -188,8 +188,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
workbasketMapper.update(workbasket); workbasketMapper.update(workbasket);
LOGGER.debug("Method updateWorkbasket() updated workbasket '{}'", workbasket.getId()); LOGGER.debug("Method updateWorkbasket() updated workbasket '{}'", workbasket.getId());
List<String> oldDistributionTargets = distributionTargetMapper.findBySourceId(workbasket.getId()); List<String> oldDistributionTargets = distributionTargetMapper.findBySourceId(workbasket.getId());
List<Workbasket> newDistributionTargets = workbasket.getDistributionTargets(); List<WorkbasketSummary> newDistributionTargets = workbasket.getDistributionTargets();
for (Workbasket distributionTarget : newDistributionTargets) { for (WorkbasketSummary distributionTarget : newDistributionTargets) {
if (!oldDistributionTargets.contains(distributionTarget.getId())) { if (!oldDistributionTargets.contains(distributionTarget.getId())) {
// check that old distribution target exists // check that old distribution target exists
getWorkbasket(distributionTarget.getId()); getWorkbasket(distributionTarget.getId());

View File

@ -0,0 +1,139 @@
package pro.taskana.model;
/**
* This entity contains the most important information about a workbasket.
*
* @author bbr
*/
public class WorkbasketSummary {
private String id;
private String key;
private String name;
private String description;
private String owner;
private String domain;
private WorkbasketType type;
private String orgLevel1;
private String orgLevel2;
private String orgLevel3;
private String orgLevel4;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public WorkbasketType getType() {
return type;
}
public void setType(WorkbasketType type) {
this.type = type;
}
public String getOrgLevel1() {
return orgLevel1;
}
public void setOrgLevel1(String orgLevel1) {
this.orgLevel1 = orgLevel1;
}
public String getOrgLevel2() {
return orgLevel2;
}
public void setOrgLevel2(String orgLevel2) {
this.orgLevel2 = orgLevel2;
}
public String getOrgLevel3() {
return orgLevel3;
}
public void setOrgLevel3(String orgLevel3) {
this.orgLevel3 = orgLevel3;
}
public String getOrgLevel4() {
return orgLevel4;
}
public void setOrgLevel4(String orgLevel4) {
this.orgLevel4 = orgLevel4;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("WorkbasketSummary [id=");
builder.append(id);
builder.append(", key=");
builder.append(key);
builder.append(", name=");
builder.append(name);
builder.append(", description=");
builder.append(description);
builder.append(", owner=");
builder.append(owner);
builder.append(", domain=");
builder.append(domain);
builder.append(", type=");
builder.append(type);
builder.append(", orgLevel1=");
builder.append(orgLevel1);
builder.append(", orgLevel2=");
builder.append(orgLevel2);
builder.append(", orgLevel3=");
builder.append(orgLevel3);
builder.append(", orgLevel4=");
builder.append(orgLevel4);
builder.append("]");
return builder.toString();
}
}

View File

@ -2,7 +2,6 @@ package pro.taskana.model.mappings;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
@ -12,9 +11,9 @@ import pro.taskana.impl.ClassificationQueryImpl;
import pro.taskana.impl.ObjectReferenceQueryImpl; import pro.taskana.impl.ObjectReferenceQueryImpl;
import pro.taskana.impl.TaskImpl; import pro.taskana.impl.TaskImpl;
import pro.taskana.impl.TaskQueryImpl; import pro.taskana.impl.TaskQueryImpl;
import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.WorkbasketQueryImpl; import pro.taskana.impl.WorkbasketQueryImpl;
import pro.taskana.model.ObjectReference; import pro.taskana.model.ObjectReference;
import pro.taskana.model.WorkbasketSummary;
/** /**
* This class provides a mapper for all queries. * This class provides a mapper for all queries.
@ -149,7 +148,7 @@ public interface QueryMapper {
@Result(property = "value", column = "VALUE") }) @Result(property = "value", column = "VALUE") })
List<ObjectReference> queryObjectReference(ObjectReferenceQueryImpl objectReference); List<ObjectReference> queryObjectReference(ObjectReferenceQueryImpl objectReference);
@Select("<script>SELECT w.ID, w.KEY, w.CREATED, w.MODIFIED, w.NAME, w.DOMAIN, W.TYPE, w.DESCRIPTION, w.OWNER, w.CUSTOM_1, w.CUSTOM_2, w.CUSTOM_3, w.CUSTOM_4, w.ORG_LEVEL_1, w.ORG_LEVEL_2, w.ORG_LEVEL_3, w.ORG_LEVEL_4 from WORKBASKET w " @Select("<script>SELECT w.ID, w.KEY, w.NAME, w.DOMAIN, W.TYPE, w.DESCRIPTION, w.OWNER, w.ORG_LEVEL_1, w.ORG_LEVEL_2, w.ORG_LEVEL_3, w.ORG_LEVEL_4 from WORKBASKET w "
+ "<if test='accessId != null'>LEFT OUTER JOIN WORKBASKET_ACCESS_LIST a on w.KEY = a.WORKBASKET_KEY</if> " + "<if test='accessId != null'>LEFT OUTER JOIN WORKBASKET_ACCESS_LIST a on w.KEY = a.WORKBASKET_KEY</if> "
+ "<where>" + "<where>"
+ "<if test='owner != null'>AND w.OWNER IN(<foreach item='item' collection='owner' separator=',' >#{item}</foreach>)</if> " + "<if test='owner != null'>AND w.OWNER IN(<foreach item='item' collection='owner' separator=',' >#{item}</foreach>)</if> "
@ -184,31 +183,14 @@ public interface QueryMapper {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "key", column = "KEY"), @Result(property = "key", column = "KEY"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "id", javaType = List.class, @Result(property = "domain", column = "DOMAIN"),
many = @Many(select = "findDistributionTargets")), @Result(property = "type", column = "TYPE"),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "orgLevel1", column = "ORG_LEVEL_1"), @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "orgLevel2", column = "ORG_LEVEL_2"), @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "orgLevel3", column = "ORG_LEVEL_3"), @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "orgLevel4", column = "ORG_LEVEL_4") }) @Result(property = "orgLevel4", column = "ORG_LEVEL_4") })
List<WorkbasketImpl> queryWorkbasket(WorkbasketQueryImpl workbasketQuery); List<WorkbasketSummary> queryWorkbasket(WorkbasketQueryImpl workbasketQuery);
@Select("<script>SELECT TARGET_ID from DISTRIBUTION_TARGETS "
+ "<where>"
+ "SOURCE_ID = #{sourceId}"
+ "</where>"
+ "</script>")
@Results(value = {
@Result(property = "distributionTarget", column = "TARGET_ID") })
List<String> findDistributionTargets(String sourceId);
} }

View File

@ -15,6 +15,7 @@ import org.apache.ibatis.mapping.FetchType;
import pro.taskana.impl.WorkbasketImpl; import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
/** /**
* This class is the mybatis mapping of workbaskets. * This class is the mybatis mapping of workbaskets.
@ -37,12 +38,10 @@ public interface WorkbasketMapper {
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"), @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "custom6", column = "CUSTOM_6"), @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "custom7", column = "CUSTOM_7"), @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "orgLevel4", column = "ORG_LEVEL_4")})
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10") })
WorkbasketImpl findById(@Param("id") String id); WorkbasketImpl findById(@Param("id") String id);
@Select("SELECT ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1 ,CUSTOM_2 ,CUSTOM_3 ,CUSTOM_4 ,ORG_LEVEL_1 ,ORG_LEVEL_2 ,ORG_LEVEL_3 ,ORG_LEVEL_4 FROM WORKBASKET WHERE KEY = #{key}") @Select("SELECT ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1 ,CUSTOM_2 ,CUSTOM_3 ,CUSTOM_4 ,ORG_LEVEL_1 ,ORG_LEVEL_2 ,ORG_LEVEL_3 ,ORG_LEVEL_4 FROM WORKBASKET WHERE KEY = #{key}")
@ -61,65 +60,46 @@ public interface WorkbasketMapper {
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"), @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "custom7", column = "CUSTOM_7"), @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "custom9", column = "CUSTOM_9"), @Result(property = "orgLevel4", column = "ORG_LEVEL_4")})
@Result(property = "custom10", column = "CUSTOM_10") })
WorkbasketImpl findByKey(@Param("key") String key); WorkbasketImpl findByKey(@Param("key") String key);
@Select("SELECT * FROM WORKBASKET WHERE id IN (SELECT TARGET_ID FROM DISTRIBUTION_TARGETS WHERE SOURCE_ID = #{id})") @Select("SELECT * FROM WORKBASKET WHERE id IN (SELECT TARGET_ID FROM DISTRIBUTION_TARGETS WHERE SOURCE_ID = #{id})")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "key", column = "KEY"), @Result(property = "key", column = "KEY"),
@Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, @Result(property = "domain", column = "DOMAIN"),
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")), @Result(property = "type", column = "TYPE"),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "custom5", column = "CUSTOM_5"), @Result(property = "orgLevel4", column = "ORG_LEVEL_4")})
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"), List<WorkbasketSummary> findByDistributionTargets(@Param("id") String id);
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10") })
List<WorkbasketImpl> findByDistributionTargets(@Param("id") String id);
@Select("SELECT * FROM WORKBASKET ORDER BY id") @Select("SELECT * FROM WORKBASKET ORDER BY id")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "key", column = "KEY"), @Result(property = "key", column = "KEY"),
@Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, @Result(property = "domain", column = "DOMAIN"),
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")), @Result(property = "type", column = "TYPE"),
@Result(property = "custom1", column = "CUSTOM_1"), @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "orgLevel4", column = "ORG_LEVEL_4")})
@Result(property = "custom5", column = "CUSTOM_5"), List<WorkbasketSummary> findAll();
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10") })
List<WorkbasketImpl> findAll();
@Select("<script>SELECT W.ID, W.KEY, W.CREATED, W.MODIFIED, W.NAME, W.DESCRIPTION, W.OWNER FROM WORKBASKET AS W " @Select("<script>SELECT W.ID, W.KEY, W.NAME, W.DESCRIPTION, W.OWNER, W.DOMAIN, W.TYPE, W.ORG_LEVEL_1, W.ORG_LEVEL_2, W.ORG_LEVEL_3, W.ORG_LEVEL_4 FROM WORKBASKET AS W "
+ "INNER JOIN WORKBASKET_ACCESS_LIST AS ACL " + "INNER JOIN WORKBASKET_ACCESS_LIST AS ACL "
+ "ON (W.KEY = ACL.WORKBASKET_KEY AND ACL.ACCESS_ID = #{accessId}) " + "ON (W.KEY = ACL.WORKBASKET_KEY AND ACL.ACCESS_ID = #{accessId}) "
+ "WHERE <foreach collection='authorizations' item='authorization' separator=' AND '>" + "WHERE <foreach collection='authorizations' item='authorization' separator=' AND '>"
@ -140,26 +120,18 @@ public interface WorkbasketMapper {
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "key", column = "KEY"), @Result(property = "key", column = "KEY"),
@Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, @Result(property = "domain", column = "DOMAIN"),
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")), @Result(property = "type", column = "TYPE"),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "custom5", column = "CUSTOM_5"), @Result(property = "orgLevel4", column = "ORG_LEVEL_4")})
@Result(property = "custom6", column = "CUSTOM_6"), List<WorkbasketSummary> findByPermission(@Param("authorizations") List<WorkbasketAuthorization> authorizations,
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10") })
List<WorkbasketImpl> findByPermission(@Param("authorizations") List<WorkbasketAuthorization> authorizations,
@Param("accessId") String accessId); @Param("accessId") String accessId);
@Insert("INSERT INTO WORKBASKET (ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORG_LEVEL_1, ORG_LEVEL_2, ORG_LEVEL_3, ORG_LEVEL_4) VALUES (#{workbasket.id}, #{workbasket.key}, #{workbasket.created}, #{workbasket.modified}, #{workbasket.name}, #{workbasket.domain}, #{workbasket.type}, #{workbasket.description}, #{workbasket.owner}, #{workbasket.custom1}, #{workbasket.custom2}, #{workbasket.custom3}, #{workbasket.custom4}, #{workbasket.orgLevel1}, #{workbasket.orgLevel2}, #{workbasket.orgLevel3}, #{workbasket.orgLevel4})") @Insert("INSERT INTO WORKBASKET (ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORG_LEVEL_1, ORG_LEVEL_2, ORG_LEVEL_3, ORG_LEVEL_4) VALUES (#{workbasket.id}, #{workbasket.key}, #{workbasket.created}, #{workbasket.modified}, #{workbasket.name}, #{workbasket.domain}, #{workbasket.type}, #{workbasket.description}, #{workbasket.owner}, #{workbasket.custom1}, #{workbasket.custom2}, #{workbasket.custom3}, #{workbasket.custom4}, #{workbasket.orgLevel1}, #{workbasket.orgLevel2}, #{workbasket.orgLevel3}, #{workbasket.orgLevel4})")

View File

@ -10,12 +10,12 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import acceptance.AbstractAccTest; import acceptance.AbstractAccTest;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.SystemException; import pro.taskana.exceptions.SystemException;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.security.JAASRunner; import pro.taskana.security.JAASRunner;
import pro.taskana.security.WithAccessId; import pro.taskana.security.WithAccessId;
@ -33,7 +33,7 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest {
public void testQueryAllTransferTargetsForUser() public void testQueryAllTransferTargetsForUser()
throws SQLException, NotAuthorizedException, InvalidArgumentException { throws SQLException, NotAuthorizedException, InvalidArgumentException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
List<Workbasket> results = workbasketService.createWorkbasketQuery() List<WorkbasketSummary> results = workbasketService.createWorkbasketQuery()
.accessIdsHavePersmission(WorkbasketAuthorization.APPEND, "user_1_1") .accessIdsHavePersmission(WorkbasketAuthorization.APPEND, "user_1_1")
.list(); .list();
Assert.assertEquals(1L, results.size()); Assert.assertEquals(1L, results.size());
@ -44,7 +44,7 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest {
public void testQueryAllTransferTargetsForUserAndGroup() public void testQueryAllTransferTargetsForUserAndGroup()
throws SQLException, NotAuthorizedException, InvalidArgumentException, SystemException { throws SQLException, NotAuthorizedException, InvalidArgumentException, SystemException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
List<Workbasket> results = workbasketService.createWorkbasketQuery() List<WorkbasketSummary> results = workbasketService.createWorkbasketQuery()
.accessIdsHavePersmission(WorkbasketAuthorization.APPEND, "user_1_1", "group_1") .accessIdsHavePersmission(WorkbasketAuthorization.APPEND, "user_1_1", "group_1")
.list(); .list();
Assert.assertEquals(8L, results.size()); Assert.assertEquals(8L, results.size());
@ -57,7 +57,7 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest {
public void testQueryAllTransferTargetsForUserAndGroupFromSubject() public void testQueryAllTransferTargetsForUserAndGroupFromSubject()
throws SQLException, NotAuthorizedException, InvalidArgumentException, SystemException { throws SQLException, NotAuthorizedException, InvalidArgumentException, SystemException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
List<Workbasket> results = workbasketService.createWorkbasketQuery() List<WorkbasketSummary> results = workbasketService.createWorkbasketQuery()
.callerHasPermission(WorkbasketAuthorization.APPEND) .callerHasPermission(WorkbasketAuthorization.APPEND)
.list(); .list();
Assert.assertEquals(8L, results.size()); Assert.assertEquals(8L, results.size());
@ -69,7 +69,7 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest {
public void testQueryAllAvailableWorkbasketForOpeningForUserAndGroupFromSubject() public void testQueryAllAvailableWorkbasketForOpeningForUserAndGroupFromSubject()
throws SQLException, NotAuthorizedException, InvalidArgumentException { throws SQLException, NotAuthorizedException, InvalidArgumentException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
List<Workbasket> results = workbasketService.createWorkbasketQuery() List<WorkbasketSummary> results = workbasketService.createWorkbasketQuery()
.callerHasPermission(WorkbasketAuthorization.READ) .callerHasPermission(WorkbasketAuthorization.READ)
.list(); .list();
Assert.assertEquals(1L, results.size()); Assert.assertEquals(1L, results.size());

View File

@ -31,6 +31,7 @@ import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
import pro.taskana.model.mappings.DistributionTargetMapper; import pro.taskana.model.mappings.DistributionTargetMapper;
import pro.taskana.model.mappings.WorkbasketAccessMapper; import pro.taskana.model.mappings.WorkbasketAccessMapper;
@ -147,6 +148,7 @@ public class WorkbasketServiceImplTest {
taskanaEngineImplMock, taskanaEngineConfigurationMock); taskanaEngineImplMock, taskanaEngineConfigurationMock);
throw ex; throw ex;
} }
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
@ -176,7 +178,6 @@ public class WorkbasketServiceImplTest {
doReturn(wb).when(workbasketMapperMock).findByKey(wbKey); doReturn(wb).when(workbasketMapperMock).findByKey(wbKey);
Workbasket actualWb = cutSpy.getWorkbasketByKey(wbKey); Workbasket actualWb = cutSpy.getWorkbasketByKey(wbKey);
verify(taskanaEngineImplMock, times(1)).openConnection(); verify(taskanaEngineImplMock, times(1)).openConnection();
verify(cutSpy, times(1)).checkAuthorization(wbKey, authorization); verify(cutSpy, times(1)).checkAuthorization(wbKey, authorization);
verify(workbasketMapperMock, times(1)).findByKey(wbKey); verify(workbasketMapperMock, times(1)).findByKey(wbKey);
@ -284,6 +285,7 @@ public class WorkbasketServiceImplTest {
assertThat(wb.getCreated(), not(equalTo(null))); assertThat(wb.getCreated(), not(equalTo(null)));
assertThat(wb.getModified(), not(equalTo(null))); assertThat(wb.getModified(), not(equalTo(null)));
} }
} }
@Test @Test
@ -391,11 +393,11 @@ public class WorkbasketServiceImplTest {
return workbasket; return workbasket;
} }
private List<Workbasket> createTestDistributionTargets(int amount) { private List<WorkbasketSummary> createTestDistributionTargets(int amount) {
List<Workbasket> distributionsTargets = new ArrayList<>(); List<WorkbasketSummary> distributionsTargets = new ArrayList<>();
amount = (amount < 0) ? 0 : amount; amount = (amount < 0) ? 0 : amount;
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
distributionsTargets.add(createTestWorkbasket("WB-ID-" + i, "WB-KEY-" + i)); distributionsTargets.add(createTestWorkbasket("WB-ID-" + i, "WB-KEY-" + i).asSummary());
} }
return distributionsTargets; return distributionsTargets;
} }

View File

@ -39,6 +39,7 @@ import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.impl.util.IdGenerator; import pro.taskana.impl.util.IdGenerator;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
import pro.taskana.model.mappings.WorkbasketMapper; import pro.taskana.model.mappings.WorkbasketMapper;
import pro.taskana.security.CurrentUserContext; import pro.taskana.security.CurrentUserContext;
@ -167,14 +168,15 @@ public class WorkbasketServiceImplIntAutocommitTest {
id = IdGenerator.generateWithPrefix("TWB"); id = IdGenerator.generateWithPrefix("TWB");
Workbasket workbasket = createTestWorkbasket(id, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP); Workbasket workbasket = createTestWorkbasket(id, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP);
workbasket.setDistributionTargets(new ArrayList<>()); workbasket.setDistributionTargets(new ArrayList<>());
workbasket.getDistributionTargets().add(wbDist1); workbasket.getDistributionTargets().add(wbDist1.asSummary());
workbasket.getDistributionTargets().add(wbDist2); workbasket.getDistributionTargets().add(wbDist2.asSummary());
workbasket = workBasketService.createWorkbasket(workbasket); workbasket = workBasketService.createWorkbasket(workbasket);
createWorkbasketWithSecurity(workbasket, "Elena", true, true, false, false); createWorkbasketWithSecurity(workbasket, "Elena", true, true, false, false);
Workbasket foundWorkbasket = workBasketService.getWorkbasket(workbasket.getId()); Workbasket foundWorkbasket = workBasketService.getWorkbasket(workbasket.getId());
Assert.assertEquals(id, foundWorkbasket.getId()); Assert.assertEquals(id, foundWorkbasket.getId());
Assert.assertEquals(2, foundWorkbasket.getDistributionTargets().size()); Assert.assertEquals(2, foundWorkbasket.getDistributionTargets().size());
} }
@WithAccessId(userName = "Elena") @WithAccessId(userName = "Elena")
@ -193,8 +195,8 @@ public class WorkbasketServiceImplIntAutocommitTest {
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
Workbasket workbasket2 = createTestWorkbasket(id2, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP); Workbasket workbasket2 = createTestWorkbasket(id2, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP);
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0.asSummary());
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1.asSummary());
workbasket2 = workBasketService.createWorkbasket(workbasket2); workbasket2 = workBasketService.createWorkbasket(workbasket2);
createWorkbasketWithSecurity(workbasket2, "Elena", true, true, false, false); createWorkbasketWithSecurity(workbasket2, "Elena", true, true, false, false);
@ -205,13 +207,13 @@ public class WorkbasketServiceImplIntAutocommitTest {
createWorkbasketWithSecurity(workbasket3, "Elena", true, true, false, false); createWorkbasketWithSecurity(workbasket3, "Elena", true, true, false, false);
workbasket2.getDistributionTargets().clear(); workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3); workbasket2.getDistributionTargets().add(workbasket3.asSummary());
Thread.sleep(SLEEP_TIME); Thread.sleep(SLEEP_TIME);
workbasket2 = workBasketService.updateWorkbasket(workbasket2); workbasket2 = workBasketService.updateWorkbasket(workbasket2);
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId()); Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
List<Workbasket> distributionTargets = foundBasket.getDistributionTargets(); List<WorkbasketSummary> distributionTargets = foundBasket.getDistributionTargets();
Assert.assertEquals(1, distributionTargets.size()); Assert.assertEquals(1, distributionTargets.size());
Assert.assertEquals(id3, distributionTargets.get(0).getId()); Assert.assertEquals(id3, distributionTargets.get(0).getId());
Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(), Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(),
@ -275,36 +277,38 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketQuery query1 = workBasketService.createWorkbasketQuery() WorkbasketQuery query1 = workBasketService.createWorkbasketQuery()
.accessIdsHavePersmission(WorkbasketAuthorization.OPEN, "Bernd") .accessIdsHavePersmission(WorkbasketAuthorization.OPEN, "Bernd")
.nameIn("Basket4"); .nameIn("Basket4");
List<Workbasket> result1 = query1.list(); List<WorkbasketSummary> result1 = query1.list();
Assert.assertEquals(1, result1.size()); Assert.assertEquals(1, result1.size());
Assert.assertEquals(THREE, result1.get(0).getDistributionTargets().size()); String workbasketId = result1.get(0).getId();
Workbasket workBasket = workBasketService.getWorkbasket(workbasketId);
Assert.assertEquals(THREE, workBasket.getDistributionTargets().size());
WorkbasketQuery query2 = workBasketService.createWorkbasketQuery().accessIdsHavePersmission( WorkbasketQuery query2 = workBasketService.createWorkbasketQuery().accessIdsHavePersmission(
WorkbasketAuthorization.OPEN, "Bernd", WorkbasketAuthorization.OPEN, "Bernd",
"Konstantin"); "Konstantin");
List<Workbasket> result2 = query2.list(); List<WorkbasketSummary> result2 = query2.list();
Assert.assertEquals(2, result2.size()); Assert.assertEquals(2, result2.size());
WorkbasketQuery query3 = workBasketService.createWorkbasketQuery().accessIdsHavePersmission( WorkbasketQuery query3 = workBasketService.createWorkbasketQuery().accessIdsHavePersmission(
WorkbasketAuthorization.CUSTOM_5, WorkbasketAuthorization.CUSTOM_5,
"Bernd", "Konstantin"); "Bernd", "Konstantin");
List<Workbasket> result3 = query3.list(); List<WorkbasketSummary> result3 = query3.list();
Assert.assertEquals(0, result3.size()); Assert.assertEquals(0, result3.size());
WorkbasketQuery query4 = workBasketService.createWorkbasketQuery().accessIdsHavePersmission( WorkbasketQuery query4 = workBasketService.createWorkbasketQuery().accessIdsHavePersmission(
WorkbasketAuthorization.CUSTOM_1, WorkbasketAuthorization.CUSTOM_1,
"Bernd"); "Bernd");
List<Workbasket> result4 = query4.list(); List<WorkbasketSummary> result4 = query4.list();
Assert.assertEquals(1, result4.size()); Assert.assertEquals(1, result4.size());
WorkbasketQuery query0 = workBasketService.createWorkbasketQuery() WorkbasketQuery query0 = workBasketService.createWorkbasketQuery()
.createdBefore(tomorrow) .createdBefore(tomorrow)
.createdAfter(yesterday) .createdAfter(yesterday)
.nameIn("Basket1", "Basket2", "Basket3"); .nameIn("Basket1", "Basket2", "Basket3");
List<Workbasket> result0 = query0.list(); List<WorkbasketSummary> result0 = query0.list();
assertTrue(result0.size() == THREE); assertTrue(result0.size() == THREE);
for (Workbasket workbasket : result0) { for (WorkbasketSummary workbasket : result0) {
String name = workbasket.getName(); String name = workbasket.getName();
assertTrue("Basket1".equals(name) || "Basket2".equals(name) || "Basket3".equals(name)); assertTrue("Basket1".equals(name) || "Basket2".equals(name) || "Basket3".equals(name));
} }
@ -312,9 +316,9 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketQuery query5 = workBasketService.createWorkbasketQuery() WorkbasketQuery query5 = workBasketService.createWorkbasketQuery()
.modifiedAfter(thirtyDaysAgo) .modifiedAfter(thirtyDaysAgo)
.modifiedBefore(tenDaysAgo); .modifiedBefore(tenDaysAgo);
List<Workbasket> result5 = query5.list(); List<WorkbasketSummary> result5 = query5.list();
assertTrue(result5.size() == 2); assertTrue(result5.size() == 2);
for (Workbasket workbasket : result5) { for (WorkbasketSummary workbasket : result5) {
String name = workbasket.getName(); String name = workbasket.getName();
assertTrue("Basket1".equals(name) || "Basket2".equals(name)); assertTrue("Basket1".equals(name) || "Basket2".equals(name));
} }
@ -322,15 +326,15 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketQuery query6 = workBasketService.createWorkbasketQuery() WorkbasketQuery query6 = workBasketService.createWorkbasketQuery()
.modifiedAfter(twentyDaysAgo) .modifiedAfter(twentyDaysAgo)
.domainIn("novatec", "consulting"); .domainIn("novatec", "consulting");
List<Workbasket> result6 = query6.list(); List<WorkbasketSummary> result6 = query6.list();
assertTrue(result6.size() == 1); assertTrue(result6.size() == 1);
assertTrue("Basket1".equals(result6.get(0).getName())); assertTrue("Basket1".equals(result6.get(0).getName()));
WorkbasketQuery query7 = workBasketService.createWorkbasketQuery() WorkbasketQuery query7 = workBasketService.createWorkbasketQuery()
.typeIn(WorkbasketType.GROUP, WorkbasketType.CLEARANCE); .typeIn(WorkbasketType.GROUP, WorkbasketType.CLEARANCE);
List<Workbasket> result7 = query7.list(); List<WorkbasketSummary> result7 = query7.list();
assertTrue(result7.size() == 2); assertTrue(result7.size() == 2);
for (Workbasket workbasket : result7) { for (WorkbasketSummary workbasket : result7) {
String name = workbasket.getName(); String name = workbasket.getName();
assertTrue("Basket1".equals(name) || "Basket2".equals(name)); assertTrue("Basket1".equals(name) || "Basket2".equals(name));
} }
@ -402,10 +406,10 @@ public class WorkbasketServiceImplIntAutocommitTest {
basket4.setOwner("Holger"); basket4.setOwner("Holger");
basket4.setType(WorkbasketType.PERSONAL); basket4.setType(WorkbasketType.PERSONAL);
basket4.setDomain(""); basket4.setDomain("");
List<Workbasket> distTargets = new ArrayList<Workbasket>(); List<WorkbasketSummary> distTargets = new ArrayList<WorkbasketSummary>();
distTargets.add(basket1); distTargets.add(basket1.asSummary());
distTargets.add(basket2); distTargets.add(basket2.asSummary());
distTargets.add(basket3); distTargets.add(basket3.asSummary());
basket4.setDistributionTargets(distTargets); basket4.setDistributionTargets(distTargets);
basket4 = (WorkbasketImpl) workBasketService.createWorkbasket(basket4); basket4 = (WorkbasketImpl) workBasketService.createWorkbasket(basket4);
WorkbasketAccessItem accessItem4 = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem4 = new WorkbasketAccessItem();

View File

@ -32,6 +32,7 @@ import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest; import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.impl.util.IdGenerator; import pro.taskana.impl.util.IdGenerator;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketSummary;
import pro.taskana.model.WorkbasketType; import pro.taskana.model.WorkbasketType;
import pro.taskana.security.JAASRunner; import pro.taskana.security.JAASRunner;
import pro.taskana.security.WithAccessId; import pro.taskana.security.WithAccessId;
@ -185,8 +186,8 @@ public class WorkbasketServiceImplIntExplicitTest {
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
Workbasket workbasket2 = createTestWorkbasket(id2, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP); Workbasket workbasket2 = createTestWorkbasket(id2, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP);
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0.asSummary());
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1.asSummary());
workbasket2 = workBasketService.createWorkbasket(workbasket2); workbasket2 = workBasketService.createWorkbasket(workbasket2);
createWorkbasketWithSecurity(workbasket2, "Elena", true, true, false, false); createWorkbasketWithSecurity(workbasket2, "Elena", true, true, false, false);
@ -215,8 +216,8 @@ public class WorkbasketServiceImplIntExplicitTest {
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
Workbasket workbasket2 = createTestWorkbasket(id2, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP); Workbasket workbasket2 = createTestWorkbasket(id2, "key2", "novatec", "Hyperbasket", WorkbasketType.GROUP);
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0.asSummary());
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1.asSummary());
workbasket2 = workBasketService.createWorkbasket(workbasket2); workbasket2 = workBasketService.createWorkbasket(workbasket2);
createWorkbasketWithSecurity(workbasket2, "Elena", true, true, false, false); createWorkbasketWithSecurity(workbasket2, "Elena", true, true, false, false);
@ -224,19 +225,19 @@ public class WorkbasketServiceImplIntExplicitTest {
Workbasket workbasket3 = createTestWorkbasket(id3, "key3", "novatec", "hm ... irgend ein basket", Workbasket workbasket3 = createTestWorkbasket(id3, "key3", "novatec", "hm ... irgend ein basket",
WorkbasketType.GROUP); WorkbasketType.GROUP);
workbasket3.setDistributionTargets(new ArrayList<>()); workbasket3.setDistributionTargets(new ArrayList<>());
workbasket3.getDistributionTargets().add(workbasket0); workbasket3.getDistributionTargets().add(workbasket0.asSummary());
workbasket3.getDistributionTargets().add(workbasket1); workbasket3.getDistributionTargets().add(workbasket1.asSummary());
workbasket3 = workBasketService.createWorkbasket(workbasket3); workbasket3 = workBasketService.createWorkbasket(workbasket3);
createWorkbasketWithSecurity(workbasket3, "Elena", true, true, false, false); createWorkbasketWithSecurity(workbasket3, "Elena", true, true, false, false);
workbasket2.getDistributionTargets().clear(); workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3); workbasket2.getDistributionTargets().add(workbasket3.asSummary());
Thread.sleep(SLEEP_TIME); Thread.sleep(SLEEP_TIME);
workbasket2 = workBasketService.updateWorkbasket(workbasket2); workbasket2 = workBasketService.updateWorkbasket(workbasket2);
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId()); Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
List<Workbasket> distributionTargets = foundBasket.getDistributionTargets(); List<WorkbasketSummary> distributionTargets = foundBasket.getDistributionTargets();
Assert.assertEquals(1, distributionTargets.size()); Assert.assertEquals(1, distributionTargets.size());
Assert.assertEquals(workbasket3.getId(), distributionTargets.get(0).getId()); Assert.assertEquals(workbasket3.getId(), distributionTargets.get(0).getId());
Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(), Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(),

View File

@ -18,12 +18,12 @@ import pro.taskana.WorkbasketService;
import pro.taskana.model.DueWorkbasketCounter; import pro.taskana.model.DueWorkbasketCounter;
import pro.taskana.model.TaskState; import pro.taskana.model.TaskState;
import pro.taskana.model.TaskStateCounter; import pro.taskana.model.TaskStateCounter;
import pro.taskana.Workbasket; import pro.taskana.model.WorkbasketSummary;
import pro.taskana.rest.model.WorkbasketCounterDataDto; import pro.taskana.rest.model.WorkbasketCounterDataDto;
import pro.taskana.rest.model.WorkbasketCounterDto; import pro.taskana.rest.model.WorkbasketCounterDto;
@RestController @RestController
@RequestMapping(path = "/v1/monitor", produces = { MediaType.APPLICATION_JSON_VALUE }) @RequestMapping(path = "/v1/monitor", produces = {MediaType.APPLICATION_JSON_VALUE})
public class MonitorController { public class MonitorController {
@Autowired @Autowired
@ -62,7 +62,7 @@ public class MonitorController {
List<WorkbasketCounterDataDto> data = new ArrayList<>(); List<WorkbasketCounterDataDto> data = new ArrayList<>();
for (Workbasket workbasket : workbasketService.getWorkbaskets()) { for (WorkbasketSummary workbasket : workbasketService.getWorkbaskets()) {
WorkbasketCounterDataDto counterDto = new WorkbasketCounterDataDto(); WorkbasketCounterDataDto counterDto = new WorkbasketCounterDataDto();
counterDto.setLabel(workbasket.getName()); counterDto.setLabel(workbasket.getName());
List<Integer> zeroData = new ArrayList<>(); List<Integer> zeroData = new ArrayList<>();

View File

@ -24,6 +24,7 @@ import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketSummary;
@RestController @RestController
@RequestMapping(path = "/v1/workbaskets", produces = { MediaType.APPLICATION_JSON_VALUE }) @RequestMapping(path = "/v1/workbaskets", produces = { MediaType.APPLICATION_JSON_VALUE })
@ -33,8 +34,8 @@ public class WorkbasketController {
private WorkbasketService workbasketService; private WorkbasketService workbasketService;
@GetMapping @GetMapping
public ResponseEntity<List<Workbasket>> getWorkbaskets(@RequestParam MultiValueMap<String, String> params) { public ResponseEntity<List<WorkbasketSummary>> getWorkbaskets(@RequestParam MultiValueMap<String, String> params) {
List<Workbasket> workbaskets = new ArrayList<>(); List<WorkbasketSummary> workbaskets = new ArrayList<>();
if (params.containsKey("requiredPermission")) { if (params.containsKey("requiredPermission")) {
List<WorkbasketAuthorization> authorizations = new ArrayList<>(); List<WorkbasketAuthorization> authorizations = new ArrayList<>();
params.get("requiredPermission").stream().forEach(item -> { params.get("requiredPermission").stream().forEach(item -> {