From 0164f1dd600be0522b3113bd8c24304f44e58d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 9 Nov 2009 01:00:46 +0100 Subject: [PATCH] ItEr33S14CUCreacionUnidadesPlanificacion: When a task constraint is violated, it's notified to the task component --- .../java/org/zkoss/ganttz/TaskComponent.java | 14 ++++++++++++++ .../main/java/org/zkoss/ganttz/data/Task.java | 19 ++++++++++++++++--- .../util/ConstraintViolationNotificator.java | 8 +++++++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java index 4a1cf0975..cb9cde835 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java @@ -22,6 +22,7 @@ package org.zkoss.ganttz; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.util.Date; import java.util.Map; import java.util.UUID; import java.util.regex.Matcher; @@ -33,6 +34,8 @@ import org.zkoss.ganttz.adapters.IDisabilityConfiguration; import org.zkoss.ganttz.data.Milestone; import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.data.TaskContainer; +import org.zkoss.ganttz.data.constraint.Constraint; +import org.zkoss.ganttz.data.constraint.Constraint.IConstraintViolationListener; import org.zkoss.lang.Objects; import org.zkoss.xml.HTMLs; import org.zkoss.zk.au.AuRequest; @@ -176,6 +179,15 @@ public class TaskComponent extends Div implements AfterCompose { setColor(STANDARD_TASK_COLOR); setId(UUID.randomUUID().toString()); this.disabilityConfiguration = disabilityConfiguration; + taskViolationListener = new IConstraintViolationListener() { + + @Override + public void constraintViolated(Constraint constraint, + Date value) { + // TODO mark graphically task as violated + } + }; + this.task.addConstraintViolationListener(taskViolationListener); } protected String calculateClass() { @@ -212,6 +224,8 @@ public class TaskComponent extends Div implements AfterCompose { private final Task task; private transient PropertyChangeListener propertiesListener; + private IConstraintViolationListener taskViolationListener; + public Task getTask() { return task; } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java index eca74e290..3457bfcad 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java @@ -28,6 +28,8 @@ import java.util.List; import org.zkoss.ganttz.data.constraint.Constraint; import org.zkoss.ganttz.data.constraint.DateConstraint; +import org.zkoss.ganttz.data.constraint.Constraint.IConstraintViolationListener; +import org.zkoss.ganttz.util.ConstraintViolationNotificator; /** * This class contains the information of a task. It can be modified and @@ -46,6 +48,9 @@ public abstract class Task implements ITaskFundamentalProperties { private boolean visible = true; + private ConstraintViolationNotificator violationNotificator = ConstraintViolationNotificator + .create(); + public Task(ITaskFundamentalProperties fundamentalProperties) { this.fundamentalProperties = fundamentalProperties; } @@ -56,7 +61,8 @@ public abstract class Task implements ITaskFundamentalProperties { @Override public List> getStartConstraints() { - return fundamentalProperties.getStartConstraints(); + return violationNotificator.withListener(fundamentalProperties + .getStartConstraints()); } public Task(String name, Date beginDate, long lengthMilliseconds) { @@ -164,11 +170,13 @@ public abstract class Task implements ITaskFundamentalProperties { } public Constraint getCurrentLengthConstraint() { - return DateConstraint.biggerOrEqualThan(getEndDate()); + return violationNotificator.withListener(DateConstraint + .biggerOrEqualThan(getEndDate())); } public Constraint getEndDateBiggerThanStartDate() { - return DateConstraint.biggerOrEqualThan(getBeginDate()); + return violationNotificator.withListener(DateConstraint + .biggerOrEqualThan(getBeginDate())); } public String getNotes() { @@ -229,4 +237,9 @@ public abstract class Task implements ITaskFundamentalProperties { return fundamentalProperties.getDeadline(); } + public void addConstraintViolationListener( + IConstraintViolationListener listener) { + violationNotificator.addConstraintViolationListener(listener); + } + } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/ConstraintViolationNotificator.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/ConstraintViolationNotificator.java index 6a4dd2a07..791ea23e9 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/util/ConstraintViolationNotificator.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/ConstraintViolationNotificator.java @@ -48,11 +48,16 @@ public class ConstraintViolationNotificator { public List> withListener(List> constraints) { for (Constraint each : constraints) { - each.addConstraintViolationListener(bridge); + withListener(each); } return constraints; } + public Constraint withListener(Constraint constraint) { + constraint.addConstraintViolationListener(bridge); + return constraint; + } + private void fireConstraintViolated(final Constraint constraint, final T value) { constraintViolationListeners @@ -71,4 +76,5 @@ public class ConstraintViolationNotificator { constraintViolationListeners.addListener(listener); } + }