/*
* SmartGWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* SmartGWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* as published by the Free Software Foundation. SmartGWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package 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.layout.*;
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 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.JSOHelper;
import com.smartgwt.client.util.EnumUtil;
import com.google.gwt.event.shared.*;
import com.google.gwt.event.shared.HasHandlers;
/**
* A WSRequest (or "web service request") is an extended RPCRequest will additional properties application to WSDL/SOAP web services. <P> All properties which are legal on {@link com.smartgwt.client.rpc.RPCRequest} are legal on a WSRequest, in addition to the properties listed here.
*/
public class WSRequest extends RPCRequest {
public static WSRequest getOrCreateRef(JavaScriptObject jsObj) {
if(jsObj == null) return null;
return new WSRequest(jsObj);
}
public WSRequest(){
}
public WSRequest(JavaScriptObject jsObj){
super(jsObj);
}
// ********************* Properties / Attributes ***********************
/**
* Name of the web service operation to invoke.
*
* @param wsOperation wsOperation Default value is null
*/
public void setWsOperation(String wsOperation) {
setAttribute("wsOperation", wsOperation);
}
/**
* Name of the web service operation to invoke.
*
*
* @return String
*
*/
public String getWsOperation() {
return getAttributeAsString("wsOperation");
}
/**
* When <code>useFlatFields</code> is set for a request to be sent to a WSDL web service, when creating the input XML message to send to the web service, properties in {@link com.smartgwt.client.data.WSRequest#getData data} will be used as the values for XML elements of the same name, at any level of nesting. <P> <code>useFlatFields</code> allows you to ignore gratuitous XML message structure, such as extra levels of nested elements, and provides some insulation against changes in the required structure of the input message. <P> For example, given this input message: <pre><FindServices> <searchFor>search text</searchFor> <Options> <caseSensitive>false</caseSensitive> </Options> <IncludeInSearch> <serviceName>true</serviceName> <documentation>true</documentation> <keywords>true</keywords> </IncludeInSearch> </FindServices> </pre> If <code>useFlatFields</code> were <b>not</b> set, in order to fill out this message correctly, <code>request.data</code> would need to be: <pre>{ searchFor: "search text", Options : { caseSensitive: false, }, IncludeInSearch : { serviceName: true, documentation : true, keywords : true } }</pre> However if useFlatFields were set, <code>request.data</code> could be just: <pre>{ searchFor: "search text", caseSensitive: false, serviceName: true, documentation : true, keywords : true }</pre> <code>useFlatFields</code> is often set when the input data comes from a {@link com.smartgwt.client.widgets.form.DynamicForm} to avoid the cumbersome and fragile process of mapping input fields to an XML structure. <P> {@link com.smartgwt.client.data.OperationBinding#getUseFlatFields useFlatFields} can also be set to cause <b>all</b> dsRequests of a particular type to <code>useFlatFields</code> automatically. <P> For {@link com.smartgwt.client.widgets.DataBoundComponent}, {@link com.smartgwt.client.widgets.DataBoundComponent#getUseFlatFields useFlatFields} can be set use "flattened" binding to fields of a WSDL message or XML Schema. <P> Note that <code>useFlatFields</code> is not generally recommended for use with XML 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 populated in the generated XML message.
*
* @param useFlatFields useFlatFields Default value is null
*/
public void setUseFlatFields(Boolean useFlatFields) {
setAttribute("useFlatFields", useFlatFields);
}
/**
* When <code>useFlatFields</code> is set for a request to be sent to a WSDL web service, when creating the input XML message to send to the web service, properties in {@link com.smartgwt.client.data.WSRequest#getData data} will be used as the values for XML elements of the same name, at any level of nesting. <P> <code>useFlatFields</code> allows you to ignore gratuitous XML message structure, such as extra levels of nested elements, and provides some insulation against changes in the required structure of the input message. <P> For example, given this input message: <pre> <FindServices> <searchFor>search text</searchFor> <Options> <caseSensitive>false</caseSensitive> </Options> <IncludeInSearch> <serviceName>true</serviceName> <documentation>true</documentation> <keywords>true</keywords> </IncludeInSearch> </FindServices> </pre> If <code>useFlatFields</code> were <b>not</b> set, in order to fill out this message correctly, <code>request.data</code> would need to be: <pre>{ searchFor: "search text", Options : { caseSensitive: false, }, IncludeInSearch : { serviceName: true, documentation : true, keywords : true } }</pre> However if useFlatFields were set, <code>request.data</code> could be just: <pre>{ searchFor: "search text", caseSensitive: false, serviceName: true, documentation : true, keywords : true }</pre> <code>useFlatFields</code> is often set when the input data comes from a {@link com.smartgwt.client.widgets.form.DynamicForm} to avoid the cumbersome and fragile process of mapping input fields to an XML structure. <P> {@link com.smartgwt.client.data.OperationBinding#getUseFlatFields useFlatFields} can also be set to cause <b>all</b> dsRequests of a particular type to <code>useFlatFields</code> automatically. <P> For {@link com.smartgwt.client.widgets.DataBoundComponent}, {@link com.smartgwt.client.widgets.DataBoundComponent#getUseFlatFields useFlatFields} can be set use "flattened" binding to fields of a WSDL message or XML Schema. <P> Note that <code>useFlatFields</code> is not generally recommended for use with XML 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 populated in the generated XML message.
*
*
* @return Boolean
*
*/
public Boolean getUseFlatFields() {
return getAttributeAsBoolean("useFlatFields");
}
// ********************* Methods ***********************
// ********************* Static Methods ***********************
/**
* Data to be serialized to form the SOAP headers, as a map from the header part name to the data. For example, given WSDL like this: <pre> <soap:header part="SessionHeader" message="tns:HeaderMessage"/> <soap:header part="CallOptions" message="tns:HeaderMessage/> </pre> <code>headerData</code> like this might be provided: <pre> dsRequest.headerData = { SessionHeader : <i>data</i> CallOptions : <i>data</i> }; </pre> The provided data will be serialized to XML by the {@link com.smartgwt.client.data.WebService#getInputHeaderSchema} via {@link com.smartgwt.client.data.DataSource#xmlSerialize}
*
* @param headerData headerData Default value is null
*/
public void setHeaderData(Map headerData) {
setAttribute("headerData", headerData);
}
/**
* Data to be serialized to form the SOAP headers, as a map from the header part name to the data. For example, given WSDL like this: <pre> <soap:header part="SessionHeader" message="tns:HeaderMessage"/> <soap:header part="CallOptions" message="tns:HeaderMessage/> </pre> <code>headerData</code> like this might be provided: <pre> dsRequest.headerData = { SessionHeader : <i>data</i> CallOptions : <i>data</i> }; </pre> The provided data will be serialized to XML by the {@link com.smartgwt.client.data.WebService#getInputHeaderSchema} via {@link com.smartgwt.client.data.DataSource#xmlSerialize}
*
* @return headerData Default value is null
*/
public Map getHeaderData() {
return getAttributeAsMap("headerData");
}
/**
* Data to be serialized to XML to form the SOAP body.
*
* @param data data Default value is null
*/
public void setData(JavaScriptObject data) {
setAttribute("data", data);
}
/**
* Data to be serialized to XML to form the SOAP body.
*
* @param data data Default value is null
*/
public void setData(Map data) {
setAttribute("data", data);
}
/**
* Data to be serialized to XML to form the SOAP body.
*
* @return the data
*/
public JavaScriptObject getData() {
return getAttributeAsJavaScriptObject("data");
}
public Map getDataAsMap() {
return getAttributeAsMap("data");
}
/**
* Optional object declaring namespace prefixes for use in evaluating the <code>resultType</code> parameter of {@link com.smartgwt.client.data.WebService#callOperation}, if resultType is an XPath. <P> Format is identical to {@link com.smartgwt.client.data.OperationBinding#getXmlNamespaces xmlNamespaces}, and default namespaces bindings are also identical.
*
* @param xmlNamespaces xmlNamespaces Default value is null
*/
public void setXmlNamespaces(XmlNamespaces xmlNamespaces) {
setAttribute("xmlNamespaces", xmlNamespaces);
}
}