/* * SmartGWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * SmartGWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. SmartGWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.vaadin.smartgwt.server.types; /** * Used to name a validator or reference a standard, built-in {@link * com.smartgwt.client.widgets.form.validator.Validator} - see list below. <p> To make use of * a standard validator type for a field in a DataSource, or DynamicForm instance, specify * the <code>validators</code> property to an array containing a validator definition where * the <code>type</code> property is set to the appropriate type. <p> A custom error * message can be specified for any validator type by setting the <code>errorMessage</code> * property on the validator definition object, and some validator types make use of * additional properties on the validator definition object such as <code>max</code> or * <code>min</code>. <p> For example, to use the <code>integerRange</code> validator * type:<br><br><code>   field:{<br>     validators:[<br> *       {type:"integerRange", min:1, max:100}<br> *     ]<br>   } </code> <p> Custom validators can be reused on * the client by adding them to the global validator list, via the {@link * com.smartgwt.client.widgets.form.validator.Validator#addValidatorDefinition} method. */ public enum ValidatorType implements ValueEnum { /** * Validation will fail if this field is non-empty and has a non-boolean value. */ ISBOOLEAN("isBoolean"), /** * Validation will fail if the value is not a string value. */ ISSTRING("isString"), /** * Tests whether the value for this field is a whole number. If * <code>validator.convertToInteger</code> is true, float values will be converted into * integers and validation will succeed. */ ISINTEGER("isInteger"), /** * Tests whether the value for this field is a valid floating point number. */ ISFLOAT("isFloat"), /** * Tests whether the value for this field is a valid expression or function; if it is valid, * creates a {@link com.smartgwt.client.docs.StringMethods 'stringMethod'} object with the * value and set the resultingValue to the StringMethod. */ ISFUNCTION("isFunction"), /** * RequiredIf type validators should be specified with an <code>expression</code> property * set to a {@link com.smartgwt.client.docs.StringMethods 'stringMethod'}, which takes three * parameters:<ul> <li>item - the DynamicForm item on which the error occurred (may be null) * <li>validator - a pointer to the validator object <li>value - the value of the field in * question</ul> When validation is performed, the expression will be evaluated (or executed) * - if it returns <code>true</code>, the field will be treated as a required field, so * validation will fail if the field has no value. <p>To allow server-side enforcement, a * <code>required</code> validator can be used instead. Conditional criteria can be specified * with the <code>applyWhen</code> property. */ REQUIREDIF("requiredIf"), /** * Tests whether the value for this field matches the value of some other field. The field to * compare against is specified via the <code>otherField</code> property on the validator * object (should be set to a field name). */ MATCHESFIELD("matchesField"), /** * Tests whether the value for this field matches any value from an arbitrary list of * acceptable values. The set of acceptable values is specified via the <code>list</code> * property on the validator, which should be set to an array of values. If validator.list is * not supplied, the valueMap for the field will be used. If there is no valueMap, not * providing validator.list is an error. */ ISONEOF("isOneOf"), /** * Tests whether the value for this field is a whole number within the range specified. The * <code>max</code> and <code>min</code> properties on the validator are used to determine * the acceptable range. */ INTEGERRANGE("integerRange"), /** * This validator type applies to string values only. If the value is a string value * validation will fail if the string's length falls outside the range specified by * <code>validator.max</code> and <code>validator.min</code>. <p> Note that non-string values * will always pass validation by this validator type. <p> Note that the * <code>errorMessage</code> for this validator will be evaluated as a dynamicString - text * within <code>\${...}</code> will be evaluated as JS code when the message is displayed, * with <code>max</code> and <code>min</code> available as variables mapped to * <code>validator.max</code> and <code>validator.min</code>. */ LENGTHRANGE("lengthRange"), /** * Determine whether a string value contains some substring specified via * <code>validator.substring</code>. */ CONTAINS("contains"), /** * Determine whether a string value does <b>not</b> contain some substring specified via * <code>validator.substring</code>. */ DOESNTCONTAIN("doesntContain"), /** * Determine whether a string value contains some substring multiple times. The substring to * check for is specified via <code>validator.substring</code>. The * <code>validator.operator</code> property allows you to specify how to test the number of * substring occurrences. Valid values for this property are <code>==</code>, * <code>!=</code>, <code><</code>, <code><=</code>, <code>></code>, * <code>>=</code>. <p> The number of matches to check for is specified via * <code>validator.count</code>. */ SUBSTRINGCOUNT("substringCount"), /** * <code>regexp</code> type validators will determine whether the value specified matches a * given regular expression. The expression should be specified on the <code>validator</code> * object as the <code>expression</code> property. */ REGEXP("regexp"), /** * Validate against a regular expression mask, specified as <code>validator.mask</code>. If * validation is successful a transformation can also be specified via the * <code>validator.transformTo</code> property. This should be set to a string in the * standard format for string replacement via the native JavaScript <code>replace()</code> * method. */ MASK("mask"), /** * Tests whether the value for a date field is within the range specified. Range is * inclusive, and is specified via <code>validator.min</code> and <code>validator.max</code>, * which should be specified in <a target=_blank * href="http://www.w3.org/TR/xmlschema-2/#dateTime">XML Schema date format</a> or as a live * JavaScript Date object (for client-only validators only). <p> Note that the * <code>errorMessage</code> for this validator will be evaluated as a dynamicString - text * within <code>\${...}</code> will be evaluated as JS code when the message is displayed, * with <code>max</code> and <code>min</code> available as variables mapped to * <code>validator.max</code> and <code>validator.min</code>. */ DATERANGE("dateRange"), /** * Validate a field as a valid floating point value within a value range. Range is specified * via <code>validator.min</code> and <code>validator.max</code>. Also checks precision, * specified as number of decimal places in <code>validator.precision</code>. If * <code>validator.roundToPrecision</code> is set a value that doesn't match the specified * number of decimal places will be rounded to the nearest value that does. <p> For backwards * compatibility only. Use "floatRange" and/or "floatPrecision" instead. */ FLOATLIMIT("floatLimit"), /** * Tests whether the value for this field is a floating point number within the range * specified. The <code>max</code> and <code>min</code> properties on the validator are used * to determine the acceptable range. <p> Note that the <code>errorMessage</code> for this * validator will be evaluated as a dynamicString - text within <code>\${...}</code> will be * evaluated as JS code when the message is displayed, with <code>max</code> and * <code>min</code> available as variables mapped to <code>validator.max</code> and * <code>validator.min</code>. */ FLOATRANGE("floatRange"), /** * Tests whether the value for this field is a floating point number with the appropriate * number of decimal places - specified in <code>validator.precision</code> If the value is * of higher precision and <code>validator.roundToPrecision</code> is specified, the value * will be rounded to the specified number of decimal places and validation will pass, * otherwise validation will fail. */ FLOATPRECISION("floatPrecision"), /** * A non-empty value is required for this field to pass validation. */ REQUIRED("required"), /** * Change the state/appearance of this field. Desired appearance is specified via the * <code>fieldAppearance</code> property on the validator object. See {@link * com.smartgwt.client..FieldAppearance} type for choices. <p> If * <code>fieldAppearance</code> is not specified, the default is "readOnly". */ READONLY("readOnly"), /** * Returns true if the value for this field is unique across the whole DataSource. <p> * Validators of this type have {@link * com.smartgwt.client..validatorDefinition#getRequiresServer 'requiresServer'} set to * <code>true</code> and do not run on the client. */ ISUNIQUE("isUnique"), /** * Returns true if the record implied by a relation exists. The relation can be derived * automatically from the {@link com.smartgwt.client.data.DataSourceField#getForeignKey * foreignKey} attribute of the field being validated, or you can specify it manually via * <code>validator.relatedDataSource</code> and <code>validator.relatedField</code>. <p> You * can specify at DataSource level that this validator should be automatically applied to all * fields that specify a {@link com.smartgwt.client.data.DataSourceField#getForeignKey * 'foreignKey'} - see {@link com.smartgwt.client.data.DataSource#getValidateRelatedRecords * validateRelatedRecords}. <p> Validators of this type have {@link * com.smartgwt.client..validatorDefinition#getRequiresServer 'requiresServer'} set to * <code>true</code> and do not run on the client. <p> Note that this validation is generally * unnecessary for data coming from a UI. The typical UI uses a {@link * com.smartgwt.client.widgets.form.fields.SelectItem} or {@link * com.smartgwt.client.widgets.form.fields.ComboBoxItem} with an {@link * com.smartgwt.client.widgets.form.fields.FormItem#getOptionDataSource 'optionDataSource'} * for user entry, such that the user can't accidentally enter a related record if that * doesn't exist, and a typical SQL schema will include constraints that prevent a bad insert * if the user attempts to circumvent the UI. The primary purpose of declaring this * validation explicitly is to provide clear, friendly error messages for use cases such as * {@link com.smartgwt.client.widgets.BatchUploader}, where values aren't individually chosen * by the user. */ HASRELATEDRECORD("hasRelatedRecord"), /** * Custom server-side validator that either evaluates the Velocity expression provided in * {@link com.smartgwt.client.docs.serverds.Validator#serverCondition 'serverCondition'} * or makes DMI call to {@link com.smartgwt.client.docs.serverds.Validator#serverObject * 'serverObject'} to evaluate condition. <p> Validators of this * type have {@link com.smartgwt.client..validatorDefinition#getRequiresServer * 'requiresServer'} set to <code>true</code> and do not run on the client. */ SERVERCUSTOM("serverCustom"); private String value; ValidatorType(String value) { this.value = value; } public String getValue() { return this.value; } }