blob: 1f41579c51ee320ea602b59f4889ad4ceb591775 [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.
*****************************************************************************/
/**
* Utility functions for BIRT JSP Cascading parameter tag.
*/
CascadingParameter = Class.create( );
CascadingParameter.prototype =
{
__active : false,
__requesterId : '',
__parameter : null,
__paramNames : null,
__group : null,
__data : null,
__targetId : '',
__action : null,
/**
* Initialization routine required by "ProtoType" lib.
* @return, void
*/
initialize : function( id, parameter, names, group )
{
this.__requesterId = id;
this.__parameter = parameter;
this.__paramNames = names;
this.__group = group;
this.__data = new Array( );
this.__initialize( );
},
/**
* Initialize cascading parameter
*
* @return, void
*/
__initialize : function( )
{
var oDiv = $( this.__requesterId );
if( !oDiv ) return;
var forms = oDiv.getElementsByTagName( "FORM" );
if( !forms || forms.length <= 0 ) return;
this.__action = forms[0].action;
},
/**
* Insert a option into select
*
* @param, list
* @param, index
* @param, text
* @param, value
* @return, void
*/
__insertOption : function( list, index, text, value )
{
var i = 0;
for ( i = list.options.length; i > index; i-- )
{
list.options[i] = new Option( list.options[i-1].text, list.options[i-1].value );
}
list.options[index] = new Option( text, value );
},
/**
* return action string
*
* @return, action
*/
getAction : function( )
{
return this.__action;
},
/**
* process to get cascading parameter
* @return, void
*/
process : function( )
{
if( !this.__group || !this.__paramNames ) return;
// If target select doesn't exist, return
var targetName = this.__paramNames[ this.__paramNames.length -1 ];
this.__targetId = this.__group.getParameterIdByName( targetName );
var target = $( this.__targetId );
if( !target ) return;
for( var i=0; i<this.__paramNames.length - 1; i++ )
{
this.__data[i] = {};
var id = this.__group.getParameterIdByName( this.__paramNames[i] );
var radioSelectId = id + "_radio_select";
if( !$( radioSelectId ) || $( radioSelectId ).checked )
{
var label = $( id ).text;
if( label == Constants.nullValue )
{
this.__data[i].name = Constants.PARAM_ISNULL;
this.__data[i].value = this.__paramNames[i];
}
else
{
this.__data[i].name = this.__paramNames[i];
this.__data[i].value = $( id ).value;
}
}
else
{
var inputTextId = id + "_input";
if( $( inputTextId ) )
{
this.__data[i].name = this.__paramNames[i];
this.__data[i].value = $( inputTextId ).value;
}
}
}
// Set task id
var taskid = birtUtility.setTaskId( );
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,'GetCascadingParameter',null,
this.__data,{ name : Constants.PARAM_TASKID, value : taskid } );
birtSoapRequest.setURL( this.__action );
if ( !birtSoapRequest.getURL( ) ) return;
this.__active = true;
progressBar.__start( );
// Set cascading parameter group
soapResponseHelper.setParameterGroup( this.__group );
//workaround for Bugzilla Bug 144598. Add request header "Connection" as "keep-alive"
var myAjax = new Ajax.Request( birtSoapRequest.getURL( ), { method: 'post', postBody: birtSoapRequest.__xml_document,
onSuccess: this.responseHandler, onFailure: this.invalidResponseHandler,
requestHeaders: ['Content-type', 'text/xml; charset=utf-8', 'SOAPAction', '""', 'request-type', 'SOAP', 'Connection', 'keep-alive' ] } );
birtSoapRequest.reset( );
},
/**
* Callback function triggered when reponse is ready, status is 200.
*
* @request, httpXmlRequest instance
* @return, void
*/
responseHandler: function( request )
{
if ( request.responseXML && request.responseXML.documentElement )
{
soapResponseHelper.processCascadingParameter( request.responseXML.documentElement );
}
progressBar.__stop( );
this.__active = false;
},
/**
* Callback function triggered when reponse is ready status is not 200.
* Process any http (non-200) errors. Note this is not exception from
* server side.
*
* @request, httpXmlRequest instance
* @return, void
*/
invalidResponseHandler: function( request )
{
if ( request.responseXML && request.responseXML.documentElement )
{
soapResponseHelper.processCascadingParameter( request.responseXML.documentElement );
}
progressBar.__stop( );
this.__active = false;
},
noComma : "" //just to avoid javascript syntax errors
}