diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java index 78824c613..a74a42b7e 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java @@ -1,11 +1,15 @@ package pro.taskana.impl; import org.apache.ibatis.session.RowBounds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import pro.taskana.ClassificationQuery; import pro.taskana.TaskanaEngine; +import pro.taskana.impl.util.LoggerUtils; import pro.taskana.model.Classification; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -16,6 +20,7 @@ import java.util.List; public class ClassificationQueryImpl implements ClassificationQuery { private static final String LINK_TO_MAPPER = "pro.taskana.model.mappings.QueryMapper.queryClassification"; + private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationQueryImpl.class); private TaskanaEngineImpl taskanaEngineImpl; private String[] parentClassificationId; private String[] category; @@ -115,32 +120,46 @@ public class ClassificationQueryImpl implements ClassificationQuery { @Override public List list() { + LOGGER.debug("entry to list(), this = {}", this); + List result = null; try { taskanaEngineImpl.openConnection(); - return taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); + result = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public List list(int offset, int limit) { + LOGGER.debug("entry to list(offset = {}, limit = {}), this = {}", offset, limit, this); + List result = null; try { taskanaEngineImpl.openConnection(); RowBounds rowBounds = new RowBounds(offset, limit); - return taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds); + result = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public Classification single() { + LOGGER.debug("entry to single(), this = {}", this); + Classification result = null; try { taskanaEngineImpl.openConnection(); - return taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); + result = taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from single(). Returning result {} ", result); } } @@ -247,4 +266,40 @@ public class ClassificationQueryImpl implements ClassificationQuery { public void setValidUntil(Date[] validUntil) { this.validUntil = validUntil; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ClassificationQueryImpl [taskanaEngineImpl="); + builder.append(taskanaEngineImpl); + builder.append(", parentClassificationId="); + builder.append(Arrays.toString(parentClassificationId)); + builder.append(", category="); + builder.append(Arrays.toString(category)); + builder.append(", type="); + builder.append(Arrays.toString(type)); + builder.append(", domain="); + builder.append(Arrays.toString(domain)); + builder.append(", validInDomain="); + builder.append(validInDomain); + builder.append(", created="); + builder.append(Arrays.toString(created)); + builder.append(", name="); + builder.append(Arrays.toString(name)); + builder.append(", description="); + builder.append(description); + builder.append(", priority="); + builder.append(Arrays.toString(priority)); + builder.append(", serviceLevel="); + builder.append(Arrays.toString(serviceLevel)); + builder.append(", customFields="); + builder.append(Arrays.toString(customFields)); + builder.append(", validFrom="); + builder.append(Arrays.toString(validFrom)); + builder.append(", validUntil="); + builder.append(Arrays.toString(validUntil)); + builder.append("]"); + return builder.toString(); + } + } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java index f53ae5394..df5e03c39 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java @@ -6,6 +6,7 @@ import pro.taskana.TaskanaEngine; import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.impl.util.IdGenerator; +import pro.taskana.impl.util.LoggerUtils; import pro.taskana.model.Classification; import pro.taskana.model.mappings.ClassificationMapper; @@ -15,6 +16,9 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * This is the implementation of ClassificationService. */ @@ -22,6 +26,7 @@ public class ClassificationServiceImpl implements ClassificationService { private static final String ID_PREFIX_CLASSIFICATION = "CLI"; public static final Date CURRENT_CLASSIFICATIONS_VALID_UNTIL = Date.valueOf("9999-12-31"); + private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationServiceImpl.class); private ClassificationMapper classificationMapper; private TaskanaEngine taskanaEngine; private TaskanaEngineImpl taskanaEngineImpl; @@ -35,13 +40,18 @@ public class ClassificationServiceImpl implements ClassificationService { @Override public List getClassificationTree() throws NotAuthorizedException { + LOGGER.debug("entry to getClassificationTree()"); + List result = null; try { taskanaEngineImpl.openConnection(); List rootClassifications; rootClassifications = this.createClassificationQuery().parentClassification("").validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL).list(); - return this.populateChildClassifications(rootClassifications); + result = this.populateChildClassifications(rootClassifications); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getClassificationTree(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @@ -62,7 +72,8 @@ public class ClassificationServiceImpl implements ClassificationService { @Override public void addClassification(Classification classification) { - try { + LOGGER.debug("entry to addClassification(classification = {})", classification); + try { taskanaEngineImpl.openConnection(); classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); classification.setCreated(Date.valueOf(LocalDate.now())); @@ -70,13 +81,16 @@ public class ClassificationServiceImpl implements ClassificationService { this.setDefaultValues(classification); classificationMapper.insert(classification); + LOGGER.info("Method addClassification added classification {}.", classification); } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from addClassification()"); } } @Override public void updateClassification(Classification classification) { + LOGGER.debug("entry to updateClassification(Classification = {})", classification); try { taskanaEngineImpl.openConnection(); this.setDefaultValues(classification); @@ -84,16 +98,19 @@ public class ClassificationServiceImpl implements ClassificationService { Classification oldClassification = null; try { oldClassification = this.getClassification(classification.getId(), classification.getDomain()); + LOGGER.info("Method updateClassification() inserted classification {}.", classification); // ! If you update an classification twice the same day, // the older version is valid from today until yesterday. if (!oldClassification.getDomain().equals(classification.getDomain())) { classification.setCreated(Date.valueOf(LocalDate.now())); classificationMapper.insert(classification); + LOGGER.info("Method updateClassification() inserted classification {}.", classification); } else { oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1))); classificationMapper.update(oldClassification); classificationMapper.insert(classification); + LOGGER.info("Method updateClassification() updated old classification {} and inserted new {}.", oldClassification, classification); } } catch (ClassificationNotFoundException e) { classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); @@ -102,6 +119,7 @@ public class ClassificationServiceImpl implements ClassificationService { } } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from updateClassification()."); } } @@ -132,32 +150,38 @@ public class ClassificationServiceImpl implements ClassificationService { @Override public List getAllClassificationsWithId(String id, String domain) { + LOGGER.debug("entry to getAllClassificationsWithId(id = {}, domain = {})", id, domain); + List result = null; try { taskanaEngineImpl.openConnection(); - return classificationMapper.getAllClassificationsWithId(id, domain); + result = classificationMapper.getAllClassificationsWithId(id, domain); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getAllClassificationsWithId(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } - } @Override public Classification getClassification(String id, String domain) throws ClassificationNotFoundException { - try { + LOGGER.debug("entry to getClassification(id = {}, domain = {})", id, domain); + Classification result = null; + try { taskanaEngineImpl.openConnection(); - Classification classification = classificationMapper.findByIdAndDomain(id, domain, CURRENT_CLASSIFICATIONS_VALID_UNTIL); - if (classification == null) { - classification = classificationMapper.findByIdAndDomain(id, "", CURRENT_CLASSIFICATIONS_VALID_UNTIL); + result = classificationMapper.findByIdAndDomain(id, domain, CURRENT_CLASSIFICATIONS_VALID_UNTIL); + if (result == null) { + result = classificationMapper.findByIdAndDomain(id, "", CURRENT_CLASSIFICATIONS_VALID_UNTIL); } - if (classification == null) { + if (result == null) { throw new ClassificationNotFoundException(id); } - return classification; + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from getClassification(). Returning result {} ", result); } - } @Override diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java index e777b2495..5d03e5686 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java @@ -1,11 +1,15 @@ package pro.taskana.impl; +import java.util.Arrays; import java.util.List; import org.apache.ibatis.session.RowBounds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import pro.taskana.ObjectReferenceQuery; import pro.taskana.TaskanaEngine; +import pro.taskana.impl.util.LoggerUtils; import pro.taskana.model.ObjectReference; /** @@ -15,6 +19,7 @@ import pro.taskana.model.ObjectReference; public class ObjectReferenceQueryImpl implements ObjectReferenceQuery { private static final String LINK_TO_MAPPER = "pro.taskana.model.mappings.QueryMapper.queryObjectReference"; + private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReferenceQueryImpl.class); private TaskanaEngineImpl taskanaEngineImpl; private String[] company; @@ -59,32 +64,46 @@ public class ObjectReferenceQueryImpl implements ObjectReferenceQuery { @Override public List list() { + LOGGER.debug("entry to list(), this = {}", this); + List result = null; try { taskanaEngineImpl.openConnection(); - return taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); + result = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public List list(int offset, int limit) { + LOGGER.debug("entry to list(offset = {}, limit = {}), this = {}", offset, limit, this); + List result = null; try { taskanaEngineImpl.openConnection(); RowBounds rowBounds = new RowBounds(offset, limit); - return taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds); + result = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds); + return result; } finally { taskanaEngineImpl.returnConnection(); - } + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); + } } @Override public ObjectReference single() { + LOGGER.debug("entry to single(), this = {}", this); + ObjectReference result = null; try { taskanaEngineImpl.openConnection(); - return taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); + result = taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from single(). Returning result {} ", result); } } @@ -127,4 +146,23 @@ public class ObjectReferenceQueryImpl implements ObjectReferenceQuery { public void setValue(String[] value) { this.value = value; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ObjectReferenceQueryImpl [taskanaEngineImpl="); + builder.append(taskanaEngineImpl); + builder.append(", company="); + builder.append(Arrays.toString(company)); + builder.append(", system="); + builder.append(Arrays.toString(system)); + builder.append(", systemInstance="); + builder.append(Arrays.toString(systemInstance)); + builder.append(", type="); + builder.append(Arrays.toString(type)); + builder.append(", value="); + builder.append(Arrays.toString(value)); + builder.append("]"); + return builder.toString(); + } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java index 3feff4f3c..23fc400ee 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java @@ -1,14 +1,18 @@ package pro.taskana.impl; +import java.util.Arrays; import java.util.List; import org.apache.ibatis.session.RowBounds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import pro.taskana.ClassificationQuery; import pro.taskana.ObjectReferenceQuery; import pro.taskana.TaskQuery; import pro.taskana.TaskanaEngine; import pro.taskana.exceptions.NotAuthorizedException; +import pro.taskana.impl.util.LoggerUtils; import pro.taskana.model.Task; import pro.taskana.model.TaskState; import pro.taskana.model.WorkbasketAuthorization; @@ -19,6 +23,7 @@ import pro.taskana.model.WorkbasketAuthorization; public class TaskQueryImpl implements TaskQuery { private static final String LINK_TO_MAPPER = "pro.taskana.model.mappings.QueryMapper.queryTasks"; + private static final Logger LOGGER = LoggerFactory.getLogger(TaskQueryImpl.class); private TaskanaEngineImpl taskanaEngineImpl; @@ -111,35 +116,49 @@ public class TaskQueryImpl implements TaskQuery { @Override public List list() throws NotAuthorizedException { + LOGGER.debug("entry to list(), this = {}", this); + List result = null; try { taskanaEngineImpl.openConnection(); checkAuthorization(); - return taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); + result = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public List list(int offset, int limit) throws NotAuthorizedException { + LOGGER.debug("entry to list(offset = {}, limit = {}), this = {}", offset, limit, this); + List result = null; try { taskanaEngineImpl.openConnection(); checkAuthorization(); RowBounds rowBounds = new RowBounds(offset, limit); - return taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds); + result = taskanaEngineImpl.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public Task single() throws NotAuthorizedException { + LOGGER.debug("entry to single(), this = {}", this); + Task result = null; try { taskanaEngineImpl.openConnection(); checkAuthorization(); - return taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); + result = taskanaEngineImpl.getSqlSession().selectOne(LINK_TO_MAPPER, this); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from single(). Returning result {} ", result); } } @@ -246,4 +265,35 @@ public class TaskQueryImpl implements TaskQuery { public void setCustomFields(String[] customFields) { this.customFields = customFields; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("TaskQueryImpl [taskanaEngineImpl="); + builder.append(taskanaEngineImpl); + builder.append(", name="); + builder.append(Arrays.toString(name)); + builder.append(", description="); + builder.append(description); + builder.append(", priority="); + builder.append(Arrays.toString(priority)); + builder.append(", states="); + builder.append(Arrays.toString(states)); + builder.append(", classificationQuery="); + builder.append(classificationQuery); + builder.append(", workbasketId="); + builder.append(Arrays.toString(workbasketId)); + builder.append(", owner="); + builder.append(Arrays.toString(owner)); + builder.append(", objectReferenceQuery="); + builder.append(objectReferenceQuery); + builder.append(", isRead="); + builder.append(isRead); + builder.append(", isTransferred="); + builder.append(isTransferred); + builder.append(", customFields="); + builder.append(Arrays.toString(customFields)); + builder.append("]"); + return builder.toString(); + } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java index 228146459..d0b448f14 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java @@ -11,6 +11,7 @@ import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.impl.util.IdGenerator; +import pro.taskana.impl.util.LoggerUtils; import pro.taskana.model.*; import pro.taskana.model.mappings.ObjectReferenceMapper; import pro.taskana.model.mappings.TaskMapper; @@ -51,6 +52,7 @@ public class TaskServiceImpl implements TaskService { @Override public Task claim(String id, String userName) throws TaskNotFoundException { + LOGGER.debug("entry to claim(id = {}, userName = {})", id, userName); Task task = null; try { taskanaEngineImpl.openConnection(); @@ -62,18 +64,21 @@ public class TaskServiceImpl implements TaskService { task.setClaimed(now); task.setState(TaskState.CLAIMED); taskMapper.update(task); - LOGGER.debug("User '{}' claimed task '{}'.", userName, id); + LOGGER.info("Method claim() claimed task '{}' for user '{}'.", id, userName); } else { + LOGGER.warn("Method claim() didn't find task with id {}. Throwing TaskNotFoundException", id); throw new TaskNotFoundException(id); } } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from claim()"); } return task; } @Override public Task complete(String id) throws TaskNotFoundException { + LOGGER.debug("entry to complete(id = {})", id); Task task = null; try { taskanaEngineImpl.openConnection(); @@ -84,18 +89,21 @@ public class TaskServiceImpl implements TaskService { task.setModified(now); task.setState(TaskState.COMPLETED); taskMapper.update(task); - LOGGER.debug("Task '{}' completed.", id); + LOGGER.debug("Method complete() completed Task '{}'.", id); } else { + LOGGER.warn("Method complete() didn't find task with id {}. Throwing TaskNotFoundException", id); throw new TaskNotFoundException(id); } } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from complete()"); } return task; } @Override public Task create(Task task) throws NotAuthorizedException, WorkbasketNotFoundException { + LOGGER.debug("entry to create(task = {})", task); try { taskanaEngineImpl.openConnection(); taskanaEngine.getWorkbasketService().checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.APPEND); @@ -139,54 +147,71 @@ public class TaskServiceImpl implements TaskService { this.taskMapper.insert(task); - LOGGER.debug("Task '{}' created.", task.getId()); + LOGGER.info("Method create() created Task '{}'.", task.getId()); return task; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from create()"); } } @Override public Task getTaskById(String id) throws TaskNotFoundException { + LOGGER.debug("entry to getTaskById(id = {})", id); + Task result = null; try { taskanaEngineImpl.openConnection(); - Task task = taskMapper.findById(id); - if (task != null) { - return task; + result = taskMapper.findById(id); + if (result != null) { + return result; } else { + LOGGER.warn("Method getTaskById() didn't find task with id {}. Throwing TaskNotFoundException", id); throw new TaskNotFoundException(id); } } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from getTaskById(). Returning result {} ", result); } } @Override public List getTaskCountForState(List states) { + LOGGER.debug("entry to getTaskCountForState(states = {})", LoggerUtils.listToString(states)); + List result = null; try { taskanaEngineImpl.openConnection(); - return taskMapper.getTaskCountForState(states); + result = taskMapper.getTaskCountForState(states); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getTaskCountForState(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public long getTaskCountForWorkbasketByDaysInPastAndState(String workbasketId, long daysInPast, List states) { + LOGGER.debug("entry to getTaskCountForWorkbasketByDaysInPastAndState(workbasketId {}, daysInPast={}, states = {})", + workbasketId, daysInPast, LoggerUtils.listToString(states)); + long result = -1; try { taskanaEngineImpl.openConnection(); LocalDate time = LocalDate.now(); time = time.minusDays(daysInPast); Date fromDate = Date.valueOf(time); - return taskMapper.getTaskCountForWorkbasketByDaysInPastAndState(workbasketId, fromDate, states); + result = taskMapper.getTaskCountForWorkbasketByDaysInPastAndState(workbasketId, fromDate, states); + return result; } finally { taskanaEngineImpl.returnConnection(); - } + LOGGER.debug("exit from getTaskCountForWorkbasketByDaysInPastAndState(). Returning result {} ", result); + } } @Override public Task transfer(String taskId, String destinationWorkbasketId) throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException { + LOGGER.debug("entry to transfer(taskId = {}, destinationWorkbasketId = {})", taskId, destinationWorkbasketId); + Task result = null; try { taskanaEngineImpl.openConnection(); Task task = getTaskById(taskId); @@ -210,37 +235,51 @@ public class TaskServiceImpl implements TaskService { task.setModified(Timestamp.valueOf(LocalDateTime.now())); taskMapper.update(task); - return getTaskById(taskId); + result = getTaskById(taskId); + LOGGER.info("Method transfer() transferred Task '{}' to destination workbasket {}", taskId, destinationWorkbasketId); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from transfer(). Returning result {} ", result); } } @Override public List getTaskCountByWorkbasketAndDaysInPastAndState(long daysInPast, List states) { + LOGGER.debug("entry to getTaskCountByWorkbasketAndDaysInPastAndState(daysInPast = {}, states = {})", daysInPast, LoggerUtils.listToString(states)); + List result = null; try { taskanaEngineImpl.openConnection(); LocalDate time = LocalDate.now(); time = time.minusDays(daysInPast); Date fromDate = Date.valueOf(time); - return taskMapper.getTaskCountByWorkbasketIdAndDaysInPastAndState(fromDate, states); + result = taskMapper.getTaskCountByWorkbasketIdAndDaysInPastAndState(fromDate, states); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getTaskCountByWorkbasketAndDaysInPastAndState(daysInPast,states). Returning {} resulting Objects: {} ", + numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public Task setTaskRead(String taskId, boolean isRead) throws TaskNotFoundException { + LOGGER.debug("entry to setTaskRead(taskIdt = {}, isRead = {})", taskId, isRead); + Task result = null; try { taskanaEngineImpl.openConnection(); Task task = getTaskById(taskId); task.setRead(true); task.setModified(Timestamp.valueOf(LocalDateTime.now())); taskMapper.update(task); - return getTaskById(taskId); + result = getTaskById(taskId); + LOGGER.info("Method setTaskRead() set read property of Task '{}' to {} ", result, isRead); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from setTaskRead(taskId, isRead). Returning result {} ", result); } } 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 d617780cb..ede8f43e1 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 @@ -7,6 +7,7 @@ import pro.taskana.WorkbasketService; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.impl.util.IdGenerator; +import pro.taskana.impl.util.LoggerUtils; import pro.taskana.model.Workbasket; import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAuthorization; @@ -52,21 +53,26 @@ public class WorkbasketServiceImpl implements WorkbasketService { @Override public Workbasket getWorkbasket(String workbasketId) throws WorkbasketNotFoundException { + LOGGER.debug("entry to getWorkbasket(workbasketId = {})", workbasketId); + Workbasket result = null; try { taskanaEngineImpl.openConnection(); - Workbasket workbasket = workbasketMapper.findById(workbasketId); - if (workbasket == null) { + result = workbasketMapper.findById(workbasketId); + if (result == null) { + LOGGER.warn("Method getWorkbasket() didn't find workbasket with id {}. Throwing WorkbasketNotFoundException", workbasketId); throw new WorkbasketNotFoundException(workbasketId); } - - return workbasket; + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from getWorkbasket(workbasketId). Returning result {} ", result); } } @Override public List getWorkbaskets(List permissions) { + LOGGER.debug("entry to getWorkbaskets(permissions = {})", LoggerUtils.listToString(permissions)); + List result = null; try { taskanaEngineImpl.openConnection(); //use a set to avoid duplicates @@ -74,26 +80,35 @@ public class WorkbasketServiceImpl implements WorkbasketService { for (String accessId : CurrentUserContext.getAccessIds()) { workbaskets.addAll(workbasketMapper.findByPermission(permissions, accessId)); } - List workbasketList = new ArrayList(); - workbasketList.addAll(workbaskets); - return workbasketList; + result = new ArrayList(); + result.addAll(workbaskets); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getWorkbaskets(permissions). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public List getWorkbaskets() { + LOGGER.debug("entry to getWorkbaskets()"); + List result = null; try { taskanaEngineImpl.openConnection(); - return workbasketMapper.findAll(); + result = workbasketMapper.findAll(); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getWorkbaskets(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public Workbasket createWorkbasket(Workbasket workbasket) { + LOGGER.debug("entry to createtWorkbasket(workbasket)", workbasket); + Workbasket result = null; try { taskanaEngineImpl.openConnection(); Timestamp now = new Timestamp(System.currentTimeMillis()); @@ -103,26 +118,31 @@ public class WorkbasketServiceImpl implements WorkbasketService { workbasket.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET)); } workbasketMapper.insert(workbasket); - LOGGER.debug("Workbasket '{}' created", workbasket.getId()); + LOGGER.info("Method createWorkbasket() created Workbasket '{}'", workbasket); if (workbasket.getDistributionTargets() != null) { for (Workbasket distributionTarget : workbasket.getDistributionTargets()) { if (workbasketMapper.findById(distributionTarget.getId()) == null) { distributionTarget.setCreated(now); distributionTarget.setModified(now); workbasketMapper.insert(distributionTarget); - LOGGER.debug("Workbasket '{}' created", distributionTarget.getId()); + LOGGER.info("Method createWorkbasket() created distributionTarget '{}'", distributionTarget); } distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId()); + LOGGER.info("Method createWorkbasket() created distributiontarget for source '{}' and target {}", workbasket.getId(), distributionTarget.getId()); } } - return workbasketMapper.findById(workbasket.getId()); + result = workbasketMapper.findById(workbasket.getId()); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from createWorkbasket(workbasket). Returning result {} ", result); } } @Override public Workbasket updateWorkbasket(Workbasket workbasket) throws NotAuthorizedException { + LOGGER.debug("entry to updateWorkbasket(workbasket)", workbasket); + Workbasket result = null; try { taskanaEngineImpl.openConnection(); workbasket.setModified(new Timestamp(System.currentTimeMillis())); @@ -133,66 +153,88 @@ public class WorkbasketServiceImpl implements WorkbasketService { if (!oldDistributionTargets.contains(distributionTarget.getId())) { if (workbasketMapper.findById(distributionTarget.getId()) == null) { workbasketMapper.insert(distributionTarget); - LOGGER.debug("Workbasket '{}' created", distributionTarget.getId()); + LOGGER.info(" Method updateWorkbasket() created distributionTarget '{}'", distributionTarget); } distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId()); + LOGGER.info("Method updateWorkbasket() created distributionTarget for '{}' and '{}'", workbasket.getId(), distributionTarget.getId()); } else { oldDistributionTargets.remove(distributionTarget.getId()); } } distributionTargetMapper.deleteMultiple(workbasket.getId(), oldDistributionTargets); - LOGGER.debug("Workbasket '{}' updated", workbasket.getId()); - return workbasketMapper.findById(workbasket.getId()); + LOGGER.info("Method updateWorkbasket() deleted distributionTargets for '{}' and old distribution targets {}", + workbasket.getId(), LoggerUtils.listToString(oldDistributionTargets)); + + LOGGER.info("Method updateWorkbasket() updated workbasket '{}'", workbasket.getId()); + result = workbasketMapper.findById(workbasket.getId()); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from updateWorkbasket(). Returning result {} ", result); } } @Override public WorkbasketAccessItem createWorkbasketAuthorization(WorkbasketAccessItem workbasketAccessItem) { + LOGGER.debug("entry to createWorkbasketAuthorization(workbasketAccessItem = {})", workbasketAccessItem); try { taskanaEngineImpl.openConnection(); workbasketAccessItem.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_AUTHORIZATION)); workbasketAccessMapper.insert(workbasketAccessItem); + LOGGER.info("Method createWorkbasketAuthorization() created workbaskteAccessItem {}", workbasketAccessItem); return workbasketAccessItem; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from createWorkbasketAuthorization(workbasketAccessItem). Returning result {}", workbasketAccessItem); } } @Override public WorkbasketAccessItem getWorkbasketAuthorization(String id) { - try { + LOGGER.debug("entry to getWorkbasketAuthorization(id = {})", id); + WorkbasketAccessItem result = null; + try { taskanaEngineImpl.openConnection(); - return workbasketAccessMapper.findById(id); + result = workbasketAccessMapper.findById(id); + return result; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from getWorkbasketAuthorization(id). Returning result {}", result); } } @Override public void deleteWorkbasketAuthorization(String id) { + LOGGER.debug("entry to deleteWorkbasketAuthorization(id = {})", id); try { taskanaEngineImpl.openConnection(); workbasketAccessMapper.delete(id); + LOGGER.info("Method deleteWorkbasketAuthorization() deleted workbasketAccessItem wit Id {}", id); } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from deleteWorkbasketAuthorization(id)."); } } @Override public List getAllAuthorizations() { + LOGGER.debug("entry to getAllAuthorizations()"); + List result = null; try { taskanaEngineImpl.openConnection(); - return workbasketAccessMapper.findAll(); + result = workbasketAccessMapper.findAll(); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getAllAuthorizations(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } @Override public void checkAuthorization(String workbasketId, WorkbasketAuthorization workbasketAuthorization) throws NotAuthorizedException { + LOGGER.debug("entry to checkAuthorization(workbasketId = {}, workbasketAuthorization = {})", workbasketId, workbasketAuthorization); try { taskanaEngineImpl.openConnection(); // Skip permission check is security is not enabled @@ -202,17 +244,20 @@ public class WorkbasketServiceImpl implements WorkbasketService { } List accessIds = CurrentUserContext.getAccessIds(); - LOGGER.debug("Verifying that {} has the permission {} on workbasket {}", + LOGGER.debug("checkAuthorization: Verifying that {} has the permission {} on workbasket {}", CurrentUserContext.getUserid(), workbasketAuthorization.name(), workbasketId); List accessItems = workbasketAccessMapper .findByWorkbasketAndAccessIdAndAuthorizations(workbasketId, accessIds, workbasketAuthorization.name()); if (accessItems.size() <= 0) { + LOGGER.debug("exit from checkAuthorization() with NotAuthorizedExeption"); throw new NotAuthorizedException("Not authorized. Authorization '" + workbasketAuthorization.name() + "' on workbasket '" + workbasketId + "' is needed."); } + LOGGER.debug("normal exit from checkAuthorization(). The user is authorized."); + } finally { taskanaEngineImpl.returnConnection(); } @@ -220,22 +265,30 @@ public class WorkbasketServiceImpl implements WorkbasketService { @Override public WorkbasketAccessItem updateWorkbasketAuthorization(WorkbasketAccessItem workbasketAccessItem) { + LOGGER.debug("entry to updateWorkbasketAuthorization(workbasketAccessItem = {}", workbasketAccessItem); try { taskanaEngineImpl.openConnection(); workbasketAccessMapper.update(workbasketAccessItem); + LOGGER.info("Method updateWorkbasketAuthorization() updated workbasketAccessItem {}", workbasketAccessItem); return workbasketAccessItem; } finally { taskanaEngineImpl.returnConnection(); + LOGGER.debug("exit from updateWorkbasketAuthorization(workbasketAccessItem). Returning {}", workbasketAccessItem); } } @Override public List getWorkbasketAuthorizations(String workbasketId) { + LOGGER.debug("entry to getWorkbasketAuthorizations(workbasketId = {})", workbasketId); + List result = null; try { taskanaEngineImpl.openConnection(); - return workbasketAccessMapper.findByWorkbasketId(workbasketId); + result = workbasketAccessMapper.findByWorkbasketId(workbasketId); + return result; } finally { taskanaEngineImpl.returnConnection(); + int numberOfResultObjects = result == null ? 0 : result.size(); + LOGGER.debug("exit from getWorkbasketAuthorizations(workbasketId). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/util/LoggerUtils.java b/lib/taskana-core/src/main/java/pro/taskana/impl/util/LoggerUtils.java new file mode 100644 index 000000000..3a771a90b --- /dev/null +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/util/LoggerUtils.java @@ -0,0 +1,34 @@ +package pro.taskana.impl.util; + +import java.util.List; + +/** + * Util methods for logging. + * @author bbr + * + */ +public final class LoggerUtils { + + private LoggerUtils() { + } + + /** + * make a String for logging from a list of objects. + * @param list + * @return A String representation of the list. + */ + public static String listToString(List list) { + if (list == null || list.isEmpty()) { + return "[]"; + } else { + StringBuilder builder = new StringBuilder(); + builder.append("["); + for (T t : list) { + builder.append(t.toString()); + builder.append(";"); + } + builder.append("]"); + return builder.toString(); + } + } +} diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Classification.java b/lib/taskana-core/src/main/java/pro/taskana/model/Classification.java index 9e976101e..8f3e8154e 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Classification.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/Classification.java @@ -197,4 +197,54 @@ public class Classification { this.validUntil = validUntil; } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Classification [id="); + builder.append(id); + builder.append(", parentClassificationId="); + builder.append(parentClassificationId); + builder.append(", category="); + builder.append(category); + builder.append(", type="); + builder.append(type); + builder.append(", domain="); + builder.append(domain); + builder.append(", isValidInDomain="); + builder.append(isValidInDomain); + builder.append(", created="); + builder.append(created); + builder.append(", name="); + builder.append(name); + builder.append(", description="); + builder.append(description); + builder.append(", priority="); + builder.append(priority); + builder.append(", serviceLevel="); + builder.append(serviceLevel); + builder.append(", custom1="); + builder.append(custom1); + builder.append(", custom2="); + builder.append(custom2); + builder.append(", custom3="); + builder.append(custom3); + builder.append(", custom4="); + builder.append(custom4); + builder.append(", custom5="); + builder.append(custom5); + builder.append(", custom6="); + builder.append(custom6); + builder.append(", custom7="); + builder.append(custom7); + builder.append(", custom8="); + builder.append(custom8); + builder.append(", validFrom="); + builder.append(validFrom); + builder.append(", validUntil="); + builder.append(validUntil); + builder.append("]"); + return builder.toString(); + } + + } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/ObjectReference.java b/lib/taskana-core/src/main/java/pro/taskana/model/ObjectReference.java index e46ce1164..2ea1fdc4f 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/ObjectReference.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/ObjectReference.java @@ -62,14 +62,21 @@ public class ObjectReference { @Override public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("ObjectReference("); - sb.append("id=" + id); - sb.append(", company=" + company); - sb.append(", system=" + system); - sb.append(", systemInstance=" + systemInstance); - sb.append(", type=" + type); - sb.append(", value=" + value); - return sb.toString(); + StringBuilder builder = new StringBuilder(); + builder.append("ObjectReference [id="); + builder.append(id); + builder.append(", company="); + builder.append(company); + builder.append(", system="); + builder.append(system); + builder.append(", systemInstance="); + builder.append(systemInstance); + builder.append(", type="); + builder.append(type); + builder.append(", value="); + builder.append(value); + builder.append("]"); + return builder.toString(); } + } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java index 400364842..1be29eb6c 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java @@ -281,39 +281,71 @@ public class Task { this.custom10 = custom10; } + @Override public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("TASK("); - sb.append("id=" + id); - sb.append(", created=" + created); - sb.append(", claimed=" + claimed); - sb.append(", completed=" + completed); - sb.append(", modified=" + modified); - sb.append(", planned=" + planned); - sb.append(", due=" + due); - sb.append(", name=" + name); - sb.append(", description=" + description); - sb.append(", priority=" + priority); - sb.append(", state=" + state); - sb.append(", classification=" + classification); - sb.append(", workbasketId=" + workbasketId); - sb.append(", businessProcessId=" + businessProcessId); - sb.append(", parentBusinessProcessId=" + parentBusinessProcessId); - sb.append(", owner=" + owner); - sb.append(", primaryObjRef=" + primaryObjRef); - sb.append(", isRead=" + isRead); - sb.append(", isTransferred=" + isTransferred); - sb.append(", custom1=" + custom1); - sb.append(", custom2=" + custom2); - sb.append(", custom3=" + custom3); - sb.append(", custom4=" + custom4); - sb.append(", custom5=" + custom5); - sb.append(", custom6=" + custom6); - sb.append(", custom7=" + custom7); - sb.append(", custom8=" + custom8); - sb.append(", custom9=" + custom9); - sb.append(", custom10=" + custom10); - sb.append(")"); - return sb.toString(); + StringBuilder builder = new StringBuilder(); + builder.append("Task [id="); + builder.append(id); + builder.append(", created="); + builder.append(created); + builder.append(", claimed="); + builder.append(claimed); + builder.append(", completed="); + builder.append(completed); + builder.append(", modified="); + builder.append(modified); + builder.append(", planned="); + builder.append(planned); + builder.append(", due="); + builder.append(due); + builder.append(", name="); + builder.append(name); + builder.append(", description="); + builder.append(description); + builder.append(", priority="); + builder.append(priority); + builder.append(", state="); + builder.append(state); + builder.append(", classification="); + builder.append(classification); + builder.append(", workbasketId="); + builder.append(workbasketId); + builder.append(", businessProcessId="); + builder.append(businessProcessId); + builder.append(", parentBusinessProcessId="); + builder.append(parentBusinessProcessId); + builder.append(", owner="); + builder.append(owner); + builder.append(", primaryObjRef="); + builder.append(primaryObjRef); + builder.append(", isRead="); + builder.append(isRead); + builder.append(", isTransferred="); + builder.append(isTransferred); + builder.append(", customAttributes="); + builder.append(customAttributes); + builder.append(", custom1="); + builder.append(custom1); + builder.append(", custom2="); + builder.append(custom2); + builder.append(", custom3="); + builder.append(custom3); + builder.append(", custom4="); + builder.append(custom4); + builder.append(", custom5="); + builder.append(custom5); + builder.append(", custom6="); + builder.append(custom6); + builder.append(", custom7="); + builder.append(custom7); + builder.append(", custom8="); + builder.append(custom8); + builder.append(", custom9="); + builder.append(custom9); + builder.append(", custom10="); + builder.append(custom10); + builder.append("]"); + return builder.toString(); } + } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/TaskStateCounter.java b/lib/taskana-core/src/main/java/pro/taskana/model/TaskStateCounter.java index f047988dd..b4675be28 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/TaskStateCounter.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/TaskStateCounter.java @@ -23,4 +23,15 @@ public class TaskStateCounter { public void setState(TaskState state) { this.state = state; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("TaskStateCounter [state="); + builder.append(state); + builder.append(", counter="); + builder.append(counter); + builder.append("]"); + return builder.toString(); + } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Workbasket.java b/lib/taskana-core/src/main/java/pro/taskana/model/Workbasket.java index cb49ad224..59b1abeba 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Workbasket.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/Workbasket.java @@ -72,4 +72,27 @@ public class Workbasket { public void setDistributionTargets(List distributionTargets) { this.distributionTargets = distributionTargets; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Workbasket [id="); + builder.append(id); + builder.append(", created="); + builder.append(created); + builder.append(", modified="); + builder.append(modified); + builder.append(", name="); + builder.append(name); + builder.append(", description="); + builder.append(description); + builder.append(", owner="); + builder.append(owner); + builder.append(", distributionTargets="); + builder.append(distributionTargets); + builder.append("]"); + return builder.toString(); + } } + + diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/WorkbasketAccessItem.java b/lib/taskana-core/src/main/java/pro/taskana/model/WorkbasketAccessItem.java index 9892f65c9..135ade1a2 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/WorkbasketAccessItem.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/WorkbasketAccessItem.java @@ -150,4 +150,44 @@ public class WorkbasketAccessItem { public void setPermCustom8(boolean permCustom8) { this.permCustom8 = permCustom8; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("WorkbasketAccessItem [id="); + builder.append(id); + builder.append(", workbasketId="); + builder.append(workbasketId); + builder.append(", accessId="); + builder.append(accessId); + builder.append(", permRead="); + builder.append(permRead); + builder.append(", permOpen="); + builder.append(permOpen); + builder.append(", permAppend="); + builder.append(permAppend); + builder.append(", permTransfer="); + builder.append(permTransfer); + builder.append(", permDistribute="); + builder.append(permDistribute); + builder.append(", permCustom1="); + builder.append(permCustom1); + builder.append(", permCustom2="); + builder.append(permCustom2); + builder.append(", permCustom3="); + builder.append(permCustom3); + builder.append(", permCustom4="); + builder.append(permCustom4); + builder.append(", permCustom5="); + builder.append(permCustom5); + builder.append(", permCustom6="); + builder.append(permCustom6); + builder.append(", permCustom7="); + builder.append(permCustom7); + builder.append(", permCustom8="); + builder.append(permCustom8); + builder.append("]"); + return builder.toString(); + } + }