From 4180be8908fa4f520599e6d416b403008e384310 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 21 Jun 2018 15:22:50 +0200 Subject: [client] Refactor change monitor classes, better error message handling --- .../gui/changemonitor/AbstractControlWrapper.java | 48 ++++++++++++++++------ 1 file changed, 36 insertions(+), 12 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java index 4f7f2145..e43b5393 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java @@ -1,6 +1,10 @@ package org.openslx.dozmod.gui.changemonitor; +import java.util.ArrayList; import java.util.Comparator; +import java.util.List; + +import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.ValidationConstraint; /** * Control/element wrapper @@ -9,23 +13,19 @@ public abstract class AbstractControlWrapper { private final DialogChangeMonitor dcm; protected boolean wasEverChanged; protected boolean isCurrentlyChanged; - protected boolean isValid = true; private T originalContent; - private final DialogChangeMonitor.ValidationConstraint constraint; + private List> constraints; private final Comparator cmp; - protected final String constraintErrorMessage; + protected String currentError = null; /** * If muted, this wrapper will not react to changes of the underlying * control. */ private boolean muted = false; - protected AbstractControlWrapper(DialogChangeMonitor dcm, String errorMessage, Comparator comp, - DialogChangeMonitor.ValidationConstraint cons) { + protected AbstractControlWrapper(DialogChangeMonitor dcm, Comparator comp) { this.dcm = dcm; - this.constraintErrorMessage = errorMessage; this.cmp = comp; - this.constraint = cons; } public boolean hasChangedSinceInit() { @@ -36,6 +36,24 @@ public abstract class AbstractControlWrapper { return isCurrentlyChanged; } + /** + * Returns the current error message for the first failed constraint. If no + * constraint currently yields invalid, null is returned. + * + * @return + */ + public String currentConstraintError() { + return currentError; + } + + public AbstractControlWrapper addConstraint(ValidationConstraint constraint) { + if (constraints == null) { + constraints = new ArrayList<>(); + } + constraints.add(constraint); + return this; + } + /** * Resets the change state of this control * and removes the "muted" flag, if set. @@ -48,7 +66,7 @@ public abstract class AbstractControlWrapper { dcm.contentChanged(this); } } - + protected final void resetChangeState() { muted = false; isCurrentlyChanged = wasEverChanged = false; @@ -107,12 +125,18 @@ public abstract class AbstractControlWrapper { } protected void checkValid(T text) { - if (muted) + if (muted || constraints == null || constraints.isEmpty()) return; - boolean valid = constraint == null || constraint.isValid(text); - if (isValid != valid) { - isValid = valid; + String error = null; + for (ValidationConstraint i : constraints) { + error = i.checkStateValid(text); + if (error != null) + break; + } + if (error != currentError) { + currentError = error; dcm.validityChanged(this); } } + } \ No newline at end of file -- cgit v1.2.3-55-g7522