public class SimpleType extends BaseClass
SimpleTypes can be created at any time, and subsequently referred to as a
field type
in DataSources
and
DataBoundComponents
. This allows you to define
validation
, formatting
and editing
behaviors for a type to be reused across all
DataBoundComponents
.
The SimpleType class also allows data to be stored in some opaque format but treated as
simple atomic values as far as Smart GWT components are concerned by implementing
SimpleType.getAtomicValue()
and SimpleType.updateAtomicValue()
methods.
For example, if some record has a field value set to a javascript object with the
following properties:
{ stringValue:"A String", length: 9 }this value could be treated as a simple string by defining a SimpleType with
inheritsFrom
set to "text"
and a custom
getAtomicValue()
method that simply extracted the "stringValue"
attribute from the data object. DataBoundComponents would then display
the string value, and use it for sorting and other standard databinding features.
Note that the term "simpleType" is used in the same sense as in
http://www.w3.org/TR/xmlschema-0/, and
XMLTools.loadXMLSchema()
will create new SimpleType definitions.
When using the Smart GWT Server, SimpleTypes can be defined server-side, and should be defined server-side if validators are going to be declared so that the server will enforce validation. To define server-side SimpleTypes using Component XML you should create file {typeName}.type.xml in the following format:
<SimpleType name="{typeName}" inheritsFrom="{otherSimpleType}" editorType="{FormItemClassName}"> <validators> <!-- validator definition just like DataSourceField --> </validators> </SimpleType>.. and place this file alongside your DataSource files (.ds.xml) files - in any of folders listed in
project.datasources
property in server.properties
.
SimpleTypes can be loaded via DataSourceLoader or loadDS JSP tags
and
should be loaded before the definitions of any DataSources that use them (so
generally put all SimpleType definitions first).
Define validators in the server-side type definition, for example:
<SimpleType name="countryCodeType" inheritsFrom="text"> <validators> <validator type="lengthRange" min="2" max="2" errorMessage="Length of country code should be equal to 2." /> <validator type="regexp" expression="[A-Z][A-Z]" errorMessage="CountryCode should have only uppercase letters." /> </validators> </SimpleType>
For client-side formatters, add these to the type definition after loading it from the server, for example:
SimpleType.getType("independenceDateType").setShortDisplayFormatter(new SimpleTypeFormatter() { public String format(Object value, DataClass field, DataBoundComponent component, Record record) { if (value == null) return null; return "<i>" + (((java.util.Date) value).getYear() + 1900) + "</i>"; } });Note that formatters must be added to the SimpleType definition before any DataBoundComponent binds to a DataSource that uses the SimpleType.
An example is here.
Modifier and Type | Class and Description |
---|---|
static class |
SimpleType.SimpleTypeValueExtractor |
static class |
SimpleType.SimpleTypeValueUpdater |
config, factoryCreated, factoryProperties, id, scClassName
Constructor and Description |
---|
SimpleType()
Create a new simple type.
|
SimpleType(JavaScriptObject jsObj) |
SimpleType(java.lang.String name,
FieldType inheritsFrom)
Create a new simple type.
|
SimpleType(java.lang.String name,
SimpleType inheritsFrom)
Create a new simple type.
|
Modifier and Type | Method and Description |
---|---|
static java.lang.Object |
applySummaryFunction(Record[] records,
ListGridField field,
java.lang.String functionName)
Apply a registered summary function to a set of records and a field.
|
static java.lang.Object |
applySummaryFunction(Record[] records,
ListGridField field,
SummaryFunctionType summaryFunction)
Apply a standard
SummaryFunctionType to a set of records and a field. |
JavaScriptObject |
create() |
java.lang.String |
getExportFormat()
FormatString used during exports for numeric or date formatting. |
DataSourceField |
getFieldProperties()
These are properties that are essentially copied onto any DataSourceField where the property is applied.
|
java.lang.String |
getFormat()
FormatString for numeric or date formatting. |
java.lang.String |
getInheritsFrom()
Name of another SimpleType from which this type should inherit.
|
JavaScriptObject |
getJsObj() |
java.lang.String |
getName()
Name of the type, used to refer to the type from
field.type . |
static SimpleType |
getOrCreateRef(JavaScriptObject jsObj) |
static SimpleType |
getType(java.lang.String typeName)
Retrieve a simpleType definition by type name
|
boolean |
isCreated() |
void |
register()
Explicitly register this SimpleType with the system so that it can be used / referenced by remote DataSources.
|
static void |
registerSummaryFunction(java.lang.String functionName,
SummaryFunction summaryFunction)
Registers a new SummaryFunction by name.
|
static void |
setDefaultSummaryFunction(java.lang.String typeName,
java.lang.String functionName)
Set a default summary function for some field type.
|
static void |
setDefaultSummaryFunction(java.lang.String typeName,
SummaryFunctionType summaryFunction)
Set a default summary function for some field type.
|
void |
setEditFormatter(SimpleTypeFormatter formatter)
Formatter for values of this type when displayed in a freeform text editor such as a
TextItem |
void |
setEditorProperties(FormItem editorProperties)
Default
FormItem configuration for editing values of this type. |
void |
setEditorType(java.lang.Class<? extends FormItem> editorType)
Set the default
FormItem class to be used whenever a value of this type is edited
(whether in a grid, form, or other component). |
void |
setEditorType(FormItem editorType)
Deprecated.
Renamed to
setEditorProperties(FormItem) . You can also consider using
setEditorType(Class) or setEditorType(String) instead. |
void |
setEditorType(java.lang.String editorType)
Set the default
FormItem class to be used whenever a value of this type is edited
(whether in a grid, form, or other component). |
java.lang.Object |
setEditParser(SimpleTypeParser parser)
Specify a parser to convert some user-edited value to an underlying data value of this type.
|
void |
setExportFormat(java.lang.String exportFormat)
FormatString used during exports for numeric or date formatting. |
void |
setFieldProperties(DataSourceField fieldProperties)
These are properties that are essentially copied onto any DataSourceField where the property is applied.
|
void |
setFormat(java.lang.String format)
FormatString for numeric or date formatting. |
void |
setInheritsFrom(FieldType inheritsFrom)
Name of another SimpleType from which this type should inherit.
|
void |
setInheritsFrom(java.lang.String inheritsFrom)
Name of another SimpleType from which this type should inherit.
|
void |
setJavaScriptObject(JavaScriptObject jsObj) |
void |
setName(java.lang.String name)
Name of the type, used to refer to the type from
field.type . |
void |
setNormalDisplayFormatter(SimpleTypeFormatter formatter)
Normal formatter for values of this type used in a
StaticTextItem or DetailViewer . |
void |
setReadOnlyEditorProperties(FormItem editorProperties)
FormItem properties to be applied when editing values of this type in a read-only context.
|
void |
setReadOnlyEditorType(java.lang.Class<? extends FormItem> editorType)
Set the default
FormItem class to be used whenever a value of this type is edited
in a read-only context (whether in a grid, form, or other component). |
void |
setReadOnlyEditorType(FormItem editorType)
Deprecated.
Renamed to
setReadOnlyEditorProperties(FormItem) . You can also consider using
setReadOnlyEditorType(Class) or setReadOnlyEditorType(String) instead. |
void |
setReadOnlyEditorType(java.lang.String editorType)
Set the default
FormItem class to be used whenever a value of this type is edited
in a read-only context (whether in a grid, form, or other component). |
void |
setShortDisplayFormatter(SimpleTypeFormatter formatter)
|
java.lang.Object |
setSimpleTypeValueExtractor(SimpleType.SimpleTypeValueExtractor extractor)
Specify an extractor to extract an atomic value (such as a string or number) from some arbitrary live data value.
|
java.lang.Object |
setSimpleTypeValueUpdater(SimpleType.SimpleTypeValueUpdater updater)
Specify an updater to update a live data value with an edited atomic value (such as a string or number).
|
void |
setValidators(Validator... validators)
Validators to apply to value of this type.
|
void |
setValidOperators(OperatorId... validOperators)
Set of search operators valid for this type.
|
void |
setValueMap(java.util.Map valueMap)
List of legal values for this type, like
valueMap . |
void |
setValueMap(java.lang.String... valueMap)
List of legal values for this type, like
valueMap . |
applyFactoryProperties, asSGWTComponent, createJsObj, destroy, doAddHandler, doInit, error, error, errorIfNotCreated, fireEvent, getAttribute, getAttributeAsBoolean, getAttributeAsDate, getAttributeAsDouble, getAttributeAsElement, getAttributeAsFloat, getAttributeAsInt, getAttributeAsJavaScriptObject, getAttributeAsMap, getAttributeAsString, getAttributeAsStringArray, getClassName, getConfig, getHandlerCount, getID, getOrCreateJsObj, getRef, getScClassName, getTestInstance, hasAutoAssignedID, internalSetID, internalSetID, isFactoryCreated, onBind, onInit, registerID, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setConfig, setFactoryCreated, setID, setProperty, setProperty, setProperty, setProperty, setScClassName
public SimpleType(JavaScriptObject jsObj)
public SimpleType()
name
- the name of the simple typeinheritsFrom
- the type it inherits frompublic SimpleType(java.lang.String name, FieldType inheritsFrom)
name
- the name of the simple typeinheritsFrom
- the type it inherits frompublic SimpleType(java.lang.String name, SimpleType inheritsFrom)
name
- the name of the simple typeinheritsFrom
- the type it inherits frompublic static SimpleType getOrCreateRef(JavaScriptObject jsObj)
public void setJavaScriptObject(JavaScriptObject jsObj)
setJavaScriptObject
in class BaseClass
public JavaScriptObject create()
public void setExportFormat(java.lang.String exportFormat) throws java.lang.IllegalStateException
FormatString
used during exports for numeric or date formatting. See exportFormat
.exportFormat
- See FormatString
. Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdExportFormatting overview and related methods
public java.lang.String getExportFormat()
FormatString
used during exports for numeric or date formatting. See exportFormat
.FormatString
ExportFormatting overview and related methods
public void setFieldProperties(DataSourceField fieldProperties) throws java.lang.IllegalStateException
fieldProperties
- Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic DataSourceField getFieldProperties()
public void setFormat(java.lang.String format) throws java.lang.IllegalStateException
FormatString
for numeric or date formatting. See format
.format
- See FormatString
. Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdExportFormatting overview and related methods
public java.lang.String getFormat()
FormatString
for numeric or date formatting. See format
.FormatString
ExportFormatting overview and related methods
public void setInheritsFrom(java.lang.String inheritsFrom) throws java.lang.IllegalStateException
Validators, if any, will be combined. All other SimpleType properties default to the inherited type's value.
inheritsFrom
- Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic java.lang.String getInheritsFrom()
Validators, if any, will be combined. All other SimpleType properties default to the inherited type's value.
public void setName(java.lang.String name) throws java.lang.IllegalStateException
field.type
.name
- Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic java.lang.String getName()
field.type
.public void setValidators(Validator... validators) throws java.lang.IllegalStateException
validators
- Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdValidation overview and related methods
public void setValidOperators(OperatorId... validOperators) throws java.lang.IllegalStateException
If not specified, the inherited
type's operators will be used, finally defaulting to the
default operators for the basic types (eg, integer).
validOperators
- Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic static SimpleType getType(java.lang.String typeName)
typeName
- the name
of the simpleType to returnpublic void register()
public void setValueMap(java.lang.String... valueMap) throws java.lang.IllegalStateException
valueMap
.valueMap
- valueMap Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setValueMap(java.util.Map valueMap) throws java.lang.IllegalStateException
valueMap
.valueMap
- valueMap Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setEditorProperties(FormItem editorProperties) throws java.lang.IllegalStateException
FormItem
configuration for editing values of this type.
You can create a simple custom FormItem by adding default
icons
that launch custom value picking dialogs (an example is in the QuickStart Guide, Chapter 9,
Extending Smart GWT).
By setting simpleType.editorProperties to an instance of your custom FormItem, forms will
automatically use the custom FormItem, as will grids performing
grid editing
.
Note: When you supply a custom FormItem via setEditorProperties(), you're really providing properties which are then used to create
multiple FormItems (e.g., in grids, forms and trees) and there's an underlying limitation here where event handlers have to be written to
dynamically receive the actual FormItem rather than relying on "this" (because there's more than one "this").
This means you need to follow the special rules indicated for
DataSourceField.setEditorProperties(FormItem)
.
As an alternative, you can use setEditorType(String)
or
setEditorType(Class)
to avoid these limitations, if you register
the FormItem subclass with the reflection mechanism
.
editorProperties
- FormItem with default properties to use when editingjava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setEditorType(FormItem editorType) throws java.lang.IllegalStateException
setEditorProperties(FormItem)
. You can also consider using
setEditorType(Class)
or setEditorType(String)
instead.setEditorProperties(FormItem)
.editorType
- FormItem with default properties to be applied when editingjava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setEditorType(java.lang.String editorType)
FormItem
class to be used whenever a value of this type is edited
(whether in a grid, form, or other component).
If unset, a FormItem will be automatically chosen.
Note: The editorType must be registered for use with the
reflection mechanism
.
By doing so, you avoid the limitations of setEditorProperties(FormItem)
.
editorType
- the fully-qualified class name of a FormItem
subclass, which must have been registered with the
reflection mechanism
.java.lang.IllegalArgumentException
- if the editorType class has not been registered for use with the
reflection mechanism
,
or if it does not inherit from
FormItem
.public void setEditorType(java.lang.Class<? extends FormItem> editorType)
FormItem
class to be used whenever a value of this type is edited
(whether in a grid, form, or other component).
If unset, a FormItem will be automatically chosen.
Note: The editorType must be registered for use with the
reflection mechanism
.
By doing so, you avoid the limitations of setEditorProperties(FormItem)
.
editorType
- a FormItem
subclass, which must have been registered with the
reflection mechanism
.java.lang.IllegalArgumentException
- if the editorType class has not been registered for use with the
reflection mechanism
,
or if it does not inherit from
FormItem
.public void setReadOnlyEditorProperties(FormItem editorProperties) throws java.lang.IllegalStateException
Note: The FormItem passed to setReadOnlyEditorProperties() is used as a "template" to create a FormItem whenever
a DataBoundComponent
needs to show an interface for editing this
field (and the field is marked read-only). This means you need to follow special rules indicated
for DataSourceField.setEditorProperties(FormItem)
.
As an alternative, you can use setReadOnlyEditorType(String)
or
setReadOnlyEditorType(Class)
to avoid these limitations, if you register
the FormItem subclass with the reflection mechanism
.
editorProperties
- FormItem with properties to be applied when editing values of this type in a read-only context.java.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setReadOnlyEditorType(FormItem editorType)
setReadOnlyEditorProperties(FormItem)
. You can also consider using
setReadOnlyEditorType(Class)
or setReadOnlyEditorType(String)
instead.setReadOnlyEditorProperties(FormItem)
.editorType
- FormItem with default properties to be applied when editingpublic void setReadOnlyEditorType(java.lang.String editorType)
FormItem
class to be used whenever a value of this type is edited
in a read-only context (whether in a grid, form, or other component).
If unset, a FormItem will be automatically chosen.
By using the reflection mechanism
,
this method avoids the limitations described in setReadOnlyEditorProperties(FormItem)
.
editorType
- the fully-qualified class name of a FormItem
subclass, which must have been registered with the
reflection mechanism
.java.lang.IllegalArgumentException
- if the editorType class has not been registered for use with the
reflection mechanism
,
or if it does not inherit from
FormItem
.public void setReadOnlyEditorType(java.lang.Class<? extends FormItem> editorType)
FormItem
class to be used whenever a value of this type is edited
in a read-only context (whether in a grid, form, or other component).
If unset, a FormItem will be automatically chosen.
By using the reflection mechanism
,
this method avoids the limitations described in setReadOnlyEditorProperties(FormItem)
.
editorType
- a FormItem
subclass, which must have been registered with the
reflection mechanism
.java.lang.IllegalArgumentException
- if the editorType class has not been registered for use with the
reflection mechanism
,
or if it does not inherit from
FormItem
.public void setInheritsFrom(FieldType inheritsFrom) throws java.lang.IllegalStateException
Validators, if any, will be combined. All other SimpleType properties default to the inherited type's value.
inheritsFrom
- inheritsFrom Default value is nulljava.lang.IllegalStateException
- this property cannot be changed after the underlying component has been createdpublic void setNormalDisplayFormatter(SimpleTypeFormatter formatter)
StaticTextItem
or DetailViewer
.
A formatter can make itself configurable on a per-component or per-field basis by checking properties on the component or field. For example, a formatter for account IDs may want to omit a prefix in views where it is redundant, and could check a flag detailViewer.omitAccountIdPrefix for this purpose.
formatter
- the formatterpublic void setShortDisplayFormatter(SimpleTypeFormatter formatter)
ListGrid
or
TreeGrid
.
A formatter can make itself configurable on a per-component or per-field basis by checking properties on the component or field. For example, a formatter for account IDs may want to omit a prefix in views where it is redundant, and could check a flag listGridField.omitAccountIdPrefix for this purpose.
formatter
- the formatterpublic void setEditFormatter(SimpleTypeFormatter formatter)
TextItem
See also #parseInput
for parsing an edited text value back to a data value.
formatter
- the formatterpublic java.lang.Object setEditParser(SimpleTypeParser parser)
TextItem
.
Typically this will convert from the format produced by #editFormatter
back to a data value.parser
- the parserpublic java.lang.Object setSimpleTypeValueExtractor(SimpleType.SimpleTypeValueExtractor extractor)
extractor
- the extractorpublic java.lang.Object setSimpleTypeValueUpdater(SimpleType.SimpleTypeValueUpdater updater)
extractor
- the updaterpublic JavaScriptObject getJsObj()
public static void registerSummaryFunction(java.lang.String functionName, SummaryFunction summaryFunction)
functionName
- name for the SummaryFunctionsummaryFunction
- new SummaryFunction implementationpublic static java.lang.Object applySummaryFunction(Record[] records, ListGridField field, SummaryFunctionType summaryFunction)
SummaryFunctionType
to a set of records and a field.records
- records to obtain the summary value forfield
- field on which the summary function is being runsummaryFunction
- standard summary function identifierpublic static java.lang.Object applySummaryFunction(Record[] records, ListGridField field, java.lang.String functionName)
records
- records to obtain the summary value forfield
- field on which the summary function is being runfunctionName
- name under which the summary function is registered. See registerSummaryFunction(String, SummaryFunction)
public static void setDefaultSummaryFunction(java.lang.String typeName, SummaryFunctionType summaryFunction)
typeName
- name of the field type. If this is the name of a custom SimpleType, the developer may need
to ensure the type is registered
.summaryFunction
- standard summary function type for this data typepublic static void setDefaultSummaryFunction(java.lang.String typeName, java.lang.String functionName)
typeName
- name of the field type. If this is the name of a custom SimpleType, the developer may need
to ensure the type is registered
.summaryFunction
- name under which the summary function is registered. See registerSummaryFunction(String, SummaryFunction)