blob: f86a9e5beaa80c97e0dc6197ebd83000539dbef2 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004 Actuate Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Actuate Corporation - Initial implementation.
*****************************************************************************/
/**
* Helper to handle soap response
*/
SoapResponseHelper = Class.create( );
SoapResponseHelper.prototype =
{
__parameterGroup : null,
/**
* Initialization routine required by "ProtoType" lib.
*
* @return, void
*/
initialize: function( )
{
},
/**
* Set current parameter group object
*
* @param, group cascading parameter group
* @return, void
*/
setParameterGroup : function( group )
{
this.__parameterGroup = group;
},
/**
* Process the soap response, dispatcher message content to designated
* message handlers.
*
* @message, incoming soap message DOM
* @return, void
*/
processCascadingParameter : function( message )
{
if( !message || !this.__parameterGroup ) return;
//alert( birtSoapRequest.prettyPrintXML( message ) );
var soapBody = message.getElementsByTagName( 'soapenv:Body' )[ 0 ];
if ( !soapBody )
{
soapBody = message.getElementsByTagName( 'Body' )[ 0 ];
}
if ( soapBody )
{
for ( var i = 0; i < soapBody.childNodes.length; i++ )
{
if ( soapBody.childNodes[i].nodeType == 1 ) // Need to use NodeType definition.
{
if ( soapBody.childNodes[i].tagName == 'soapenv:Fault' )
{
// error message
this.__handleErrorMessage( soapBody.childNodes[i] );
}
else
{
var datas = soapBody.childNodes[i].getElementsByTagName( 'Data' );
if( !datas || datas.length<=0 ) return;
var data = datas[0];//assume there is only one data
var cascade_param = data.getElementsByTagName( 'CascadeParameter' )[0];//assume there is only one cascadeparameter
var selectionLists = data.getElementsByTagName( 'SelectionList' );
if ( !selectionLists )
{
return;
}
for ( var k = 0; k < selectionLists.length; k++ )
{
var paramName = selectionLists[k].getElementsByTagName( 'Name' )[0].firstChild.data;
var selections = selectionLists[k].getElementsByTagName( 'Selections' );
var paramId = this.__parameterGroup.getParameterIdByName( paramName );
var append_selection = document.getElementById( paramId );
var len = append_selection.options.length;
// Clear our selection list.
for( var i = 0, index = 0; i < len; i++ )
{
append_selection.remove( index );
}
// Add new options based on server response.
for( var i = 0; i < selections.length; i++ )
{
if ( !selections[i].firstChild )
{
continue;
}
var oOption = document.createElement( "OPTION" );
var oLabel = selections[i].getElementsByTagName( 'Label' )[0].firstChild;
if( oLabel )
oOption.text = oLabel.data;
else
oOption.text = "";
var oValue = selections[i].getElementsByTagName( 'Value' )[0].firstChild;
if( oValue )
oOption.value = oValue.data;
else
oOption.value = "";
append_selection.options[append_selection.options.length] = oOption;
}
}
}
}
}
}
// reset parameter group
this.__parameterGroup = null;
},
/**
* handle error message
*
* @param, data incoming soap error message DOM
* @return, void
*/
__handleErrorMessage : function( data )
{
if( !data ) return;
// Prepare fault string (reason)
var faultStrings = data.getElementsByTagName( 'faultstring' );
if ( faultStrings[0] && faultStrings[0].firstChild )
{
alert( faultStrings[0].firstChild.data );
}
else
{
alert( Constants.error.unknownError );
}
},
noComma : "" //just to avoid javascript syntax errors
}
var soapResponseHelper = new SoapResponseHelper( );