/* * 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.data; 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; /** * An operationBinding tells a DataSource how to execute one of the basic DS operations: fetch, add, update, remove. See * {@link com.smartgwt.client.data.DataSource#getOperationBindings operationBindings}. */ public class OperationBinding extends DataClass { public static OperationBinding getOrCreateRef(JavaScriptObject jsObj) { if(jsObj == null) return null; return new OperationBinding(jsObj); } public OperationBinding(){ } public OperationBinding(JavaScriptObject jsObj){ super(jsObj); } public OperationBinding(DSOperationType operationType, String dataURL) { setOperationType(operationType); setDataURL(dataURL); } // ********************* Properties / Attributes *********************** /** * Ordinarily, "update" and "remove" operations are only allowed for {@link com.smartgwt.client.data.DataSource}s that have * a {@link com.smartgwt.client.data.DataSourceField#getPrimaryKey primaryKey}, and all primary key values are present in * the request. This is because an update of a DataSource with no primary key, or an update request that has missing * primary key values, cannot be guaranteed to affect only one record. <p> Setting this property on an operationBinding * circumvents this restriction for that operation only. <p> <b>Warning:</b> Be aware that this is a potentially dangerous * setting and should be used with care. With this flag set, you have no guarantee that an update will not change or * remove every row in a table. * * @param allowMultiUpdate allowMultiUpdate Default value is null */ public void setAllowMultiUpdate(Boolean allowMultiUpdate) { setAttribute("allowMultiUpdate", allowMultiUpdate); } /** * Ordinarily, "update" and "remove" operations are only allowed for {@link com.smartgwt.client.data.DataSource}s that have * a {@link com.smartgwt.client.data.DataSourceField#getPrimaryKey primaryKey}, and all primary key values are present in * the request. This is because an update of a DataSource with no primary key, or an update request that has missing * primary key values, cannot be guaranteed to affect only one record. <p> Setting this property on an operationBinding * circumvents this restriction for that operation only. <p> <b>Warning:</b> Be aware that this is a potentially dangerous * setting and should be used with care. With this flag set, you have no guarantee that an update will not change or * remove every row in a table. * * * @return Boolean */ public Boolean getAllowMultiUpdate() { return getAttributeAsBoolean("allowMultiUpdate"); } /** * Applies only to dataFormat: "json". Specifies the name of the query parameter that tells your JSON service what * function to call as part of the response for this operation. <P> Typically set once for the DataSource as a whole via * {@link com.smartgwt.client.data.DataSource#getCallbackParam callbackParam}. * * @param callbackParam callbackParam Default value is "callback" * @see com.smartgwt.client.data.DataSource#setCallbackParam * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setCallbackParam(String callbackParam) { setAttribute("callbackParam", callbackParam); } /** * Applies only to dataFormat: "json". Specifies the name of the query parameter that tells your JSON service what * function to call as part of the response for this operation. <P> Typically set once for the DataSource as a whole via * {@link com.smartgwt.client.data.DataSource#getCallbackParam callbackParam}. * * * @return String * @see com.smartgwt.client.data.DataSource#getCallbackParam * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public String getCallbackParam() { return getAttributeAsString("callbackParam"); } /** * Format for response data for this operation. <P> Typically set once for the DataSource as a whole via {@link * com.smartgwt.client.data.DataSource#getDataFormat dataFormat}. * * @param dataFormat dataFormat Default value is "iscServer" * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setDataFormat(DSDataFormat dataFormat) { setAttribute("dataFormat", dataFormat == null ? null : dataFormat.getValue()); } /** * Format for response data for this operation. <P> Typically set once for the DataSource as a whole via {@link * com.smartgwt.client.data.DataSource#getDataFormat dataFormat}. * * * @return DSDataFormat * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public DSDataFormat getDataFormat() { return EnumUtil.getEnum(DSDataFormat.values(), getAttribute("dataFormat")); } /** * Controls the format in which inputs are sent to the dataURL. <p> When a DataSource operation such as fetchData() is * invoked on this DataSource or a component bound to this DataSource, the data passed to the operation, if any, will be * sent to the <code>dataURL</code>. The <code>dataProtocol</code> property controls the format in which the data is sent: * SOAP message, HTTP GET or POST of parameters, etc. <P> The <code>dataProtocol</code> property need not be set for a * DataSource with a WebService ( {@link com.smartgwt.client.data.DataSource#getServiceNamespace serviceNamespace} is set), * in this case, SOAP messaging is used by default. <P> Developers may completely bypass the Smart GWT comm system by * setting dataProtocol to <code>"clientCustom"</code>. In this case Smart GWT will not attempt to send any data to the * server after calling {@link com.smartgwt.client.data.DataSource#transformRequest DataSource.transformRequest}. Instead * the developer is expected to implement <code>transformRequest()</code> such that it performs the necessary data action * outside of Smart GWT, and then calls {@link com.smartgwt.client.data.DataSource#processResponse * DataSource.processResponse}, passing in the {@link com.smartgwt.client.data.DSRequest#getRequestId requestId} and an * appropriate set of DSResponse properties to indicate the result of the action. <P> NOTE: when {@link * com.smartgwt.client.data.OperationBinding#getDataFormat dataFormat} is "iscServer", <code>dataProtocol</code> is not * consulted. Instead, Smart GWT uses a proprietary wire format to communicate with the Smart GWT server, and the * server-side DSRequest and DSResponse objects should be used to access request data and form responses. * * @param dataProtocol dataProtocol Default value is "getParams" * @see com.smartgwt.client.types.DSProtocol * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setDataProtocol(DSProtocol dataProtocol) { setAttribute("dataProtocol", dataProtocol == null ? null : dataProtocol.getValue()); } /** * Controls the format in which inputs are sent to the dataURL. <p> When a DataSource operation such as fetchData() is * invoked on this DataSource or a component bound to this DataSource, the data passed to the operation, if any, will be * sent to the <code>dataURL</code>. The <code>dataProtocol</code> property controls the format in which the data is sent: * SOAP message, HTTP GET or POST of parameters, etc. <P> The <code>dataProtocol</code> property need not be set for a * DataSource with a WebService ( {@link com.smartgwt.client.data.DataSource#getServiceNamespace serviceNamespace} is set), * in this case, SOAP messaging is used by default. <P> Developers may completely bypass the Smart GWT comm system by * setting dataProtocol to <code>"clientCustom"</code>. In this case Smart GWT will not attempt to send any data to the * server after calling {@link com.smartgwt.client.data.DataSource#transformRequest DataSource.transformRequest}. Instead * the developer is expected to implement <code>transformRequest()</code> such that it performs the necessary data action * outside of Smart GWT, and then calls {@link com.smartgwt.client.data.DataSource#processResponse * DataSource.processResponse}, passing in the {@link com.smartgwt.client.data.DSRequest#getRequestId requestId} and an * appropriate set of DSResponse properties to indicate the result of the action. <P> NOTE: when {@link * com.smartgwt.client.data.OperationBinding#getDataFormat dataFormat} is "iscServer", <code>dataProtocol</code> is not * consulted. Instead, Smart GWT uses a proprietary wire format to communicate with the Smart GWT server, and the * server-side DSRequest and DSResponse objects should be used to access request data and form responses. * * * @return DSProtocol * @see com.smartgwt.client.types.DSProtocol * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public DSProtocol getDataProtocol() { return EnumUtil.getEnum(DSProtocol.values(), getAttribute("dataProtocol")); } /** * Transport to use for this operation. Defaults to {@link com.smartgwt.client.data.DataSource#getDataTransport * dataTransport}, which in turn defaults to {@link com.smartgwt.client.rpc.RPCManager#defaultTransport defaultTransport}. * This would typically only be set to enable "scriptInclude" transport for contacting {@link * com.smartgwt.client.data.DataSource#getDataFormat JSON} web services hosted on servers other than the origin server. <p> * When using the "scriptInclude" transport, be sure to set {@link com.smartgwt.client.data.DataSource#getCallbackParam * callbackParam} or {@link com.smartgwt.client.data.OperationBinding#getCallbackParam callbackParam} to match the name of * the query parameter name expected by your JSON service provider. * * @param dataTransport dataTransport Default value is RPCManager.defaultTransport * @see com.smartgwt.client.types.RPCTransport * @see com.smartgwt.client.data.DataSource#setCallbackParam * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setDataTransport(RPCTransport dataTransport) { setAttribute("dataTransport", dataTransport == null ? null : dataTransport.getValue()); } /** * Transport to use for this operation. Defaults to {@link com.smartgwt.client.data.DataSource#getDataTransport * dataTransport}, which in turn defaults to {@link com.smartgwt.client.rpc.RPCManager#defaultTransport defaultTransport}. * This would typically only be set to enable "scriptInclude" transport for contacting {@link * com.smartgwt.client.data.DataSource#getDataFormat JSON} web services hosted on servers other than the origin server. <p> * When using the "scriptInclude" transport, be sure to set {@link com.smartgwt.client.data.DataSource#getCallbackParam * callbackParam} or {@link com.smartgwt.client.data.OperationBinding#getCallbackParam callbackParam} to match the name of * the query parameter name expected by your JSON service provider. * * * @return RPCTransport * @see com.smartgwt.client.types.RPCTransport * @see com.smartgwt.client.data.DataSource#getCallbackParam * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public RPCTransport getDataTransport() { return EnumUtil.getEnum(RPCTransport.values(), getAttribute("dataTransport")); } /** * URL to contact to fulfill DSRequests for this operationBinding. <P> <code>dataURL</code> is typically set as * DataSource.dataURL rather than on each individual operationBinding. <P> <code>dataURL</code> can be omitted for a * DataSource using a Web Service ({@link com.smartgwt.client.data.DataSource#getServiceNamespace serviceNamespace} is * set). * * @param dataURL dataURL Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setDataURL(String dataURL) { setAttribute("dataURL", dataURL); } /** * URL to contact to fulfill DSRequests for this operationBinding. <P> <code>dataURL</code> is typically set as * DataSource.dataURL rather than on each individual operationBinding. <P> <code>dataURL</code> can be omitted for a * DataSource using a Web Service ({@link com.smartgwt.client.data.DataSource#getServiceNamespace serviceNamespace} is * set). * * * @return String * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public String getDataURL() { return getAttributeAsString("dataURL"); } /** * HTTP parameters that should be submitted with every DSRequest. <P> Useful for authenticated services that require a * sessionId with every request. <P> Can be set for all operations of a given DataSource as DataSource.defaultParams. * <p><b>Note : </b> This is an advanced setting</p> * * @param defaultParams defaultParams Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setDefaultParams(Map defaultParams) { setAttribute("defaultParams", defaultParams); } /** * HTTP parameters that should be submitted with every DSRequest. <P> Useful for authenticated services that require a * sessionId with every request. <P> Can be set for all operations of a given DataSource as DataSource.defaultParams. * * * @return Map * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public Map getDefaultParams() { return getAttributeAsMap("defaultParams"); } /** * The format in which the data should be exported. Default is "csv". See {@link com.smartgwt.client.types.ExportFormat} * for more information. * * @param exportAs exportAs Default value is "csv" */ public void setExportAs(ExportFormat exportAs) { setAttribute("exportAs", exportAs == null ? null : exportAs.getValue()); } /** * The format in which the data should be exported. Default is "csv". See {@link com.smartgwt.client.types.ExportFormat} * for more information. * * * @return ExportFormat */ public ExportFormat getExportAs() { return EnumUtil.getEnum(ExportFormat.values(), getAttribute("exportAs")); } /** * The list of field-names to export. If provided, the field-list in the exported output is limited and sorted as per the * list. <P> If exportFields is not provided, the exported output includes all visible fields from the DataSource * (field.hidden=false), sorted in the order they're defined. * * @param exportFields exportFields Default value is null */ public void setExportFields(String... exportFields) { setAttribute("exportFields", exportFields); } /** * The list of field-names to export. If provided, the field-list in the exported output is limited and sorted as per the * list. <P> If exportFields is not provided, the exported output includes all visible fields from the DataSource * (field.hidden=false), sorted in the order they're defined. * * * @return String */ public String[] getExportFields() { return getAttributeAsStringArray("exportFields"); } /** * The name of the file to save the exported data into. * * @param exportFilename exportFilename Default value is null */ public void setExportFilename(String exportFilename) { setAttribute("exportFilename", exportFilename); } /** * The name of the file to save the exported data into. * * * @return String */ public String getExportFilename() { return getAttributeAsString("exportFilename"); } /** * When set, causes the results of the DataSource Operation to be exported to a file, whose * name and format are indicated by {@link com.smartgwt.client.data.OperationBinding#getExportFilename exportFilename} and * {@link com.smartgwt.client.data.OperationBinding#getExportAs exportAs} respectively. When no exportFilename is * provided, the * default is <i>Results</i> and the default value of exportAs is <i>csv</i>. Once the Operation * completes, {@link com.smartgwt.client.data.DSRequest#getExportDisplay exportDisplay} specifies whether the * exported data will be downloaded to the file-system or displayed in a new window. The * default value of exportDisplay is "download" which displays the Save As dialog. See * {@link com.smartgwt.client.types.ExportDisplay} for more information. * <P> * The export field-list can also be configured, see {@link com.smartgwt.client.data.DSRequest#getExportFields * exportFields}. * <P> * You can also configure the style of line-breaks to use when generating the output. See * LineBreakStyle for more information. * <P> * As well as setting this and other properties on the {@link com.smartgwt.client.data.OperationBinding}, Exports can be * initiated in two other ways. You can set properties on the dsRequest by passing * <i>requestProperties</i> into {@link com.smartgwt.client.data.DataSource#exportData DataSource.exportData}. Note that * this method does * not support exporting to JSON format (see * <a href="http://forums.smartclient.com/showthread.php?t=235">this post</a> for more detail). * Additionally, custom server code may set export-related properties on the * {@link com.smartgwt.client.data.DSResponse}. * <P> * <b>Format Examples</b> * <P> * XML format * <pre> * <List> * <Object> * <id>10101</id> * <displayName>Record 10101</displayName> * </Object> * </List> * </pre> * JSON Format * <pre> * [ * { id: 10101, displayName: "Record 10101" } * ] * </pre> * CSV Format * <pre> * id,displayName * 10101,"Record 10101" * </pre> * * @param exportResults exportResults Default value is false */ public void setExportResults(Boolean exportResults) { setAttribute("exportResults", exportResults); } /** * When set, causes the results of the DataSource Operation to be exported to a file, whose * name and format are indicated by {@link com.smartgwt.client.data.OperationBinding#getExportFilename exportFilename} and * {@link com.smartgwt.client.data.OperationBinding#getExportAs exportAs} respectively. When no exportFilename is * provided, the * default is <i>Results</i> and the default value of exportAs is <i>csv</i>. Once the Operation * completes, {@link com.smartgwt.client.data.DSRequest#getExportDisplay exportDisplay} specifies whether the * exported data will be downloaded to the file-system or displayed in a new window. The * default value of exportDisplay is "download" which displays the Save As dialog. See * {@link com.smartgwt.client.types.ExportDisplay} for more information. * <P> * The export field-list can also be configured, see {@link com.smartgwt.client.data.DSRequest#getExportFields * exportFields}. * <P> * You can also configure the style of line-breaks to use when generating the output. See * LineBreakStyle for more information. * <P> * As well as setting this and other properties on the {@link com.smartgwt.client.data.OperationBinding}, Exports can be * initiated in two other ways. You can set properties on the dsRequest by passing * <i>requestProperties</i> into {@link com.smartgwt.client.data.DataSource#exportData DataSource.exportData}. Note that * this method does * not support exporting to JSON format (see * <a href="http://forums.smartclient.com/showthread.php?t=235">this post</a> for more detail). * Additionally, custom server code may set export-related properties on the * {@link com.smartgwt.client.data.DSResponse}. * <P> * <b>Format Examples</b> * <P> * XML format * <pre> * <List> * <Object> * <id>10101</id> * <displayName>Record 10101</displayName> * </Object> * </List> * </pre> * JSON Format * <pre> * [ * { id: 10101, displayName: "Record 10101" } * ] * </pre> * CSV Format * <pre> * id,displayName * 10101,"Record 10101" * </pre> * * * @return Boolean */ public Boolean getExportResults() { return getAttributeAsBoolean("exportResults"); } /** * If set, every invocation of this operationBinding will invalidate the local cache, forcing a server visit to refresh the * data. * * @param invalidateCache invalidateCache Default value is null */ public void setInvalidateCache(Boolean invalidateCache) { setAttribute("invalidateCache", invalidateCache); } /** * If set, every invocation of this operationBinding will invalidate the local cache, forcing a server visit to refresh the * data. * * * @return Boolean */ public Boolean getInvalidateCache() { return getAttributeAsBoolean("invalidateCache"); } /** * The style of line-breaks to use in the exported output. See LineBreakStyle for more information. * * @param lineBreakStyle lineBreakStyle Default value is null */ public void setLineBreakStyle(String lineBreakStyle) { setAttribute("lineBreakStyle", lineBreakStyle); } /** * The style of line-breaks to use in the exported output. See LineBreakStyle for more information. * * * @return String */ public String getLineBreakStyle() { return getAttributeAsString("lineBreakStyle"); } /** * Optional operationId if this DataSource supports two or more variants of one of the basic DataSource operations, for * instance, a "fetch" that uses full text search and a "fetch" that accepts per-field search criteria. See {@link * com.smartgwt.client.data.DSRequest#getOperationId operationId} for usage. * * @param operationId operationId Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setOperationId(String operationId) { setAttribute("operationId", operationId); } /** * Optional operationId if this DataSource supports two or more variants of one of the basic DataSource operations, for * instance, a "fetch" that uses full text search and a "fetch" that accepts per-field search criteria. See {@link * com.smartgwt.client.data.DSRequest#getOperationId operationId} for usage. * * * @return String * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public String getOperationId() { return getAttributeAsString("operationId"); } /** * Which operationType this operationBinding is for. This property is only settable on an operationBinding, not a * DataSource as a whole. * * @param operationType operationType Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setOperationType(DSOperationType operationType) { setAttribute("operationType", operationType == null ? null : operationType.getValue()); } /** * Which operationType this operationBinding is for. This property is only settable on an operationBinding, not a * DataSource as a whole. * * * @return DSOperationType * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public DSOperationType getOperationType() { return EnumUtil.getEnum(DSOperationType.values(), getAttribute("operationType")); } /** * Configures {@link com.smartgwt.client.data.DataSource#getPreventHTTPCaching preventHTTPCaching} on a per-operationType * basis. * * @param preventHTTPCaching preventHTTPCaching Default value is null */ public void setPreventHTTPCaching(Boolean preventHTTPCaching) { setAttribute("preventHTTPCaching", preventHTTPCaching); } /** * Configures {@link com.smartgwt.client.data.DataSource#getPreventHTTPCaching preventHTTPCaching} on a per-operationType * basis. * * * @return Boolean */ public Boolean getPreventHTTPCaching() { return getAttributeAsBoolean("preventHTTPCaching"); } /** * For an XML DataSource, tagName of the elements to be used as records. <p> This is a simple alternative to {@link * com.smartgwt.client.data.OperationBinding#getRecordXPath recordXPath} when the elements to be used as records all share * a tagName. <p> When a DataSource has a WebService, <code>recordName</code> can also be set to the name of any * <code>complexType</code> declared within the WebService's WSDL file. * * @param recordName recordName Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods * @see <a href="http://www.smartclient.com/smartgwtee/showcase/#data_integration_server_wsdl_generic" target="examples">Weather SOAP Search Example</a> */ public void setRecordName(String recordName) { setAttribute("recordName", recordName); } /** * For an XML DataSource, tagName of the elements to be used as records. <p> This is a simple alternative to {@link * com.smartgwt.client.data.OperationBinding#getRecordXPath recordXPath} when the elements to be used as records all share * a tagName. <p> When a DataSource has a WebService, <code>recordName</code> can also be set to the name of any * <code>complexType</code> declared within the WebService's WSDL file. * * * @return String * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods * @see <a href="http://www.smartclient.com/smartgwtee/showcase/#data_integration_server_wsdl_generic" target="examples">Weather SOAP Search Example</a> */ public String getRecordName() { return getAttributeAsString("recordName"); } /** * For an XML or JSON DataSource, XPath expression used to retrieve the objects that will become DataSource records. <p> * For example, an "ItemSearch" web service might return a "Results" structure containing metadata along with the set of * Items that one might want to display in a grid. An XPath expression like "/Results/Items" could be used to retrieve * just the Items, which would then become DataSource records. <p> For a JSON web service, the <code>recordXPath</code> is * applied to the returned JSON data via {@link com.smartgwt.client.data.XMLTools#selectObjects XMLTools.selectObjects}. * Only limited XPath syntax is allowed; see {@link com.smartgwt.client.data.XMLTools#selectObjects selectObjects()} for * details. <P> For processing XML results, see {@link com.smartgwt.client.data.OperationBinding#getXmlNamespaces * xmlNamespaces} for information on the namespaces that are available in this XPath expression. If you are contacting a * WSDL web service, note that {@link com.smartgwt.client.data.OperationBinding#getRecordName recordName} is an alternative * way to specify which records should be selected by their tagName or type, and this is usually simpler. <P> To learn * about XPath, try the following search: <a href="http://www.google.com/search?q=xpath+tutorial" target="_blank" * >http://www.google.com/search?q=xpath+tutorial</a> * * @param recordXPath recordXPath Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setRecordXPath(String recordXPath) { setAttribute("recordXPath", recordXPath); } /** * For an XML or JSON DataSource, XPath expression used to retrieve the objects that will become DataSource records. <p> * For example, an "ItemSearch" web service might return a "Results" structure containing metadata along with the set of * Items that one might want to display in a grid. An XPath expression like "/Results/Items" could be used to retrieve * just the Items, which would then become DataSource records. <p> For a JSON web service, the <code>recordXPath</code> is * applied to the returned JSON data via {@link com.smartgwt.client.data.XMLTools#selectObjects XMLTools.selectObjects}. * Only limited XPath syntax is allowed; see {@link com.smartgwt.client.data.XMLTools#selectObjects selectObjects()} for * details. <P> For processing XML results, see {@link com.smartgwt.client.data.OperationBinding#getXmlNamespaces * xmlNamespaces} for information on the namespaces that are available in this XPath expression. If you are contacting a * WSDL web service, note that {@link com.smartgwt.client.data.OperationBinding#getRecordName recordName} is an alternative * way to specify which records should be selected by their tagName or type, and this is usually simpler. <P> To learn * about XPath, try the following search: <a href="http://www.google.com/search?q=xpath+tutorial" target="_blank" * >http://www.google.com/search?q=xpath+tutorial</a> * * * @return String * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public String getRecordXPath() { return getAttributeAsString("recordXPath"); } /** * Additional properties to pass through to the {@link com.smartgwt.client.data.DSRequest} created for this operation. Note * that these will be cumulative with and will override on a per-property basis any properties set via {@link * com.smartgwt.client.data.DataSource#getRequestProperties requestProperties}. <p> These properties are applied before * {@link com.smartgwt.client.data.DataSource#transformRequest DataSource.transformRequest} is called. * * @param requestProperties requestProperties Default value is null * @see com.smartgwt.client.data.DSRequest * @see com.smartgwt.client.data.DataSource#setRequestProperties * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setRequestProperties(DSRequest requestProperties) { setAttribute("requestProperties", requestProperties.getJsObj()); } /** * Additional properties to pass through to the {@link com.smartgwt.client.data.DSRequest} created for this operation. Note * that these will be cumulative with and will override on a per-property basis any properties set via {@link * com.smartgwt.client.data.DataSource#getRequestProperties requestProperties}. <p> These properties are applied before * {@link com.smartgwt.client.data.DataSource#transformRequest DataSource.transformRequest} is called. * * * @return DSRequest * @see com.smartgwt.client.data.DSRequest * @see com.smartgwt.client.data.DataSource#getRequestProperties * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public DSRequest getRequestProperties() { return new DSRequest(getAttributeAsJavaScriptObject("requestProperties")); } /** * Optional schema describing how to extract DataSource records from the XML elements selected. <P> Once a set of XML * elements have been selected via <code>recordXPath</code> or <code>recordName</code>, those elements are normally * transformed to JavaScript objects using the <code>fields</code> of the DataSource that owns the operationBinding. A * <code>responseDataSchema</code> can be specified instead if the XML differs in some way between different DataSource * operations, such that different values for {@link com.smartgwt.client.data.DataSourceField#getValueXPath * field.valueXPath} may be necessary to extract the same DataSource record from slightly different XML structures. * <p><b>Note : </b> This is an advanced setting</p> * * @param responseDataSchema responseDataSchema Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setResponseDataSchema(DataSource responseDataSchema) { setAttribute("responseDataSchema", responseDataSchema == null ? null : responseDataSchema.getOrCreateJsObj()); } /** * Optional schema describing how to extract DataSource records from the XML elements selected. <P> Once a set of XML * elements have been selected via <code>recordXPath</code> or <code>recordName</code>, those elements are normally * transformed to JavaScript objects using the <code>fields</code> of the DataSource that owns the operationBinding. A * <code>responseDataSchema</code> can be specified instead if the XML differs in some way between different DataSource * operations, such that different values for {@link com.smartgwt.client.data.DataSourceField#getValueXPath * field.valueXPath} may be necessary to extract the same DataSource record from slightly different XML structures. * * * @return DataSource * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public DataSource getResponseDataSchema() { return DataSource.getOrCreateRef(getAttributeAsJavaScriptObject("responseDataSchema")); } /** * For a DataSource contacting a {@link com.smartgwt.client.data.DataSource#getServiceNamespace WSDL web service}, setting * this flag means the DataSource doesn't actually attempt to contact the server but generates a sample response instead, * based on the XML Schema of the response message embedded in the WSDL. <P> The spoofed response will include all * complexType elements and will fill in appropriate values by type for all simpleType elements, although the spoofed data * will not conform to all xs:restriction declarations (eg xs:pattern). <P> Note that if your WSDL does not fully describe * the response format (some WSDL services just have a placeholder <xs:any> element), Smart GWT can only produce a * partial response. To use a hand-generated sample response, just save an XML file to disk and use the {@link * com.smartgwt.client.data.OperationBinding#getDataURL dataURL} setting to point to it. * * @param spoofResponses spoofResponses Default value is false * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setSpoofResponses(Boolean spoofResponses) { setAttribute("spoofResponses", spoofResponses); } /** * For a DataSource contacting a {@link com.smartgwt.client.data.DataSource#getServiceNamespace WSDL web service}, setting * this flag means the DataSource doesn't actually attempt to contact the server but generates a sample response instead, * based on the XML Schema of the response message embedded in the WSDL. <P> The spoofed response will include all * complexType elements and will fill in appropriate values by type for all simpleType elements, although the spoofed data * will not conform to all xs:restriction declarations (eg xs:pattern). <P> Note that if your WSDL does not fully describe * the response format (some WSDL services just have a placeholder <xs:any> element), Smart GWT can only produce a * partial response. To use a hand-generated sample response, just save an XML file to disk and use the {@link * com.smartgwt.client.data.OperationBinding#getDataURL dataURL} setting to point to it. * * * @return Boolean * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public Boolean getSpoofResponses() { return getAttributeAsBoolean("spoofResponses"); } /** * Setting <code>useFlatFields</code> on an operationBinding is equivalent to setting {@link * com.smartgwt.client.data.DSRequest#getUseFlatFields useFlatFields} on all DataSource requests with the same {@link * com.smartgwt.client.data.OperationBinding#getOperationType operationType} as this <code>operationBinding</code>. <P> * Typical usage is to combine operationBinding.useFlatFields with {@link * com.smartgwt.client.widgets.DataBoundComponent#getUseFlatFields searchForm.useFlatFields}, with the {@link * com.smartgwt.client.widgets.form.SearchForm} bound to the {@link com.smartgwt.client.data.WebService#getInputDS input * message} of the web service operation set as {@link com.smartgwt.client.data.OperationBinding#getWsOperation * wsOperation}. This allows gratuitous nesting to be consistently bypassed in both the user presentation and in the * actual XML messaging. <P> Note that <code>useFlatFields</code> is not generally recommended for use with input messages * where multiple simple type fields exist with the same name, however if used in this way, the first field to use a given * name wins. "first" means the first field encountered in a depth first search. "wins" means only the first field will * be available in data binding, and only the first field will be populated in the generated XML message. * * @param useFlatFields useFlatFields Default value is false * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setUseFlatFields(Boolean useFlatFields) { setAttribute("useFlatFields", useFlatFields); } /** * Setting <code>useFlatFields</code> on an operationBinding is equivalent to setting {@link * com.smartgwt.client.data.DSRequest#getUseFlatFields useFlatFields} on all DataSource requests with the same {@link * com.smartgwt.client.data.OperationBinding#getOperationType operationType} as this <code>operationBinding</code>. <P> * Typical usage is to combine operationBinding.useFlatFields with {@link * com.smartgwt.client.widgets.DataBoundComponent#getUseFlatFields searchForm.useFlatFields}, with the {@link * com.smartgwt.client.widgets.form.SearchForm} bound to the {@link com.smartgwt.client.data.WebService#getInputDS input * message} of the web service operation set as {@link com.smartgwt.client.data.OperationBinding#getWsOperation * wsOperation}. This allows gratuitous nesting to be consistently bypassed in both the user presentation and in the * actual XML messaging. <P> Note that <code>useFlatFields</code> is not generally recommended for use with input messages * where multiple simple type fields exist with the same name, however if used in this way, the first field to use a given * name wins. "first" means the first field encountered in a depth first search. "wins" means only the first field will * be available in data binding, and only the first field will be populated in the generated XML message. * * * @return Boolean * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public Boolean getUseFlatFields() { return getAttributeAsBoolean("useFlatFields"); } /** * Whether to use the {@link com.smartgwt.client.rpc.RPCManager#sendProxied HttpProxy} servlet to send requests described * by this operationBinding. If unset, automatically detects whether using the HttpProxy is necessary based on the * same-origin policy. <P> Valid only with {@link com.smartgwt.client.data.OperationBinding#getDataProtocol dataProtocol} * settings other than ISCServer. * * @param useHttpProxy useHttpProxy Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public void setUseHttpProxy(Boolean useHttpProxy) { setAttribute("useHttpProxy", useHttpProxy); } /** * Whether to use the {@link com.smartgwt.client.rpc.RPCManager#sendProxied HttpProxy} servlet to send requests described * by this operationBinding. If unset, automatically detects whether using the HttpProxy is necessary based on the * same-origin policy. <P> Valid only with {@link com.smartgwt.client.data.OperationBinding#getDataProtocol dataProtocol} * settings other than ISCServer. * * * @return Boolean * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods */ public Boolean getUseHttpProxy() { return getAttributeAsBoolean("useHttpProxy"); } /** * Name of the web service operation that will be invoked in order to execute this DataSource operation. <P> Valid only for * a DataSource that has a WebService ({@link com.smartgwt.client.data.DataSource#getServiceNamespace serviceNamespace} is * set). Otherwise, use {@link com.smartgwt.client.data.OperationBinding#getDataURL dataURL}. <P> Setting * <code>wsOperation</code> means that {@link com.smartgwt.client.data.DSRequest#getData data} will be serialized as the * request message for the specified web service operation, with namespacing and soap encoding handled automatically. See * {@link com.smartgwt.client.data.DataSource#transformRequest DataSource.transformRequest} for how to customize what data * is sent to the server. * * @param wsOperation wsOperation Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods * @see <a href="http://www.smartclient.com/smartgwtee/showcase/#data_integration_server_wsdl_generic" target="examples">Weather SOAP Search Example</a> */ public void setWsOperation(String wsOperation) { setAttribute("wsOperation", wsOperation); } /** * Name of the web service operation that will be invoked in order to execute this DataSource operation. <P> Valid only for * a DataSource that has a WebService ({@link com.smartgwt.client.data.DataSource#getServiceNamespace serviceNamespace} is * set). Otherwise, use {@link com.smartgwt.client.data.OperationBinding#getDataURL dataURL}. <P> Setting * <code>wsOperation</code> means that {@link com.smartgwt.client.data.DSRequest#getData data} will be serialized as the * request message for the specified web service operation, with namespacing and soap encoding handled automatically. See * {@link com.smartgwt.client.data.DataSource#transformRequest DataSource.transformRequest} for how to customize what data * is sent to the server. * * * @return String * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods * @see <a href="http://www.smartclient.com/smartgwtee/showcase/#data_integration_server_wsdl_generic" target="examples">Weather SOAP Search Example</a> */ public String getWsOperation() { return getAttributeAsString("wsOperation"); } /** * Optional object declaring namespace prefixes for use in {@link com.smartgwt.client.data.OperationBinding#getRecordXPath * recordXPath} and * {@link com.smartgwt.client.data.DataSourceField#getValueXPath valueXPath} XPath expressions. * <P> * <code>xmlNamespaces</code> should be specified as a mapping from namespace prefix to * namespace URI, for example: * <pre> * xmlNamespaces : { * az : "http://webservices.amazon.com/AWSECommerceService/2005-03-23" * } * </pre> * By default, all namespaces declared on the document element (outermost element of the * response) are made available with the prefix used in the document itself. * <P> * Then, for non-WSDL-described XML results, if there is a default namespace on the document * element, it is made available with the special prefix "default". * <P> * For results of WSDL-described operations, the prefix "service" means the service namespace, * that is, the "targetNamespace" on the <definitions> element from the WSDL file. The prefix * "schema" means the namespace of the outermost element in the output message for the current * operation. "default" will be the schema namespace if there is one, otherwise the service * namespace. * <P> * For basic information on XML Namespaces and their use in XPath, try the following search: * <a href="http://www.google.com/search?q=XPath+xml+namespaces" target="_blank" * >http://www.google.com/search?q=XPath+xml+namespaces</a> * * @param xmlNamespaces xmlNamespaces Default value is null * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods * @see <a href="http://www.smartclient.com/smartgwt/showcase/#yahoo_xml_integration_category" target="examples">Yahoo! XML Services Example</a> */ public void setXmlNamespaces(XmlNamespaces xmlNamespaces) { setAttribute("xmlNamespaces", xmlNamespaces.getJsObj()); } /** * Optional object declaring namespace prefixes for use in {@link com.smartgwt.client.data.OperationBinding#getRecordXPath * recordXPath} and * {@link com.smartgwt.client.data.DataSourceField#getValueXPath valueXPath} XPath expressions. * <P> * <code>xmlNamespaces</code> should be specified as a mapping from namespace prefix to * namespace URI, for example: * <pre> * xmlNamespaces : { * az : "http://webservices.amazon.com/AWSECommerceService/2005-03-23" * } * </pre> * By default, all namespaces declared on the document element (outermost element of the * response) are made available with the prefix used in the document itself. * <P> * Then, for non-WSDL-described XML results, if there is a default namespace on the document * element, it is made available with the special prefix "default". * <P> * For results of WSDL-described operations, the prefix "service" means the service namespace, * that is, the "targetNamespace" on the <definitions> element from the WSDL file. The prefix * "schema" means the namespace of the outermost element in the output message for the current * operation. "default" will be the schema namespace if there is one, otherwise the service * namespace. * <P> * For basic information on XML Namespaces and their use in XPath, try the following search: * <a href="http://www.google.com/search?q=XPath+xml+namespaces" target="_blank" * >http://www.google.com/search?q=XPath+xml+namespaces</a> * * * @return XmlNamespaces * @see com.smartgwt.client.docs.ClientDataIntegration ClientDataIntegration overview and related methods * @see <a href="http://www.smartclient.com/smartgwt/showcase/#yahoo_xml_integration_category" target="examples">Yahoo! XML Services Example</a> */ public XmlNamespaces getXmlNamespaces() { return new XmlNamespaces(getAttributeAsJavaScriptObject("xmlNamespaces")); } // ********************* Methods *********************** // ********************* Static Methods *********************** // *********************************************************** public static OperationBinding[] convertToOperationBindingArray(JavaScriptObject nativeArray) { if (nativeArray == null) { return new OperationBinding[]{}; } if (JSOHelper.isArray(nativeArray)) { JavaScriptObject[] componentsj = JSOHelper.toArray(nativeArray); OperationBinding[] objects = new OperationBinding[componentsj.length]; for (int i = 0; i < componentsj.length; i++) { JavaScriptObject componentJS = componentsj[i]; objects[i] = OperationBinding.getOrCreateRef(componentJS); } return objects; } else { OperationBinding[] ret = new OperationBinding[1]; ret[0] = OperationBinding.getOrCreateRef(nativeArray); return ret; } } }