/*******************************************************************************
* Copyright (c) 2006, 2016 Mountainminds GmbH & Co. KG and Contributors
* All rights reserved. This program and the accompanying materials
* are 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:
* Marc R. Hoffmann - initial API and implementation
*
******************************************************************************/
package com.mountainminds.eclemma.internal.ui.wizards;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Set;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Label;
import org.eclipse.swt.widgets.Text;
import com.mountainminds.eclemma.core.ScopeUtils;
import com.mountainminds.eclemma.internal.ui.ContextHelp;
import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin;
import com.mountainminds.eclemma.internal.ui.ScopeViewer;
import com.mountainminds.eclemma.internal.ui.UIMessages;
/**
* This wizard page allows selecting a coverage file and class path entries for
* import.
*/
public class SessionImportPage2 extends WizardPage {
private static final String ID = "SessionImportPage2"; //$NON-NLS-1$
private static final String STORE_PREFIX = ID + "."; //$NON-NLS-1$
private static final String STORE_SCOPE = STORE_PREFIX + "scope"; //$NON-NLS-1$
private static final String STORE_BINARIES = STORE_PREFIX + "binaries"; //$NON-NLS-1$
private Text descriptiontext;
private ScopeViewer scopeviewer;
private Button binariescheck;
protected SessionImportPage2() {
super(ID);
setTitle(UIMessages.ImportSessionPage1_title);
setDescription(UIMessages.ImportSessionPage1_description);
}
public void createControl(Composite parent) {
initializeDialogUnits(parent);
parent = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(1, false);
parent.setLayout(layout);
createNameBlock(parent);
createScopeBlock(parent);
createButtonsBlock(parent);
setControl(parent);
ContextHelp.setHelp(parent, ContextHelp.SESSION_IMPORT);
restoreWidgetValues();
update();
}
private void createNameBlock(Composite parent) {
parent = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
parent.setLayout(layout);
parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
new Label(parent, SWT.NONE)
.setText(UIMessages.ImportSessionPage1Description_label);
descriptiontext = new Text(parent, SWT.BORDER);
descriptiontext.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
update();
}
});
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
descriptiontext.setLayoutData(gd);
}
private void createScopeBlock(Composite parent) {
scopeviewer = new ScopeViewer(parent, SWT.BORDER);
try {
scopeviewer.setInput(ScopeUtils.getWorkspaceScope());
} catch (JavaModelException e) {
EclEmmaUIPlugin.log(e);
}
scopeviewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
update();
}
});
GridData gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = convertHorizontalDLUsToPixels(120);
gd.heightHint = convertHeightInCharsToPixels(8);
scopeviewer.getTable().setLayoutData(gd);
}
private void createButtonsBlock(Composite parent) {
parent = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
parent.setLayout(layout);
parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
binariescheck = new Button(parent, SWT.CHECK);
binariescheck.setText(UIMessages.ImportSessionPage1Binaries_label);
binariescheck.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
scopeviewer.setIncludeBinaries(binariescheck.getSelection());
update();
}
});
binariescheck.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL));
Button buttonSelectAll = new Button(parent, SWT.PUSH);
buttonSelectAll.setText(UIMessages.SelectAllAction_label);
buttonSelectAll.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
scopeviewer.selectAll();
update();
}
});
setButtonLayoutData(buttonSelectAll);
Button buttonDeselectAll = new Button(parent, SWT.PUSH);
buttonDeselectAll.setText(UIMessages.DeselectAllAction_label);
buttonDeselectAll.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
scopeviewer.deselectAll();
update();
}
});
setButtonLayoutData(buttonDeselectAll);
}
private void update() {
if (getSessionDescription().length() == 0) {
setErrorMessage(UIMessages.ImportReportPage1NoDescription_message);
setPageComplete(false);
return;
}
if (getScope().isEmpty()) {
setErrorMessage(UIMessages.ImportReportPage1NoClassFiles_message);
setPageComplete(false);
return;
}
setErrorMessage(null);
setPageComplete(true);
}
private void restoreWidgetValues() {
String descr = UIMessages.ImportSessionPage1Description_value;
Object[] arg = new Object[] { new Date() };
descriptiontext.setText(MessageFormat.format(descr, arg));
IDialogSettings settings = getDialogSettings();
boolean binaries = settings.getBoolean(STORE_BINARIES);
scopeviewer.setIncludeBinaries(binaries);
binariescheck.setSelection(binaries);
String[] classes = settings.getArray(STORE_SCOPE);
if (classes != null) {
scopeviewer
.setSelectedScope(ScopeUtils.readScope(Arrays.asList(classes)));
}
}
public void saveWidgetValues() {
IDialogSettings settings = getDialogSettings();
settings.put(
STORE_SCOPE,
ScopeUtils.writeScope(scopeviewer.getSelectedScope()).toArray(
new String[0]));
settings.put(STORE_BINARIES, binariescheck.getSelection());
}
public String getSessionDescription() {
return descriptiontext.getText().trim();
}
public Set<IPackageFragmentRoot> getScope() {
return scopeviewer.getSelectedScope();
}
}