package elw.vo; import java.util.Collections; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import org.akraievoy.couch.Squab; public class Task extends Squab implements IdNamed, Cloneable { private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public Task withId(String id) { setId(id); return this; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } private SortedMap<String, Version> versions = new TreeMap<String, Version>(); public SortedMap<String, Version> getVersions() { return Collections.unmodifiableSortedMap(versions); } public void setVersions(SortedMap<String, Version> versions) { this.versions.clear(); if (versions != null) { this.versions.putAll(versions); } } private final String[] extraPathElems; public Task() { this.extraPathElems = null; } public Task(String[] extraPathElems) { this.extraPathElems = extraPathElems; } @Override protected String[] pathElems() { if (extraPathElems == null || extraPathElems.length != 2) { throw new IllegalStateException("pathElems: courseId" + PATH_SEP + "tTypeId" + PATH_SEP + "taskId"); } else { return new String[] {extraPathElems[0], extraPathElems[1], id}; } } @Override public Task clone() throws CloneNotSupportedException { final Task clone = (Task) super.clone(); clone.versions = new TreeMap<String, Version>(); for (Map.Entry<String, Version> verEntry : versions.entrySet()) { clone.versions.put(verEntry.getKey(), verEntry.getValue().clone()); } return clone; } }