/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.wizards.toolintegration; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Set; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.help.IWorkbenchHelpSystem; import de.rcenvironment.core.component.integration.ToolIntegrationConstants; import de.rcenvironment.core.gui.wizards.toolintegration.api.ToolIntegrationWizardPage; import de.rcenvironment.core.utils.common.StringUtils; /** * @author Sascha Zur */ public class PropertyConfigurationPage extends ToolIntegrationWizardPage { /** Constant for the key "key" in the configuration map. */ public static final String KEY_PROPERTY_KEY = ToolIntegrationConstants.KEY_PROPERTY_KEY; /** Constant for the key "displayName" in the configuration map. */ public static final String KEY_PROPERTY_DISPLAY_NAME = ToolIntegrationConstants.KEY_PROPERTY_DISPLAYNAME; /** Constant for the key "defaultValue" in the configuration map. */ public static final String KEY_PROPERTY_DEFAULT_VALUE = ToolIntegrationConstants.KEY_PROPERTY_DEFAULT_VALUE; private static final String STANDARD_SUFFIX = ToolIntegrationConstants.DEFAULT_CONFIG_FILE_SUFFIX; private static final String CREATE_CONFIG_FILE = ToolIntegrationConstants.KEY_PROPERTY_CREATE_CONFIG_FILE; private static final String CONFIG_FILE_NAME = ToolIntegrationConstants.KEY_PROPERTY_CONFIG_FILENAME; private static final int PROPERTY_CONFIGURATION_WIDTH = 400; private static final int NO_PROPERTY_TAB_SELECTION = -1; private static final String DEFAULT_CONFIGURATION_GROUP = "Default"; private static final String HELP_CONTEXT_ID = "de.rcenvironment.core.gui.wizard.toolintegration.integration_properties"; protected Map<String, Object> configurationMap; private int groupSelection = NO_PROPERTY_TAB_SELECTION; private Button createConfigButton; private Text configurationFileNameText; private Button tableButtonAdd; private Button tableButtonEdit; private Button tableButtonRemove; private Table propertyTable; private Map<String, Object> propertyTabMap; private Text groupNameText; private List propGroupList; private Button removeGroupButton; private Label configGroupLabel; private ButtonSelectionListener btnSelectionListener; private Button editGroupButton; private Button addGroupButton; protected PropertyConfigurationPage(String pageName, Map<String, Object> configurationMap) { super(pageName); setTitle(pageName); setDescription(Messages.propertyPageDescription); this.configurationMap = configurationMap; if (configurationMap.get(ToolIntegrationConstants.KEY_PROPERTIES) == null) { propertyTabMap = new HashMap<String, Object>(); configurationMap.put(ToolIntegrationConstants.KEY_PROPERTIES, propertyTabMap); propertyTabMap.put(DEFAULT_CONFIGURATION_GROUP, new HashMap<String, Object>()); } } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(2, false)); GridData containerGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); container.setLayoutData(containerGridData); createTabConfiguration(container); createPropertyConfiguration(container); updateTabListContent(); if (propGroupList.getItemCount() > 0) { propGroupList.setSelection(0); groupSelection = 0; } updateSelection(); setControl(container); PlatformUI.getWorkbench().getHelpSystem().setHelp(this.getControl(), HELP_CONTEXT_ID); setPageComplete(true); } private void createTabConfiguration(Composite container) { Composite tabConfigurationComposite = new Composite(container, SWT.NONE); tabConfigurationComposite.setLayout(new GridLayout(2, false)); GridData tabConfigurationGridData = new GridData(GridData.FILL_VERTICAL | GridData.FILL_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.GRAB_HORIZONTAL); tabConfigurationComposite.setLayoutData(tabConfigurationGridData); Label propertyGroupLabel = new Label(tabConfigurationComposite, SWT.NONE); propertyGroupLabel.setText(Messages.configGroupsHeader); GridData propertyGroupLabelData = new GridData(); propertyGroupLabelData.horizontalSpan = 2; propertyGroupLabel.setLayoutData(propertyGroupLabelData); propGroupList = new List(tabConfigurationComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL); GridData tabsListGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.FILL_VERTICAL | GridData.GRAB_VERTICAL); tabsListGridData.horizontalSpan = 2; propGroupList.setLayoutData(tabsListGridData); propGroupList.addSelectionListener(new PropertyGroupTableListener(propGroupList)); propGroupList.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.DEL) { if (propGroupList.getSelection().length == 1) { if (propertyTabMap.containsKey(propGroupList.getSelection()[0])) { propertyTabMap.remove(propGroupList.getSelection()[0]); updateTabListContent(); } } } } }); groupNameText = new Text(tabConfigurationComposite, SWT.BORDER); GridData tabNameTextGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); groupNameText.setLayoutData(tabNameTextGridData); groupNameText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent arg0) { groupNameText.forceFocus(); addGroupButton.setEnabled(groupNameText.getText() != null && !groupNameText.getText().isEmpty()); } }); groupNameText.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.CR) { e.doit = false; } } }); addGroupButton = new Button(tabConfigurationComposite, SWT.PUSH); addGroupButton.setText(Messages.add); GridData addGroupButtonGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); addGroupButton.setLayoutData(addGroupButtonGridData); addGroupButton.addSelectionListener(new AddGroupButtonListener()); addGroupButton.setEnabled(false); editGroupButton = new Button(tabConfigurationComposite, SWT.PUSH); editGroupButton.setText(Messages.rename); GridData editGroupButtonGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); editGroupButton.setLayoutData(editGroupButtonGridData); editGroupButtonGridData.horizontalSpan = 2; editGroupButton.addSelectionListener(new EditGroupButtonListener()); removeGroupButton = new Button(tabConfigurationComposite, SWT.PUSH); removeGroupButton.setText(Messages.remove); GridData removeGroupButtonGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); removeGroupButton.setLayoutData(removeGroupButtonGridData); removeGroupButtonGridData.horizontalSpan = 2; removeGroupButton.addSelectionListener(new RemoveGroupButtonListener()); } private void createPropertyConfiguration(Composite container) { Composite propertyConfigurationComposite = new Composite(container, SWT.NONE); propertyConfigurationComposite.setLayout(new GridLayout(2, false)); GridData propertyConfigurationGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_VERTICAL); propertyConfigurationGridData.widthHint = PROPERTY_CONFIGURATION_WIDTH; propertyConfigurationComposite.setLayoutData(propertyConfigurationGridData); configGroupLabel = new Label(propertyConfigurationComposite, SWT.NONE); GridData configGroupLabelData = new GridData(); configGroupLabelData.horizontalSpan = 2; configGroupLabel.setLayoutData(configGroupLabelData); createTable(propertyConfigurationComposite); Composite createConfigComposite = new Composite(propertyConfigurationComposite, SWT.NONE); createConfigComposite.setLayout(new GridLayout(2, false)); GridData createConfigGridData = new GridData(GridData.FILL_HORIZONTAL); createConfigGridData.horizontalSpan = 2; createConfigComposite.setLayoutData(createConfigGridData); createConfigButton = new Button(createConfigComposite, SWT.CHECK); createConfigButton.setText(Messages.createConfigFileButton); GridData createConfigButtonGridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); createConfigButtonGridData.horizontalSpan = 2; createConfigButton.setLayoutData(createConfigButtonGridData); createConfigButton.addSelectionListener(new CreateConfigSelectionListener()); new Label(createConfigComposite, SWT.NONE).setText(ToolIntegrationConstants.DIRECTORIES_PLACEHOLDER[1] + "/" + ToolIntegrationConstants.DIRECTORIES_PLACEHOLDER[0].replace('c', 'C') + "/"); configurationFileNameText = new Text(createConfigComposite, SWT.BORDER); GridData configFilenameTextData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); configurationFileNameText.setLayoutData(configFilenameTextData); configurationFileNameText.addModifyListener(new ConfigurationFilenameTextModifyListener()); } private void createTable(Composite client) { final Composite tableComposite = new Composite(client, SWT.NONE); TableColumnLayout tableLayout = new TableColumnLayout(); tableComposite.setLayout(tableLayout); GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 4); tableComposite.setLayoutData(tableLayoutData); propertyTable = new Table(tableComposite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER); propertyTable.setHeaderVisible(true); GridData tableData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); propertyTable.setLayoutData(tableData); fillContextMenu(propertyTable); // first column - name TableColumn col1 = new TableColumn(propertyTable, SWT.NONE); col1.setText(Messages.key); // second column - data type TableColumn col2 = new TableColumn(propertyTable, SWT.NONE); col2.setText(Messages.displayName); TableColumn col3 = new TableColumn(propertyTable, SWT.NONE); col3.setText(Messages.defaultValue); // layout data for the columns final int columnWeight = 30; tableLayout.setColumnData(col1, new ColumnWeightData(columnWeight - 5, true)); tableLayout.setColumnData(col2, new ColumnWeightData(columnWeight, true)); tableLayout.setColumnData(col3, new ColumnWeightData(columnWeight - 5, true)); // tableButtonAdd = new Button(client, SWT.FLAT); tableButtonAdd.setText(Messages.add); tableButtonAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); tableButtonAdd.addSelectionListener(new ButtonSelectionListener(tableButtonAdd, propertyTable)); tableButtonEdit = new Button(client, SWT.FLAT); tableButtonEdit.setText(Messages.edit); tableButtonEdit.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); btnSelectionListener = new ButtonSelectionListener(tableButtonEdit, propertyTable); tableButtonEdit.addSelectionListener(btnSelectionListener); tableButtonRemove = new Button(client, SWT.FLAT); tableButtonRemove.setText(Messages.remove); tableButtonRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); tableButtonRemove.addSelectionListener(new ButtonSelectionListener(tableButtonRemove, propertyTable)); propertyTable.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateButtonActivation(); } private void updateButtonActivation() { if (propertyTable.getSelectionCount() > 0) { tableButtonRemove.setEnabled(true); tableButtonEdit.setEnabled(true); } else { tableButtonRemove.setEnabled(false); tableButtonEdit.setEnabled(false); } } }); propertyTable.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { TableItem[] selection = propertyTable.getSelection(); if (selection != null && selection.length > 0) { editProperty(selection); updatePropertyTable(); } } }); propertyTable.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.DEL) { TableItem[] selection = propertyTable.getSelection(); removeProperty(selection); updatePropertyTable(); } } }); } private void updateTabListContent() { String oldSelection = ""; if (groupSelection != NO_PROPERTY_TAB_SELECTION && propGroupList.getItemCount() > groupSelection) { oldSelection = propGroupList.getItem(groupSelection); } propGroupList.removeAll(); if (propertyTabMap != null) { for (String key : propertyTabMap.keySet()) { propGroupList.add(key); } String[] items = propGroupList.getItems(); java.util.Arrays.sort(items); propGroupList.setItems(items); if (propGroupList.indexOf(oldSelection) != NO_PROPERTY_TAB_SELECTION) { propGroupList.select(propGroupList.indexOf(oldSelection)); updatePropertyTable(); } else if (groupSelection == 0) { groupSelection = 1; propGroupList.setSelection(0); updateSelection(); } else { groupSelection = NO_PROPERTY_TAB_SELECTION; updateSelection(); } } } @SuppressWarnings("unchecked") private void updateSelection() { if (propGroupList.getItemCount() > 0) { if (groupSelection != NO_PROPERTY_TAB_SELECTION) { changePropertyTableActivation(true); if (groupSelection >= propGroupList.getItemCount()) { groupSelection = 0; } if (propGroupList.getItemCount() != 0 && propGroupList.getSelection().length > 0) { configGroupLabel.setText(StringUtils.format(Messages.groupConfigHeader, propGroupList.getItem(groupSelection))); Map<String, Object> propertyTabConfig = (Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0]); if (propertyTabConfig.get(CREATE_CONFIG_FILE) != null && (Boolean) propertyTabConfig.get(CREATE_CONFIG_FILE)) { createConfigButton.setSelection(true); configurationFileNameText.setEnabled(true); Map<String, Object> tabProperties = (Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0]); configurationFileNameText.setText((String) tabProperties.get(CONFIG_FILE_NAME)); } else { createConfigButton.setSelection(false); configurationFileNameText.setEnabled(false); } } updatePropertyTable(); editGroupButton.setEnabled(true); removeGroupButton.setEnabled(true); } else { editGroupButton.setEnabled(false); removeGroupButton.setEnabled(false); changePropertyTableActivation(false); configGroupLabel.setText(Messages.noConfigGroupSelected); updatePropertyTable(); } } else { editGroupButton.setEnabled(false); removeGroupButton.setEnabled(false); changePropertyTableActivation(false); configGroupLabel.setText(Messages.noConfigGroupSelected); updatePropertyTable(); } configGroupLabel.pack(); } private void updateTabList() { propGroupList.removeAll(); @SuppressWarnings("unchecked") Map<String, Object> propGroups = (Map<String, Object>) configurationMap.get(ToolIntegrationConstants.KEY_PROPERTIES); if (propGroups != null) { Set<String> keys = propGroups.keySet(); for (String groupName : keys) { propGroupList.add(groupName); } groupSelection = NO_PROPERTY_TAB_SELECTION; updateSelection(); } } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (propGroupList.getItems().length > 0 && propGroupList.getSelection().length == 0) { propGroupList.select(0); groupSelection = 0; } updateSelection(); } @SuppressWarnings("unchecked") private void updatePropertyTable() { propertyTable.removeAll(); if (propGroupList.getSelectionCount() > 0) { Map<String, Object> tabProperties = (Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0]); for (String key : tabProperties.keySet()) { if (!(key.equals(CONFIG_FILE_NAME) || key.equals(CREATE_CONFIG_FILE))) { TableItem item = new TableItem(propertyTable, SWT.None); item.setText(0, key); item.setText(1, ((Map<String, String>) tabProperties.get(key)).get(KEY_PROPERTY_DISPLAY_NAME)); item.setText(2, ((Map<String, String>) tabProperties.get(key)).get(KEY_PROPERTY_DEFAULT_VALUE)); } } } tableButtonEdit.setEnabled(propertyTable.getItemCount() != 0); tableButtonRemove.setEnabled(propertyTable.getItemCount() != 0); } private void changePropertyTableActivation(boolean enabled) { createConfigButton.setEnabled(enabled); configurationFileNameText.setEnabled(enabled); tableButtonAdd.setEnabled(enabled); tableButtonEdit.setEnabled(enabled); tableButtonRemove.setEnabled(enabled); propertyTable.setEnabled(enabled); removeGroupButton.setEnabled(enabled); createConfigButton.setSelection(false); propertyTable.clearAll(); } private java.util.List<String> getAllPropertyNames() { java.util.List<String> result = new LinkedList<String>(); for (String tabKey : propertyTabMap.keySet()) { @SuppressWarnings("unchecked") Map<String, Object> tab = (Map<String, Object>) propertyTabMap.get(tabKey); result.addAll(tab.keySet()); } return result; } @SuppressWarnings("unchecked") private java.util.List<String> getAllPropertyDisplayNames() { java.util.List<String> result = new LinkedList<String>(); for (String tabKey : propertyTabMap.keySet()) { Map<String, Object> tab = (Map<String, Object>) propertyTabMap.get(tabKey); for (String propKey : tab.keySet()) { if (!(tab.get(propKey) instanceof String || tab.get(propKey) instanceof Boolean)) { result.add(((Map<String, String>) tab.get(propKey)).get(KEY_PROPERTY_DISPLAY_NAME)); } } } return result; } /** * Modify listener for the text widget for the configuration filename. * * @author Sascha Zur */ private final class ConfigurationFilenameTextModifyListener implements ModifyListener { @SuppressWarnings("unchecked") @Override public void modifyText(ModifyEvent arg0) { if (createConfigButton.getSelection() && propGroupList.getSelection().length > 0) { Map<String, Object> propertyTabConfig = (Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0]); propertyTabConfig.put(CONFIG_FILE_NAME, configurationFileNameText.getText()); if (configurationFileNameText.getText().equals("")) { Display display = Display.getCurrent(); configurationFileNameText.setBackground(display.getSystemColor(SWT.COLOR_RED)); setMessage(Messages.configFilenameInvalid, DialogPage.ERROR); } else { Display display = Display.getCurrent(); configurationFileNameText.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); setMessage(null, DialogPage.NONE); } } } } /** * Listener for the checkbox if a config file should be created. * * @author Sascha Zur */ private final class CreateConfigSelectionListener implements SelectionListener { @SuppressWarnings("unchecked") @Override public void widgetSelected(SelectionEvent arg0) { Map<String, Object> propertyTabConfig = (Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0]); propertyTabConfig.put(CREATE_CONFIG_FILE, createConfigButton.getSelection()); if (propertyTabConfig.get(CONFIG_FILE_NAME) == null) { propertyTabConfig.put(CONFIG_FILE_NAME, propGroupList.getSelection()[0] + STANDARD_SUFFIX); } updateSelection(); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } } /** * Listener for the edit button of the tab name list. * * @author Sascha Zur */ private final class EditGroupButtonListener implements SelectionListener { @SuppressWarnings("unchecked") @Override public void widgetSelected(SelectionEvent arg0) { if (propGroupList.getSelection().length == 1) { WizardEditGroupTabNameDialog wegntd = new WizardEditGroupTabNameDialog(null, propGroupList.getSelection()[0]); int returnCode = wegntd.open(); if (returnCode == Dialog.OK) { String newName = wegntd.getNewName(); Map<String, Object> oldConfig = (Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0]); if (configurationFileNameText.getText().equals(propGroupList.getSelection()[0] + ".conf")) { configurationFileNameText.setText(newName + ".conf"); } if (!newName.equals(propGroupList.getSelection()[0])) { propertyTabMap.remove(propGroupList.getSelection()[0]); propertyTabMap.put(newName, oldConfig); } updateTabListContent(); propGroupList.setSelection(propGroupList.indexOf(newName)); groupSelection = propGroupList.indexOf(newName); updateSelection(); updatePropertyTable(); } } } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } } /** * Listener for the remove button of the tab name list. * * @author Sascha Zur */ private final class RemoveGroupButtonListener implements SelectionListener { @Override public void widgetSelected(SelectionEvent arg0) { if (propGroupList.getSelection().length == 1) { if (propertyTabMap.containsKey(propGroupList.getSelection()[0])) { propertyTabMap.remove(propGroupList.getSelection()[0]); updateTabListContent(); } } } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } } /** * Listener for the add button of the tab name list. * * @author Sascha Zur */ private final class AddGroupButtonListener implements SelectionListener { @Override public void widgetSelected(SelectionEvent arg0) { String newTabName = groupNameText.getText(); if (propertyTabMap == null) { propertyTabMap = new HashMap<String, Object>(); } if (!newTabName.isEmpty() && !propertyTabMap.containsKey(newTabName)) { propertyTabMap.put(newTabName, new HashMap<String, Object>()); groupNameText.setText(""); Display display = Display.getCurrent(); groupNameText.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); setMessage(null, DialogPage.NONE); updateTabListContent(); } else { Display display = Display.getCurrent(); groupNameText.setBackground(display.getSystemColor(SWT.COLOR_YELLOW)); if (!newTabName.isEmpty()) { setMessage(Messages.propTabNameInvalid, DialogPage.WARNING); } else { setMessage(Messages.propTabNameEmpty, DialogPage.WARNING); } } } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } } /** * {@link SelectionListener} for the property tab list. * * @author Sascha Zur */ private final class PropertyGroupTableListener implements SelectionListener { private final List tabsList; private PropertyGroupTableListener(List tabsList) { this.tabsList = tabsList; } @Override public void widgetSelected(SelectionEvent event) { int[] selectedItems = tabsList.getSelectionIndices(); if (selectedItems.length == 1) { groupSelection = selectedItems[0]; } updateSelection(); } @Override public void widgetDefaultSelected(SelectionEvent event) { widgetSelected(event); } } /** * Listener for the table buttons. * * @author Sascha Zur */ private class ButtonSelectionListener implements SelectionListener { private final Button button; private final Table selectionTable; ButtonSelectionListener(Button button, Table table) { this.button = button; this.selectionTable = table; } @Override public void widgetSelected(SelectionEvent arg0) { TableItem[] selection = selectionTable.getSelection(); if (button.equals(tableButtonAdd)) { addProperty(); } else if (button.equals(tableButtonEdit)) { if (selection != null && selection.length > 0) { editProperty(selection); } } else if (button.equals(tableButtonRemove)) { removeProperty(selection); } updatePropertyTable(); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } } /** * Sets a new configurationMap and updates all fields. * * @param newConfigurationMap new map */ @Override @SuppressWarnings("unchecked") public void setConfigMap(Map<String, Object> newConfigurationMap) { configurationMap = newConfigurationMap; propertyTabMap = (Map<String, Object>) newConfigurationMap.get(ToolIntegrationConstants.KEY_PROPERTIES); if (propertyTabMap == null) { propertyTabMap = new HashMap<String, Object>(); configurationMap.put(ToolIntegrationConstants.KEY_PROPERTIES, propertyTabMap); propertyTabMap.put(DEFAULT_CONFIGURATION_GROUP, new HashMap<String, Object>()); } updatePageValues(); } private void updatePageValues() { updateTabList(); } @Override public void performHelp() { super.performHelp(); IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem(); helpSystem.displayHelp(HELP_CONTEXT_ID); } @Override public void updatePage() { // TODO Auto-generated method stub } @Override protected void onAddClicked() { addProperty(); updatePropertyTable(); } @Override protected void onEditClicked() { TableItem[] selection = propertyTable.getSelection(); editProperty(selection); } @Override protected void onRemoveClicked() { TableItem[] selection = propertyTable.getSelection(); removeProperty(selection); updatePropertyTable(); } @SuppressWarnings("unchecked") private void editProperty(TableItem[] selection) { Map<String, String> propertyConfigCopy = new HashMap<String, String>(); if (propGroupList.getSelection().length > 0 && selection != null && selection.length > 0) { propertyConfigCopy.putAll((Map<String, String>) ((Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0])) .get(selection[0].getText())); String oldpropertyConfig = selection[0].getText(); WizardPropertyEditDialog wped = new WizardPropertyEditDialog(null, Messages.edit + " " + Messages.property, propertyConfigCopy, getAllPropertyNames(), getAllPropertyDisplayNames()); int exit = wped.open(); if (exit == Dialog.OK) { ((Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0])).remove(oldpropertyConfig); ((Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0])).put( wped.getConfig().get(KEY_PROPERTY_KEY), wped.getConfig()); } } } @SuppressWarnings("unchecked") private void removeProperty(TableItem[] selection) { if (selection != null && selection.length > 0) { Map<String, String> propertyConfig = (Map<String, String>) ((Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0])).get(selection[0] .getText()); ((Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0])) .remove(propertyConfig.get(KEY_PROPERTY_KEY)); } } @SuppressWarnings("unchecked") private void addProperty() { WizardPropertyEditDialog wped = new WizardPropertyEditDialog(null, Messages.add + " " + Messages.property, new HashMap<String, String>(), getAllPropertyNames(), getAllPropertyDisplayNames()); int exit = wped.open(); if (exit == Dialog.OK) { ((Map<String, Object>) propertyTabMap.get(propGroupList.getSelection()[0])).put(wped.getConfig().get(KEY_PROPERTY_KEY), wped.getConfig()); } } }