package com.metservice.kanban.model;
import static java.lang.String.format;
import org.apache.commons.lang.UnhandledException;
//TODO This class needs unit tests.
public class KanbanCell implements Cloneable {
private final WorkItemType workItemType;
private WorkItem workItem;
private WorkItem workItemAbove;
private WorkItem workItemBelow;
private WorkItem workItemTop;
public KanbanCell(WorkItemType workItemType) {
this.workItemType = workItemType;
}
public boolean isEmptyCell() {
return workItem == null;
}
public WorkItem getWorkItem() {
return workItem;
}
public void setWorkItemAbove(WorkItem workItemAbove) {
this.workItemAbove = workItemAbove;
}
public WorkItem getWorkItemAbove() {
return workItemAbove;
}
public void setWorkItemBelow(WorkItem workItemBelow) {
this.workItemBelow = workItemBelow;
}
public WorkItem getWorkItemBelow() {
return workItemBelow;
}
public WorkItem getWorkItemTop() {
return workItemTop;
}
public void setWorkItemTop(WorkItem workItemTop) {
this.workItemTop = workItemTop;
}
public WorkItemType getWorkItemType() {
return workItemType;
}
public void setWorkItem(WorkItem workItem) {
if (!isEmptyCell()) {
throw new IllegalArgumentException("work item already exists in this position");
}
this.workItem = workItem;
}
@Override
protected KanbanCell clone() {
try {
return (KanbanCell) super.clone();
} catch (CloneNotSupportedException e) {
throw new UnhandledException(e);
}
}
@Override
public String toString() {
return isEmptyCell() ? "empty cell" : workItem.toString();
}
public String toFixedWidthString() {
return isEmptyCell() ? " " : format("%3d", workItem.getId());
}
}