diff options
author | spingel | 2009-05-18 05:30:06 +0000 |
---|---|---|
committer | spingel | 2009-05-18 05:30:06 +0000 |
commit | 26aef6cb40fe08c1b61700a543f526c82664f5d6 (patch) | |
tree | 16209fcc55e429805758d9009d8c904d45310f1b /org.eclipse.mylyn.tasks.bugs | |
parent | 03ce35c8bebd545e9f1eac7f4c39904922537e6e (diff) | |
download | org.eclipse.mylyn.tasks-26aef6cb40fe08c1b61700a543f526c82664f5d6.tar.gz org.eclipse.mylyn.tasks-26aef6cb40fe08c1b61700a543f526c82664f5d6.tar.xz org.eclipse.mylyn.tasks-26aef6cb40fe08c1b61700a543f526c82664f5d6.zip |
NEW - bug 183606: automate product and component selection for integrated bug reporting
https://bugs.eclipse.org/bugs/show_bug.cgi?id=183606
Diffstat (limited to 'org.eclipse.mylyn.tasks.bugs')
9 files changed, 165 insertions, 79 deletions
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java index d046a6234..3109b639f 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java @@ -36,7 +36,10 @@ public class DefaultTaskContributor extends AbstractTaskContributor { @Override public void process(ITaskContribution contribution) { - contribution.appendToDescription(getDescription(contribution.getStatus())); + String description = getDescription(contribution.getStatus()); + if (description != null) { + contribution.appendToDescription(description); + } } public void appendErrorDetails(StringBuilder sb, IStatus status, Date date) { @@ -72,32 +75,34 @@ public class DefaultTaskContributor extends AbstractTaskContributor { public String getDescription(IStatus status) { if (status instanceof FeatureStatus) { - StringBuilder sb = new StringBuilder(); - sb.append("\n\n\n"); //$NON-NLS-1$ - sb.append(Messages.DefaultTaskContributor_INSTALLED_FEATURES_AND_PLUGINS); - IBundleGroup[] bundleGroups = ((FeatureStatus) status).getBundleGroup(); - for (IBundleGroup bundleGroup : bundleGroups) { - sb.append(bundleGroup.getIdentifier()); - sb.append(" "); //$NON-NLS-1$ - sb.append(bundleGroup.getVersion()); - sb.append("\n"); //$NON-NLS-1$ + SupportProduct product = (SupportProduct) ((FeatureStatus) status).getProduct(); + if (product.getBundleGroup() != null) { + StringBuilder sb = new StringBuilder(); + sb.append("\n\n\n"); //$NON-NLS-1$ + sb.append(Messages.DefaultTaskContributor_INSTALLED_FEATURES_AND_PLUGINS); + for (IBundleGroup bundleGroup : new IBundleGroup[] { product.getBundleGroup() }) { + sb.append(bundleGroup.getIdentifier()); + sb.append(" "); //$NON-NLS-1$ + sb.append(bundleGroup.getVersion()); + sb.append("\n"); //$NON-NLS-1$ - Bundle[] bundles = bundleGroup.getBundles(); - if (bundles != null) { - for (Bundle bundle : bundles) { - sb.append(" "); //$NON-NLS-1$ - sb.append(bundle.getSymbolicName()); - String version = (String) bundle.getHeaders().get( - Messages.DefaultTaskContributor_Bundle_Version); - if (version != null) { - sb.append(" "); //$NON-NLS-1$ - sb.append(version); + Bundle[] bundles = bundleGroup.getBundles(); + if (bundles != null) { + for (Bundle bundle : bundles) { + sb.append(" "); //$NON-NLS-1$ + sb.append(bundle.getSymbolicName()); + String version = (String) bundle.getHeaders().get( + Messages.DefaultTaskContributor_Bundle_Version); + if (version != null) { + sb.append(" "); //$NON-NLS-1$ + sb.append(version); + } + sb.append("\n"); //$NON-NLS-1$ } - sb.append("\n"); //$NON-NLS-1$ } } + return sb.toString(); } - return sb.toString(); } else if (status instanceof ErrorLogStatus) { ErrorLogStatus errorLogStatus = (ErrorLogStatus) status; StringBuilder sb = new StringBuilder(); @@ -122,6 +127,7 @@ public class DefaultTaskContributor extends AbstractTaskContributor { } return sb.toString(); } + return null; } private String getSeverityText(int severity) { diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProvider.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProvider.java index d38c4bff8..c78130c3c 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProvider.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProvider.java @@ -11,6 +11,10 @@ package org.eclipse.mylyn.internal.tasks.bugs; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProduct; import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProvider; /** @@ -18,7 +22,9 @@ import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProvider; */ public class SupportProvider extends AbstractSupportElement implements IProvider { - SupportCategory category; + private SupportCategory category; + + private List<IProduct> products; public SupportProvider() { } @@ -31,4 +37,21 @@ public class SupportProvider extends AbstractSupportElement implements IProvider this.category = category; } + public void add(IProduct provider) { + if (products == null) { + products = new ArrayList<IProduct>(); + } + products.add(provider); + } + + public void remove(IProduct provider) { + if (products != null) { + products.remove(provider); + } + } + + public List<IProduct> getProducts() { + return new ArrayList<IProduct>(products); + } + } diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProviderManager.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProviderManager.java index 4e578fd44..651904603 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProviderManager.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportProviderManager.java @@ -346,6 +346,7 @@ public class SupportProviderManager { element.getNamespaceIdentifier(), id))); return null; } + ((SupportProvider) provider).add(product); productById.put(id, product); return product; } diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportRequest.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportRequest.java index 13093849f..8d6cc52e1 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportRequest.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/SupportRequest.java @@ -22,6 +22,9 @@ import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProduct; import org.eclipse.mylyn.internal.provisional.tasks.bugs.ISupportRequest; import org.eclipse.mylyn.internal.provisional.tasks.bugs.ITaskContribution; +/** + * @author Steffen Pingel + */ public class SupportRequest implements ISupportRequest { private final Map<String, ITaskContribution> contributionByProductId; @@ -32,11 +35,23 @@ public class SupportRequest implements ISupportRequest { private AttributeTaskMapper defaultContribution; - public SupportRequest(SupportProviderManager providerManager, IStatus status) { + private final IProduct product; + + public SupportRequest(SupportProviderManager providerManager, IStatus status, IProduct product) { this.providerManager = providerManager; this.status = status; this.contributionByProductId = new HashMap<String, ITaskContribution>(); - process(); + if (product != null) { + this.product = product; + this.defaultContribution = process(getNamespace(), (SupportProduct) product); + } else { + this.product = null; + process(); + } + } + + public SupportRequest(SupportProviderManager providerManager, IStatus status) { + this(providerManager, status, null); } public ITaskContribution getOrCreateContribution(IProduct product) { @@ -69,6 +84,10 @@ public class SupportRequest implements ISupportRequest { return defaultContribution; } + public IProduct getProduct() { + return product; + } + public IStatus getStatus() { return status; } @@ -77,16 +96,22 @@ public class SupportRequest implements ISupportRequest { String namespace = getNamespace(); Collection<SupportProduct> products = providerManager.getProducts(); for (SupportProduct product : products) { - Map<String, String> productAttributes = product.getAllAttributes(namespace); - if (!productAttributes.isEmpty()) { - // merge global and more specific product attributes - Map<String, String> attributes = providerManager.getDefaultProduct().getAllAttributes(namespace); - attributes.putAll(productAttributes); - - AttributeTaskMapper contribution = (AttributeTaskMapper) getOrCreateContribution(product); - contribution.getAttributes().putAll(attributes); - } + process(namespace, product); + } + } + + private AttributeTaskMapper process(String namespace, SupportProduct product) { + Map<String, String> productAttributes = product.getAllAttributes(namespace); + if (!productAttributes.isEmpty()) { + // merge global and more specific product attributes + Map<String, String> attributes = providerManager.getDefaultProduct().getAllAttributes(namespace); + attributes.putAll(productAttributes); + + AttributeTaskMapper contribution = (AttributeTaskMapper) getOrCreateContribution(product); + contribution.getAttributes().putAll(attributes); + return contribution; } + return null; } private String getNamespace() { diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java index cd39a6772..ca22de5f3 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java @@ -19,6 +19,8 @@ import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.mylyn.commons.core.AbstractErrorReporter; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.provisional.commons.ui.WorkbenchUtil; +import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProduct; +import org.eclipse.mylyn.internal.tasks.bugs.wizards.FeatureStatus; import org.eclipse.mylyn.internal.tasks.bugs.wizards.ReportErrorWizard; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.tasks.core.data.TaskData; @@ -65,10 +67,10 @@ public class TaskErrorReporter { // postProcess(mapper); // } - public SupportRequest preProcess(IStatus status) { + public SupportRequest preProcess(IStatus status, IProduct product) { Assert.isNotNull(status); //Map<String, String> attributes = mappingManager.getAllAttributes(namespace); - SupportRequest request = new SupportRequest(providerManager, status); + SupportRequest request = new SupportRequest(providerManager, status, product); contributorManager.preProcess(request); return request; } @@ -88,11 +90,16 @@ public class TaskErrorReporter { } public void handle(final IStatus status) { - ReportErrorWizard wizard = new ReportErrorWizard(TaskErrorReporter.this, status); - WizardDialog dialog = new WizardDialog(WorkbenchUtil.getShell(), wizard); - dialog.setBlockOnOpen(false); - dialog.setPageSize(500, 200); - dialog.open(); + if (status instanceof FeatureStatus) { + SupportRequest request = preProcess(status, ((FeatureStatus) status).getProduct()); + postProcess((AttributeTaskMapper) request.getDefaultContribution()); + } else { + ReportErrorWizard wizard = new ReportErrorWizard(TaskErrorReporter.this, status); + WizardDialog dialog = new WizardDialog(WorkbenchUtil.getShell(), wizard); + dialog.setBlockOnOpen(false); + dialog.setPageSize(500, 200); + dialog.open(); + } } public SupportProviderManager getProviderManager() { diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/FeatureStatus.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/FeatureStatus.java index 68fcd3ef9..401461783 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/FeatureStatus.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/FeatureStatus.java @@ -11,24 +11,24 @@ package org.eclipse.mylyn.internal.tasks.bugs.wizards; -import org.eclipse.core.runtime.IBundleGroup; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProduct; /** * @author Steffen Pingel */ public class FeatureStatus extends Status { - private final IBundleGroup[] bundleGroups; + private final IProduct product; - public FeatureStatus(String id, IBundleGroup[] bundleGroups) { - super(IStatus.INFO, id, ""); //$NON-NLS-1$ - this.bundleGroups = bundleGroups; + public FeatureStatus(IProduct product) { + super(IStatus.INFO, product.getId(), ""); //$NON-NLS-1$ + this.product = product; } - public IBundleGroup[] getBundleGroup() { - return bundleGroups; + public IProduct getProduct() { + return product; } } diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportBugOrEnhancementWizard.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportBugOrEnhancementWizard.java index dc62fe21a..40dfefe34 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportBugOrEnhancementWizard.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportBugOrEnhancementWizard.java @@ -15,12 +15,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.IBundleGroup; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; +import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProduct; import org.eclipse.mylyn.internal.tasks.bugs.AbstractSupportElement; import org.eclipse.mylyn.internal.tasks.bugs.SupportProduct; import org.eclipse.mylyn.internal.tasks.bugs.SupportProvider; @@ -41,14 +40,7 @@ public class ReportBugOrEnhancementWizard extends Wizard { public Object[] getElements(Object inputElement) { if (inputElement instanceof SupportProvider) { - Collection<SupportProduct> products = providerManager.getProducts(); - SupportProvider provider = (SupportProvider) inputElement; - List<SupportProduct> providerProducts = new ArrayList<SupportProduct>(); - for (SupportProduct product : products) { - if (provider.equals(product.getProvider()) && product.isInstalled()) { - providerProducts.add(product); - } - } + List<SupportProduct> providerProducts = getProdcuts(inputElement); return providerProducts.toArray(); } else if (input == inputElement) { List<AbstractSupportElement> elements = new ArrayList<AbstractSupportElement>(); @@ -60,6 +52,18 @@ public class ReportBugOrEnhancementWizard extends Wizard { } } + private List<SupportProduct> getProdcuts(Object inputElement) { + Collection<SupportProduct> products = providerManager.getProducts(); + SupportProvider provider = (SupportProvider) inputElement; + List<SupportProduct> providerProducts = new ArrayList<SupportProduct>(); + for (SupportProduct product : products) { + if (provider.equals(product.getProvider()) && product.isInstalled()) { + providerProducts.add(product); + } + } + return providerProducts; + } + public void dispose() { // ignore } @@ -87,23 +91,28 @@ public class ReportBugOrEnhancementWizard extends Wizard { @Override public boolean canFinish() { - return getSelectedElement() != null; + return getSelectedElement() instanceof SupportProduct; } public AbstractSupportElement getSelectedElement() { - IWizardPage page = getPages()[getPageCount() - 1]; - return ((SelectSupportElementPage) page).getSelectedElement(); + IWizardPage page = getContainer().getCurrentPage(); + if (page != null) { + return ((SelectSupportElementPage) page).getSelectedElement(); + } + return null; } @Override public boolean performFinish() { - final AbstractSupportElement bundles = getSelectedElement(); - Assert.isNotNull(bundles); + final AbstractSupportElement product = getSelectedElement(); + if (!(product instanceof SupportProduct)) { + return false; + } // delay run this until after the dialog has been closed getShell().getDisplay().asyncExec(new Runnable() { public void run() { - TasksBugsPlugin.getTaskErrorReporter().handle(new FeatureStatus(bundles.getId(), new IBundleGroup[0])); + TasksBugsPlugin.getTaskErrorReporter().handle(new FeatureStatus((IProduct) product)); } }); diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java index 1778b63a9..b55713496 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java @@ -38,7 +38,7 @@ public class ReportErrorWizard extends Wizard { public ReportErrorWizard(TaskErrorReporter taskErrorReporter, IStatus status) { this.taskErrorReporter = taskErrorReporter; this.status = status; - this.request = taskErrorReporter.preProcess(status); + this.request = taskErrorReporter.preProcess(status, null); setWindowTitle(Messages.ReportErrorWizard_Report_as_Bug); } diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java index c38ec9ca6..083609964 100644 --- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java +++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/SelectSupportElementPage.java @@ -35,8 +35,10 @@ import org.eclipse.mylyn.internal.provisional.commons.ui.CommonFonts; import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; import org.eclipse.mylyn.internal.provisional.commons.ui.GradientCanvas; import org.eclipse.mylyn.internal.provisional.commons.ui.WorkbenchUtil; +import org.eclipse.mylyn.internal.provisional.tasks.bugs.IProvider; import org.eclipse.mylyn.internal.tasks.bugs.AbstractSupportElement; import org.eclipse.mylyn.internal.tasks.bugs.SupportCategory; +import org.eclipse.mylyn.internal.tasks.bugs.SupportProduct; import org.eclipse.mylyn.internal.tasks.bugs.SupportProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; @@ -241,8 +243,6 @@ public class SelectSupportElementPage extends WizardPage { public SelectSupportElementPage(String pageName, IStructuredContentProvider contentProvider) { super(pageName); this.contentProvider = contentProvider; - setTitle(Messages.SelectFeaturePage_SELECT_FEATURE); - setMessage("Select a provider or product from the list."); } public Image getImage(AbstractSupportElement data) { @@ -259,6 +259,14 @@ public class SelectSupportElementPage extends WizardPage { public void setInput(Object input) { this.input = input; + + if (input instanceof IProvider) { + setTitle("Support Provider"); + setMessage("Select a support provider from the list."); + } else { + setTitle("Supported Product"); + setMessage("Select a supported product from the list."); + } } public void createControl(Composite parent) { @@ -272,12 +280,13 @@ public class SelectSupportElementPage extends WizardPage { viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); - if (!selection.isEmpty() && selection.getFirstElement() instanceof AbstractSupportElement) { - selectedElement = (AbstractSupportElement) selection.getFirstElement(); + Object object = selection.getFirstElement(); + if (object instanceof AbstractSupportElement) { + selectedElement = (AbstractSupportElement) object; } else { selectedElement = null; } - setPageComplete(selectedElement != null); + updatePageStatus(); } }); viewer.addOpenListener(new IOpenListener() { @@ -315,14 +324,11 @@ public class SelectSupportElementPage extends WizardPage { }); viewer.setInput(input); + setPageComplete(false); setControl(container); Dialog.applyDialogFont(container); } - private boolean requiresSelection(AbstractSupportElement selectedElement) { - return contentProvider.getElements(selectedElement).length > 0; - } - @Override public void dispose() { if (imageRegistry != null) { @@ -335,14 +341,24 @@ public class SelectSupportElementPage extends WizardPage { return selectedElement; } - @Override - public boolean canFlipToNextPage() { - return selectedElement != null && requiresSelection(selectedElement); + private void updatePageStatus() { + if (selectedElement instanceof SupportProvider) { + if (contentProvider.getElements(selectedElement).length > 0) { + setErrorMessage(null); + setPageComplete(true); + } else { + setErrorMessage("The selected provider does not specify supported products."); + setPageComplete(false); + } + } else if (selectedElement instanceof SupportProduct) { + setErrorMessage(null); + setPageComplete(true); + } } @Override public IWizardPage getNextPage() { - if (canFlipToNextPage()) { + if (selectedElement instanceof SupportProvider) { SelectSupportElementPage page = new SelectSupportElementPage(selectedElement.getId(), contentProvider); page.setInput(selectedElement); page.setWizard(getWizard()); @@ -350,5 +366,4 @@ public class SelectSupportElementPage extends WizardPage { } return null; } - }
\ No newline at end of file |