001 package org.apache.myfaces.tobago.validator;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements. See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 import org.apache.myfaces.tobago.util.MessageFactory;
021 import org.apache.myfaces.tobago.apt.annotation.Validator;
022
023 import javax.faces.validator.LengthValidator;
024 import javax.faces.validator.ValidatorException;
025 import javax.faces.context.FacesContext;
026 import javax.faces.component.UIComponent;
027 import javax.faces.component.EditableValueHolder;
028 import javax.faces.application.FacesMessage;
029
030 /*
031 * Date: Oct 16, 2006
032 * Time: 11:58:47 PM
033 */
034 /**
035 * <p><strong>SubmittedLengthValidator</strong> is a {@link Validator} that checks
036 * the number of characters in the submitted value of the
037 * associated component.
038 */
039
040 @Validator(id = SubmittedValueLengthValidator.VALIDATOR_ID)
041 public class SubmittedValueLengthValidator extends LengthValidator {
042 public static final String VALIDATOR_ID = "org.apache.myfaces.tobago.SubmittedValueLength";
043 private Integer minimum;
044 private Integer maximum;
045
046 public SubmittedValueLengthValidator() {
047 }
048
049 public SubmittedValueLengthValidator(int maximum) {
050 setMaximum(maximum);
051 }
052
053 public SubmittedValueLengthValidator(int maximum, int minimum) {
054 setMaximum(maximum);
055 setMinimum(minimum);
056 }
057
058 public int getMinimum() {
059 return minimum != null ? minimum : 0;
060 }
061
062 public void setMinimum(int minimum) {
063 if (minimum > 0) {
064 this.minimum = minimum;
065 }
066 }
067
068 public int getMaximum() {
069 return maximum != null ? maximum : 0;
070 }
071
072 public void setMaximum(int maximum) {
073 if (maximum > 0) {
074 this.maximum = maximum;
075 }
076 }
077
078 public void validate(FacesContext facesContext, UIComponent uiComponent, Object value) throws ValidatorException {
079 if (value != null && uiComponent instanceof EditableValueHolder) {
080 String submittedValue = ((EditableValueHolder) uiComponent).getSubmittedValue().toString();
081 if (maximum != null && submittedValue.length() > maximum) {
082 Object[] args = {maximum, uiComponent.getId()};
083 FacesMessage facesMessage =
084 MessageFactory.createFacesMessage(facesContext, MAXIMUM_MESSAGE_ID, FacesMessage.SEVERITY_ERROR, args);
085 throw new ValidatorException(facesMessage);
086 }
087 if (minimum != null && submittedValue.length() < minimum) {
088 Object[] args = {minimum, uiComponent.getId()};
089 FacesMessage facesMessage =
090 MessageFactory.createFacesMessage(facesContext, MINIMUM_MESSAGE_ID, FacesMessage.SEVERITY_ERROR, args);
091 throw new ValidatorException(facesMessage);
092 }
093 }
094 }
095
096 public Object saveState(FacesContext context) {
097 Object[] values = new Object[2];
098 values[0] = maximum;
099 values[1] = minimum;
100 return values;
101
102 }
103
104
105 public void restoreState(FacesContext context, Object state) {
106 Object[] values = (Object[]) state;
107 maximum = (Integer) values[0];
108 minimum = (Integer) values[1];
109 }
110
111
112 public boolean equals(Object o) {
113 if (this == o) {
114 return true;
115 }
116 if (o == null || getClass() != o.getClass()) {
117 return false;
118 }
119 if (!super.equals(o)) {
120 return false;
121 }
122
123 SubmittedValueLengthValidator validator = (SubmittedValueLengthValidator) o;
124
125 if (maximum != null ? !maximum.equals(validator.maximum) : validator.maximum != null) {
126 return false;
127 }
128 if (minimum != null ? !minimum.equals(validator.minimum) : validator.minimum != null) {
129 return false;
130 }
131
132 return true;
133 }
134
135 public int hashCode() {
136 int result;
137 result = (minimum != null ? minimum.hashCode() : 0);
138 result = 31 * result + (maximum != null ? maximum.hashCode() : 0);
139 return result;
140 }
141 }