blob: 6663fa5b5de8597fda20d54fe7348600e4a9f5ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2010 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.bugs.wizards;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.mylyn.internal.tasks.bugs.AttributeTaskMapper;
import org.eclipse.mylyn.internal.tasks.bugs.SupportRequest;
import org.eclipse.mylyn.tasks.bugs.IProduct;
import org.eclipse.mylyn.tasks.bugs.ITaskContribution;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* @author Steffen Pingel
*/
public class ReportErrorPage extends WizardPage {
private final IStatus status;
private final List<AttributeTaskMapper> contributions;
private AttributeTaskMapper selectedContribution;
private Combo contributionCombo;
public ReportErrorPage(SupportRequest request, IStatus status) {
super("reportError"); //$NON-NLS-1$
this.status = status;
this.contributions = new ArrayList<AttributeTaskMapper>();
addContributions(request.getContributions());
setTitle(Messages.ReportErrorPage_Report_as_Bug);
setMessage(MessageFormat.format(Messages.ReportErrorPage_AN_UNEXPETED_ERROR_HAS_OCCURED_IN_PLUGIN,
status.getPlugin()));
}
private void addContributions(List<ITaskContribution> contributions) {
for (ITaskContribution contribution : contributions) {
if (((AttributeTaskMapper) contribution).isMappingComplete()) {
this.contributions.add((AttributeTaskMapper) contribution);
}
}
}
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
// Group errorGroup = new Group(composite, SWT.NONE);
// GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).applyTo(errorGroup);
// errorGroup.setText("Details");
// errorGroup.setLayout(new GridLayout(1, true));
Label label = new Label(composite, SWT.NONE);
label.setText(Messages.ReportErrorPage_Details);
Text text = new Text(composite, SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP | SWT.BORDER);
text.setText(status.getMessage());
GridDataFactory.fillDefaults().span(2, 1).grab(true, true).applyTo(text);
// space
label = new Label(composite, SWT.NONE);
GridDataFactory.fillDefaults().span(2, 1).applyTo(label);
selectedContribution = null;
if (!contributions.isEmpty()) {
final Button defaultRepositoryButton = new Button(composite, SWT.RADIO);
defaultRepositoryButton.setSelection(true);
selectedContribution = contributions.get(0);
if (contributions.size() == 1) {
defaultRepositoryButton.setText(NLS.bind(Messages.ReportErrorPage_Report_to,
getLabel(selectedContribution)));
GridDataFactory.fillDefaults().span(2, 1).applyTo(defaultRepositoryButton);
} else {
defaultRepositoryButton.setText(Messages.ReportErrorPage_Report_to_Label);
contributionCombo = new Combo(composite, SWT.READ_ONLY);
for (AttributeTaskMapper contribution : contributions) {
contributionCombo.add(getLabel(contribution));
}
contributionCombo.select(0);
contributionCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int selectionIndex = contributionCombo.getSelectionIndex();
if (selectionIndex != -1) {
selectedContribution = contributions.get(selectionIndex);
}
}
});
}
final Button selectRepositoryButton = new Button(composite, SWT.RADIO);
selectRepositoryButton.setText(Messages.ReportErrorPage_Select_repository);
GridDataFactory.fillDefaults().span(2, 1).applyTo(selectRepositoryButton);
defaultRepositoryButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
if (defaultRepositoryButton.getSelection()) {
selectRepositoryButton.setSelection(false);
}
if (contributionCombo != null) {
contributionCombo.setEnabled(true);
selectedContribution = contributions.get(contributionCombo.getSelectionIndex());
} else {
selectedContribution = contributions.get(0);
}
getContainer().updateButtons();
}
});
selectRepositoryButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
if (selectRepositoryButton.getSelection()) {
defaultRepositoryButton.setSelection(false);
if (contributionCombo != null) {
contributionCombo.setEnabled(false);
}
}
selectedContribution = null;
getContainer().updateButtons();
}
});
}
setControl(composite);
Dialog.applyDialogFont(composite);
}
private String getLabel(AttributeTaskMapper contribution) {
IProduct product = contribution.getProduct();
if (product.getName() != null) {
return NLS.bind(Messages.ReportErrorPage_Xprovider_Xproduct, product.getProvider().getName(),
product.getName());
} else {
return product.getProvider().getName();
}
}
@Override
public boolean canFlipToNextPage() {
return selectedContribution == null;
}
public AttributeTaskMapper getSelectedContribution() {
return selectedContribution;
}
@Override
public boolean isPageComplete() {
return true;
}
}