diff --git a/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/Classification.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/Classification.java index 1b9a9a7b2..c454d550d 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/Classification.java +++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/Classification.java @@ -177,4 +177,11 @@ public interface Classification extends ClassificationSummary { * @return the ClassificationSummary object for the current classification */ ClassificationSummary asSummary(); + + /** + * Duplicates this Classification + * + * @return a copy of this Classification + */ + Classification clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/ClassificationSummary.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/ClassificationSummary.java index cf36c89a8..6a23d0e03 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/ClassificationSummary.java +++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/models/ClassificationSummary.java @@ -4,7 +4,7 @@ package pro.taskana.classification.api.models; * Interface for ClassificationSummaries. This is a specific short model-object which only requieres * the most important informations. Specific ones can be load afterwards via ID. */ -public interface ClassificationSummary { +public interface ClassificationSummary extends Cloneable { /** * Gets the id of the classification. @@ -63,8 +63,8 @@ public interface ClassificationSummary { String getParentKey(); /** - * Gets the service level of the classification. It is a String in ISO-8601 duration - * format. See the parse() method of {@code Duration} for details. + * Gets the service level of the classification. It is a String in ISO-8601 duration format. See + * the parse() method of {@code Duration} for details. * * @return the service level */ @@ -139,4 +139,11 @@ public interface ClassificationSummary { * @return custom8 */ String getCustom8(); + + /** + * Duplicates this ClassificationSummary + * + * @return a copy of this ClassificationSummary + */ + ClassificationSummary clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationImpl.java index 21a9832fe..49df772a8 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationImpl.java @@ -16,30 +16,12 @@ public class ClassificationImpl extends ClassificationSummaryImpl implements Cla public ClassificationImpl() {} - public ClassificationImpl(ClassificationImpl classification) { - this.id = classification.getId(); - this.key = classification.getKey(); - this.parentId = classification.getParentId(); - this.parentKey = classification.getParentKey(); - this.category = classification.getCategory(); - this.type = classification.getType(); - this.domain = classification.getDomain(); - this.isValidInDomain = classification.getIsValidInDomain(); - this.created = classification.getCreated(); - this.modified = classification.getModified(); - this.name = classification.getName(); - this.description = classification.getDescription(); - this.priority = classification.getPriority(); - this.serviceLevel = classification.getServiceLevel(); - this.applicationEntryPoint = classification.getApplicationEntryPoint(); - this.custom1 = classification.getCustom1(); - this.custom2 = classification.getCustom2(); - this.custom3 = classification.getCustom3(); - this.custom4 = classification.getCustom4(); - this.custom5 = classification.getCustom5(); - this.custom6 = classification.getCustom6(); - this.custom7 = classification.getCustom7(); - this.custom8 = classification.getCustom8(); + private ClassificationImpl(ClassificationImpl copyFrom) { + super(copyFrom); + isValidInDomain = copyFrom.isValidInDomain; + created = copyFrom.created; + modified = copyFrom.modified; + description = copyFrom.description; } @Override @@ -119,10 +101,14 @@ public class ClassificationImpl extends ClassificationSummaryImpl implements Cla return (other instanceof ClassificationImpl); } + @Override + public ClassificationImpl clone() { + return new ClassificationImpl(this); + } + @Override public int hashCode() { - return Objects.hash( - super.hashCode(), isValidInDomain, created, modified, description); + return Objects.hash(super.hashCode(), isValidInDomain, created, modified, description); } @Override diff --git a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationSummaryImpl.java index 12c108301..5ac051c91 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationSummaryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/models/ClassificationSummaryImpl.java @@ -29,6 +29,28 @@ public class ClassificationSummaryImpl implements ClassificationSummary { public ClassificationSummaryImpl() {} + protected ClassificationSummaryImpl(ClassificationSummaryImpl copyFrom) { + id = copyFrom.id; + applicationEntryPoint = copyFrom.applicationEntryPoint; + category = copyFrom.category; + domain = copyFrom.domain; + key = copyFrom.key; + name = copyFrom.name; + parentId = copyFrom.parentId; + parentKey = copyFrom.parentKey; + priority = copyFrom.priority; + serviceLevel = copyFrom.serviceLevel; + type = copyFrom.type; + custom1 = copyFrom.custom1; + custom2 = copyFrom.custom2; + custom3 = copyFrom.custom3; + custom4 = copyFrom.custom4; + custom5 = copyFrom.custom5; + custom6 = copyFrom.custom6; + custom7 = copyFrom.custom7; + custom8 = copyFrom.custom8; + } + @Override public String getId() { return id; @@ -97,16 +119,28 @@ public class ClassificationSummaryImpl implements ClassificationSummary { return parentKey; } + public void setParentKey(String parentKey) { + this.parentKey = parentKey; + } + @Override public String getServiceLevel() { return serviceLevel; } + public void setServiceLevel(String serviceLevel) { + this.serviceLevel = serviceLevel; + } + @Override public String getApplicationEntryPoint() { return this.applicationEntryPoint; } + public void setApplicationEntryPoint(String applicationEntryPoint) { + this.applicationEntryPoint = applicationEntryPoint; + } + @Override public int getPriority() { return priority; @@ -188,22 +222,15 @@ public class ClassificationSummaryImpl implements ClassificationSummary { this.custom8 = custom8; } - public void setApplicationEntryPoint(String applicationEntryPoint) { - this.applicationEntryPoint = applicationEntryPoint; - } - - public void setServiceLevel(String serviceLevel) { - this.serviceLevel = serviceLevel; - } - - public void setParentKey(String parentKey) { - this.parentKey = parentKey; - } - protected boolean canEqual(Object other) { return (other instanceof ClassificationSummaryImpl); } + @Override + public ClassificationSummaryImpl clone() { + return new ClassificationSummaryImpl(this); + } + @Override public int hashCode() { return Objects.hash( diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Attachment.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Attachment.java index a43e412ff..838de4487 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Attachment.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Attachment.java @@ -57,4 +57,11 @@ public interface Attachment extends AttachmentSummary { * @return the AttachmentSummary object for the current attachment */ AttachmentSummary asSummary(); + + /** + * Duplicates this Attachment + * + * @return a copy of this Attachment + */ + Attachment clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/AttachmentSummary.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/AttachmentSummary.java index 4a3cfd3dc..d9af90457 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/AttachmentSummary.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/AttachmentSummary.java @@ -8,7 +8,7 @@ import pro.taskana.classification.api.models.ClassificationSummary; * Interface for AttachmentSummaries. This is a specific short model-object which only contains the * most important information. */ -public interface AttachmentSummary { +public interface AttachmentSummary extends Cloneable { /** * Gets the id of the attachment. @@ -65,4 +65,11 @@ public interface AttachmentSummary { * @return received Instant */ Instant getReceived(); + + /** + * Duplicates this AttachmentSummary + * + * @return a copy of this AttachmentSummary + */ + AttachmentSummary clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/ObjectReference.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/ObjectReference.java index bfae4ac99..1aacc2141 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/ObjectReference.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/ObjectReference.java @@ -7,7 +7,7 @@ import org.slf4j.LoggerFactory; import pro.taskana.common.api.exceptions.InvalidArgumentException; /** ObjectReference entity. */ -public class ObjectReference { +public class ObjectReference implements Cloneable { private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReference.class); private String id; private String company; @@ -16,6 +16,44 @@ public class ObjectReference { private String type; private String value; + public ObjectReference() {} + + private ObjectReference(ObjectReference copyFrom) { + id = copyFrom.id; + company = copyFrom.company; + system = copyFrom.system; + systemInstance = copyFrom.systemInstance; + type = copyFrom.type; + value = copyFrom.value; + } + + public static void validate(ObjectReference objectReference, String objRefType, String objName) + throws InvalidArgumentException { + LOGGER.debug("entry to validateObjectReference()"); + // check that all values in the ObjectReference are set correctly + if (objectReference == null) { + throw new InvalidArgumentException( + String.format("ObectReferenc %s of %s must not be null.", objRefType, objName)); + } else if (objectReference.getCompany() == null || objectReference.getCompany().length() == 0) { + throw new InvalidArgumentException( + String.format("Company of %s of %s must not be empty", objRefType, objName)); + } else if (objectReference.getSystem() == null || objectReference.getSystem().length() == 0) { + throw new InvalidArgumentException( + String.format("System of %s of %s must not be empty", objRefType, objName)); + } else if (objectReference.getSystemInstance() == null + || objectReference.getSystemInstance().length() == 0) { + throw new InvalidArgumentException( + String.format("SystemInstance of %s of %s must not be empty", objRefType, objName)); + } else if (objectReference.getType() == null || objectReference.getType().length() == 0) { + throw new InvalidArgumentException( + String.format("Type of %s of %s must not be empty", objRefType, objName)); + } else if (objectReference.getValue() == null || objectReference.getValue().length() == 0) { + throw new InvalidArgumentException( + String.format("Value of %s of %s must not be empty", objRefType, objName)); + } + LOGGER.debug("exit from validateObjectReference()"); + } + public String getId() { return id; } @@ -64,31 +102,9 @@ public class ObjectReference { this.value = value; } - public static void validate(ObjectReference objectReference, String objRefType, String objName) - throws InvalidArgumentException { - LOGGER.debug("entry to validateObjectReference()"); - // check that all values in the ObjectReference are set correctly - if (objectReference == null) { - throw new InvalidArgumentException( - String.format("ObectReferenc %s of %s must not be null.", objRefType, objName)); - } else if (objectReference.getCompany() == null || objectReference.getCompany().length() == 0) { - throw new InvalidArgumentException( - String.format("Company of %s of %s must not be empty", objRefType, objName)); - } else if (objectReference.getSystem() == null || objectReference.getSystem().length() == 0) { - throw new InvalidArgumentException( - String.format("System of %s of %s must not be empty", objRefType, objName)); - } else if (objectReference.getSystemInstance() == null - || objectReference.getSystemInstance().length() == 0) { - throw new InvalidArgumentException( - String.format("SystemInstance of %s of %s must not be empty", objRefType, objName)); - } else if (objectReference.getType() == null || objectReference.getType().length() == 0) { - throw new InvalidArgumentException( - String.format("Type of %s of %s must not be empty", objRefType, objName)); - } else if (objectReference.getValue() == null || objectReference.getValue().length() == 0) { - throw new InvalidArgumentException( - String.format("Value of %s of %s must not be empty", objRefType, objName)); - } - LOGGER.debug("exit from validateObjectReference()"); + @Override + protected ObjectReference clone() { + return new ObjectReference(this); } @Override diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Task.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Task.java index e0d38d43e..283c95ae7 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Task.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/Task.java @@ -187,4 +187,11 @@ public interface Task extends TaskSummary { * @return classificationCategory */ String getClassificationCategory(); + + /** + * Duplicates this Task + * + * @return a copy of this Task + */ + Task clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskComment.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskComment.java index 8f173752a..f854cb2bb 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskComment.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskComment.java @@ -3,7 +3,7 @@ package pro.taskana.task.api.models; import java.time.Instant; /** TaskComment-Interface to specify TaskComment Attributes. */ -public interface TaskComment { +public interface TaskComment extends Cloneable { /** * Gets the id of the task comment. @@ -33,11 +33,8 @@ public interface TaskComment { */ String getTextField(); - /** - * Sets the text field of the task comment. - * + /** Sets the text field of the task comment. */ * @param textField the text field - */ void setTextField(String textField); /** @@ -54,6 +51,10 @@ public interface TaskComment { */ Instant getModified(); - - + /** + * Duplicates this TaskComment + * + * @return a copy of this TaskComment + */ + TaskComment clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskSummary.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskSummary.java index 70eb902a7..6b24f5bc7 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskSummary.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/models/TaskSummary.java @@ -12,7 +12,7 @@ import pro.taskana.workbasket.api.models.WorkbasketSummary; * Interface for TaskSummary. This is a specific short model-object which only contains the most * important information. */ -public interface TaskSummary { +public interface TaskSummary extends Cloneable { /** * Gets the id of the task. @@ -192,4 +192,11 @@ public interface TaskSummary { * @throws InvalidArgumentException if num has not a value of "1", "2" ... "16" */ String getCustomAttribute(String num) throws InvalidArgumentException; + + /** + * Duplicates this TaskSummary + * + * @return a copy of this TaskSummary + */ + TaskSummary clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentImpl.java index c7bf6e9e2..0a6cbbb48 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentImpl.java @@ -18,6 +18,11 @@ public class AttachmentImpl extends AttachmentSummaryImpl implements Attachment public AttachmentImpl() {} + private AttachmentImpl(AttachmentImpl copyFrom) { + super(copyFrom); + customAttributes = new HashMap<>(copyFrom.customAttributes); + } + @Override public Map getCustomAttributes() { if (customAttributes == null) { @@ -49,6 +54,11 @@ public class AttachmentImpl extends AttachmentSummaryImpl implements Attachment return (!(other instanceof AttachmentImpl)); } + @Override + public AttachmentImpl clone() { + return new AttachmentImpl(this); + } + @Override public int hashCode() { return Objects.hash(super.hashCode(), customAttributes); diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentSummaryImpl.java index ce42a66aa..daf23e828 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentSummaryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/AttachmentSummaryImpl.java @@ -22,6 +22,17 @@ public class AttachmentSummaryImpl implements AttachmentSummary { AttachmentSummaryImpl() {} + protected AttachmentSummaryImpl(AttachmentSummaryImpl copyFrom) { + id = copyFrom.id; + taskId = copyFrom.taskId; + created = copyFrom.created; + modified = copyFrom.modified; + classificationSummary = copyFrom.classificationSummary; + objectReference = copyFrom.objectReference; + channel = copyFrom.channel; + received = copyFrom.received; + } + /* * (non-Javadoc) * @see pro.taskana.impl.AttachmentSummary#getId() @@ -96,6 +107,10 @@ public class AttachmentSummaryImpl implements AttachmentSummary { return channel; } + public void setChannel(String channel) { + this.channel = channel; + } + /* * (non-Javadoc) * @see pro.taskana.impl.AttachmentSummary#getClassification() @@ -122,10 +137,6 @@ public class AttachmentSummaryImpl implements AttachmentSummary { this.received = received; } - public void setChannel(String channel) { - this.channel = channel; - } - // auxiliary method to enable MyBatis access to classificationSummary @SuppressWarnings("unused") public ClassificationSummaryImpl getClassificationSummaryImpl() { @@ -142,6 +153,11 @@ public class AttachmentSummaryImpl implements AttachmentSummary { return (!(other instanceof AttachmentSummaryImpl)); } + @Override + public AttachmentSummaryImpl clone() { + return new AttachmentSummaryImpl(this); + } + @Override public int hashCode() { return Objects.hash( diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskCommentImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskCommentImpl.java index 78c6be958..75981ba1a 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskCommentImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskCommentImpl.java @@ -14,6 +14,17 @@ public class TaskCommentImpl implements TaskComment { private Instant created; private Instant modified; + public TaskCommentImpl() {} + + private TaskCommentImpl(TaskCommentImpl copyFrom) { + id = copyFrom.id; + taskId = copyFrom.taskId; + textField = copyFrom.textField; + creator = copyFrom.creator; + created = copyFrom.created; + modified = copyFrom.modified; + } + @Override public String getId() { return id; @@ -45,6 +56,10 @@ public class TaskCommentImpl implements TaskComment { return textField; } + public void setTextField(String textField) { + this.textField = textField; + } + @Override public Instant getCreated() { return created; @@ -63,23 +78,18 @@ public class TaskCommentImpl implements TaskComment { this.modified = modified; } - public void setTextField(String textField) { - this.textField = textField; - } - protected boolean canEqual(Object other) { return (other instanceof TaskCommentImpl); } + @Override + public TaskCommentImpl clone() { + return new TaskCommentImpl(this); + } + @Override public int hashCode() { - return Objects.hash( - id, - taskId, - textField, - creator, - created, - modified); + return Objects.hash(id, taskId, textField, creator, created, modified); } @Override diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskImpl.java index c8cbaf1bb..4f09f4ea2 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskImpl.java @@ -29,6 +29,14 @@ public class TaskImpl extends TaskSummaryImpl implements Task { public TaskImpl() {} + private TaskImpl(TaskImpl copyFrom) { + super(copyFrom); + customAttributes = new HashMap<>(copyFrom.customAttributes); + callbackInfo = new HashMap<>(copyFrom.callbackInfo); + callbackState = copyFrom.callbackState; + attachments = new ArrayList<>(copyFrom.attachments); + } + public CallbackState getCallbackState() { return callbackState; } @@ -170,6 +178,14 @@ public class TaskImpl extends TaskSummaryImpl implements Task { return attachments; } + public void setAttachments(List attachments) { + if (attachments != null) { + this.attachments = attachments; + } else if (this.attachments == null) { + this.attachments = new ArrayList<>(); + } + } + @Override public TaskSummary asSummary() { TaskSummaryImpl taskSummary = new TaskSummaryImpl(); @@ -246,14 +262,6 @@ public class TaskImpl extends TaskSummaryImpl implements Task { ((ClassificationSummaryImpl) this.classificationSummary).setCategory(classificationCategory); } - public void setAttachments(List attachments) { - if (attachments != null) { - this.attachments = attachments; - } else if (this.attachments == null) { - this.attachments = new ArrayList<>(); - } - } - public String getClassificationId() { return classificationSummary == null ? null : classificationSummary.getId(); } @@ -262,6 +270,11 @@ public class TaskImpl extends TaskSummaryImpl implements Task { return (other instanceof TaskImpl); } + @Override + public TaskImpl clone() { + return new TaskImpl(this); + } + @Override public int hashCode() { return Objects.hash( diff --git a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskSummaryImpl.java index 62ae20db5..1d2594f9b 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskSummaryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/models/TaskSummaryImpl.java @@ -64,6 +64,48 @@ public class TaskSummaryImpl implements TaskSummary { public TaskSummaryImpl() {} + protected TaskSummaryImpl(TaskSummaryImpl copyFrom) { + id = copyFrom.id; + externalId = copyFrom.externalId; + created = copyFrom.created; + claimed = copyFrom.claimed; + completed = copyFrom.completed; + modified = copyFrom.modified; + planned = copyFrom.planned; + due = copyFrom.due; + name = copyFrom.name; + creator = copyFrom.creator; + note = copyFrom.note; + description = copyFrom.description; + priority = copyFrom.priority; + state = copyFrom.state; + classificationSummary = copyFrom.classificationSummary; + workbasketSummary = copyFrom.workbasketSummary; + businessProcessId = copyFrom.businessProcessId; + parentBusinessProcessId = copyFrom.parentBusinessProcessId; + owner = copyFrom.owner; + primaryObjRef = copyFrom.primaryObjRef; + isRead = copyFrom.isRead; + isTransferred = copyFrom.isTransferred; + attachmentSummaries = new ArrayList<>(copyFrom.attachmentSummaries); + custom1 = copyFrom.custom1; + custom2 = copyFrom.custom2; + custom3 = copyFrom.custom3; + custom4 = copyFrom.custom4; + custom5 = copyFrom.custom5; + custom6 = copyFrom.custom6; + custom7 = copyFrom.custom7; + custom8 = copyFrom.custom8; + custom9 = copyFrom.custom9; + custom10 = copyFrom.custom10; + custom11 = copyFrom.custom11; + custom12 = copyFrom.custom12; + custom13 = copyFrom.custom13; + custom14 = copyFrom.custom14; + custom15 = copyFrom.custom15; + custom16 = copyFrom.custom16; + } + /* * (non-Javadoc) * @see pro.taskana.TaskSummary#getTaskId() @@ -99,6 +141,10 @@ public class TaskSummaryImpl implements TaskSummary { return creator; } + public void setCreator(String creator) { + this.creator = creator; + } + /* * (non-Javadoc) * @see pro.taskana.TaskSummary#getCreated() @@ -276,6 +322,10 @@ public class TaskSummaryImpl implements TaskSummary { return attachmentSummaries; } + public void setAttachmentSummaries(List attachmentSummaries) { + this.attachmentSummaries = attachmentSummaries; + } + /* * (non-Javadoc) * @see pro.taskana.TaskSummary#getDomain() @@ -422,14 +472,6 @@ public class TaskSummaryImpl implements TaskSummary { } } - public void setAttachmentSummaries(List attachmentSummaries) { - this.attachmentSummaries = attachmentSummaries; - } - - public void setCreator(String creator) { - this.creator = creator; - } - // utility method to allow mybatis access to workbasketSummary public WorkbasketSummaryImpl getWorkbasketSummaryImpl() { return (WorkbasketSummaryImpl) workbasketSummary; @@ -605,6 +647,11 @@ public class TaskSummaryImpl implements TaskSummary { return (other instanceof TaskSummaryImpl); } + @Override + public TaskSummaryImpl clone() { + return new TaskSummaryImpl(this); + } + @Override public int hashCode() { return Objects.hash( diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/Workbasket.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/Workbasket.java index 763c8d205..472c62eb0 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/Workbasket.java +++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/Workbasket.java @@ -126,4 +126,11 @@ public interface Workbasket extends WorkbasketSummary { * @return the WorkbasketSummary object for the current work basket */ WorkbasketSummary asSummary(); + + /** + * Duplicates this Workbasket + * + * @return a copy of this Workbasket + */ + Workbasket clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketAccessItem.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketAccessItem.java index 20a1d6d6c..2052993e9 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketAccessItem.java +++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketAccessItem.java @@ -6,7 +6,7 @@ package pro.taskana.workbasket.api.models; * * @author bbr */ -public interface WorkbasketAccessItem { +public interface WorkbasketAccessItem extends Cloneable { /** * Returns the current id of the WorkbasketAccessItem. @@ -315,4 +315,11 @@ public interface WorkbasketAccessItem { * @param permCustom12 specifies whether custom12 permission is granted */ void setPermCustom12(boolean permCustom12); + + /** + * Duplicates this WorkbasketAccessItem + * + * @return a copy of this WorkbasketAccessItem + */ + WorkbasketAccessItem clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketSummary.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketSummary.java index 9a63f0323..b8784f0dd 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketSummary.java +++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/models/WorkbasketSummary.java @@ -6,7 +6,7 @@ import pro.taskana.workbasket.api.WorkbasketType; * Interface for WorkbasketSummary. This is a specific short model-object which only contains the * most important information. */ -public interface WorkbasketSummary { +public interface WorkbasketSummary extends Cloneable { /** * Gets the id of the workbasket. @@ -119,4 +119,11 @@ public interface WorkbasketSummary { * @return the workbasket's markedForDeletion property */ boolean isMarkedForDeletion(); + + /** + * Duplicates this WorkbasketSummary + * + * @return a copy of this WorkbasketSummary + */ + WorkbasketSummary clone(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketAccessItemImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketAccessItemImpl.java index ba8da98c1..3074cf2f8 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketAccessItemImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketAccessItemImpl.java @@ -30,8 +30,31 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem { private boolean permCustom11; private boolean permCustom12; - public WorkbasketAccessItemImpl() { - super(); + public WorkbasketAccessItemImpl() {} + + private WorkbasketAccessItemImpl(WorkbasketAccessItemImpl copyFrom) { + id = copyFrom.id; + workbasketId = copyFrom.workbasketId; + workbasketKey = copyFrom.workbasketKey; + accessId = copyFrom.accessId; + accessName = copyFrom.accessName; + permRead = copyFrom.permRead; + permOpen = copyFrom.permOpen; + permAppend = copyFrom.permAppend; + permTransfer = copyFrom.permTransfer; + permDistribute = copyFrom.permDistribute; + permCustom1 = copyFrom.permCustom1; + permCustom2 = copyFrom.permCustom2; + permCustom3 = copyFrom.permCustom3; + permCustom4 = copyFrom.permCustom4; + permCustom5 = copyFrom.permCustom5; + permCustom6 = copyFrom.permCustom6; + permCustom7 = copyFrom.permCustom7; + permCustom8 = copyFrom.permCustom8; + permCustom9 = copyFrom.permCustom9; + permCustom10 = copyFrom.permCustom10; + permCustom11 = copyFrom.permCustom11; + permCustom12 = copyFrom.permCustom12; } /* @@ -406,6 +429,11 @@ public class WorkbasketAccessItemImpl implements WorkbasketAccessItem { this.permCustom12 = permCustom12; } + @Override + public WorkbasketAccessItemImpl clone() { + return new WorkbasketAccessItemImpl(this); + } + @Override public int hashCode() { return Objects.hash( diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketImpl.java index 1cff2dd83..b3f00d043 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketImpl.java @@ -14,6 +14,12 @@ public class WorkbasketImpl extends WorkbasketSummaryImpl implements Workbasket public WorkbasketImpl() {} + private WorkbasketImpl(WorkbasketImpl copyFrom) { + super(copyFrom); + created = copyFrom.created; + modified = copyFrom.modified; + } + @Override public Instant getCreated() { return created; @@ -99,6 +105,11 @@ public class WorkbasketImpl extends WorkbasketSummaryImpl implements Workbasket return Objects.equals(created, other.created) && Objects.equals(modified, other.modified); } + @Override + public WorkbasketImpl clone() { + return new WorkbasketImpl(this); + } + @Override public String toString() { return "WorkbasketImpl [id=" diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketSummaryImpl.java index 8af7e43d7..e227c6d15 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketSummaryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/models/WorkbasketSummaryImpl.java @@ -27,6 +27,25 @@ public class WorkbasketSummaryImpl implements WorkbasketSummary { public WorkbasketSummaryImpl() {} + protected WorkbasketSummaryImpl(WorkbasketSummaryImpl copyFrom) { + id = copyFrom.id; + key = copyFrom.key; + name = copyFrom.name; + description = copyFrom.description; + owner = copyFrom.owner; + domain = copyFrom.domain; + type = copyFrom.type; + custom1 = copyFrom.custom1; + custom2 = copyFrom.custom2; + custom3 = copyFrom.custom3; + custom4 = copyFrom.custom4; + orgLevel1 = copyFrom.orgLevel1; + orgLevel2 = copyFrom.orgLevel2; + orgLevel3 = copyFrom.orgLevel3; + orgLevel4 = copyFrom.orgLevel4; + markedForDeletion = copyFrom.markedForDeletion; + } + /* * (non-Javadoc) * @see pro.taskana.impl.WorkbasketSummary#getId() @@ -286,6 +305,11 @@ public class WorkbasketSummaryImpl implements WorkbasketSummary { && Objects.equals(orgLevel4, other.orgLevel4); } + @Override + public WorkbasketSummaryImpl clone() { + return new WorkbasketSummaryImpl(this); + } + @Override public String toString() { return "WorkbasketSummaryImpl [id="