You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2012/02/09 03:36:27 UTC

[2/2] git commit: WICKET-4234 reintroduce abstractvalidator and deprecate it to make migration easier

WICKET-4234 reintroduce abstractvalidator and deprecate it to make migration easier


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e5ed953f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e5ed953f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e5ed953f

Branch: refs/heads/master
Commit: e5ed953fcf927dc905d72570f76b04752798c35a
Parents: 835db0b
Author: Igor Vaynberg <iv...@apache.org>
Authored: Wed Feb 8 10:14:52 2012 -0800
Committer: Igor Vaynberg <iv...@apache.org>
Committed: Wed Feb 8 10:15:33 2012 -0800

----------------------------------------------------------------------
 .../validation/validator/AbstractValidator.java    |  214 +++++++++++++++
 1 files changed, 214 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e5ed953f/wicket-core/src/main/java/org/apache/wicket/validation/validator/AbstractValidator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/validation/validator/AbstractValidator.java b/wicket-core/src/main/java/org/apache/wicket/validation/validator/AbstractValidator.java
new file mode 100755
index 0000000..6116bf0
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/validation/validator/AbstractValidator.java
@@ -0,0 +1,214 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.validation.validator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.wicket.IClusterable;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.validation.INullAcceptingValidator;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidationError;
+
+
+/**
+ * Convenience base class for {@link IValidator}s. This class is thread-safe and therefore it is
+ * safe to share validators across sessions/threads.
+ * <p>
+ * Error messages can be registered by calling one of the error (<code>IValidatable</code>)
+ * overloads. By default this class will skip validation if the {@link IValidatable#getValue()}
+ * returns <code>null</code>. Validators that wish to validate the <code>null</code> value need to
+ * override {@link #validateOnNullValue()} and return <code>true</code>.
+ * 
+ * FIXME 7.0 remove
+ * 
+ * @author Jonathan Locke
+ * @author Eelco Hillenius
+ * @author Igor Vaynberg (ivaynberg)
+ * @param <T>
+ *            type of validatable
+ * @since 1.2.6
+ * @deprecated with changes to {@link ValidationError} in 6.0 this class serves very little purpose.
+ *             Validators should implement {@link IValidator} directly and extend {@link Behavior}
+ *             where needed.
+ * 
+ * 
+ */
+@Deprecated
+public abstract class AbstractValidator<T> extends Behavior
+	implements
+		INullAcceptingValidator<T>,
+		IClusterable
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Indicates whether or not to validate the value if it is <code>null</code>. It is usually
+	 * desirable to skip validation if the value is <code>null</code>, unless we want to make sure
+	 * the value is in fact <code>null</code> (a rare use case). Validators that extend this and
+	 * wish to ensure the value is <code>null</code> should override this method and return
+	 * <code>true</code>.
+	 * 
+	 * @return <code>true</code> to validate on <code>null</code> value, <code>false</code> to skip
+	 *         validation on <code>null</code> value
+	 */
+	public boolean validateOnNullValue()
+	{
+		return false;
+	}
+
+	/**
+	 * Validates the <code>IValidatable</code> instance.
+	 * 
+	 * @param validatable
+	 *            the given <code>IValidatable</code> instance
+	 */
+	protected abstract void onValidate(IValidatable<T> validatable);
+
+	/**
+	 * @see IValidator#validate(IValidatable)
+	 */
+	public final void validate(IValidatable<T> validatable)
+	{
+		if (validatable.getValue() != null || validateOnNullValue())
+		{
+			onValidate(validatable);
+		}
+	}
+
+	/**
+	 * Reports an error against an <code>IValidatable</code> instance using the <code>Map</code>
+	 * returned by {@link #variablesMap(IValidatable)} for variable interpolations and the message
+	 * resource key returned by {@link #resourceKey()}.
+	 * 
+	 * @param validatable
+	 *            the <code>IValidatable</code> instance being validated
+	 * 
+	 */
+	public void error(final IValidatable<T> validatable)
+	{
+		error(validatable, resourceKey(), variablesMap(validatable));
+	}
+
+	/**
+	 * Reports an error against an <code>IValidatable</code> instance using the <code>Map</code>
+	 * returned by {@link #variablesMap(IValidatable)} for variable interpolations and the given
+	 * message resource key.
+	 * 
+	 * @param validatable
+	 *            the <code>IValidatable</code> instance being validated
+	 * @param resourceKey
+	 *            the message resource key to use
+	 * 
+	 */
+	public void error(final IValidatable<T> validatable, String resourceKey)
+	{
+		if (resourceKey == null)
+		{
+			throw new IllegalArgumentException("Argument [[resourceKey]] cannot be null");
+		}
+		error(validatable, resourceKey, variablesMap(validatable));
+	}
+
+	/**
+	 * Reports an error against an <code>IValidatable</code> instance using the given
+	 * <code>Map</code> for variable interpolations and message resource key provided by
+	 * {@link #resourceKey()}.
+	 * 
+	 * @param validatable
+	 *            the <code>IValidatable</code> instance being validated
+	 * @param vars
+	 *            <code>Map</code> of variables for variable interpolation
+	 */
+	public void error(final IValidatable<T> validatable, final Map<String, Object> vars)
+	{
+		if (vars == null)
+		{
+			throw new IllegalArgumentException("Argument [[vars]] cannot be null");
+		}
+		error(validatable, resourceKey(), vars);
+	}
+
+	/**
+	 * Reports an error against an <code>IValidatable</code> instance using the given message
+	 * resource key and <code>Map</code> for variable interpolations.
+	 * 
+	 * @param validatable
+	 *            the <code>IValidatable</code> instance being validated
+	 * @param resourceKey
+	 *            the message resource key to use
+	 * @param vars
+	 *            <code>Map</code> of variables for variable interpolation
+	 */
+	public void error(final IValidatable<T> validatable, final String resourceKey,
+		Map<String, Object> vars)
+	{
+		if (validatable == null)
+		{
+			throw new IllegalArgumentException("Argument [[validatable]] cannot be null");
+		}
+		if (vars == null)
+		{
+			throw new IllegalArgumentException("Argument [[vars]] cannot be null");
+		}
+		if (resourceKey == null)
+		{
+			throw new IllegalArgumentException("Argument [[resourceKey]] cannot be null");
+		}
+
+
+		ValidationError error = new ValidationError().addMessageKey(resourceKey);
+		final String defaultKey = getClass().getSimpleName();
+		if (!resourceKey.equals(defaultKey))
+		{
+			error.addMessageKey(defaultKey);
+		}
+
+		error.setVariables(vars);
+		validatable.error(error);
+	}
+
+	/**
+	 * Gets the message resource key for this validator's error message from the
+	 * <code>ApplicationSettings</code> class.
+	 * 
+	 * <strong>NOTE</strong>: THIS METHOD SHOULD NEVER RETURN <code>null</code>.
+	 * 
+	 * @return the message resource key for this validator
+	 */
+	protected String resourceKey()
+	{
+		return getClass().getSimpleName();
+	}
+
+	/**
+	 * Gets the default <code>Map</code> of variables.
+	 * 
+	 * <strong>NOTE</strong>: THIS METHOD SHOULD NEVER RETURN <code>null</code>.
+	 * 
+	 * @param validatable
+	 *            the <code>IValidatable</code> instance being validated
+	 * 
+	 * @return a <code>Map</code> of variables for variable interpolation
+	 */
+	protected Map<String, Object> variablesMap(IValidatable<T> validatable)
+	{
+		return new HashMap<String, Object>(1);
+	}
+}