editor.setDataSetList( dataSets );
editor.setExpressionProvider( expressionProvider );
	private void setupEditors( )	{		CellEditor[] editors = new CellEditor[5];		if ( columnExpressions == null )		{			columnExpressions = new String[]{};		}		columnNameEditor = new ComboBoxExpressionCellEditor( viewer.getViewer( )				.getTable( ), columnExpressions, SWT.NONE );		List dataSets = DEUtil.getDataSetList( reportItemHandle );		columnNameEditor.setDataSetList( dataSets );		// columnNameEditor.addFilter( new DataSetExpressionFilter( ) );		editors[1] = columnNameEditor;		editors[2] = new ComboBoxCellEditor( viewer.getViewer( ).getTable( ),				operatorDisplayNames,				SWT.READ_ONLY );		ExpressionValueCellEditor editor = new ExpressionValueCellEditor( viewer.getViewer( )				.getTable( ) );		editor.setDataSetList( dataSets );		// editor.addFilter( new DataSetExpressionFilter( ) );		editor.setReportElement( reportItemHandle );		editors[3] = editor;		editor = new ExpressionValueCellEditor( viewer.getViewer( ).getTable( ) );		editor.setDataSetList( dataSets );		// editor.addFilter( new DataSetExpressionFilter( ) );		editor.setReportElement( reportItemHandle );		editors[4] = editor;		viewer.getViewer( ).setCellEditors( editors );		viewer.getViewer( ).setColumnProperties( new String[]{				"", //$NON-NLS-1$ 				"expr", //$NON-NLS-1$ 				"operator", //$NON-NLS-1$				"value1", //$NON-NLS-1$				"value2" //$NON-NLS-1$		} );		viewer.getViewer( ).setCellModifier( new ICellModifier( ) {			public boolean canModify( Object element, String property )			{				String operator = ""; //$NON-NLS-1$				String expr = null;				try				{					operator = (String) Utility.getProperty( element,							"operator" ); //$NON-NLS-1$					expr = (String) Utility.getProperty( element, "expr" ); //$NON-NLS-1$				}				catch ( Exception ex )				{					ExceptionHandler.handle( ex );				}				if ( operator == null )				{					operator = ""; //$NON-NLS-1$				}				if ( element == newFilter && !property.equals( "expr" ) ) //$NON-NLS-1$					return false;				if ( property.equals( "value2" ) && //$NON-NLS-1$ 						!( operator.equals( DesignChoiceConstants.FILTER_OPERATOR_BETWEEN ) || operator.equals( DesignChoiceConstants.FILTER_OPERATOR_NOT_BETWEEN ) ) )				{					return false;				}				if ( property.equals( "value1" ) && //$NON-NLS-1$						( operator.equals( DesignChoiceConstants.FILTER_OPERATOR_NULL )								|| operator.equals( DesignChoiceConstants.FILTER_OPERATOR_NOT_NULL )								|| operator.equals( DesignChoiceConstants.FILTER_OPERATOR_TRUE ) || operator.equals( DesignChoiceConstants.FILTER_OPERATOR_FALSE ) ) )				{					return false;				}				( (ExpressionValueCellEditor) ( viewer.getViewer( )						.getCellEditors( )[3] ) ).setSelectValueExpression( expr );				( (ExpressionValueCellEditor) ( viewer.getViewer( )						.getCellEditors( )[4] ) ).setSelectValueExpression( expr );				return true;			}			public Object getValue( Object element, String property )			{				Object value = null;				try				{					value = Utility.getProperty( element, property );				}				catch ( Exception e )				{					ExceptionHandler.handle( e );				}				if ( "operator".equals( property ) ) //$NON-NLS-1$				{					value = new Integer( getOperatorIndex( (String) value ) );				}				if ( value == null )				{					value = ""; //$NON-NLS-1$				}				return value;			}			public void modify( Object element, String property, Object value )			{				Object actualElement = ( (TableItem) element ).getData( );				if ( value != null )				{					try					{						if ( "operator".equals( property ) ) //$NON-NLS-1$						{							Integer index = (Integer) value;							if ( index.intValue( ) > -1									&& index.intValue( ) < operators.length )							{								value = operators[index.intValue( )];								if ( value.equals( DesignChoiceConstants.FILTER_OPERATOR_NULL )										|| value.equals( DesignChoiceConstants.FILTER_OPERATOR_NOT_NULL )										|| value.equals( DesignChoiceConstants.FILTER_OPERATOR_TRUE )										|| value.equals( DesignChoiceConstants.FILTER_OPERATOR_FALSE ) )								{									Utility.setProperty( actualElement,											"value1", //$NON-NLS-1$											"" ); //$NON-NLS-1$									Utility.setProperty( actualElement,											"value2", //$NON-NLS-1$											"" ); //$NON-NLS-1$									viewer.getViewer( ).refresh( );								}								else if ( !( value.equals( DesignChoiceConstants.FILTER_OPERATOR_BETWEEN ) || value.equals( DesignChoiceConstants.FILTER_OPERATOR_NOT_BETWEEN ) ) )								{									Utility.setProperty( actualElement,											"value2", //$NON-NLS-1$											"" ); //$NON-NLS-1$									viewer.getViewer( ).refresh( );								}							}							else							{								value = ""; //$NON-NLS-1$							}						}						else if ( "expr".equals( property ) ) //$NON-NLS-1$						{							if ( isColumnName( (String) value ) )							{								value = "row[\"" + DEUtil.escape( (String) value ) + "\"]"; //$NON-NLS-1$ //$NON-NLS-2$							}							if ( actualElement != newFilter									&& ( value == null || ( (String) value ).trim( )											.length( ) == 0 ) )							{								ExceptionHandler.openMessageBox( Messages.getString( "filters.error.title" ), //$NON-NLS-1$										Messages.getString( "filters.empty.columnName" ), //$NON-NLS-1$										SWT.ICON_INFORMATION );								viewer.getViewer( )										.update( actualElement, null );								return;							}						}						Utility.setProperty( actualElement, property, value );					}					catch ( InvocationTargetException ite )					{						Exception e = new Exception( Messages.getString( "DataSetFiltersPage.exception.msg.operator.notSupport" ) //$NON-NLS-1$								+ value );						ExceptionHandler.handle( e );					}					catch ( Exception ex )					{						ex.printStackTrace( );						ExceptionHandler.handle( ex );					}					viewer.getViewer( )							.update( ( (TableItem) element ).getData( ), null );					// If this is a new Item then add this item to the handle					// and refresh the viewer					if ( actualElement instanceof FilterCondition )					{						isOperatorSet = true;						if ( newFilter.getExpr( ) != null								&& newFilter.getExpr( ).trim( ).length( ) > 0 )						{							try							{								filters.addItem( newFilter );								clearNewFilter( );								viewer.getViewer( ).refresh( );							}							catch ( SemanticException e )							{								ExceptionHandler.handle( e );							}						}					}				}			}		} );	}