ItEr17S10CUCreacionProxectoPlanificacionItEr16S12: Creating TaskLeafBean so the hierarchy is cleaner.
This commit is contained in:
parent
3a6597b610
commit
8c1ba7e80e
8 changed files with 96 additions and 60 deletions
|
|
@ -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()));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue