Notify when a constraint is satisfied too

FEA: ItEr65S06BugFixing
This commit is contained in:
Óscar González Fernández 2010-12-15 12:56:51 +01:00
parent fb35f59ebf
commit ec11dab825
6 changed files with 69 additions and 9 deletions

View file

@ -69,6 +69,12 @@ public class DependencyComponent extends XulElement implements AfterCompose {
GanttDate value) {
// TODO mark graphically dependency as violated
}
@Override
public void constraintSatisfied(Constraint<GanttDate> constraint,
GanttDate value) {
// TODO mark graphically dependency as not violated
}
};
this.dependency.addConstraintViolationListener(violationListener);
}

View file

@ -202,6 +202,12 @@ public class TaskComponent extends Div implements AfterCompose {
GanttDate value) {
// TODO mark graphically task as violated
}
@Override
public void constraintSatisfied(Constraint<GanttDate> constraint,
GanttDate value) {
// TODO mark graphically dependency as not violated
}
};
this.task.addConstraintViolationListener(taskViolationListener);
reloadResourcesTextRequested = new IReloadResourcesTextRequested() {

View file

@ -84,7 +84,10 @@ public abstract class Constraint<T> {
}
public interface IConstraintViolationListener<T> {
public void constraintViolated(Constraint<T> constraint, T value);
public void constraintSatisfied(Constraint<T> constraint, T value);
}
public static class ConstraintBuilder<T> {
@ -185,19 +188,21 @@ public abstract class Constraint<T> {
public abstract boolean isSatisfiedBy(T value);
public void checkSatisfiesResult(T finalResult) {
if (!isSatisfiedBy(finalResult)) {
fireNotSatisfied(finalResult);
}
fireSatisfaction(finalResult, isSatisfiedBy(finalResult));
}
private void fireNotSatisfied(final T value) {
private void fireSatisfaction(final T value, final boolean satisfied) {
weakListeners
.fireEvent(new IListenerNotification<IConstraintViolationListener<T>>() {
@Override
public void doNotify(
IConstraintViolationListener<T> listener) {
listener.constraintViolated(Constraint.this, value);
if (satisfied) {
listener.constraintSatisfied(Constraint.this, value);
} else {
listener.constraintViolated(Constraint.this, value);
}
}
});
}

View file

@ -42,7 +42,12 @@ public class ConstraintViolationNotificator<T> {
@Override
public void constraintViolated(Constraint<T> constraint, T value) {
fireConstraintViolated(constraint, value);
fireConstraint(constraint, value, false);
}
@Override
public void constraintSatisfied(Constraint<T> constraint, T value) {
fireConstraint(constraint, value, true);
}
};
@ -58,15 +63,19 @@ public class ConstraintViolationNotificator<T> {
return constraint;
}
private void fireConstraintViolated(final Constraint<T> constraint,
final T value) {
private void fireConstraint(final Constraint<T> constraint, final T value,
final boolean satisfied) {
constraintViolationListeners
.fireEvent(new IListenerNotification<IConstraintViolationListener<T>>() {
@Override
public void doNotify(
IConstraintViolationListener<T> listener) {
listener.constraintViolated(constraint, value);
if (satisfied) {
listener.constraintSatisfied(constraint, value);
} else {
listener.constraintViolated(constraint, value);
}
}
});
}

View file

@ -131,11 +131,38 @@ public class ConstraintTest {
Constraint<Integer> constraint, Integer value) {
constraintViolated[0] = constraint;
}
@Override
public void constraintSatisfied(
Constraint<Integer> constraint, Integer value) {
}
});
Constraint.apply(6, biggerThanFive, lessThanFive);
assertThat(constraintViolated[0], equalTo(biggerThanFive));
}
@Test
@SuppressWarnings("unchecked")
public void theSatisfiedConstraintsNotifiesItsListeners() {
final Constraint<Integer>[] constraintSatisfied = new Constraint[1];
biggerThanFive
.addConstraintViolationListener(new IConstraintViolationListener<Integer>() {
@Override
public void constraintViolated(
Constraint<Integer> constraint, Integer value) {
}
@Override
public void constraintSatisfied(
Constraint<Integer> constraint, Integer value) {
constraintSatisfied[0] = constraint;
}
});
Constraint.apply(6, biggerThanFive);
assertThat(constraintSatisfied[0], equalTo(biggerThanFive));
}
@SuppressWarnings("unchecked")
@Test
public void theApplicationCanBeDoneUsingAFluentInterface() {

View file

@ -70,6 +70,13 @@ public class LimitingDependencyComponent extends XulElement implements
Date value) {
// TODO mark graphically dependency as violated
}
@Override
public void constraintSatisfied(Constraint<Date> constraint,
Date value) {
// TODO mark graphically dependency as not violated
}
};
// this.dependency.addConstraintViolationListener(violationListener);
}