/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.wizards.toolintegration; import java.io.File; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; 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.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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.help.IWorkbenchHelpSystem; import de.rcenvironment.core.component.integration.ToolIntegrationConstants; import de.rcenvironment.core.component.integration.ToolIntegrationContext; import de.rcenvironment.core.component.integration.ToolIntegrationService; import de.rcenvironment.core.gui.wizards.toolintegration.api.ToolIntegrationWizardPage; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.incubator.ServiceRegistry; import de.rcenvironment.core.utils.incubator.ServiceRegistryAccess; /** * @author Sascha Zur */ public class ToolConfigurationPage extends ToolIntegrationWizardPage { private static final String HELP_CONTEXT_ID = "de.rcenvironment.core.gui.wizard.toolintegration.integration_launchsettings"; private static final int INDENT_KEEP_ON_ERROR_BUTTON = 20; private static final int TOOL_CONFIG_TABLE_HEIGHT = 100; private Table toolConfigTable; private Button tableButtonAdd; private Button tableButtonEdit; private Button tableButtonRemove; private Map<String, Object> configurationMap; private Button iterationDirectoryCheckbox; private Button copyNeverButton; private Button copyOnceButton; private Button copyAlwaysButton; private Button deleteTempDirNeverCheckbox; private Button deleteTempDirOnceCheckbox; private Button deleteTempDirAlwaysCheckbox; private Button deleteTempDirNotOnErrorIterationCheckbox; private Button publishCheckbox; private Button deleteTempDirNotOnErrorOnceCheckbox; private ButtonSelectionListener btnButtonSelectionListener; protected ToolConfigurationPage(String pageName, Map<String, Object> configurationMap) { super(pageName); setTitle(pageName); setDescription(Messages.toolConfigPageDescription); this.configurationMap = configurationMap; } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 2; GridData g = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); container.setLayoutData(g); createTable(container); Composite checkboxComposite = new Composite(container, SWT.NONE); checkboxComposite.setLayout(new GridLayout(1, false)); GridData iterationCheckboxCompositeData = new GridData(); iterationCheckboxCompositeData.horizontalSpan = 2; checkboxComposite.setLayoutData(iterationCheckboxCompositeData); publishCheckbox = createSingleCheckboxes(checkboxComposite, Messages.publishComponentCheckbox, ToolIntegrationConstants.TEMP_KEY_PUBLISH_COMPONENT); iterationDirectoryCheckbox = createSingleCheckboxes(checkboxComposite, Messages.useIterationDirectoriesText, ToolIntegrationConstants.KEY_TOOL_USE_ITERATION_DIRECTORIES); Composite groupsComposite = new Composite(container, SWT.NONE); groupsComposite.setLayout(new GridLayout(2, false)); GridData groupCompositeData = new GridData(); groupCompositeData.horizontalSpan = 2; groupsComposite.setLayoutData(groupCompositeData); Group copyToolBehaviorGroup = new Group(groupsComposite, SWT.NONE); copyToolBehaviorGroup.setText(Messages.copyGroupTitle); copyToolBehaviorGroup.setLayout(new GridLayout(1, false)); copyToolBehaviorGroup.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL)); copyNeverButton = createCopyRadioButton(copyToolBehaviorGroup, Messages.copyNever, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_NEVER); copyNeverButton.setSelection(true); copyOnceButton = createCopyRadioButton(copyToolBehaviorGroup, Messages.copyOnce, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ONCE); copyAlwaysButton = createCopyRadioButton(copyToolBehaviorGroup, Messages.copyAlways, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ALWAYS); Group deleteTempDirBehaviorGroup = new Group(groupsComposite, SWT.NONE); deleteTempDirBehaviorGroup.setText(Messages.deleteGroupTitle); deleteTempDirBehaviorGroup.setLayout(new GridLayout(1, false)); deleteTempDirBehaviorGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); deleteTempDirNeverCheckbox = createDeleteTempDirectoryCheckbox( deleteTempDirBehaviorGroup, Messages.deleteNever, ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER); deleteTempDirOnceCheckbox = createDeleteTempDirectoryCheckbox( deleteTempDirBehaviorGroup, Messages.deleteOnce, ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE); deleteTempDirOnceCheckbox.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { deleteTempDirNotOnErrorOnceCheckbox.setEnabled(deleteTempDirOnceCheckbox.getSelection()); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } }); deleteTempDirNotOnErrorOnceCheckbox = createDeleteTempDirectoryCheckbox(deleteTempDirBehaviorGroup, Messages.deleteNotOnErrorOnce, ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ONCE); GridData keepOnErrorOnceData = new GridData(); keepOnErrorOnceData.horizontalIndent = INDENT_KEEP_ON_ERROR_BUTTON; deleteTempDirNotOnErrorOnceCheckbox.setLayoutData(keepOnErrorOnceData); deleteTempDirAlwaysCheckbox = createDeleteTempDirectoryCheckbox( deleteTempDirBehaviorGroup, Messages.deleteAlways, ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS); deleteTempDirAlwaysCheckbox.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { deleteTempDirNotOnErrorIterationCheckbox.setEnabled(deleteTempDirAlwaysCheckbox.getSelection()); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } }); deleteTempDirNotOnErrorIterationCheckbox = createDeleteTempDirectoryCheckbox(deleteTempDirBehaviorGroup, Messages.deleteNotOnErrorIteration, ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ITERATION); GridData keepOnErrorIterationData = new GridData(); keepOnErrorIterationData.horizontalIndent = INDENT_KEEP_ON_ERROR_BUTTON; deleteTempDirNotOnErrorIterationCheckbox.setLayoutData(keepOnErrorIterationData); new Label(deleteTempDirBehaviorGroup, SWT.NONE).setText(Messages.deleteToolNote); updateCheckBoxes(); updateButtonActivation(); setPageComplete(false); setControl(container); PlatformUI.getWorkbench().getHelpSystem().setHelp(this.getControl(), HELP_CONTEXT_ID); updatePageComplete(); } private Button createCopyRadioButton(Composite copyToolBehaviorGroup, String text, final String key) { Button newButton = new Button(copyToolBehaviorGroup, SWT.RADIO); newButton.setText(text); newButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { configurationMap.put(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR, key); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } }); return newButton; } private Button createDeleteTempDirectoryCheckbox(Composite container, String text, final String key) { Button checkBox = new Button(container, SWT.CHECK); checkBox.setText(text); GridData checkBoxData = new GridData(); checkBox.setLayoutData(checkBoxData); checkBox.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { configurationMap.put(key, ((Button) arg0.getSource()).getSelection()); updatePageComplete(); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } }); return checkBox; } private Button createSingleCheckboxes(Composite container, String text, final String key) { Button checkBox = new Button(container, SWT.CHECK); checkBox.setText(text); GridData checkBoxData = new GridData(); checkBox.setLayoutData(checkBoxData); checkBox.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { configurationMap.put(key, ((Button) arg0.getSource()).getSelection()); if (arg0.getSource().equals(iterationDirectoryCheckbox)) { if (copyAlwaysButton.getSelection() && !((Button) arg0.getSource()).getSelection()) { copyAlwaysButton.setSelection(false); copyOnceButton.setSelection(true); configurationMap.put(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ONCE); } if (deleteTempDirAlwaysCheckbox.getSelection() && !((Button) arg0.getSource()).getSelection()) { deleteTempDirAlwaysCheckbox.setSelection(false); deleteTempDirNotOnErrorIterationCheckbox.setSelection(false); configurationMap.put(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS, false); } copyAlwaysButton.setEnabled(((Button) arg0.getSource()).getSelection()); deleteTempDirAlwaysCheckbox.setEnabled(((Button) arg0.getSource()).getSelection()); deleteTempDirNotOnErrorIterationCheckbox.setEnabled(((Button) arg0.getSource()).getSelection() && deleteTempDirAlwaysCheckbox.isEnabled() && deleteTempDirAlwaysCheckbox.getSelection()); } } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } }); return checkBox; } private void createTable(Composite client) { final Composite tableComposite = new Composite(client, SWT.NONE); TableColumnLayout tableLayout = new TableColumnLayout(); tableComposite.setLayout(tableLayout); toolConfigTable = new Table(tableComposite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER); toolConfigTable.setHeaderVisible(true); GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 4); tableLayoutData.heightHint = TOOL_CONFIG_TABLE_HEIGHT; tableComposite.setLayoutData(tableLayoutData); // first column - name TableColumn col1 = new TableColumn(toolConfigTable, SWT.NONE); col1.setText(Messages.host); // second column - data type TableColumn col2 = new TableColumn(toolConfigTable, SWT.NONE); col2.setText(Messages.toolDirectory); TableColumn col3 = new TableColumn(toolConfigTable, SWT.NONE); col3.setText(Messages.version); TableColumn col4 = new TableColumn(toolConfigTable, SWT.NONE); col4.setText(Messages.rootWorkingDir); // layout data for the columns final int columnWeight = 30; tableLayout.setColumnData(col1, new ColumnWeightData(columnWeight, true)); tableLayout.setColumnData(col2, new ColumnWeightData(columnWeight, true)); tableLayout.setColumnData(col3, new ColumnWeightData(columnWeight, true)); tableLayout.setColumnData(col4, new ColumnWeightData(columnWeight, true)); // tableButtonAdd = new Button(client, SWT.FLAT); tableButtonAdd.setText(Messages.add); tableButtonAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); btnButtonSelectionListener = new ButtonSelectionListener(tableButtonAdd, toolConfigTable); tableButtonAdd.addSelectionListener(btnButtonSelectionListener); tableButtonEdit = new Button(client, SWT.FLAT); tableButtonEdit.setText(Messages.edit); tableButtonEdit.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); tableButtonEdit.addSelectionListener(new ButtonSelectionListener(tableButtonEdit, toolConfigTable)); 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, toolConfigTable)); fillContextMenu(toolConfigTable); toolConfigTable.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateButtonActivation(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); toolConfigTable.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { TableItem[] selection = toolConfigTable.getSelection(); editSelection(selection); } }); toolConfigTable.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.DEL) { TableItem[] selection = toolConfigTable.getSelection(); removeSelection(selection); updateTable(); updateButtonActivation(); } } }); } @SuppressWarnings("unchecked") private void updatePageComplete() { String errorMessage = ""; boolean isPageComplete = true; if (!(((List<Map<String, String>>) configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS)) != null && ((List<Map<String, String>>) configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS)).size() != 0)) { errorMessage += Messages.toolExecutionConfigurationNeeded + "\n"; isPageComplete &= false; } else if (!deleteTempDirAlwaysCheckbox.getSelection() && !deleteTempDirNeverCheckbox.getSelection() && !deleteTempDirOnceCheckbox.getSelection()) { errorMessage += Messages.tempDirBehaviourNeeded; isPageComplete &= false; } if (!isPageComplete) { setMessage(errorMessage, DialogPage.ERROR); } else { if (toolConfigTable.getItemCount() > 0) { String error = StringUtils.checkAgainstCommonInputRules(toolConfigTable.getItem(0).getText(2)); if (error != null) { setMessage("Version not correct to use as a Remote Access Tool:\n " + error, DialogPage.WARNING); } else { setMessage("Currently, only one launch setting is possible", DialogPage.WARNING); } } else { setMessage(errorMessage, DialogPage.NONE); } } setPageComplete(isPageComplete); } private void updateCheckBoxes() { if (configurationMap.get(ToolIntegrationConstants.TEMP_KEY_PUBLISH_COMPONENT) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.TEMP_KEY_PUBLISH_COMPONENT)) { publishCheckbox.setSelection(true); } else { publishCheckbox.setSelection(false); } if (configurationMap.get(ToolIntegrationConstants.KEY_TOOL_USE_ITERATION_DIRECTORIES) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.KEY_TOOL_USE_ITERATION_DIRECTORIES)) { iterationDirectoryCheckbox.setSelection(true); copyAlwaysButton.setEnabled(true); deleteTempDirAlwaysCheckbox.setEnabled(true); } else { copyAlwaysButton.setEnabled(false); copyAlwaysButton.setSelection(false); deleteTempDirAlwaysCheckbox.setEnabled(false); iterationDirectoryCheckbox.setSelection(false); } ToolIntegrationContext context = ((ToolIntegrationWizard) getWizard()).getCurrentContext(); copyNeverButton.setEnabled(true); copyOnceButton.setEnabled(true); copyAlwaysButton.setEnabled(iterationDirectoryCheckbox.getSelection()); if (context.getDisabledIntegrationKeys() != null) { for (String key : context.getDisabledIntegrationKeys()) { if (ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_NEVER.equals(key)) { copyNeverButton.setEnabled(false); } if (ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ONCE.equals(key)) { copyOnceButton.setEnabled(false); } if (ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ALWAYS.equals(key)) { copyAlwaysButton.setEnabled(false); } } } if (configurationMap.get(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR) != null) { if (((String) configurationMap.get(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR)) .equals(ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_NEVER)) { copyNeverButton.setSelection(true); copyOnceButton.setSelection(false); copyAlwaysButton.setSelection(false); } else if (((String) configurationMap.get(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR)) .equals(ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ONCE)) { copyOnceButton.setSelection(true); copyNeverButton.setSelection(false); copyAlwaysButton.setSelection(false); } else if (((String) configurationMap.get(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR)) .equals(ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ALWAYS)) { if (copyAlwaysButton.isEnabled()) { copyAlwaysButton.setSelection(true); copyNeverButton.setSelection(false); copyOnceButton.setSelection(false); } else { copyAlwaysButton.setSelection(false); copyNeverButton.setSelection(false); copyOnceButton.setSelection(true); } } } else { if (copyNeverButton.isEnabled()) { copyAlwaysButton.setSelection(false); copyOnceButton.setSelection(false); copyNeverButton.setSelection(true); configurationMap.put(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_NEVER); } else if (copyAlwaysButton.isEnabled()) { copyAlwaysButton.setSelection(true); copyNeverButton.setSelection(false); copyOnceButton.setSelection(false); configurationMap.put(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ALWAYS); } else { configurationMap.put(ToolIntegrationConstants.KEY_COPY_TOOL_BEHAVIOUR, ToolIntegrationConstants.VALUE_COPY_TOOL_BEHAVIOUR_ONCE); } } if (!copyNeverButton.isEnabled() && copyNeverButton.getSelection()) { copyOnceButton.setSelection(true); copyNeverButton.setSelection(false); } if (!copyOnceButton.isEnabled() && copyOnceButton.getSelection()) { copyNeverButton.setSelection(true); copyOnceButton.setSelection(false); } if (configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER)) { deleteTempDirNeverCheckbox.setSelection(true); } else { deleteTempDirNeverCheckbox.setSelection(false); } if (configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE)) { deleteTempDirOnceCheckbox.setSelection(true); } else { deleteTempDirOnceCheckbox.setSelection(false); } if (configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS)) { deleteTempDirAlwaysCheckbox.setSelection(true); } else { deleteTempDirAlwaysCheckbox.setSelection(false); } if (configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ITERATION) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ITERATION)) { deleteTempDirNotOnErrorIterationCheckbox.setSelection(true); } if (configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ONCE) != null && (Boolean) configurationMap.get(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ONCE)) { deleteTempDirNotOnErrorOnceCheckbox.setSelection(true); } deleteTempDirNotOnErrorIterationCheckbox.setEnabled(deleteTempDirAlwaysCheckbox.isEnabled() && deleteTempDirAlwaysCheckbox.getSelection()); deleteTempDirNotOnErrorOnceCheckbox.setEnabled(deleteTempDirOnceCheckbox.getSelection()); deleteTempDirNotOnErrorOnceCheckbox.setSelection(deleteTempDirNotOnErrorOnceCheckbox.getSelection() && deleteTempDirNotOnErrorOnceCheckbox.isEnabled()); deleteTempDirNotOnErrorIterationCheckbox.setSelection(deleteTempDirNotOnErrorIterationCheckbox.getSelection() && deleteTempDirNotOnErrorIterationCheckbox.isEnabled() && iterationDirectoryCheckbox.getSelection()); } @SuppressWarnings("unchecked") private void updateTable() { toolConfigTable.removeAll(); if (configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS) != null) { List<Map<String, String>> configs = (List<Map<String, String>>) configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS); for (Map<String, String> currentConfig : configs) { TableItem item = new TableItem(toolConfigTable, SWT.None); item.setText(0, currentConfig.get(ToolIntegrationConstants.KEY_HOST)); item.setText(1, currentConfig.get(ToolIntegrationConstants.KEY_TOOL_DIRECTORY)); item.setText(2, currentConfig.get(ToolIntegrationConstants.KEY_VERSION)); String rootDir = currentConfig.get(ToolIntegrationConstants.KEY_ROOT_WORKING_DIRECTORY); if (rootDir == null || rootDir.isEmpty()) { item.setText(3, "RCE temp directory"); } else { item.setText(3, currentConfig.get(ToolIntegrationConstants.KEY_ROOT_WORKING_DIRECTORY)); } } } updatePageComplete(); } private void updateButtonActivation() { boolean hasOneConfig = toolConfigTable.getItemCount() > 0; tableButtonAdd.setEnabled(!hasOneConfig); boolean enabled = (toolConfigTable.getSelection() != null && toolConfigTable.getSelectionCount() > 0 && toolConfigTable.getItemCount() != 0); tableButtonEdit.setEnabled(enabled); tableButtonRemove.setEnabled(enabled); itemAdd.setEnabled(!hasOneConfig); itemEdit.setEnabled(enabled); itemRemove.setEnabled(enabled); } /** * Listener for the table buttons. * * @author Sascha Zur */ private class ButtonSelectionListener implements SelectionListener { private final Button button; private final Table table; ButtonSelectionListener(Button button, Table table) { this.button = button; this.table = table; } @Override public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } @Override public void widgetSelected(SelectionEvent arg0) { TableItem[] selection = table.getSelection(); if (button.equals(tableButtonAdd)) { addSelection(); } else if (button.equals(tableButtonEdit)) { editSelection(selection); } else if (button.equals(tableButtonRemove)) { removeSelection(selection); } updateTable(); updateButtonActivation(); } } /** * Sets a new configurationMap and updates all fields. * * @param newConfigurationMap new map */ @Override public void setConfigMap(Map<String, Object> newConfigurationMap) { configurationMap = newConfigurationMap; ServiceRegistryAccess serviceRegistryAccess = ServiceRegistry.createAccessFor(this); ToolIntegrationService integrationService = serviceRegistryAccess.getService(ToolIntegrationService.class); Set<String> published = integrationService.getPublishedComponents(); for (String path : published) { if (path.substring(path.lastIndexOf(File.separator) + 1).equals(configurationMap.get(ToolIntegrationConstants.KEY_TOOL_NAME))) { configurationMap.put(ToolIntegrationConstants.TEMP_KEY_PUBLISH_COMPONENT, true); } } updatePageValues(); } private void updatePageValues() { updateCheckBoxes(); updateTable(); updateButtonActivation(); updatePageComplete(); } @Override public void performHelp() { super.performHelp(); IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem(); helpSystem.displayHelp(HELP_CONTEXT_ID); } @SuppressWarnings("unchecked") private void addSelection() { List<Map<String, String>> configs = new LinkedList<Map<String, String>>(); if (configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS) != null) { configs = (List<Map<String, String>>) configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS); } else { configurationMap.put(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS, configs); } WizardToolConfigurationDialog wtcd = new WizardToolConfigurationDialog(null, Messages.addDiaglogTitle, configs, ((ToolIntegrationWizard) getWizard()).getCurrentContext()); int exit = wtcd.open(); if (exit == 0) { configs.add(wtcd.getConfig()); } } private void editSelection(TableItem[] selection) { if (selection != null && selection.length > 0) { @SuppressWarnings("unchecked") List<Map<String, String>> configs = (List<Map<String, String>>) configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS); Map<String, String> selectedConfig = null; for (Map<String, String> currentConfig : configs) { if (currentConfig.get(ToolIntegrationConstants.KEY_HOST).equals(selection[0].getText(0)) && currentConfig.get(ToolIntegrationConstants.KEY_TOOL_DIRECTORY).equals(selection[0].getText(1))) { selectedConfig = currentConfig; } } Map<String, String> selectedConfigCopy = new HashMap<String, String>(); selectedConfigCopy.putAll(selectedConfig); WizardToolConfigurationDialog wtcd = new WizardToolConfigurationDialog(null, Messages.editDiaglogTitle, selectedConfigCopy, configs, ((ToolIntegrationWizard) getWizard()).getCurrentContext(), true); int exit = wtcd.open(); if (exit == 0) { configs.remove(selectedConfig); configs.add(wtcd.getConfig()); configurationMap.remove(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS); configurationMap.put(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS, configs); updateTable(); } } } @SuppressWarnings("unchecked") private void removeSelection(TableItem[] selection) { if (selection != null && selection.length > 0) { List<Map<String, String>> configs = (List<Map<String, String>>) configurationMap.get(ToolIntegrationConstants.KEY_LAUNCH_SETTINGS); Map<String, String> selectedConfig = null; for (Map<String, String> currentConfig : configs) { if (currentConfig.get(ToolIntegrationConstants.KEY_HOST).equals(selection[0].getText(0)) && currentConfig.get(ToolIntegrationConstants.KEY_TOOL_DIRECTORY).equals(selection[0].getText(1))) { selectedConfig = currentConfig; } } configs.remove(selectedConfig); } } @Override public void updatePage() {} @Override protected void onAddClicked() { addSelection(); updateTable(); updateButtonActivation(); } @Override protected void onEditClicked() { TableItem[] selection = toolConfigTable.getSelection(); editSelection(selection); updateTable(); updateButtonActivation(); } @Override protected void onRemoveClicked() { TableItem[] selection = toolConfigTable.getSelection(); removeSelection(selection); updateTable(); updateButtonActivation(); } }