ItEr17S10CUCreacionProxectoPlanificacionItEr16S12: Creating TaskLeafBean so the hierarchy is cleaner.

This commit is contained in:
Óscar González Fernández 2009-07-16 10:40:55 +02:00 committed by Javier Moran Rua
parent 3a6597b610
commit 8c1ba7e80e
8 changed files with 96 additions and 60 deletions

View file

@ -16,13 +16,13 @@ import org.zkoss.ganttz.TaskDetail.ITaskDetailNavigator;
import org.zkoss.ganttz.util.MutableTreeModel;
import org.zkoss.ganttz.util.TaskBean;
import org.zkoss.ganttz.util.TaskContainerBean;
import org.zkoss.ganttz.util.TaskLeafBean;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.HtmlMacroComponent;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.OpenEvent;
import org.zkoss.zul.SimpleTreeNode;
import org.zkoss.zul.Tree;
import org.zkoss.zul.TreeModel;
import org.zkoss.zul.Treecell;
@ -40,7 +40,7 @@ public class ListDetails extends HtmlMacroComponent {
String cssClass = "depth_" + path.length;
TaskDetail taskDetail = TaskDetail.create(taskBean,
new TreeNavigator(tasksTreeModel, taskBean));
if (taskBean instanceof TaskContainerBean) {
if (taskBean.isContainer()) {
expandWhenOpened((TaskContainerBean) taskBean, item);
}
Component row = Executions.getCurrent().createComponents(
@ -69,11 +69,7 @@ public class ListDetails extends HtmlMacroComponent {
}
public boolean isOpened(TaskBean taskBean) {
if (taskBean instanceof TaskContainerBean) {
TaskContainerBean container = (TaskContainerBean) taskBean;
return container.isExpanded();
}
return true;
return taskBean.isLeaf() || taskBean.isExpanded();
}
private final class DetailsForBeans {
@ -155,22 +151,20 @@ public class ListDetails extends HtmlMacroComponent {
ListIterator<TaskBean> listIterator = parents.listIterator();
while (listIterator.hasNext()) {
parent = listIterator.next();
result
.add(new ChildAndParent(child,
(TaskContainerBean) parent));
result.add(new ChildAndParent(child, parent));
child = parent;
}
return result;
}
private class ChildAndParent {
private final TaskContainerBean parent;
private final TaskBean parent;
private final TaskBean child;
private Integer positionOfChildCached;
private ChildAndParent(TaskBean child, TaskContainerBean parent) {
private ChildAndParent(TaskBean child, TaskBean parent) {
this.parent = parent;
this.child = child;
}
@ -197,15 +191,11 @@ public class ListDetails extends HtmlMacroComponent {
}
private boolean hasChildren() {
return task instanceof TaskContainerBean
&& ((TaskContainerBean) task).getTasks().size() > 0;
return task.isContainer() && task.getTasks().size() > 0;
}
private boolean isExpanded() {
if (task instanceof TaskContainerBean) {
return ((TaskContainerBean) task).isExpanded();
}
return false;
return task.isContainer() && task.isExpanded();
}
private TaskBean getParent(int[] path) {
@ -232,10 +222,6 @@ public class ListDetails extends HtmlMacroComponent {
this.taskBeans = taskBeans;
}
private static TaskBean getTaskBean(SimpleTreeNode node) {
return (TaskBean) node.getData();
}
private static void fillModel(MutableTreeModel<TaskBean> treeModel,
List<TaskBean> taskBeans) {
for (TaskBean taskBean : taskBeans) {
@ -246,10 +232,9 @@ public class ListDetails extends HtmlMacroComponent {
private static void fillModel(MutableTreeModel<TaskBean> treeModel,
TaskBean parent, TaskBean node) {
treeModel.add(parent, node);
if (node instanceof TaskContainerBean) {
TaskContainerBean container = (TaskContainerBean) node;
for (TaskBean child : container.getTasks()) {
fillModel(treeModel, container, child);
if (node.isContainer()) {
for (TaskBean child : node.getTasks()) {
fillModel(treeModel, node, child);
}
}
}
@ -263,7 +248,7 @@ public class ListDetails extends HtmlMacroComponent {
}
public void addTask() {
TaskBean newTask = new TaskBean();
TaskBean newTask = new TaskLeafBean();
newTask.setName("Nova Tarefa");
newTask.setBeginDate(new Date());
newTask.setEndDate(threeMonthsLater(newTask.getBeginDate()));

View file

@ -129,7 +129,7 @@ public class Task extends Div implements AfterCompose {
};
public static Task asTask(TaskBean taskBean, TaskList taskList) {
if (taskBean instanceof TaskContainerBean) {
if (taskBean.isContainer()) {
return TaskContainer.asTask((TaskContainerBean) taskBean, taskList);
}
return new Task(taskBean);

View file

@ -18,9 +18,10 @@ import org.zkoss.zk.ui.ext.AfterCompose;
*/
public class TaskContainer extends Task implements AfterCompose {
public static TaskContainer asTask(TaskContainerBean taskContainerBean,
public static TaskContainer asTask(TaskBean taskContainerBean,
TaskList taskList) {
return new TaskContainer(taskContainerBean, taskList);
return new TaskContainer((TaskContainerBean) taskContainerBean,
taskList);
}
private List<Task> subtasks = new ArrayList<Task>();
@ -30,6 +31,8 @@ public class TaskContainer extends Task implements AfterCompose {
public TaskContainer(TaskContainerBean taskContainerBean, TaskList taskList) {
super(taskContainerBean);
if (!taskContainerBean.isContainer())
throw new IllegalArgumentException();
this.expandListener = new IExpandListener() {
@Override

View file

@ -48,18 +48,19 @@ public class DependencyRegistry {
throw new IllegalArgumentException("container cannot be null");
this.container = container;
for (TaskBean subtask : this.container.getTasks()) {
subtask.addFundamentalPropertiesChangeListener(new PropertyChangeListener() {
subtask
.addFundamentalPropertiesChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
Date newBeginDate = container
.getSmallestBeginDateFromChildren();
container.setBeginDate(newBeginDate);
Date newEndDate = container
.getBiggestDateFromChildren();
container.setEndDate(newEndDate);
}
});
@Override
public void propertyChange(PropertyChangeEvent evt) {
Date newBeginDate = container
.getSmallestBeginDateFromChildren();
container.setBeginDate(newBeginDate);
Date newEndDate = container
.getBiggestDateFromChildren();
container.setEndDate(newEndDate);
}
});
}
}
@ -72,14 +73,15 @@ public class DependencyRegistry {
if (task == null)
throw new IllegalArgumentException("task cannot be null");
this.task = task;
this.task.addFundamentalPropertiesChangeListener(new PropertyChangeListener() {
this.task
.addFundamentalPropertiesChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
DependencyRulesEnforcer.this.update();
updateOutgoing(DependencyRulesEnforcer.this.task);
}
});
@Override
public void propertyChange(PropertyChangeEvent evt) {
DependencyRulesEnforcer.this.update();
updateOutgoing(DependencyRulesEnforcer.this.task);
}
});
}
void update() {
@ -112,15 +114,14 @@ public class DependencyRegistry {
private void addTask(TaskBean task) {
graph.addVertex(task);
rulesEnforcersByTask.put(task, new DependencyRulesEnforcer(task));
if (task instanceof TaskContainerBean) {
TaskContainerBean container = (TaskContainerBean) task;
new ParentShrinkingEnforcer(container);
for (TaskBean child : container.getTasks()) {
if (task.isContainer()) {
new ParentShrinkingEnforcer((TaskContainerBean) task);
for (TaskBean child : task.getTasks()) {
addTask(child);
add(new DependencyBean(child, container,
DependencyType.END_END, false));
add(new DependencyBean(container, child,
DependencyType.START_START, false));
add(new DependencyBean(child, task, DependencyType.END_END,
false));
add(new DependencyBean(task, child, DependencyType.START_START,
false));
}
}
}

View file

@ -3,6 +3,7 @@ package org.zkoss.ganttz.util;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Date;
import java.util.List;
/**
* This class contains the information of a task. It can be modified and
@ -10,7 +11,7 @@ import java.util.Date;
* Created at Apr 24, 2009
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public class TaskBean {
public abstract class TaskBean {
private PropertyChangeSupport fundamentalProperties = new PropertyChangeSupport(
this);
@ -28,6 +29,17 @@ public class TaskBean {
private boolean visible = true;
public abstract boolean isLeaf();
public boolean isContainer() {
return !isLeaf();
}
public abstract boolean isExpanded() throws UnsupportedOperationException;
public abstract List<TaskBean> getTasks()
throws UnsupportedOperationException;
public boolean isVisible() {
return visible;
}

View file

@ -81,6 +81,7 @@ public class TaskContainerBean extends TaskBean {
task.setVisible(expanded);
}
@Override
public List<TaskBean> getTasks() {
return tasks;
}
@ -113,6 +114,7 @@ public class TaskContainerBean extends TaskBean {
return getBiggest(getEndDates());
}
@Override
public boolean isExpanded() {
return expanded;
}
@ -134,8 +136,9 @@ public class TaskContainerBean extends TaskBean {
for (TaskBean taskBean : tasks) {
taskBean.setVisible(this.expanded);
}
if(valueChanged){
expandListeners.fireEvent(new ListenerNotification<IExpandListener>() {
if (valueChanged) {
expandListeners
.fireEvent(new ListenerNotification<IExpandListener>() {
@Override
public void doNotify(IExpandListener listener) {
@ -146,4 +149,9 @@ public class TaskContainerBean extends TaskBean {
}
}
@Override
public boolean isLeaf() {
return false;
}
}

View file

@ -0,0 +1,26 @@
package org.zkoss.ganttz.util;
import java.util.List;
/**
* A {@link TaskBean} that does not have children
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public class TaskLeafBean extends TaskBean {
@Override
public List<TaskBean> getTasks() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@Override
public boolean isLeaf() {
return true;
}
@Override
public boolean isExpanded() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
}

View file

@ -8,6 +8,7 @@ import org.zkoss.ganttz.util.DependencyRegistry;
import org.zkoss.ganttz.util.DependencyType;
import org.zkoss.ganttz.util.TaskBean;
import org.zkoss.ganttz.util.TaskContainerBean;
import org.zkoss.ganttz.util.TaskLeafBean;
/**
* Some test data for planner <br />
@ -74,7 +75,7 @@ public class DataForPlanner {
}
private TaskBean createTaskBean(String name, Date now, Date end) {
TaskBean taskBean = new TaskBean();
TaskBean taskBean = new TaskLeafBean();
taskBean.setName(name);
taskBean.setBeginDate(now);
taskBean.setEndDate(end);