/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.engine.classic.wizard.ui.xul.steps;
import org.pentaho.reporting.engine.classic.core.ElementAlignment;
import org.pentaho.reporting.engine.classic.core.function.AggregationFunction;
import org.pentaho.reporting.engine.classic.core.metadata.ExpressionMetaData;
import org.pentaho.reporting.engine.classic.core.metadata.ExpressionRegistry;
import org.pentaho.reporting.engine.classic.core.wizard.DataSchema;
import org.pentaho.reporting.engine.classic.wizard.model.DefaultDetailFieldDefinition;
import org.pentaho.reporting.engine.classic.wizard.model.DefaultGroupDefinition;
import org.pentaho.reporting.engine.classic.wizard.model.DetailFieldDefinition;
import org.pentaho.reporting.engine.classic.wizard.model.FieldDefinition;
import org.pentaho.reporting.engine.classic.wizard.model.GroupDefinition;
import org.pentaho.reporting.engine.classic.wizard.ui.xul.components.AbstractWizardStep;
import org.pentaho.reporting.engine.classic.wizard.ui.xul.util.FieldWrapper;
import org.pentaho.reporting.engine.classic.wizard.ui.xul.util.XulDetailFieldDefinition;
import org.pentaho.reporting.engine.classic.wizard.ui.xul.util.XulGroupDefinition;
import org.pentaho.ui.xul.XulDomContainer;
import org.pentaho.ui.xul.XulException;
import org.pentaho.ui.xul.binding.Binding;
import org.pentaho.ui.xul.binding.Binding.Type;
import org.pentaho.ui.xul.binding.BindingConvertor;
import org.pentaho.ui.xul.components.XulButton;
import org.pentaho.ui.xul.containers.XulDeck;
import org.pentaho.ui.xul.containers.XulListbox;
import org.pentaho.ui.xul.impl.AbstractXulEventHandler;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/**
* Todo: Document Me
*
* @author William Seyler
*/
public class FormatStep extends AbstractWizardStep {
/**
* @author wseyler
* <p/>
* Class that provides conversion between selections made on the Details or Group lists and handles updating
* of the bindings
*/
private class FormatTypeBinding extends BindingConvertor<int[], Integer> {
private XulListbox activeTree;
private XulListbox inactiveTree;
public FormatTypeBinding( final XulListbox activeTree, final XulListbox inactiveTree ) {
if ( activeTree == null ) {
throw new NullPointerException();
}
if ( inactiveTree == null ) {
throw new NullPointerException();
}
this.activeTree = activeTree;
this.inactiveTree = inactiveTree;
}
/* (non-Javadoc)
* @see org.pentaho.ui.xul.binding.BindingConvertor#sourceToTarget(java.lang.Object)
*/
@Override
public Integer sourceToTarget( final int[] value ) {
// Handles the case where there is no selection in either groups or details
if ( ( activeTree.getSelectedIndices() == null || activeTree.getSelectedIndices().length < 1 ) &&
( inactiveTree.getSelectedIndices() == null || inactiveTree.getSelectedIndices().length < 1 ) ) {
return 0;
}
// Handles case where nothing is selected in the target
if ( value == null || value.length < 1 ) { // nothing changes
final XulDeck deck = (XulDeck) getDocument().getElementById( FORMAT_DECK_ID );
return deck.getSelectedIndex();
}
// Remove the selection from the opposite list
inactiveTree.setSelectedIndices( new int[ 0 ] );
// Update the bindings to the new selections
updateBindings( activeTree );
// Return index mapping of the current selected item.
if ( activeTree.getId().equals( FORMAT_DETAILS_LIST_ID ) ) {
return 1;
}
return 2;
}
/* (non-Javadoc)
* @see org.pentaho.ui.xul.binding.BindingConvertor#targetToSource(java.lang.Object)
*/
@Override
public int[] targetToSource( final Integer value ) {
// TODO Auto-generated method stub
return null;
}
}
/**
* @author wseyler
* <p/>
* Provides binding converion between Class and Integer that represents that class in the GUI.
*/
private class AggregationBindingConverter extends BindingConvertor<Class, Integer> {
/* (non-Javadoc)
* @see org.pentaho.ui.xul.binding.BindingConvertor#sourceToTarget(java.lang.Object)
*/
@Override
public Integer sourceToTarget( final Class value ) {
if ( value == null ) {
return 0;
}
for ( int i = 1; i < allExpressionMetaDatas.size(); i++ ) {
final ExpressionMetaData data = allExpressionMetaDatas.get( i ).getWrappedObject();
if ( data == null ) {
return 0;
}
final Class testValue = data.getExpressionType();
if ( value.equals( testValue ) ) {
return i;
}
}
return 0;
}
/* (non-Javadoc)
* @see org.pentaho.ui.xul.binding.BindingConvertor#targetToSource(java.lang.Object)
*/
@Override
public Class targetToSource( final Integer value ) {
if ( value == null ) {
return null;
}
final ExpressionMetaData emd = allExpressionMetaDatas.get( value ).getWrappedObject();
if ( emd == null ) {
return null;
}
return emd.getExpressionType();
}
}
/**
* @author wseyler
* <p/>
* Wraps ExpressionMetaData so that it may be easily mainipulated by the gui.
*/
private static class MetaDataWrapper {
private ExpressionMetaData emd;
public MetaDataWrapper( final ExpressionMetaData emd ) {
this.emd = emd;
}
public ExpressionMetaData getWrappedObject() {
return emd;
}
public String toString() {
if ( emd == null ) {
return messages.getString( "FORMAT_STEP.None" ); //$NON-NLS-1$
}
return emd.getDisplayName( Locale.getDefault() );
}
}
protected class FormatStepHandler extends AbstractXulEventHandler {
private static final String HANDLER_NAME = "format_step_controller"; //$NON-NLS-1$
public String getName() {
return HANDLER_NAME;
}
public void setAlignmentLeft() {
if ( activeField == null ) {
return;
}
final FieldDefinition fieldDefinition = activeField.getFieldDefinition();
if ( fieldDefinition instanceof DetailFieldDefinition ) {
final DetailFieldDefinition definition = (DetailFieldDefinition) fieldDefinition;
definition.setHorizontalAlignment( ElementAlignment.LEFT );
updateAlignmentButtons( ElementAlignment.LEFT );
} else if ( fieldDefinition instanceof GroupDefinition ) {
final GroupDefinition groupDefinition = (GroupDefinition) fieldDefinition;
groupDefinition.setTotalsHorizontalAlignment( ElementAlignment.LEFT );
updateAlignmentButtons( ElementAlignment.LEFT );
}
}
public void setAlignmentCenter() {
if ( activeField == null ) {
return;
}
final FieldDefinition fieldDefinition = activeField.getFieldDefinition();
if ( fieldDefinition instanceof DetailFieldDefinition ) {
final DetailFieldDefinition definition = (DetailFieldDefinition) fieldDefinition;
definition.setHorizontalAlignment( ElementAlignment.CENTER );
updateAlignmentButtons( ElementAlignment.CENTER );
} else if ( fieldDefinition instanceof GroupDefinition ) {
final GroupDefinition groupDefinition = (GroupDefinition) fieldDefinition;
groupDefinition.setTotalsHorizontalAlignment( ElementAlignment.CENTER );
updateAlignmentButtons( ElementAlignment.CENTER );
}
}
public void setAlignmentRight() {
if ( activeField == null ) {
return;
}
final FieldDefinition fieldDefinition = activeField.getFieldDefinition();
if ( fieldDefinition instanceof DetailFieldDefinition ) {
final DetailFieldDefinition definition = (DetailFieldDefinition) fieldDefinition;
definition.setHorizontalAlignment( ElementAlignment.RIGHT );
updateAlignmentButtons( ElementAlignment.RIGHT );
} else if ( fieldDefinition instanceof GroupDefinition ) {
final GroupDefinition groupDefinition = (GroupDefinition) fieldDefinition;
groupDefinition.setTotalsHorizontalAlignment( ElementAlignment.RIGHT );
updateAlignmentButtons( ElementAlignment.RIGHT );
}
}
public void setAlignmentJustify() {
if ( activeField == null ) {
return;
}
final FieldDefinition fieldDefinition = activeField.getFieldDefinition();
if ( fieldDefinition instanceof DetailFieldDefinition ) {
final DetailFieldDefinition definition = (DetailFieldDefinition) fieldDefinition;
definition.setHorizontalAlignment( ElementAlignment.JUSTIFY );
updateAlignmentButtons( ElementAlignment.JUSTIFY );
} else if ( fieldDefinition instanceof GroupDefinition ) {
final GroupDefinition groupDefinition = (GroupDefinition) fieldDefinition;
groupDefinition.setTotalsHorizontalAlignment( ElementAlignment.JUSTIFY );
updateAlignmentButtons( ElementAlignment.JUSTIFY );
}
}
}
private static final String FORMAT_STEP_OVERLAY =
"org/pentaho/reporting/engine/classic/wizard/ui/xul/res/format_step_Overlay.xul"; //$NON-NLS-1$
// Property Names
private static final String GROUP_FIELDS_PROPERTY_NAME = "groupFields"; //$NON-NLS-1$
private static final String DETAIL_FIELDS_PROPERTY_NAME = "detailFields"; //$NON-NLS-1$
private static final String ELEMENTS_PROPERTY_NAME = "elements"; //$NON-NLS-1$
private static final String SELECTED_INDICES_PROPERTY_NAME = "selectedIndices"; //$NON-NLS-1$
private static final String SELECTED_INDEX_PROPERTY_NAME = "selectedIndex"; //$NON-NLS-1$
private static final String CHECKED_PROPERTY_NAME = "checked"; //$NON-NLS-1$
private static final String ONLY_SHOW_CHANGING_VALUES_PROPERTY_NAME = "onlyShowChangingValues"; //$NON-NLS-1$
private static final String WIDTH_PROPERTY_NAME = "width"; //$NON-NLS-1$
private static final String VALUE_PROPERTY_NAME = "value"; //$NON-NLS-1$
private static final String DISPLAY_NAME_PROPERTY_NAME = "displayName"; //$NON-NLS-1$
private static final String DATA_FORMAT_PROPERTY_NAME = "dataFormat"; //$NON-NLS-1$
private static final String ALL_EXPRESSIONS_META_DATAS = "allExpressionMetaDatas"; //$NON-NLS-1$
private static final String AGGREGATION_FUNCTION_PROPERTY_NAME = "aggregationFunction"; //$NON-NLS-1$
// private static final String FIELD_PROPERTY_NAME = "field"; //$NON-NLS-1$
private static final String GROUP_TOTALS_LABEL_PROPERTY_NAME = "groupTotalsLabel"; //$NON-NLS-1$
private static final String SELECTED_ITEM_PROPERTY_NAME = "selectedItem"; //$NON-NLS-1$
private static final String DISABLED_PROPERTY_ID = "disabled"; //$NON-NLS-1$
// XUL GUI IDs
private static final String FORMAT_DETAILS_LIST_ID = "format_details_list"; //$NON-NLS-1$
private static final String FORMAT_GROUPS_LIST_ID = "format_groups_list"; //$NON-NLS-1$
private static final String FORMAT_DECK_ID = "format_options_deck"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_DISTINCT_CB_ID = "format_detail_distinct_only_cb"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_WIDTH_SCALE_ID = "format_detail_width_scale"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_DISPLAY_NAME_TB_ID = "format_detail_display_name_tb"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_DATA_ML_ID = "format_detail_data_ml"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_AGGREGATION_ML_ID = "format_detail_aggregation_ml"; //$NON-NLS-1$
private static final String FORMAT_GROUP_TOTALS_LABEL_TB_ID = "format_group_totals_tb"; //$NON-NLS-1$
private static final String FORMAT_GROUP_DISPLAY_NAME_TB_ID = "format_group_display_name_tb"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_AUTO_WIDTH_CB_ID = "auto_width_cb"; //$NON-NLS-1$
private static final String FORMAT_DETAIL_WIDTH_LABEL_ID = "format_detail_width_label"; //$NON-NLS-1$
private static final String ALIGN_DETAIL_LEFT_BTN_ID = "align_detail_left"; //$NON-NLS-1$
private static final String ALIGN_DETAIL_CENTER_BTN_ID = "align_detail_center"; //$NON-NLS-1$
private static final String ALIGN_DETAIL_RIGHT_BTN_ID = "align_detail_right"; //$NON-NLS-1$
private static final String ALIGN_DETAIL_JUSTIFY_BTN_ID = "align_detail_justify";
/*
* This element was commented to turn off the Group Summary Alignment. Uncomment this to turn this
* feature back on when the engine supports it.
*/
// private static final String ALIGN_GROUP_LEFT_BTN_ID = "align_group_left"; //$NON-NLS-1$
// private static final String ALIGN_GROUP_CENTER_BTN_ID = "align_group_center"; //$NON-NLS-1$
// private static final String ALIGN_GROUP_RIGHT_BTN_ID = "align_group_right"; //$NON-NLS-1$
private FormatStepHandler formatStepHandler;
private Binding groupBinding;
private Binding detailBinding;
private Binding detailExpressionsBinding; // , groupExpressionsBinding;
private List<Binding> fieldAndGroupBindings;
private List<MetaDataWrapper> allExpressionMetaDatas;
private FieldWrapper activeField; // current field being worked on
/**
* @noinspection FieldCanBeLocal
*/
private Object activeXulWrapper;
public FormatStep() {
super();
allExpressionMetaDatas = new ArrayList<MetaDataWrapper>();
this.allExpressionMetaDatas.add( new MetaDataWrapper( null ) ); // None
for ( final ExpressionMetaData emd : ExpressionRegistry.getInstance().getAllExpressionMetaDatas() ) {
if ( AggregationFunction.class.isAssignableFrom( emd.getExpressionType() ) ) {
allExpressionMetaDatas.add( new MetaDataWrapper( emd ) );
}
}
formatStepHandler = new FormatStepHandler();
fieldAndGroupBindings = new ArrayList<Binding>();
}
protected FieldWrapper getActiveField() {
return activeField;
}
protected Object getActiveXulWrapper() {
return activeXulWrapper;
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#setBindings()
*/
public void setBindings() {
getBindingFactory().setBindingType( Type.ONE_WAY );
getBindingFactory().createBinding( FORMAT_DETAILS_LIST_ID, SELECTED_INDICES_PROPERTY_NAME, FORMAT_DECK_ID,
SELECTED_INDEX_PROPERTY_NAME,
new FormatTypeBinding( (XulListbox) getDocument().getElementById( FORMAT_DETAILS_LIST_ID ),
(XulListbox) getDocument().getElementById( FORMAT_GROUPS_LIST_ID ) ) );
getBindingFactory().createBinding( FORMAT_GROUPS_LIST_ID, SELECTED_INDICES_PROPERTY_NAME, FORMAT_DECK_ID,
SELECTED_INDEX_PROPERTY_NAME,
new FormatTypeBinding( (XulListbox) getDocument().getElementById( FORMAT_GROUPS_LIST_ID ),
(XulListbox) getDocument().getElementById( FORMAT_DETAILS_LIST_ID ) ) );
groupBinding = getBindingFactory()
.createBinding( this, GROUP_FIELDS_PROPERTY_NAME, FORMAT_GROUPS_LIST_ID, ELEMENTS_PROPERTY_NAME );
detailBinding = getBindingFactory()
.createBinding( this, DETAIL_FIELDS_PROPERTY_NAME, FORMAT_DETAILS_LIST_ID, ELEMENTS_PROPERTY_NAME );
detailExpressionsBinding = getBindingFactory()
.createBinding( this, ALL_EXPRESSIONS_META_DATAS, FORMAT_DETAIL_AGGREGATION_ML_ID, ELEMENTS_PROPERTY_NAME );
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#stepActivating()
*/
public void stepActivating() {
super.stepActivating();
this.setFinishable( true ); // there is nothing we can do in this step to keep
this.setPreviewable( true ); // from previewing or finishing.
final XulListbox groupList = (XulListbox) getDocument().getElementById( FORMAT_GROUPS_LIST_ID );
final XulListbox detailList = (XulListbox) getDocument().getElementById( FORMAT_DETAILS_LIST_ID );
try {
groupBinding.fireSourceChanged();
detailBinding.fireSourceChanged();
detailExpressionsBinding.fireSourceChanged();
// groupExpressionsBinding.fireSourceChanged();
if ( groupList.getRowCount() > 0 ) {
groupList.setSelectedIndex( 0 );
} else {
detailList.setSelectedIndex( 0 );
}
} catch ( Exception e ) {
getDesignTimeContext().error( e );
}
}
public boolean stepDeactivating() {
super.stepDeactivating();
resetFieldAndGroupBindings();
XulListbox list = (XulListbox) getDocument().getElementById( FORMAT_DETAILS_LIST_ID );
list.setSelectedIndices( new int[ 0 ] );
list = (XulListbox) getDocument().getElementById( FORMAT_GROUPS_LIST_ID );
list.setSelectedIndices( new int[ 0 ] );
return true;
}
/**
*
*/
private void resetFieldAndGroupBindings() {
// Get rid of all the old bindings
for ( final Binding binding : fieldAndGroupBindings ) {
binding.destroyBindings();
}
fieldAndGroupBindings.clear();
}
public List<FieldWrapper> getGroupFields() {
final ArrayList<FieldWrapper> groups = new ArrayList<FieldWrapper>();
final DataSchema schema = getEditorModel().getDataSchema().getDataSchema();
for ( final GroupDefinition group : getEditorModel().getReportSpec().getGroupDefinitions() ) {
groups.add( new FieldWrapper( group, schema ) );
}
return groups;
}
public void setGroupFields( final List<FieldWrapper> groupFields ) {
final List<FieldWrapper> oldGroups = getGroupFields();
final GroupDefinition[] fields = new GroupDefinition[ groupFields.size() ];
for ( int i = 0; i < groupFields.size(); i++ ) {
final FieldWrapper fieldWrapper = groupFields.get( i );
fields[ i ] = (GroupDefinition) fieldWrapper.getFieldDefinition();
}
getEditorModel().getReportSpec().setGroupDefinitions( fields );
this.firePropertyChange( GROUP_FIELDS_PROPERTY_NAME, oldGroups, groupFields );
}
public List<FieldWrapper> getDetailFields() {
final ArrayList<FieldWrapper> fields = new ArrayList<FieldWrapper>();
final DataSchema schema = getEditorModel().getDataSchema().getDataSchema();
for ( final DetailFieldDefinition field : getEditorModel().getReportSpec().getDetailFieldDefinitions() ) {
fields.add( new FieldWrapper( field, schema ) );
}
return fields;
}
public void setDetailFields( final List<FieldWrapper> detailFields ) {
final List<FieldWrapper> oldFields = getDetailFields();
final DetailFieldDefinition[] fields = new DetailFieldDefinition[ detailFields.size() ];
for ( int i = 0; i < detailFields.size(); i++ ) {
final FieldWrapper fieldWrapper = detailFields.get( i );
fields[ i ] = (DetailFieldDefinition) fieldWrapper.getFieldDefinition();
}
getEditorModel().getReportSpec().setDetailFieldDefinitions( fields );
this.firePropertyChange( DETAIL_FIELDS_PROPERTY_NAME, oldFields, detailFields );
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#createPresentationComponent(org
* .pentaho.ui.xul.XulDomContainer)
*/
public void createPresentationComponent( final XulDomContainer mainWizardContainer ) throws XulException {
super.createPresentationComponent( mainWizardContainer );
mainWizardContainer.loadOverlay( FORMAT_STEP_OVERLAY );
// Add event handlers
mainWizardContainer.addEventHandler( formatStepHandler );
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#getStepName()
*/
public String getStepName() {
return messages.getString( "FORMAT_STEP.Step_Name" ); //$NON-NLS-1$
}
/**
* @param activeTree Updates the bindings based on which list contains the currently selected item (either Detail or
* Group) The selected items fields are bound to their associated gui editor.
*/
protected void updateBindings( final XulListbox activeTree ) {
// Get rid of all the old bindings
resetFieldAndGroupBindings();
// Set the new bindings based on the item type (group or detail) selected
getBindingFactory().setBindingType( Type.BI_DIRECTIONAL );
final int[] selectedIndices = activeTree.getSelectedIndices();
if ( selectedIndices == null || selectedIndices.length == 0 ) {
activeField = null;
activeXulWrapper = null;
return;
}
if ( activeTree.getId().equals( FORMAT_DETAILS_LIST_ID ) ) { // We need to update the bindings for the detail list
activeField = getDetailFields().get( selectedIndices[ 0 ] );
final XulDetailFieldDefinition fieldDef = new XulDetailFieldDefinition
( (DefaultDetailFieldDefinition) activeField.getFieldDefinition(),
getEditorModel().getDataSchema().getDataSchema() );
activeXulWrapper = fieldDef;
// Set the bindings on this field definition
getBindingFactory().setBindingType( Type.ONE_WAY );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( FORMAT_DETAIL_WIDTH_SCALE_ID, VALUE_PROPERTY_NAME, FORMAT_DETAIL_WIDTH_LABEL_ID,
VALUE_PROPERTY_NAME, new IntegerToStringBindingConvertor() ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( FORMAT_DETAIL_AUTO_WIDTH_CB_ID, CHECKED_PROPERTY_NAME, FORMAT_DETAIL_WIDTH_SCALE_ID,
DISABLED_PROPERTY_ID ) );
getBindingFactory().setBindingType( Type.BI_DIRECTIONAL );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( fieldDef, ONLY_SHOW_CHANGING_VALUES_PROPERTY_NAME, FORMAT_DETAIL_DISTINCT_CB_ID,
CHECKED_PROPERTY_NAME, new BooleanBindingConvertor() ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( fieldDef, WIDTH_PROPERTY_NAME, FORMAT_DETAIL_WIDTH_SCALE_ID, VALUE_PROPERTY_NAME,
new LengthToIntegerBindingConverter() ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( fieldDef, DISPLAY_NAME_PROPERTY_NAME, FORMAT_DETAIL_DISPLAY_NAME_TB_ID, VALUE_PROPERTY_NAME ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( fieldDef, DATA_FORMAT_PROPERTY_NAME, FORMAT_DETAIL_DATA_ML_ID, SELECTED_ITEM_PROPERTY_NAME,
new DataFormatBindingConvertor() ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( fieldDef, AGGREGATION_FUNCTION_PROPERTY_NAME, FORMAT_DETAIL_AGGREGATION_ML_ID,
SELECTED_INDEX_PROPERTY_NAME, new AggregationBindingConverter() ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( fieldDef, WIDTH_PROPERTY_NAME, FORMAT_DETAIL_AUTO_WIDTH_CB_ID, CHECKED_PROPERTY_NAME,
new AutoWidthBindingConverter( fieldDef.getWidth() ) ) );
updateAlignmentButtons( fieldDef.getHorizontalAlignment() );
} else if ( activeTree.getId()
.equals( FORMAT_GROUPS_LIST_ID ) ) { // We need to update the bindings for the groups list
if ( getGroupFields().size() > 0 ) {
activeField = getGroupFields().get( selectedIndices[ 0 ] );
final DefaultGroupDefinition definition = (DefaultGroupDefinition) activeField.getFieldDefinition();
final XulGroupDefinition groupDef =
new XulGroupDefinition( definition, getEditorModel().getDataSchema().getDataSchema() );
activeXulWrapper = groupDef;
// Set the bindings on this group definition
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( groupDef, GROUP_TOTALS_LABEL_PROPERTY_NAME, FORMAT_GROUP_TOTALS_LABEL_TB_ID,
VALUE_PROPERTY_NAME ) );
fieldAndGroupBindings.add( getBindingFactory()
.createBinding( groupDef, DISPLAY_NAME_PROPERTY_NAME, FORMAT_GROUP_DISPLAY_NAME_TB_ID,
VALUE_PROPERTY_NAME ) );
final ElementAlignment alignment = groupDef.getTotalsHorizontalAlignment();
/*
* This element was commented to turn off the Group Summary Alignment. Uncomment this to turn this
* feature back on when the engine supports it.
*/
// if (alignment == null || alignment.equals(ElementAlignment.LEFT))
// {
// XulButton button = (XulButton) getDocument().getElementById(ALIGN_GROUP_LEFT_BTN_ID);
// button.setSelected(true);
// }
// else if (alignment.equals(ElementAlignment.CENTER))
// {
// XulButton button = (XulButton) getDocument().getElementById(ALIGN_GROUP_CENTER_BTN_ID);
// button.setSelected(true);
// }
// else if (alignment.equals(ElementAlignment.RIGHT))
// {
// XulButton button = (XulButton) getDocument().getElementById(ALIGN_GROUP_RIGHT_BTN_ID);
// button.setSelected(true);
// }
}
}
// Fire the bindings set up above to synch the GUI
// TODO Better error handling
for ( final Binding binding : fieldAndGroupBindings ) {
try {
binding.fireSourceChanged();
} catch ( Exception e ) {
getDesignTimeContext().error( e );
}
}
}
private void updateAlignmentButtons( final ElementAlignment align ) {
final XulButton alignLeftBtn = (XulButton) getDocument().getElementById( ALIGN_DETAIL_LEFT_BTN_ID );
final XulButton alignCenterBtn = (XulButton) getDocument().getElementById( ALIGN_DETAIL_CENTER_BTN_ID );
final XulButton alignRightBtn = (XulButton) getDocument().getElementById( ALIGN_DETAIL_RIGHT_BTN_ID );
final XulButton alignJustifyBtn = (XulButton) getDocument().getElementById( ALIGN_DETAIL_JUSTIFY_BTN_ID );
alignLeftBtn.setSelected( align == ElementAlignment.LEFT );
alignCenterBtn.setSelected( align == ElementAlignment.CENTER );
alignRightBtn.setSelected( align == ElementAlignment.RIGHT );
alignJustifyBtn.setSelected( align == ElementAlignment.JUSTIFY );
}
/**
* @return a list of MetaDataWrappers
*/
public List<MetaDataWrapper> getAllExpressionMetaDatas() {
return allExpressionMetaDatas;
}
}