/******************************************************************************* * Copyright (c) 2016 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.windup.ui.internal.launch; import static org.jboss.tools.windup.ui.internal.Messages.Options; import java.util.List; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.internal.ui.SWTFactory; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.PlatformUI; import org.jboss.tools.windup.core.services.WindupOptionsService; import org.jboss.tools.windup.model.domain.ModelService; import org.jboss.tools.windup.ui.WindupUIPlugin; import org.jboss.tools.windup.ui.internal.Messages; import org.jboss.tools.windup.windup.ConfigurationElement; import org.jboss.tools.windup.windup.Pair; import org.jboss.tools.windup.windup.WindupFactory; import org.jboss.windup.bootstrap.help.OptionDescription; import com.google.common.collect.Lists; /** * Tab for configuration Windup options. */ @SuppressWarnings("restriction") public class OptionsTab extends AbstractLaunchConfigurationTab { private static final String ID = "org.jboss.tools.windup.ui.launch.OptionsTab"; //$NON-NLS-1$ private ModelService modelService; private ConfigurationElement configuration; private Button generateReportButton; private TableViewer optionsViewer; // TODO: We probably want to use this once we start using an external Windup launcher. private WindupOptionsService optionsService; public OptionsTab(ModelService modelService, WindupOptionsService optionsService) { this.modelService = modelService; this.optionsService = optionsService; } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().margins(5, 5).applyTo(container); GridDataFactory.fillDefaults().grab(true, true).applyTo(container); createReportGroup(container); createOptionsGroup(container); super.setControl(container); PlatformUI.getWorkbench().getHelpSystem().setHelp(container, ID); } private void createReportGroup(Composite parent) { Group group = SWTFactory.createGroup(parent, Messages.windupReport+":", 1, 1, GridData.FILL_HORIZONTAL); GridDataFactory.fillDefaults().grab(true, false).applyTo(group); generateReportButton = SWTFactory.createCheckButton(group, Messages.windupGenerateReport, null, true, GridData.GRAB_HORIZONTAL); GridDataFactory.fillDefaults().grab(true, false).applyTo(generateReportButton); generateReportButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { configuration.setGenerateReport(generateReportButton.getSelection()); } }); } private void createOptionsGroup(Composite parent) { Group group = SWTFactory.createGroup(parent, Messages.Options+":", 2, 1, GridData.FILL_BOTH); GridDataFactory.fillDefaults().grab(true, true).hint(70, 100).applyTo(group); optionsViewer = new TableViewer(group, SWT.MULTI|SWT.BORDER|SWT.FULL_SELECTION|SWT.H_SCROLL|SWT.V_SCROLL); optionsViewer.getTable().setHeaderVisible(true); optionsViewer.getTable().setLinesVisible(true); GridDataFactory.fillDefaults().grab(true, true).applyTo(optionsViewer.getTable()); optionsViewer.setContentProvider(ArrayContentProvider.getInstance()); TableViewerColumn column = new TableViewerColumn(optionsViewer, SWT.NONE); column.getColumn().setResizable(true); column.getColumn().setMoveable(true); column.getColumn().setWidth(200); column.getColumn().setText(Messages.OPTION); column.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { return ((Pair)element).getKey(); } }); column = new TableViewerColumn(optionsViewer, SWT.NONE); column.getColumn().setResizable(true); column.getColumn().setMoveable(true); column.getColumn().setWidth(200); column.getColumn().setText(Messages.VALUE); column.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { return ((Pair)element).getValue(); } }); createOptionsButtonBar(group); } private void createOptionsButtonBar(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().margins(0, 0).spacing(0, 0).applyTo(container); GridDataFactory.fillDefaults().grab(false, true).applyTo(container); Button addButton = new Button(container, SWT.PUSH); addButton.setText(Messages.windupAdd); GridDataFactory.fillDefaults().grab(true, false).applyTo(addButton); addButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { OptionsDialog dialog = new OptionsDialog(parent.getShell(), modelService, optionsService, configuration); if (dialog.open() == IDialogConstants.OK_ID) { OptionDescription option = dialog.getSelectedOption(); String value = dialog.getSelectedOptionValue(); if (!value.isEmpty()) { Pair pair = WindupFactory.eINSTANCE.createPair(); pair.setKey(option.getName()); pair.setValue(value); configuration.getOptions().add(pair); } reloadOptions(); } } }); Button removeButton = new Button(container, SWT.PUSH); removeButton.setText(Messages.windupRemove); GridDataFactory.fillDefaults().grab(true, false).applyTo(removeButton); removeButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { StructuredSelection ss = (StructuredSelection)optionsViewer.getSelection(); if (!ss.isEmpty()) { @SuppressWarnings("unchecked") List<Pair> options = (List<Pair>)ss.toList(); configuration.getOptions().removeAll(options); reloadOptions(); } } }); } private void reload() { reloadReportGroup(); reloadOptions(); } private void reloadReportGroup() { if (generateReportButton != null) { generateReportButton.setSelection(configuration.isGenerateReport()); } } private void reloadOptions() { if (optionsViewer != null) { optionsViewer.setInput(Lists.newArrayList(configuration.getOptions())); } } @Override public void setDefaults(ILaunchConfigurationWorkingCopy launchConfig) { initializeConfiguration(launchConfig); } @Override public void performApply(ILaunchConfigurationWorkingCopy launchConfig) { configuration.setName(launchConfig.getName()); } @Override public String getName() { return Options; } @Override public Image getImage() { return WindupUIPlugin.getDefault().getImageRegistry().get(WindupUIPlugin.IMG_OPTIONS_TAB); } @Override public boolean isValid(ILaunchConfiguration launchConfig) { return true; } @Override public void initializeFrom(ILaunchConfiguration launchConfig) { initializeConfiguration(launchConfig); } private void initializeConfiguration(ILaunchConfiguration launchConfig) { this.configuration = modelService.findConfiguration(launchConfig.getName()); if (configuration == null) { this.configuration = modelService.createConfiguration(launchConfig.getName()); } reload(); } }