blob: 005bb949d309938f46db5591e194bc92338ef99e [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.
*****************************************************************************/
/**
* Birt export data dialog.
*/
BirtSimpleExportDataDialog = Class.create( );
BirtSimpleExportDataDialog.prototype = Object.extend( new AbstractBaseDialog( ),
{
__neh_select_change_closure : null,
__neh_switchResultSet_closure : null,
availableResultSets : [],
selectedColumns : [],
/**
* Initialization routine required by "ProtoType" lib.
* @return, void
*/
initialize : function( id )
{
this.__initBase( id );
this.__z_index = 200;
// Closures
this.__neh_switchResultSet_closure = this.__neh_switchResultSet.bindAsEventListener( this );
this.__neh_click_exchange_closure = this.__neh_click_exchange.bindAsEventListener( this );
this.__neh_dblclick_src_closure = this.__neh_dblclick_src.bindAsEventListener( this );
this.__neh_dblclick_dest_closure = this.__neh_dblclick_dest.bindAsEventListener( this );
this.__neh_click_src_closure = this.__neh_click_src.bindAsEventListener( this );
this.__neh_click_dest_closure = this.__neh_click_dest.bindAsEventListener( this );
this.__installEventHandlers( id );
},
/**
* Install native/birt event handlers.
*
* @id, toolbar id (optional since there is only one toolbar)
* @return, void
*/
__installEventHandlers : function( id )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
Event.observe( oSelects[0], 'change', this.__neh_switchResultSet_closure, false );
// Initialize exchange buttons
var oInputs = this.__instance.getElementsByTagName( 'input' );
for ( var i = 0; i < oInputs.length ; i++ )
{
Event.observe( oInputs[i], 'click', this.__neh_click_exchange_closure, false );
}
// Initialize exchange selects
var oSelects = this.__instance.getElementsByTagName( 'select' );
if( oSelects.length > 2 )
{
Event.observe( oSelects[1], 'dblclick', this.__neh_dblclick_src_closure, false );
Event.observe( oSelects[2], 'dblclick', this.__neh_dblclick_dest_closure, false );
Event.observe( oSelects[1], 'change', this.__neh_click_src_closure, false );
Event.observe( oSelects[2], 'change', this.__neh_click_dest_closure, false );
}
},
/**
* Native event handler for selection item movement.
*/
__neh_click_exchange : function( event )
{
var oSC = Event.element( event );
if( oSC.id == 'exportDataEncoding_other' )
{
this.__updateButtons( );
$( 'exportDataOtherEncoding_input' ).focus( );
}
else
{
var oInputs = this.__instance.getElementsByTagName( 'input' );
var oSelects = this.__instance.getElementsByTagName( 'select' );
switch ( Event.element( event ).name )
{
case 'Addall':
{
if ( oSelects[1].options.length > 0 )
{
this.moveAllItems( oSelects[1], oSelects[2] );
}
break;
}
case 'Add':
{
if ( oSelects[1].options.length > 0 )
{
this.moveSingleItem( oSelects[1], oSelects[2] );
}
break;
}
case 'Remove':
{
if ( oSelects[2].options.length > 0 )
{
this.moveSingleItem( oSelects[2], oSelects[1] );
}
break;
}
case 'Removeall':
{
if ( oSelects[2].options.length > 0 )
{
this.moveAllItems( oSelects[2], oSelects[1] );
}
break;
}
case 'Up':
{
birtUtility.moveSelectedItemsUp( oSelects[2] );
break;
}
case 'Down':
{
birtUtility.moveSelectedItemsDown( oSelects[2] );
break;
}
}
this.__updateButtons( );
}
},
/**
* Native event handler for double click source select element.
*/
__neh_dblclick_src : function( event )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
if ( oSelects[1].options.length > 0 )
{
this.moveSingleItem( oSelects[1], oSelects[2] );
}
this.__updateButtons( );
},
/**
* Native event handler for double click dest select element.
*/
__neh_dblclick_dest : function( event )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
if ( oSelects[2].options.length > 0 )
{
this.moveSingleItem( oSelects[2], oSelects[1] );
}
this.__updateButtons( );
},
/**
* Native event handler for click source select element.
*/
__neh_click_src : function( event )
{
this.__updateButtons( );
},
/**
* Native event handler for click dest select element.
*/
__neh_click_dest : function( event )
{
this.__updateButtons( );
},
/**
* Update button status.
*/
__updateButtons : function( )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
var canExport = oSelects[0].options.length > 0;
var canAdd = oSelects[1].options.length > 0;
var canRemove = oSelects[2].options.length > 0;
var srcSelectedIndex = oSelects[1].selectedIndex;
var destSelectedIndex = oSelects[2].selectedIndex;
var oInputs = this.__instance.getElementsByTagName( 'input' );
if( !rtl )
{
oInputs[0].src = canAdd ? "birt/images/AddAll.gif" : "birt/images/AddAll_disabled.gif";
}
else
{
oInputs[0].src = canAdd ? "birt/images/AddAll_rtl.gif" : "birt/images/AddAll_disabled_rtl.gif";
}
oInputs[0].style.cursor = canAdd ? "pointer" : "default";
if( !rtl )
{
oInputs[1].src = canAdd && srcSelectedIndex >= 0 ? "birt/images/Add.gif" : "birt/images/Add_disabled.gif";
}
else
{
oInputs[1].src = canAdd && srcSelectedIndex >= 0 ? "birt/images/Add_rtl.gif" : "birt/images/Add_disabled_rtl.gif";
}
oInputs[1].style.cursor = canAdd ? "pointer" : "default";
if( !rtl )
{
oInputs[2].src = canRemove && destSelectedIndex >= 0 ? "birt/images/Remove.gif" : "birt/images/Remove_disabled.gif";
}
else
{
oInputs[2].src = canRemove && destSelectedIndex >= 0 ? "birt/images/Remove_rtl.gif" : "birt/images/Remove_disabled_rtl.gif";
}
oInputs[2].style.cursor = canRemove ? "pointer" : "default";
if( !rtl )
{
oInputs[3].src = canRemove ? "birt/images/RemoveAll.gif" : "birt/images/RemoveAll_disabled.gif";
}
else
{
oInputs[3].src = canRemove ? "birt/images/RemoveAll_rtl.gif" : "birt/images/RemoveAll_disabled_rtl.gif";
}
oInputs[3].style.cursor = canRemove ? "pointer" : "default";
oInputs[4].src = canRemove && destSelectedIndex >= 0 ? "birt/images/Up.gif" : "birt/images/Up_disabled.gif";
oInputs[4].style.cursor = canRemove ? "pointer" : "default";
oInputs[5].src = canRemove && destSelectedIndex >= 0 ? "birt/images/Down.gif" : "birt/images/Down_disabled.gif";
oInputs[5].style.cursor = canRemove ? "pointer" : "default";
if( canExport )
{
this.__setDisabled( 'exportDataEncodingSetting', false );
$( 'exportDataCSVSeparator' ).disabled = false;
var oEnc = $( 'exportDataEncoding_other' );
var oEncInput = $( 'exportDataOtherEncoding_input' );
if( oEnc && oEnc.checked )
{
oEncInput.disabled = false;
}
else
{
oEncInput.disabled = true;
}
}
else
{
this.__setDisabled( 'exportDataEncodingSetting', true );
$( 'exportDataCSVSeparator' ).disabled = true;
}
},
/**
* Set disabled status for all controls in container
*
* @param id
* @param flag
* @return, void
*/
__setDisabled : function( id, flag )
{
var oContainer = $( id );
if( !oContainer )
return;
var oSelects = oContainer.getElementsByTagName( "select" );
if( oSelects )
{
for( var i=0; i<oSelects.length; i++ )
oSelects[i].disabled = flag;
}
var oInputs = oContainer.getElementsByTagName( "input" );
if( oInputs )
{
for( var i=0; i<oInputs.length; i++ )
oInputs[i].disabled = flag;
}
},
/**
* Move single selection item.
*/
moveSingleItem : function( sel_source, sel_dest )
{
if ( sel_source.selectedIndex == -1 )
{
return;
}
for ( var i=0; i<sel_source.options.length; i++ )
{
if ( sel_source.options[i].selected )
{
var selectedItem = sel_source.options[i];
sel_dest.options[sel_dest.options.length] = new Option( selectedItem.text, selectedItem.value );
sel_source.remove( i );
i = i - 1;
}
}
sel_source.selectedIndex = 0;
},
/**
* Move all selection items.
*/
moveAllItems : function( sel_source, sel_dest )
{
for ( var i = 0; i < sel_source.length; i++ )
{
var SelectedText = sel_source.options[i].text;
var SelectedValue = sel_source.options[i].value;
var newOption = new Option( SelectedText );
newOption.value = SelectedValue;
sel_dest.options[sel_dest.options.length] = newOption;
}
sel_dest.selectedIndex = 0;
sel_source.length = 0;
},
/**
* Binding data to the dialog UI. Data includes zoom scaling factor.
*
* @data, data DOM tree (schema TBD)
* @return, void
*/
__bind : function( data )
{
if ( !data )
{
return;
}
var oSelects = this.__instance.getElementsByTagName( 'select' );
oSelects[0].options.length = 0;
oSelects[1].options.length = 0;
oSelects[2].options.length = 0;
this.availableResultSets = [];
var resultSets = data.getElementsByTagName( 'ResultSet' );
for ( var k = 0; k < resultSets.length; k++ )
{
var resultSet = resultSets[k];
var queryNames = resultSet.getElementsByTagName( 'QueryName' );
oSelects[0].options[oSelects[0].options.length] = new Option(queryNames[0].firstChild.data);
this.availableResultSets[k] = {};
var columns = resultSet.getElementsByTagName( 'Column' );
for( var i = 0; i < columns.length; i++ )
{
var column = columns[i];
var columnName = column.getElementsByTagName( 'Name' );
var label = column.getElementsByTagName( 'Label' );
this.availableResultSets[k][label[0].firstChild.data] = columnName[0].firstChild.data;
}
}
this.__neh_switchResultSet( );
},
/**
* switch result set.
*/
__neh_switchResultSet : function( )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
oSelects[1].options.length = 0;
oSelects[2].options.length = 0;
var columns = this.availableResultSets[oSelects[0].selectedIndex];
for( var label in columns )
{
var colName = columns[label];
var option = new Option( label );
option.value = colName;
oSelects[1].options[oSelects[1].options.length] = option;
}
this.__updateButtons( );
},
/**
* Handle clicking on ok.
*
* @return, void
*/
__okPress : function( )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
this.__l_hide( );
if ( oSelects[2].options.length > 0 )
{
for( var i = 0; i < oSelects[2].options.length; i++ )
{
this.selectedColumns[i] = oSelects[2].options[i].value;
}
this.__constructForm( );
}
},
/**
* Construct extract data form. Post it to server.
*/
__constructForm : function( )
{
var dialogContent = $( 'simpleExportDialogBody' );
var hiddenDiv = document.createElement( 'div' );
hiddenDiv.style.display = 'none';
var hiddenForm = document.createElement( 'form' );
hiddenForm.method = 'post';
hiddenForm.target = '_self';
var url = soapURL;
url = url.replace( /[\/][a-zA-Z]+[?]/, '/' + Constants.SERVLET_EXTRACT + '?' );
// delete some URL parameters
url = birtUtility.deleteURLParameter( url, Constants.PARAM_BOOKMARK );
url = birtUtility.deleteURLParameter( url, Constants.PARAM_INSTANCE_ID );
hiddenForm.action = url;
// Pass over current element's iid.
var queryNameInput = document.createElement( 'input' );
queryNameInput.type = 'hidden';
queryNameInput.name = Constants.PARAM_RESULTSETNAME;
var oSelects = this.__instance.getElementsByTagName( 'select' );
queryNameInput.value = oSelects[0].options[oSelects[0].selectedIndex].text;
hiddenForm.appendChild( queryNameInput );
// Total # of selected columns.
if ( this.selectedColumns.length > 0 )
{
var hiddenSelectedColumnNumber = document.createElement( 'input' );
hiddenSelectedColumnNumber.type = 'hidden';
hiddenSelectedColumnNumber.name = Constants.PARAM_SELECTEDCOLUMNNUMBER;
hiddenSelectedColumnNumber.value = this.selectedColumns.length;
hiddenForm.appendChild( hiddenSelectedColumnNumber );
// data of selected columns.
for( var i = 0; i < this.selectedColumns.length; i++ )
{
var hiddenSelectedColumns = document.createElement( 'input' );
hiddenSelectedColumns.type = 'hidden';
hiddenSelectedColumns.name = Constants.PARAM_SELECTEDCOLUMN + i;
hiddenSelectedColumns.value = this.selectedColumns[i];
hiddenForm.appendChild( hiddenSelectedColumns );
}
}
this.selectedColumns = [];
// CSV separator
var oExtension = $( 'exportDataExtension' );
if( oExtension && oExtension.value != '' )
{
var hiddenExtension = document.createElement( 'input' );
hiddenExtension.type = 'hidden';
hiddenExtension.name = Constants.PARAM_DATA_EXTRACT_EXTENSION;
hiddenExtension.value = oExtension.value;
hiddenForm.appendChild( hiddenExtension );
}
// Pass the export data encoding
var oUTF8 = $( 'exportDataEncoding_UTF8' );
var hiddenEnc = document.createElement( 'input' );
hiddenEnc.type = 'hidden';
hiddenEnc.name = Constants.PARAM_EXPORT_ENCODING;
if( oUTF8 && oUTF8.checked )
{
hiddenEnc.value = oUTF8.value;
}
else
{
hiddenEnc.value = $('exportDataOtherEncoding_input').value;
}
hiddenForm.appendChild( hiddenEnc );
// CSV separator
var oSep = $( 'exportDataCSVSeparator' );
if( oSep && oSep.value != '' )
{
var hiddenSep = document.createElement( 'input' );
hiddenSep.type = 'hidden';
hiddenSep.name = Constants.PARAM_SEP;
hiddenSep.value = oSep.value;
hiddenForm.appendChild( hiddenSep );
}
var hiddenAsAttachment = document.createElement( 'input' );
hiddenAsAttachment.type = 'hidden';
hiddenAsAttachment.name = Constants.PARAM_ASATTACHMENT;
hiddenAsAttachment.value = "true";
hiddenForm.appendChild( hiddenAsAttachment );
// Whether exports column's data type
var oType = $( 'exportColumnDataType' );
var hiddenType = document.createElement( 'input' );
hiddenType.type = 'hidden';
hiddenType.name = Constants.PARAM_EXPORT_DATATYPE;
if( oType && oType.checked )
hiddenType.value = "true";
else
hiddenType.value = "false";
hiddenForm.appendChild( hiddenType );
// Whether exports column as locale neutral
var oLocaleNeutral = $( 'exportColumnLocaleNeutral' );
var hiddenLocaleNeutral = document.createElement( 'input' );
hiddenLocaleNeutral.type = 'hidden';
hiddenLocaleNeutral.name = Constants.PARAM_LOCALENEUTRAL;
if( oLocaleNeutral && oLocaleNeutral.checked )
hiddenLocaleNeutral.value = "true";
else
hiddenLocaleNeutral.value = "false";
hiddenForm.appendChild( hiddenLocaleNeutral );
var tmpSubmit = document.createElement( 'input' );
tmpSubmit.type = 'submit';
tmpSubmit.value = 'TmpSubmit';
hiddenForm.appendChild( tmpSubmit );
hiddenDiv.appendChild( hiddenForm );
dialogContent.appendChild( hiddenDiv );
tmpSubmit.click( );
dialogContent.removeChild( hiddenDiv );
},
/**
Called right before element is shown
*/
__preShow: function()
{
// disable the toolbar buttons
birtUtility.setButtonsDisabled ( "toolbar", true );
// disable the Navigation Bar buttons
birtUtility.setButtonsDisabled ( "navigationBar", true );
},
/**
Called before element is hidden
*/
__preHide: function()
{
// enable the toolbar buttons
birtUtility.setButtonsDisabled ( "toolbar", false );
// enable the Navigation Bar buttons
birtUtility.setButtonsDisabled ( "navigationBar", false );
}
} );