TSK-1168: made interfaces of entities clonable

This commit is contained in:
Christopher Heiting 2020-03-23 14:12:42 +01:00 committed by Mustapha Zorgati
parent b79c4891e3
commit 9013eaa573
21 changed files with 363 additions and 111 deletions

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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

View File

@ -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(

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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

View File

@ -187,4 +187,11 @@ public interface Task extends TaskSummary {
* @return classificationCategory
*/
String getClassificationCategory();
/**
* Duplicates this Task
*
* @return a copy of this Task
*/
Task clone();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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<String, String> 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);

View File

@ -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(

View File

@ -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

View File

@ -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<Attachment> 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<Attachment> 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(

View File

@ -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<AttachmentSummary> attachmentSummaries) {
this.attachmentSummaries = attachmentSummaries;
}
/*
* (non-Javadoc)
* @see pro.taskana.TaskSummary#getDomain()
@ -422,14 +472,6 @@ public class TaskSummaryImpl implements TaskSummary {
}
}
public void setAttachmentSummaries(List<AttachmentSummary> 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(

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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(

View File

@ -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="

View File

@ -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="