/* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT 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. Smart GWT 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 com.smartgwt.client.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 * 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 <li>record - the "record" object - the set of values being edited by the widget </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. <p>See <a href="http://www.smartclient.com/smartgwt/showcase/#form_dep_conditionally" * target="examples">Conditionally Required Example</a>. */ 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). <p>See <a * href="http://www.smartclient.com/smartgwt/showcase/#form_dep_match_value" target="examples">Match Value Example</a>. */ 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, inclusive. To specify the range * as exclusive of the min/mix values, set <code>exclusive</code> to <code>true</code>. <p>See <a * href="http://www.smartclient.com/smartgwt/showcase/#form_validation_builtins" target="examples">Built-ins Example</a>. */ 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. <p>See <a * href="http://www.smartclient.com/smartgwt/showcase/#form_validation_regexp" target="examples">Regular Expression * Example</a>. */ 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. <p>See <a * href="http://www.smartclient.com/smartgwt/showcase/#form_validation_value_transform" target="examples">Value Transform * Example</a>. */ 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). To specify the range as exclusive of the min/mix values, set <code>exclusive</code> to * <code>true</code>. <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, inclusive. To specify the range * as exclusive of the min/mix values, set <code>exclusive</code> to <code>true</code>. <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 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 * requiresServer set to <code>true</code> and do not run on the client. <p>See <a * href="http://www.smartclient.com/smartgwtee/showcase/#uniqueCheckValidation" * target="examples">uniqueCheckValidation</a>. */ 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 * 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. See also the example * <a href="http://www.smartclient.com/smartgwtee/showcase/#hasRelatedValidation" target="examples">Related Records</a>. */ HASRELATEDRECORD("hasRelatedRecord"), /** * Custom server-side validator that either evaluates the Velocity expression provided in {@link * com.smartgwt.client.docs.serverds.Validator#serverCondition serverCondition} (see <a * href="http://www.smartclient.com/smartgwtee/showcase/#velocityValidation" target="examples">velocityValidation</a>) or * makes DMI call to {@link com.smartgwt.client.docs.serverds.Validator#serverObject serverObject} to evaluate condition * (see <a href="http://www.smartclient.com/smartgwtee/showcase/#dmiValidation" target="examples">dmiValidation</a>). <p> * Validators of this type have 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; } }