001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.wicket.markup.html.form.validation;
018
019import org.apache.wicket.markup.html.form.Form;
020import org.apache.wicket.markup.html.form.FormComponent;
021import org.apache.wicket.util.lang.Args;
022import org.apache.wicket.util.lang.Objects;
023
024/**
025 * Validates that the input of two form components is identical. Errors are reported on the second
026 * form component with key 'EqualInputValidator' and the variables:
027 * <ul>
028 * <li>${input(n)}: the user's input</li>
029 * <li>${name}: the name of the component</li>
030 * <li>${label(n)}: the label of the component - either comes from FormComponent.labelModel or
031 * resource key [form-id].[form-component-id] in that order</li>
032 * </ul>
033 * 
034 * @author Igor Vaynberg (ivaynberg)
035 */
036public class EqualInputValidator extends AbstractFormValidator
037{
038        private static final long serialVersionUID = 1L;
039
040        /** form components to be checked. */
041        private final FormComponent<?>[] components;
042
043        /**
044         * Construct.
045         * 
046         * @param formComponent1
047         *            a form component
048         * @param formComponent2
049         *            a form component
050         */
051        public EqualInputValidator(FormComponent<?> formComponent1, FormComponent<?> formComponent2)
052        {
053                Args.notNull(formComponent1, "formComponent1");
054                Args.notNull(formComponent2, "formComponent2");
055
056                components = new FormComponent[] { formComponent1, formComponent2 };
057        }
058
059        @Override
060        public FormComponent<?>[] getDependentFormComponents()
061        {
062                return components;
063        }
064
065        @Override
066        public void validate(Form<?> form)
067        {
068                // we have a choice to validate the type converted values or the raw
069                // input values, we validate the raw input
070                final FormComponent<?> formComponent1 = components[0];
071                final FormComponent<?> formComponent2 = components[1];
072
073                if (!Objects.equal(formComponent1.getInput(), formComponent2.getInput()))
074                {
075                        error(formComponent2);
076                }
077        }
078
079}