/*
* 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.widgets.form;
import com.smartgwt.client.event.*;
import com.smartgwt.client.core.*;
import com.smartgwt.client.types.*;
import com.smartgwt.client.data.*;
import com.smartgwt.client.data.events.*;
import com.smartgwt.client.rpc.*;
import com.smartgwt.client.widgets.*;
import com.smartgwt.client.widgets.events.*;
import com.smartgwt.client.widgets.form.*;
import com.smartgwt.client.widgets.form.validator.*;
import com.smartgwt.client.widgets.form.fields.*;
import com.smartgwt.client.widgets.tile.*;
import com.smartgwt.client.widgets.tile.events.*;
import com.smartgwt.client.widgets.grid.*;
import com.smartgwt.client.widgets.grid.events.*;
import com.smartgwt.client.widgets.chart.*;
import com.smartgwt.client.widgets.layout.*;
import com.smartgwt.client.widgets.layout.events.*;
import com.smartgwt.client.widgets.menu.*;
import com.smartgwt.client.widgets.tab.*;
import com.smartgwt.client.widgets.toolbar.*;
import com.smartgwt.client.widgets.tree.*;
import com.smartgwt.client.widgets.tree.events.*;
import com.smartgwt.client.widgets.viewer.*;
import com.smartgwt.client.widgets.calendar.*;
import com.smartgwt.client.widgets.calendar.events.*;
import com.smartgwt.client.widgets.cube.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Element;
import com.smartgwt.client.util.*;
import com.google.gwt.event.shared.*;
import com.google.gwt.event.shared.HasHandlers;
/**
* The ValuesManager manages data from multiple member forms. <P> If a single logical form needs to be separated into
* multiple DynamicForm instances for Layout purposes (for example, spanning one logical form across multiple Tabs), a
* ValuesManager can be used to make the forms act as one logical form, supporting all value-related APIs otherwise called
* on DynamicForm directly. <P> A ValuesManager has no visual representation - it is strictly a logical entity, and the
* member forms provide the user interface. You can initialize a ValuesManager with a set of member forms (by setting
* {@link com.smartgwt.client.widgets.form.ValuesManager#getMembers members} at init) or add and remove member forms
* dynamically. <P> Calling {@link com.smartgwt.client.widgets.form.ValuesManager#setValues ValuesManager.setValues} on a
* ValuesManager will automatically route new field values to whichever member form is showing an editor for that field.
* Likewise, calling {@link com.smartgwt.client.widgets.form.ValuesManager#validate ValuesManager.validate} will validate
* all member forms, and {@link com.smartgwt.client.widgets.form.ValuesManager#saveData ValuesManager.saveData} will
* initiate a save operation which aggregates values from all member forms. <P> Like a DynamicForm, a ValuesManager can be
* databound by setting {@link com.smartgwt.client.widgets.form.ValuesManager#getDataSource dataSource}. In this case all
* member forms must also be bound to the same DataSource. <P> In general, when working with a ValuesManager and its member
* forms, call APIs on the ValuesManager whenever you are dealing with values that span multiple forms, and only call APIs
* on member forms that are specific to that form or its fields. <P> Note that, just as a DynamicForm can track values that
* are not shown in any FormItem, a ValuesManager may track values for which there is no FormItem in any member form.
* However, when using a ValuesManager these extra values are only allowed on the ValuesManager itself. Member forms will
* not track values for which they do not have FormItems.
*/
public class ValuesManager extends BaseClass implements com.smartgwt.client.widgets.form.events.HasSubmitValuesHandlers, com.smartgwt.client.widgets.form.events.HasHiddenValidationErrorsHandlers {
public static ValuesManager getOrCreateRef(JavaScriptObject jsObj) {
if(jsObj == null) return null;
BaseClass obj = BaseClass.getRef(jsObj);
if(obj != null) {
return (ValuesManager) obj;
} else {
return new ValuesManager(jsObj);
}
}
public ValuesManager(){
scClassName = "ValuesManager";
}
public ValuesManager(JavaScriptObject jsObj){
super(jsObj);
}
public native JavaScriptObject create()/*-{
var config = this.@com.smartgwt.client.core.BaseClass::getConfig()();
var scClassName = this.@com.smartgwt.client.core.BaseClass::scClassName;
return $wnd.isc[scClassName].create(config);
}-*/;
// ********************* Properties / Attributes ***********************
/**
* If explicitly set to false, prevents the ValuesManager from automatically propagating data value changes to its members.
* You can manually synchronize member data values at any time with a call to {@link
* com.smartgwt.client.widgets.form.ValuesManager#synchronizeMembers ValuesManager.synchronizeMembers}.
* <p><b>Note : </b> This is an advanced setting</p>
*
* @param autoSynchronize autoSynchronize Default value is null
*/
public void setAutoSynchronize(Boolean autoSynchronize) {
setAttribute("autoSynchronize", autoSynchronize, true);
}
/**
* If explicitly set to false, prevents the ValuesManager from automatically propagating data value changes to its members.
* You can manually synchronize member data values at any time with a call to {@link
* com.smartgwt.client.widgets.form.ValuesManager#synchronizeMembers ValuesManager.synchronizeMembers}.
*
*
* @return Boolean
*/
public Boolean getAutoSynchronize() {
return getAttributeAsBoolean("autoSynchronize");
}
/**
* If set to true, client-side validators will not run on the form when validate() is called. Server-side validators (if
* any) will still run on attempted save.
* <p><b>Note : </b> This is an advanced setting</p>
*
* @param disableValidation disableValidation Default value is null
* @see com.smartgwt.client.widgets.form.DynamicForm#saveData
* @see com.smartgwt.client.widgets.form.DynamicForm#submit
* @see com.smartgwt.client.docs.Validation Validation overview and related methods
*/
public void setDisableValidation(Boolean disableValidation) {
setAttribute("disableValidation", disableValidation, true);
}
/**
* If set to true, client-side validators will not run on the form when validate() is called. Server-side validators (if
* any) will still run on attempted save.
*
*
* @return Boolean
* @see com.smartgwt.client.widgets.form.DynamicForm#saveData
* @see com.smartgwt.client.widgets.form.DynamicForm#submit
* @see com.smartgwt.client.docs.Validation Validation overview and related methods
*/
public Boolean getDisableValidation() {
return getAttributeAsBoolean("disableValidation");
}
/**
* Default {@link com.smartgwt.client.types.DSOperationType} to be performed when {@link
* com.smartgwt.client.widgets.form.DynamicForm#saveData DynamicForm.saveData} is called. This property is automatically
* set on a call to {@link com.smartgwt.client.widgets.form.DynamicForm#editRecord DynamicForm.editRecord} or {@link
* com.smartgwt.client.widgets.form.DynamicForm#editNewRecord DynamicForm.editNewRecord}, or may be set directly via
* {@link com.smartgwt.client.widgets.form.DynamicForm#setSaveOperationType DynamicForm.setSaveOperationType}. <P> If
* <code>saveOperationType</code> is unset, the form will heuristically determine whether an "add" or "update" operation is
* intended based on whether the primaryKey field is present and editable.
*
* <br><br>If this method is called after the component has been drawn/initialized:
* Setter for the default {@link com.smartgwt.client.types.DSOperationType} when {@link com.smartgwt.client.widgets.form.DynamicForm#saveData DynamicForm.saveData} is called. Note that this property can also be set by calling {@link com.smartgwt.client.widgets.form.DynamicForm#editRecord DynamicForm.editRecord} or {@link com.smartgwt.client.widgets.form.DynamicForm#editNewRecord DynamicForm.editNewRecord}
*
* @param saveOperationType Operation type to use as a default. Valid values are <code>"add"</code> or <code>"update"</code>.. Default value is null
*/
public void setSaveOperationType(DSOperationType saveOperationType) {
setAttribute("saveOperationType", saveOperationType == null ? null : saveOperationType.getValue(), true);
}
/**
* Default {@link com.smartgwt.client.types.DSOperationType} to be performed when {@link
* com.smartgwt.client.widgets.form.DynamicForm#saveData DynamicForm.saveData} is called. This property is automatically
* set on a call to {@link com.smartgwt.client.widgets.form.DynamicForm#editRecord DynamicForm.editRecord} or {@link
* com.smartgwt.client.widgets.form.DynamicForm#editNewRecord DynamicForm.editNewRecord}, or may be set directly via
* {@link com.smartgwt.client.widgets.form.DynamicForm#setSaveOperationType DynamicForm.setSaveOperationType}. <P> If
* <code>saveOperationType</code> is unset, the form will heuristically determine whether an "add" or "update" operation is
* intended based on whether the primaryKey field is present and editable.
*
*
* @return Returns the {@link com.smartgwt.client.types.DSOperationType} to be performed when {@link
* com.smartgwt.client.widgets.form.DynamicForm#saveData DynamicForm.saveData} is called. Valid options are
* <code>"add"</code> or <code>"update"</code>. <P> If a {@link com.smartgwt.client.data.DSRequest} configuration object is
* passed in containing an explicit operationType this will be returned. Otherwise {@link
* com.smartgwt.client.widgets.form.DynamicForm#getSaveOperationType saveOperationType} will be returned.
*/
public DSOperationType getSaveOperationType() {
return EnumUtil.getEnum(DSOperationType.values(), getAttribute("saveOperationType"));
}
/**
* When calling {@link com.smartgwt.client.widgets.form.ValuesManager#saveData ValuesManager.saveData} on a form or
* valuesManager, by default if the server returns an error code, any callback passed into saveData() will not be fired. If
* the error code returned by the server indicates a validation error, it will be displayed to the user by updating the
* form items to show the error messages, and firing any specified hiddenValidationErrors handler, otherwise the standard
* RPCManager error handling logic would be invoked. <P> Developers who want to handle errors themselves can override this
* default by specifying willHandleError on the DSRequest. In this case the callback passed in will be fired even if the
* server returns an error status code. <P> If <code>suppressValidationErrorCallback</code> is set to true, if a save
* attempt returns a <i>validation</i> error code, the user-specified callback will not be fired <i>even if
* willHandleError:true</code> was specified on the dsRequest - though for other error codes, the callback would be fired
* if willHandle error is specified on the request. Note that this is the historical behavior for <var
* class=smartclient>Smart GWT builds 8.0 and earlier</var> <var class=smartgwt>SmartGWT builds 4.0 and earlier</var>
* <p><b>Note : </b> This is an advanced setting</p>
*
* @param suppressValidationErrorCallback suppressValidationErrorCallback Default value is false
*/
public void setSuppressValidationErrorCallback(Boolean suppressValidationErrorCallback) {
setAttribute("suppressValidationErrorCallback", suppressValidationErrorCallback, true);
}
/**
* When calling {@link com.smartgwt.client.widgets.form.ValuesManager#saveData ValuesManager.saveData} on a form or
* valuesManager, by default if the server returns an error code, any callback passed into saveData() will not be fired. If
* the error code returned by the server indicates a validation error, it will be displayed to the user by updating the
* form items to show the error messages, and firing any specified hiddenValidationErrors handler, otherwise the standard
* RPCManager error handling logic would be invoked. <P> Developers who want to handle errors themselves can override this
* default by specifying willHandleError on the DSRequest. In this case the callback passed in will be fired even if the
* server returns an error status code. <P> If <code>suppressValidationErrorCallback</code> is set to true, if a save
* attempt returns a <i>validation</i> error code, the user-specified callback will not be fired <i>even if
* willHandleError:true</code> was specified on the dsRequest - though for other error codes, the callback would be fired
* if willHandle error is specified on the request. Note that this is the historical behavior for <var
* class=smartclient>Smart GWT builds 8.0 and earlier</var> <var class=smartgwt>SmartGWT builds 4.0 and earlier</var>
*
*
* @return Boolean
*/
public Boolean getSuppressValidationErrorCallback() {
return getAttributeAsBoolean("suppressValidationErrorCallback");
}
// ********************* Methods ***********************
/**
*
* This method exists for clean integration with existing server frameworks that have a 'cancel'
* feature which typically clears session state associated with the form. When this method is
* called, an RPC is sent to the server with a parameter named
* {@link com.smartgwt.client.widgets.form.DynamicForm#getCancelParamName cancelParamName} with the value
* {@link com.smartgwt.client.widgets.form.DynamicForm#getCancelParamValue cancelParamValue}.<p>
*
* Note that no other form data is sent. By default the current top-level page is replaced with the
* reply. If you wish to ignore the server reply instead, call this method like this:
* <pre>
* dynamicFormInstance.cancel({ignoreTimeout: true, target: null});
* </pre>
*
*/
public native void cancel() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.cancel();
}-*/;
/**
*
* This method exists for clean integration with existing server frameworks that have a 'cancel'
* feature which typically clears session state associated with the form. When this method is
* called, an RPC is sent to the server with a parameter named
* {@link com.smartgwt.client.widgets.form.DynamicForm#getCancelParamName cancelParamName} with the value
* {@link com.smartgwt.client.widgets.form.DynamicForm#getCancelParamValue cancelParamValue}.<p>
*
* Note that no other form data is sent. By default the current top-level page is replaced with the
* reply. If you wish to ignore the server reply instead, call this method like this:
* <pre>
* dynamicFormInstance.cancel({ignoreTimeout: true, target: null});
* </pre>
*
* @param requestProperties additional properties to set on the RPCRequest that will be issued
* @see com.smartgwt.client.widgets.form.DynamicForm#cancelEditing
* @see com.smartgwt.client.docs.Submitting Submitting overview and related methods
*/
public native void cancel(DSRequest requestProperties) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.cancel(requestProperties.@com.smartgwt.client.core.DataClass::getJsObj()());
}-*/;
/**
* Clears all errors from member forms.
* @param showErrors If true, clear any visible error messages.
*/
public native void clearErrors(boolean showErrors) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.clearErrors(showErrors);
}-*/;
/**
* Clear all validation errors associated with some field in this form
* @param fieldName field for which errors should be cleared
* @param show if true, and the field is present in one of our member forms, redraw it to clear any currently
* visible validation errors
*/
public native void clearFieldErrors(String fieldName, boolean show) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.clearFieldErrors(fieldName, show);
}-*/;
/**
* Clear the value for some field.
* @param fieldName Which field to set the value for
*/
public native void clearValue(String fieldName) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.clearValue(fieldName);
}-*/;
/**
* Clear out all the values managed by this values manager.
*/
public native void clearValues() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.clearValues();
}-*/;
/**
* Given a fieldName or dataPath, this method will find the member responsible for interacting with that field's value. If
* no form is found, returns null.
* @param fieldName fieldName or dataPath to check
*
* @return member responsible for displaying this field (may be null).
*/
public native Canvas getMemberForField(String fieldName) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var ret = self.getMemberForField(fieldName);
if(ret == null || ret === undefined) return null;
var retVal = @com.smartgwt.client.widgets.BaseWidget::getRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret);
if(retVal == null) {
retVal = @com.smartgwt.client.widgets.Canvas::new(Lcom/google/gwt/core/client/JavaScriptObject;)(ret);
}
return retVal;
}-*/;
/**
* Are there any errors associated with any fields in this valuesManager?
*
* @return returns true if there are any outstanding validation errors, false otherwise.
* @see com.smartgwt.client.docs.Errors Errors overview and related methods
*/
public native Boolean hasErrors() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var retVal =self.hasErrors();
if(retVal == null || retVal === undefined) {
return null;
} else {
return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(retVal);
}
}-*/;
/**
* Are there any errors associated with a field in this valuesManager?
* @param fieldName field to check for errors
*
* @return returns true if there are any outstanding validation errors, false otherwise.
* @see com.smartgwt.client.docs.Errors Errors overview and related methods
*/
public native Boolean hasFieldErrors(String fieldName) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var retVal =self.hasFieldErrors(fieldName);
if(retVal == null || retVal === undefined) {
return null;
} else {
return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(retVal);
}
}-*/;
/**
* Returns true if {@link com.smartgwt.client.widgets.form.ValuesManager#getSaveOperationType saveOperationType} is
* currently "add". See {@link com.smartgwt.client.widgets.form.ValuesManager#getSaveOperationType saveOperationType}.
*
* @return whether this form will use an "add" operation when saving
*/
public native Boolean isNewRecord() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var retVal =self.isNewRecord();
if(retVal == null || retVal === undefined) {
return null;
} else {
return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(retVal);
}
}-*/;
/**
* Same as {@link com.smartgwt.client.widgets.form.DynamicForm#reset DynamicForm.reset}.
*/
public native void resetValues() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.resetValues();
}-*/;
/**
* Method to explicitly show the latest set of validation errors present on this ValuesManager.<br> Will redraw all member
* forms to display (or clear) currently visible errors, and fire {@link
* com.smartgwt.client.widgets.form.ValuesManager#handleHiddenValidationErrors ValuesManager.handleHiddenValidationErrors}
* to allow custom handling of hidden errors.
*/
public native void showErrors() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.showErrors();
}-*/;
/**
* Method to explicitly show the latest set of validation errors present on some field within this ValuesManager.<br> If
* the field in question is present as a visible item in a member form, the form item will be redrawn to display the error
* message(s). Otherwise {@link com.smartgwt.client.widgets.form.ValuesManager#handleHiddenValidationErrors
* ValuesManager.handleHiddenValidationErrors} will be fired to allow custom handling of hidden errors.
*/
public native void showFieldErrors() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.showFieldErrors();
}-*/;
/**
* Update all of this ValuesManager's members to reflect the current values held by the ValuesManager. It is not
* normally necesary to manually synchronize members, but you will need to do so if you switch off {@link
* com.smartgwt.client.widgets.form.ValuesManager#getAutoSynchronize automatic synchronization}.
*/
public native void synchronizeMembers() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.synchronizeMembers();
}-*/;
/**
* Validate the current set of values for this values manager against validators defined in the member forms. For databound
* valuesManagers, also perform validation against any validators defined on datasource fields. <P> Note that if validation
* errors occur for a value that is not shown in any member forms, those errors will cause a warning and {@link
* com.smartgwt.client.widgets.form.ValuesManager#handleHiddenValidationErrors ValuesManager.handleHiddenValidationErrors}
* will be called. This can occur if:<br> - A datasource field has no corresponding item in any member form<br> - The item
* in question is hidden<br> - The member form containing the item is hidden.
*
* @return true if all validation passed
* @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_form_splitting" target="examples">Splitting Example</a>
*/
public native Boolean validate() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var retVal =self.validate();
if(retVal == null || retVal === undefined) {
return null;
} else {
return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(retVal);
}
}-*/;
/**
* Compares the current set of values with the values stored by the call to the {@link
* com.smartgwt.client.widgets.form.DynamicForm#rememberValues DynamicForm.rememberValues} method.
* <code>rememberValues()</code> runs when the form is initialized and on every call to {@link
* com.smartgwt.client.widgets.form.DynamicForm#setValues DynamicForm.setValues}. Returns true if the values have changed,
* and false otherwise.
*
* @return true if current values do not match remembered values
* @see com.smartgwt.client.widgets.form.ValuesManager#getChangedValues
* @see com.smartgwt.client.widgets.form.ValuesManager#getOldValues
*/
public native Boolean valuesHaveChanged() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var retVal =self.valuesHaveChanged();
if(retVal == null || retVal === undefined) {
return null;
} else {
return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(retVal);
}
}-*/;
// ********************* Static Methods ***********************
// ***********************************************************
/**
* The DataSource that this component should bind to for default fields and for performing
DataSource
* requests<P>
*
* @param dataSource dataSource Default value is null
*/
public void setDataSource(DataSource dataSource) {
setAttribute("dataSource", dataSource.getOrCreateJsObj(), true);
}
/**
* The DataSource that this component should bind to for default fields and for performing {@link com.smartgwt.client.data.DSRequest}. <P> Can be specified as either a DataSource instance or the String ID of a DataSource.
*
* @return DataSource
*/
public DataSource getDataSource() {
return DataSource.getOrCreateRef(getAttributeAsJavaScriptObject("dataSource"));
}
/**
* Set the values for this values manager. Member forms will be updated as required by this change.
* Note that pre-existant values in other fields are cleared out by this.
*
* @param values the values
*/
public void setValues(Map values) {
setAttribute("values", values, true);
}
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, String value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.setValue(fieldName, value);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, double value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.setValue(fieldName, value);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, boolean value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.setValue(fieldName, value);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, Date value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var valueJS = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptDate(Ljava/util/Date;)(value);
self.setValue(fieldName, valueJS);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, JavaScriptObject value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.setValue(fieldName, value);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, Map value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var valueJS = @com.smartgwt.client.util.JSOHelper::convertMapToJavascriptObject(Ljava/util/Map;)(value);
self.setValue(fieldName, valueJS);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, Record value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var valueJS = value.@com.smartgwt.client.data.Record::getJsObj()();
self.setValue(fieldName, valueJS);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, DataClass value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var valueJS = value.@com.smartgwt.client.core.DataClass::getJsObj()();
self.setValue(fieldName, valueJS);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, Record[] value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var valueJS = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptArray([Ljava/lang/Object;)(value);
self.setValue(fieldName, valueJS);
}-*/;
/**
* Set the value for some field.
*
* @param fieldName Name of the field being updated
* @param value New value.
*/
public native void setValue(String fieldName, DataClass[] value) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var valueJS = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptArray([Ljava/lang/Object;)(value);
self.setValue(fieldName, valueJS);
}-*/;
/**
* Return the value as String
*
* @param fieldName the field name
* @return the value
*/
public native String getValueAsString(String fieldName) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var val = self.getValue(fieldName);
return val == null || val === undefined ? null : val.toString();
}-*/;
/**
* Return the value of the field.
*
* @param fieldName the field name
* @return the value
*/
public native Object getValue(String fieldName) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var val = self.getValue(fieldName);
return val == null || val === undefined ? null : $wnd.SmartGWT.convertToJavaType(val);
}-*/;
/**
* Returns the current set of values for the values manager instance. This includes the values from any form managed by this manager, as well as any values explicitly
* applied via ValuesManager.setValues().
*
* @return the values
*/
public native Map getValues() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var value = self.getValues();
if(value == null) return null;
var valueJ = @com.smartgwt.client.util.JSOHelper::convertToMap(Lcom/google/gwt/core/client/JavaScriptObject;)(value);
return valueJ;
}-*/;
/**
* Returns all values within this ValuesManager that have changed since {@link
* com.smartgwt.client.widgets.form.ValuesManager#rememberValues rememberValues} last ran. Note that
* {@link com.smartgwt.client.widgets.form.ValuesManager#rememberValues rememberValues} runs on
* valuesManager
* initialization, and with every call to {@link com.smartgwt.client.widgets.form.ValuesManager#setValues
* ValuesManager.setValues} so this will typically contain all values the user has explicitly edited since then.
*
* @return the values
*/
public native Map getChangedValues() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var value = self.getChangedValues();
if(value == null) return null;
var valueJ = @com.smartgwt.client.util.JSOHelper::convertToMap(Lcom/google/gwt/core/client/JavaScriptObject;)(value);
return valueJ;
}-*/;
/**
* Returns the set of values last stored by {@link com.smartgwt.client.widgets.form.ValuesManager#rememberValues
* ValuesManager.rememberValues}. Note that <code>rememberValues()</code> is called automatically by {@link
* com.smartgwt.client.widgets.form.ValuesManager#setValues ValuesManager.setValues}, and on form initialization, so this
* typically contains all values as they were before the user edited them.
*
* @return the values
*/
public native Map getOldValues() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var value = self.getOldValues();
if(value == null) return null;
var valueJ = @com.smartgwt.client.util.JSOHelper::convertToMap(Lcom/google/gwt/core/client/JavaScriptObject;)(value);
return valueJ;
}-*/;
/**
* Edit the record selected in the specified selection component (typically a {@link
* com.smartgwt.client.widgets.grid.ListGrid}). <P> Updates the values of this editor to match the selected record's
* values. <P> If this form has a dataSource, then saving via {@link com.smartgwt.client.widgets.form.ValuesManager#saveData}
* will use the "update" operation type.
*
* @param selectionComponent the ListGrid or ID of a {@link com.smartgwt.client.widgets.grid.ListGrid} whose
* currently selected record(s) is/are to be edited
*/
public native void editSelectedData(ListGrid selectionComponent) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var selectionComponentJS = selectionComponent.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()();
self.editSelectedData(selectionComponentJS);
}-*/;
/**
*
Edit an existing record. Updates this editors values to match the values of the record
passed in, via {@link com.smartgwt.client.widgets.form.ValuesManager#setValues}.
<P>
This method will also call {@link com.smartgwt.client.widgets.form.DynamicForm#setSaveOperationType} to ensure
subsequent calls to <code>saveData()</code> will use an <code>update</code> rather than
an <code>add</code> operation.
*
* @param record the record to be edited as a map of field names to their corresponding values
*/
public native void editRecord(Record record) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.editRecord(record.@com.smartgwt.client.core.DataClass::getJsObj()());
}-*/;
/**
* Prepare to edit a new record by clearing the current set of values (or replacing them with initialValues if specified).
* Subsequent calls to saveData() will use an add rather than an update operation.
*/
public native void editNewRecord() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
return self.editNewRecord();
}-*/;
/**
* Prepare to edit a new record by clearing the current set of values (or replacing them with initialValues if specified).
* Subsequent calls to saveData() will use an add rather than an update operation.
*
* @param initialValues initial set of values for the editor as a map of field names to their corresponding values
*/
public native void editNewRecord(Map initialValues) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var initialValuesJS = @com.smartgwt.client.util.JSOHelper::convertMapToJavascriptObject(Ljava/util/Map;)(initialValues);
return self.editNewRecord(initialValuesJS);
}-*/;
/**
* Add a new member form to this valuesManager. This form's values will subsequently be available through this
* valuesManager. <br> Note on pre-existant values: If the valuesManager has a value specified for some field, for
* which the member form has an item, this value will be applied to the member form. This is true whether the item
* has a value or not.<br> However if the member form has a value for some field, and the ValuesManager does not
* have a specified value for the same field, we allow the valuesManager to pick up the value from the member
* form.
*
* @param member form (or ID of form) to add to this valuesManager as a
* member.
*/
public native void addMember(DynamicForm member) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var memberJS = member.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()();
self.addMember(memberJS);
}-*/;
/**
* Remove a member form from this valuesManager, so its values are no longer managed by this instance. This does not
* clear the values associated with the form from the valuesManager - they will still be available via
* valuesManager.getValues(), but will not be updated as the form is manipulated.
*
* @param member form to remove from this valuesManager
*/
public native void removeMember(DynamicForm member) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var memberJS = member.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()();
self.removeMember(memberJS);
}-*/;
/**
* Returns an array of members in this ValuesManager.
*
* @return the members
*/
public DynamicForm[] getMembers() {
return convertToDynamicFormArray(getAttributeAsJavaScriptObject("members"));
}
private static DynamicForm[] convertToDynamicFormArray(JavaScriptObject nativeArray) {
if (nativeArray == null) {
return new DynamicForm[]{};
}
JavaScriptObject[] componentsj = JSOHelper.toArray(nativeArray);
DynamicForm[] objects = new DynamicForm[componentsj.length];
for (int i = 0; i < componentsj.length; i++) {
JavaScriptObject componentJS = componentsj[i];
DynamicForm obj = DynamicForm.getOrCreateRef(componentJS);
objects[i] = obj;
}
return objects;
}
/**
* Remove a member form from this valuesManager, so its values are no longer managed by this instance. This does not
* clear the values associated with the form from the valuesManager - they will still be available via
* valuesManager.getValues(), but will not be updated as the form is manipulated.
*
* @param formID ID of the form to remove from this valuesManager
*/
public native void removeMember(String formID) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.removeMember(formID);
}-*/;
public native void fetchData() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.fetchData();
}-*/;
/**
* Retrieve data that matches the provided criteria, and edit the first record returned
*
* @param criteria search criteria
*/
public native void fetchData(Criteria criteria) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.fetchData(criteria == null ? null : criteria.@com.smartgwt.client.data.Criteria::getJsObj()());
}-*/;
/**
* Retrieve data that matches the provided criteria, and edit the first record returned
*
* @param criteria search criteria
* @param callback callback to invoke on completion
*/
public native void fetchData(Criteria criteria, DSCallback callback) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var critJS = criteria == null ? null : criteria.@com.smartgwt.client.data.Criteria::getJsObj()();
self.fetchData(critJS, $entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}));
}-*/;
/**
* Retrieve data that matches the provided criteria, and edit the first record returned
*
* @param criteria search criteria
* @param callback callback to invoke on completion
* @param requestProperties additional properties to set on the DSRequest
* that will be issued
*/
public native void fetchData(Criteria criteria, DSCallback callback, DSRequest requestProperties) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var critJS = criteria == null ? null : criteria.@com.smartgwt.client.data.Criteria::getJsObj()();
var requestPropertiesJS = requestProperties == null ? null : requestProperties.@com.smartgwt.client.core.DataClass::getJsObj()();
self.fetchData(critJS, $entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}), requestPropertiesJS);
}-*/;
/**
* Retrieve data that matches the provided criteria, and edit the first record returned.<br> Differs from {@link
* com.smartgwt.client.widgets.form.DynamicForm#fetchData} in that a case insensitive substring match will be
* performed against the criteria to retrieve the data.
*
* @param criteria search criteria
*/
public native void filterData(Criteria criteria) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.filterData(criteria == null ? null : criteria.@com.smartgwt.client.data.Criteria::getJsObj()());
}-*/;
/**
* Retrieve data that matches the provided criteria, and edit the first record returned.<br> Differs from {@link
* com.smartgwt.client.widgets.form.DynamicForm#fetchData} in that a case insensitive substring match will be
* performed against the criteria to retrieve the data.
*
* @param criteria search criteria
* @param callback callback to invoke on completion
*/
public native void filterData(Criteria criteria, DSCallback callback) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var critJS = criteria == null ? null : criteria.@com.smartgwt.client.data.Criteria::getJsObj()();
self.filterData(critJS, $entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}));
}-*/;
/**
* Retrieve data that matches the provided criteria, and edit the first record returned.<br> Differs from {@link
* com.smartgwt.client.widgets.form.DynamicForm#fetchData} in that a case insensitive substring match will be
* performed against the criteria to retrieve the data.
*
* @param criteria search criteria
* @param callback callback to invoke on completion
* @param requestProperties additional properties to set on the DSRequest
* that will be issued
*/
public native void filterData(Criteria criteria, DSCallback callback, DSRequest requestProperties) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var critJS = criteria == null ? null : criteria.@com.smartgwt.client.data.Criteria::getJsObj()();
var requestPropertiesJS = requestProperties == null ? null : requestProperties.@com.smartgwt.client.core.DataClass::getJsObj()();
self.filterData(critJS, $entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}), requestPropertiesJS);
}-*/;
/**
* Validate and then save the form's current values to the {@link com.smartgwt.client.data.DataSource} this form is
* bound to. <p> If client-side validators are defined, they are executed first, and if any errors are found the
* save is aborted and the form will show the errors. <p> If client-side validation passes, a {@link
* com.smartgwt.client.data.DSRequest} will be sent, exactly as though {@link com.smartgwt.client.data.DataSource#addData}
* or {@link com.smartgwt.client.data.DataSource#updateData} had been called with {@link
* com.smartgwt.client.widgets.form.DynamicForm#getValues} as data. The {@link
* com.smartgwt.client.data.DSRequest#getOperationType operationType} will be either "update" or "add" depending on
* whether values were initially provided via <code>editRecord()</code> or <code>editNew()</code>. <P> On either a
* client-side or server-side validation failure, validation errors will be displayed in the form. Visible items
* within a DynamicForms will be redrawn to display errors. Validation failure occuring on hidden items, or
* DataSource fields with no associated form items may be handled via {@link com.smartgwt.client.widgets.form.DynamicForm#handleHiddenValidationErrors}
* or {@link com.smartgwt.client.widgets.form.ValuesManager#handleHiddenValidationErrors}. <P> {@link
* com.smartgwt.client.widgets.form.DynamicForm#getValidationURL validationURL} can be set to do validation against
* a different URL from where the form will ultimately save, as part of an incremental upgrade strategy for Struts
* and Struts-like applications.
*/
public native void saveData() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.saveData();
}-*/;
/**
* Validate and then save the form's current values to the {@link com.smartgwt.client.data.DataSource} this form is
* bound to. <p> If client-side validators are defined, they are executed first, and if any errors are found the
* save is aborted and the form will show the errors. <p> If client-side validation passes, a {@link
* com.smartgwt.client.data.DSRequest} will be sent, exactly as though {@link com.smartgwt.client.data.DataSource#addData}
* or {@link com.smartgwt.client.data.DataSource#updateData} had been called with {@link
* com.smartgwt.client.widgets.form.DynamicForm#getValues} as data. The {@link
* com.smartgwt.client.data.DSRequest#getOperationType operationType} will be either "update" or "add" depending on
* whether values were initially provided via <code>editRecord()</code> or <code>editNew()</code>. <P> On either a
* client-side or server-side validation failure, validation errors will be displayed in the form. Visible items
* within a DynamicForms will be redrawn to display errors. Validation failure occuring on hidden items, or
* DataSource fields with no associated form items may be handled via {@link com.smartgwt.client.widgets.form.DynamicForm#handleHiddenValidationErrors}
* or {@link com.smartgwt.client.widgets.form.ValuesManager#handleHiddenValidationErrors}. <P> {@link
* com.smartgwt.client.widgets.form.DynamicForm#getValidationURL validationURL} can be set to do validation against
* a different URL from where the form will ultimately save, as part of an incremental upgrade strategy for Struts
* and Struts-like applications.
*
* @param callback callback to invoke on completion
*/
public native void saveData(DSCallback callback) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.saveData($entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}));
}-*/;
/**
* Validate and then save the form's current values to the {@link com.smartgwt.client.data.DataSource} this form is
* bound to. <p> If client-side validators are defined, they are executed first, and if any errors are found the
* save is aborted and the form will show the errors. <p> If client-side validation passes, a {@link
* com.smartgwt.client.data.DSRequest} will be sent, exactly as though {@link com.smartgwt.client.data.DataSource#addData}
* or {@link com.smartgwt.client.data.DataSource#updateData} had been called with {@link
* com.smartgwt.client.widgets.form.DynamicForm#getValues} as data. The {@link
* com.smartgwt.client.data.DSRequest#getOperationType operationType} will be either "update" or "add" depending on
* whether values were initially provided via <code>editRecord()</code> or <code>editNew()</code>. <P> On either a
* client-side or server-side validation failure, validation errors will be displayed in the form. Visible items
* within a DynamicForms will be redrawn to display errors. Validation failure occuring on hidden items, or
* DataSource fields with no associated form items may be handled via {@link com.smartgwt.client.widgets.form.DynamicForm#handleHiddenValidationErrors}
* or {@link com.smartgwt.client.widgets.form.ValuesManager#handleHiddenValidationErrors}. <P> {@link
* com.smartgwt.client.widgets.form.DynamicForm#getValidationURL validationURL} can be set to do validation against
* a different URL from where the form will ultimately save, as part of an incremental upgrade strategy for Struts
* and Struts-like applications.
*
* @param callback callback to invoke on completion
* @param requestProperties additional properties to set on the DSRequest
* that will be issued
*/
public native void saveData(DSCallback callback, DSRequest requestProperties) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var requestPropertiesJS = requestProperties == null ? null : requestProperties.@com.smartgwt.client.core.DataClass::getJsObj()();
self.saveData($entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}), requestPropertiesJS);
}-*/;
/**
* <code>submit()</code> is automatically called when a {@link com.smartgwt.client.widgets.form.fields.SubmitItem}
* included in the form is clicked, or, if {@link com.smartgwt.client.widgets.form.DynamicForm#getSaveOnEnter
* saveOnEnter} is set, when the "Enter" key is pressed in a text input. Submit can also be manually called. <P> If
* {@link com.smartgwt.client.widgets.form.DynamicForm#submitValues} exists, it will be called, then immediately
* return. <P> Otherwise, default behavior varies based on {@link com.smartgwt.client.widgets.form.DynamicForm#getCanSubmit
* canSubmit}: if <code>canSubmit</code> is false, {@link com.smartgwt.client.widgets.form.DynamicForm#saveData}
* will be called to handle saving via Smart GWT databinding. <P> If <code>canSubmit</code> is true, the form
* will be submitted like an ordinary HTML form via {@link com.smartgwt.client.widgets.form.DynamicForm#submitForm}.
* <P> The parameters to <code>submit()</code> apply only if <code>submit()</code> will be calling {@link
* com.smartgwt.client.widgets.form.ValuesManager#saveData}. If you override <code>submit()</code>, you can safely
* ignore the parameters as Smart GWT framework code does not pass them.
*/
public native void submit() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.submit();
}-*/;
/**
* <code>submit()</code> is automatically called when a {@link com.smartgwt.client.widgets.form.fields.SubmitItem}
* included in the form is clicked, or, if {@link com.smartgwt.client.widgets.form.DynamicForm#getSaveOnEnter
* saveOnEnter} is set, when the "Enter" key is pressed in a text input. Submit can also be manually called. <P> If
* {@link com.smartgwt.client.widgets.form.DynamicForm#submitValues} exists, it will be called, then immediately
* return. <P> Otherwise, default behavior varies based on {@link com.smartgwt.client.widgets.form.DynamicForm#getCanSubmit
* canSubmit}: if <code>canSubmit</code> is false, {@link com.smartgwt.client.widgets.form.DynamicForm#saveData}
* will be called to handle saving via Smart GWT databinding. <P> If <code>canSubmit</code> is true, the form
* will be submitted like an ordinary HTML form via {@link com.smartgwt.client.widgets.form.DynamicForm#submitForm}.
* <P> The parameters to <code>submit()</code> apply only if <code>submit()</code> will be calling {@link
* com.smartgwt.client.widgets.form.ValuesManager#saveData}. If you override <code>submit()</code>, you can safely
* ignore the parameters as Smart GWT framework code does not pass them.
*
* @param callback callback to invoke on completion. [Ignored if
* this.canSubmit is true]
*/
public native void submit(DSCallback callback) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
self.submit($entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}));
}-*/;
/**
* <code>submit()</code> is automatically called when a {@link com.smartgwt.client.widgets.form.fields.SubmitItem}
* included in the form is clicked, or, if {@link com.smartgwt.client.widgets.form.DynamicForm#getSaveOnEnter
* saveOnEnter} is set, when the "Enter" key is pressed in a text input. Submit can also be manually called. <P> If
* {@link com.smartgwt.client.widgets.form.DynamicForm#submitValues} exists, it will be called, then immediately
* return. <P> Otherwise, default behavior varies based on {@link com.smartgwt.client.widgets.form.DynamicForm#getCanSubmit
* canSubmit}: if <code>canSubmit</code> is false, {@link com.smartgwt.client.widgets.form.DynamicForm#saveData}
* will be called to handle saving via Smart GWT databinding. <P> If <code>canSubmit</code> is true, the form
* will be submitted like an ordinary HTML form via {@link com.smartgwt.client.widgets.form.DynamicForm#submitForm}.
* <P> The parameters to <code>submit()</code> apply only if <code>submit()</code> will be calling {@link
* com.smartgwt.client.widgets.form.ValuesManager#saveData}. If you override <code>submit()</code>, you can safely
* ignore the parameters as Smart GWT framework code does not pass them.
*
* @param callback callback to invoke on completion. [Ignored if
* this.canSubmit is true]
* @param requestProperties additional properties to set on the DSRequest
* that will be issued [Ignored if this.canSubmit
* is true]
*/
public native void submit(DSCallback callback, DSRequest requestProperties) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var requestPropertiesJS = requestProperties == null ? null : requestProperties.@com.smartgwt.client.core.DataClass::getJsObj()();
self.saveData($entry(function (dsResponse, data, dsRequest) {
var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsResponse);
var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(dsRequest);
if(callback != null) callback.@com.smartgwt.client.data.DSCallback::execute(Lcom/smartgwt/client/data/DSResponse;Ljava/lang/Object;Lcom/smartgwt/client/data/DSRequest;)(responseJ, data, requestJ);
}), requestPropertiesJS);
}-*/;
/**
* Make a snapshot of the current set of values, so we can reset to them later. Creates a new object, then adds all
* non-method properties of values to the new object. Use resetValues() to revert to these values. Note that this
* method is automatically called when the values for this form are set programmatically via a call to
* DynamicForm.setValues().
*
* @return copy of current form values
*/
public native JavaScriptObject rememberValues() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
return self.rememberValues();
}-*/;
/**
* Setter for validation errors on this form. Errors passed in should be a Map in the format
* {fieldName1:errors, fieldName2:errors}
* <p/>
* Where the errors value may be either a string (single error message) or an array of strings (if multiple errors should be applied to the field in question).
*
* @param errors list of errors as a map with the field names as keys
* @param showErrors If true redraw form to display errors now. Otherwise errors can be displayed by calling
* {@link ValuesManager#showErrors} <b>Note</b>: When the errors are shown, handleHiddenValidationErrors() will be fired for errors
* on hidden fields, or with no associated formItem.
*/
public native void setErrors(Map errors, boolean showErrors) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var errorsJS = @com.smartgwt.client.util.JSOHelper::convertMapToJavascriptObject(Ljava/util/Map;)(errors);
return self.setErrors(errorsJS, showErrors);
}-*/;
/**
* Returns the set of errors for this valuesManager.
*
* @return errors. key is field name, value is error. Returns null if no errors
*/
public native Map getErrors() /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var value = self.getErrors();
if(value == null) return null;
var valueJ = @com.smartgwt.client.util.JSOHelper::convertToMap(Lcom/google/gwt/core/client/JavaScriptObject;)(value);
return valueJ;
}-*/;
/**
* Set field validation error for some field. The showErrors parameter allows the errors to be displayed immediately.
* Alternatively, an explicit call to {@link DynamicForm#showFieldErrors} will display the errors for this field.
*
* @param fieldName field to apply the new errors to
* @param error error to apply to the field in question
* @param showErrors If true this method will fall through to DynamicForm.showFieldErrors() to update the display
*/
public native void setFieldErrors(String fieldName, String error, boolean showErrors) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
return self.setFieldErrors(fieldName, error, showErrors);
}-*/;
/**
* Set field validation errors for some field. The showErrors parameter allows the errors to be displayed immediately.
* Alternatively, an explicit call to {@link DynamicForm#showFieldErrors} will display the errors for this field.
*
* @param fieldName field to apply the new errors to
* @param errors errors to apply to the field in question
* @param showErrors If true this method will fall through to DynamicForm.showFieldErrors() to update the display
*/
public native void setFieldErrors(String fieldName, String[] errors, boolean showErrors) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var errorsJS = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptArray([Ljava/lang/Object;)(errors);
return self.setFieldErrors(fieldName, errorsJS, showErrors);
}-*/;
/**
* Returns any validation errors for some field in this valuesManager. If no errors are present, will return null.
*
* @param fieldName the field name
* @return error messages for the field.
*/
public native String[] getFieldErrors(String fieldName) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var value = self.getFieldErrors(fieldName);
if(value == null) return null;
if(!@com.smartgwt.client.util.JSOHelper::isArray(Lcom/google/gwt/core/client/JavaScriptObject;)(data)) {
value = [value];
}
return @com.smartgwt.client.util.JSOHelper::convertToJavaStringArray(Lcom/google/gwt/core/client/JavaScriptObject;)(value);
}-*/;
/**
* Retrieve a {@link com.smartgwt.client.widgets.form.fields.FormItem} from this ValuesManager. <P> Takes a field {@link
* com.smartgwt.client.widgets.form.fields.FormItem#getName 'name'} or ${isc.DocUtils.linkForRef('dataPath')}, and searches
* through the members of this valuesManager for an editor for that field. If found the appropriate formItem will be
* returned. Note that if a dataPath is passed in, it should be the full data path for the item, including any canvas level
* {@link com.smartgwt.client.widgets.Canvas#getDataPath 'dataPath'} specified on the member form containing this form
* item. <br>Note: Unlike the <code>DynamicForm</code> class, this method will not return an item by index
* @param itemID item fieldName or dataPath identifier
*
* @return form item for editing/displaying the appropriate field, or null if no formItem can be found for the field.
*/
public native FormItem getItem(String itemID) /*-{
var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
var fieldJS = self.getItem(itemID);
if (fieldJS == null) return null;
return @com.smartgwt.client.widgets.form.fields.FormItemFactory::getFormItem(Lcom/google/gwt/core/client/JavaScriptObject;)(fieldJS);
}-*/;
/**
* Add a submitValues handler.
* <p>
* Triggered when a {@link #submit()} is called on this valuesManager (or any form included in this valuesManager).
*
* @param handler the submitValues handler
* @return {@link com.google.gwt.event.shared.HandlerRegistration} used to remove this handler
*/
public HandlerRegistration addSubmitValuesHandler(com.smartgwt.client.widgets.form.events.SubmitValuesHandler handler) {
if(getHandlerCount(com.smartgwt.client.widgets.form.events.SubmitValuesEvent.getType()) == 0) setupSubmitValuesEvent();
return doAddHandler(handler, com.smartgwt.client.widgets.form.events.SubmitValuesEvent.getType());
}
private native void setupSubmitValuesEvent() /*-{
var obj = null;
var selfJ = this;
if(this.@com.smartgwt.client.core.BaseClass::isCreated()()) {
obj = this.@com.smartgwt.client.core.BaseClass::getJsObj()();
obj.addProperties({submitValues:$entry(function(){
var param = {"values" : arguments[0], "form" : null};
var event = @com.smartgwt.client.widgets.form.events.SubmitValuesEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param);
selfJ.@com.smartgwt.client.core.BaseClass::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event);
})
});
} else {
obj = this.@com.smartgwt.client.core.BaseClass::getConfig()();
obj.submitValues = $entry(function(){
var param = {"values" : arguments[0], "form" : null};
var event = @com.smartgwt.client.widgets.form.events.SubmitValuesEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param);
selfJ.@com.smartgwt.client.core.BaseClass::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event);
});
}
}-*/;
/**
* Add a hiddenValidationErrors handler.
* <p>
* Method to display validation error messages for fields that are not currently visible in this form.<br> This will be
* called when validation fails for<br> - a hidden field in this form<br> - if this form is databound, a datasource field
* with specified validators, for which we have no specified form item.<br> Implement this to provide custom validation
* error handling for these fields.<br> By default hidden validation errors will be logged as warnings in the
* developerConsole. Return false from this method to suppress that behavior.
*
* @param handler the hiddenValidationErrors handler
* @return {@link HandlerRegistration} used to remove this handler
*/
public HandlerRegistration addHiddenValidationErrorsHandler(com.smartgwt.client.widgets.form.events.HiddenValidationErrorsHandler handler) {
if(getHandlerCount(com.smartgwt.client.widgets.form.events.HiddenValidationErrorsEvent.getType()) == 0) setupHiddenValidationErrorsEvent();
return doAddHandler(handler, com.smartgwt.client.widgets.form.events.HiddenValidationErrorsEvent.getType());
}
private native void setupHiddenValidationErrorsEvent() /*-{
var obj = null;
var selfJ = this;
if(this.@com.smartgwt.client.core.BaseClass::isCreated()()) {
obj = this.@com.smartgwt.client.core.BaseClass::getJsObj()();
obj.addProperties({handleHiddenValidationErrors:$debox($entry(function(){
var param = {"errors" : arguments[0]};
var event = @com.smartgwt.client.widgets.form.events.HiddenValidationErrorsEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param);
selfJ.@com.smartgwt.client.core.BaseClass::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event);
var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()();
return !ret;
}))
});
} else {
obj = this.@com.smartgwt.client.core.BaseClass::getConfig()();
obj.handleHiddenValidationErrors = $debox($entry(function(){
var param = {"errors" : arguments[0]};
var event = @com.smartgwt.client.widgets.form.events.HiddenValidationErrorsEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param);
selfJ.@com.smartgwt.client.core.BaseClass::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event);
var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()();
return !ret;
}));
}
}-*/;
}