blob: 340eb33cd3629b83b744854e9f637cafc78ba0ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*/
package org.eclipse.jdt.internal.junit.launcher;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
import org.eclipse.jdt.internal.junit.util.LayoutUtil;
import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.TextBoxDialogField;
public class JUnitLaunchIncludeExcludeTagsDialog extends StatusDialog {
private SelectionButtonDialogField fHasIncludeTags;
private SelectionButtonDialogField fHasExcludeTags;
private TextBoxDialogField fIncludeTags;
private TextBoxDialogField fExcludeTags;
private ILaunchConfiguration fLaunchConfiguration;
private static final String EMPTY_STRING= ""; //$NON-NLS-1$
IDialogFieldListener fListener= this::doDialogFieldChanged;
public JUnitLaunchIncludeExcludeTagsDialog(Shell parent, ILaunchConfiguration config) {
super(parent);
fLaunchConfiguration= config;
setTitle(JUnitMessages.JUnitLaunchConfigurationTab_addincludeexcludetagdialog_title);
createIncludeTagGroup();
createExcludeTagGroup();
setHelpAvailable(false);
setShellStyle(getShellStyle() | SWT.RESIZE);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite= (Composite) super.createDialogArea(parent);
Composite inner= new Composite(composite, SWT.NONE);
inner.setFont(composite.getFont());
GridLayout layout= new GridLayout();
layout.marginHeight= 0;
layout.marginWidth= 0;
layout.numColumns= 1;
inner.setLayout(layout);
inner.setLayoutData(new GridData(GridData.FILL_BOTH));
fHasIncludeTags.doFillIntoGrid(inner, 1);
fIncludeTags.doFillIntoGrid(inner, 2);
LayoutUtil.setHorizontalIndent(fIncludeTags.getLabelControl(null));
Text includeTagControl= fIncludeTags.getTextControl(null);
LayoutUtil.setHorizontalIndent(includeTagControl);
LayoutUtil.setHorizontalGrabbing(includeTagControl);
LayoutUtil.setWidthHint(fIncludeTags.getLabelControl(null), convertWidthInCharsToPixels(50));
LayoutUtil.setVerticalGrabbing(includeTagControl);
LayoutUtil.setHeightHint(includeTagControl, convertHeightInCharsToPixels(3));
fHasExcludeTags.doFillIntoGrid(inner, 1);
fExcludeTags.doFillIntoGrid(inner, 2);
LayoutUtil.setHorizontalIndent(fExcludeTags.getLabelControl(null));
Text excludeTagsControl= fExcludeTags.getTextControl(null);
LayoutUtil.setHorizontalIndent(excludeTagsControl);
LayoutUtil.setHorizontalGrabbing(excludeTagsControl);
LayoutUtil.setWidthHint(fExcludeTags.getLabelControl(null), convertWidthInCharsToPixels(50));
LayoutUtil.setVerticalGrabbing(excludeTagsControl);
LayoutUtil.setHeightHint(excludeTagsControl, convertHeightInCharsToPixels(3));
applyDialogFont(composite);
return composite;
}
private String getCommaSeperatedText(String input) {
if (input.isEmpty())
return EMPTY_STRING;
StringBuilder buf= new StringBuilder();
String[] strings= input.split(System.lineSeparator());
for (int i= 0; i < strings.length; i++) {
if (i > 0)
buf.append(',');
buf.append(strings[i]);
}
return buf.toString();
}
private String getLineSeperatedText(String input) {
if (input.isEmpty())
return EMPTY_STRING;
StringBuilder buf= new StringBuilder();
String[] strings= input.split(","); //$NON-NLS-1$
for (int i= 0; i < strings.length; i++) {
if (i > 0)
buf.append(System.lineSeparator());
buf.append(strings[i]);
}
return buf.toString();
}
public String getIncludeTags() {
return getCommaSeperatedText(fIncludeTags.getText());
}
public String getExcludeTags() {
return getCommaSeperatedText(fExcludeTags.getText());
}
public boolean hasIncludeTags() {
return fHasIncludeTags.isSelected();
}
public boolean hasExcludeTags() {
return fHasExcludeTags.isSelected();
}
private void createIncludeTagGroup() {
fHasIncludeTags= new SelectionButtonDialogField(SWT.CHECK);
fHasIncludeTags.setDialogFieldListener(fListener);
fHasIncludeTags.setLabelText(JUnitMessages.JUnitLaunchConfigurationTab_includetag_checkbox_label);
fIncludeTags= new TextBoxDialogField();
fIncludeTags.setDialogFieldListener(fListener);
fIncludeTags.setLabelText(JUnitMessages.JUnitLaunchConfigurationTab_includetags_description);
try {
fHasIncludeTags.setSelection(fLaunchConfiguration.getAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_HAS_INCLUDE_TAGS, false));
} catch (CoreException e) {
// ignore
}
fIncludeTags.setEnabled(fHasIncludeTags.isSelected());
try {
fIncludeTags
.setText(getLineSeperatedText(fLaunchConfiguration.getAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_INCLUDE_TAGS, EMPTY_STRING)));
} catch (CoreException e) {
// ignore
}
}
private void createExcludeTagGroup() {
fHasExcludeTags= new SelectionButtonDialogField(SWT.CHECK);
fHasExcludeTags.setDialogFieldListener(fListener);
fHasExcludeTags.setLabelText(JUnitMessages.JUnitLaunchConfigurationTab_excludetag_checkbox_label);
fExcludeTags= new TextBoxDialogField();
fExcludeTags.setDialogFieldListener(fListener);
fExcludeTags.setLabelText(JUnitMessages.JUnitLaunchConfigurationTab_excludetags_description);
try {
fHasExcludeTags.setSelection(fLaunchConfiguration.getAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_HAS_EXCLUDE_TAGS, false));
} catch (CoreException e) {
// ignore
}
fExcludeTags.setEnabled(fHasExcludeTags.isSelected());
try {
fExcludeTags
.setText(getLineSeperatedText(fLaunchConfiguration.getAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_EXCLUDE_TAGS, EMPTY_STRING)));
} catch (CoreException e) {
// ignore
}
}
private IStatus getValidationStatus() {
if (fHasIncludeTags != null && fHasIncludeTags.isSelected() && EMPTY_STRING.equals(fIncludeTags.getText().trim())) {
return new StatusInfo(IStatus.ERROR, JUnitMessages.JUnitLaunchConfigurationTab_includetag_empty_error);
}
if (fHasExcludeTags != null && fHasExcludeTags.isSelected() && EMPTY_STRING.equals(fExcludeTags.getText().trim()))
return new StatusInfo(IStatus.ERROR, JUnitMessages.JUnitLaunchConfigurationTab_excludetag_empty_error);
return new StatusInfo();
}
private void doDialogFieldChanged(DialogField field) {
if (field == fHasIncludeTags) {
fIncludeTags.setEnabled(fHasIncludeTags.isSelected());
}
if (field == fHasExcludeTags) {
fExcludeTags.setEnabled(fHasExcludeTags.isSelected());
}
updateStatus(getValidationStatus());
}
}