Author: snjeza
Date: 2008-11-08 19:29:36 -0500 (Sat, 08 Nov 2008)
New Revision: 11621
Added:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerContentProvider.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerDialog.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerLabelProvider.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixPage.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixWizard.java
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/META-INF/MANIFEST.MF
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/ProjectExamplesActivator.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/actions/ProjectExamplesHandler.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectUtil.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizard.java
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizardPage.java
Log:
JBIDE-3075 Adding general quickfixes to the imported project examples
Modified: trunk/examples/plugins/org.jboss.tools.project.examples/META-INF/MANIFEST.MF
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/META-INF/MANIFEST.MF 2008-11-09
00:29:23 UTC (rev 11620)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/META-INF/MANIFEST.MF 2008-11-09
00:29:36 UTC (rev 11621)
@@ -17,5 +17,7 @@
org.eclipse.equinox.security,
org.eclipse.equinox.p2.engine,
org.eclipse.equinox.p2.core,
- org.eclipse.ui.ide
+ org.eclipse.ui.ide,
+ org.eclipse.wst.validation,
+ org.eclipse.ui.views
Bundle-ActivationPolicy: lazy
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/ProjectExamplesActivator.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/ProjectExamplesActivator.java 2008-11-09
00:29:23 UTC (rev 11620)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/ProjectExamplesActivator.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -1,8 +1,31 @@
+/*************************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat and others.
+ * 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:
+ * JBoss, a division of Red Hat - Initial implementation.
+ ************************************************************************************/
package org.jboss.tools.project.examples;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.wst.validation.internal.operations.ValidationBuilder;
+import org.jboss.tools.project.examples.model.Project;
import org.osgi.framework.BundleContext;
/**
@@ -17,7 +40,26 @@
private static ProjectExamplesActivator plugin;
private static BundleContext context;
+
+ public static Job waitForBuildAndValidation = new Job("Waiting...") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD,
+ monitor);
+ Job.getJobManager().join(
+ ValidationBuilder.FAMILY_VALIDATION_JOB, monitor);
+ } catch (OperationCanceledException e) {
+ return Status.CANCEL_STATUS;
+ } catch (InterruptedException e) {
+ return Status.CANCEL_STATUS;
+ }
+ return Status.OK_STATUS;
+ }
+
+ };
+
/**
* The constructor
*/
@@ -69,4 +111,22 @@
return context;
}
+ public static List<IMarker> getMarkers(List<Project> projects) {
+ List<IMarker> markers = new ArrayList<IMarker>();
+ for(Project project:projects) {
+ try {
+ String projectName = project.getName();
+ IProject eclipseProject =
ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ IMarker[] projectMarkers = eclipseProject.findMarkers(IMarker.PROBLEM, true,
IResource.DEPTH_INFINITE);
+ for (int i = 0; i < projectMarkers.length; i++) {
+ if (projectMarkers[i].getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR) ==
IMarker.SEVERITY_ERROR) {
+ markers.add(projectMarkers[i]);
+ }
+ }
+ } catch (CoreException e) {
+ ProjectExamplesActivator.log(e);
+ }
+ }
+ return markers;
+ }
}
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/actions/ProjectExamplesHandler.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/actions/ProjectExamplesHandler.java 2008-11-09
00:29:23 UTC (rev 11620)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/actions/ProjectExamplesHandler.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -1,3 +1,13 @@
+/*************************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat and others.
+ * 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:
+ * JBoss, a division of Red Hat - Initial implementation.
+ ************************************************************************************/
package org.jboss.tools.project.examples.actions;
import org.eclipse.core.commands.AbstractHandler;
@@ -8,6 +18,10 @@
import org.eclipse.ui.PlatformUI;
import org.jboss.tools.project.examples.wizard.NewProjectExamplesWizard;
+/**
+* @author snjeza
+*
+*/
public class ProjectExamplesHandler extends AbstractHandler {
public Object execute(ExecutionEvent event) throws ExecutionException {
Added:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerContentProvider.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerContentProvider.java
(rev 0)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerContentProvider.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -0,0 +1,46 @@
+/*************************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat and others.
+ * 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:
+ * JBoss, a division of Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.jboss.tools.project.examples.dialog;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.jboss.tools.project.examples.ProjectExamplesActivator;
+import org.jboss.tools.project.examples.model.Project;
+
+/**
+* @author snjeza
+*
+*/
+public class MarkerContentProvider implements IStructuredContentProvider {
+
+ private List<Project> projects;
+
+ public MarkerContentProvider(List<Project> projects) {
+ this.projects = projects;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ List<IMarker> markers = ProjectExamplesActivator.getMarkers(projects);
+ return markers.toArray();
+ }
+
+ public void dispose() {
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+
+}
Added:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerDialog.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerDialog.java
(rev 0)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerDialog.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -0,0 +1,351 @@
+/*************************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat and others.
+ * 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:
+ * JBoss, a division of Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.jboss.tools.project.examples.dialog;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+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.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.views.markers.MarkerSupportInternalUtilities;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
+import org.eclipse.ui.statushandlers.IStatusAdapterConstants;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.ui.views.markers.WorkbenchMarkerResolution;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
+import org.jboss.tools.project.examples.ProjectExamplesActivator;
+import org.jboss.tools.project.examples.dialog.xpl.QuickFixWizard;
+import org.jboss.tools.project.examples.model.Project;
+
+/**
+* @author snjeza
+*
+*/
+public class MarkerDialog extends TitleAreaDialog {
+
+ private static final String QUICK_FIX = "Quick Fix";
+ private static final IMarkerResolution[] EMPTY_ARRAY = new IMarkerResolution[0];
+ private List<Project> projects;
+ private Image _dlgTitleImage;
+ private Button quickFixButton;
+ private Button finishButton;
+ private TableViewer tableViewer;
+ private IResourceChangeListener resourceChangeListener;
+
+ private class QuickFixWizardDialog extends WizardDialog {
+
+ /**
+ * @param parentShell
+ * @param newWizard
+ */
+ public QuickFixWizardDialog(Shell parentShell, IWizard newWizard) {
+ super(parentShell, newWizard);
+ setShellStyle(SWT.CLOSE | SWT.MAX | SWT.TITLE | SWT.BORDER
+ | SWT.MODELESS | SWT.RESIZE | getDefaultOrientation());
+ }
+
+ }
+
+
+ public MarkerDialog(Shell parentShell, List<Project> projects) {
+ super(parentShell);
+ this.projects = projects;
+ setShellStyle(SWT.CLOSE | SWT.MAX | SWT.TITLE | SWT.BORDER
+ | SWT.MODELESS | SWT.RESIZE | getDefaultOrientation());
+ _dlgTitleImage = IDEInternalWorkbenchImages.getImageDescriptor(
+ IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG)
+ .createImage();
+ setTitleImage(_dlgTitleImage);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite area = (Composite) super.createDialogArea(parent);
+ Composite contents = new Composite(area, SWT.NONE);
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 300;
+ contents.setLayoutData(gd);
+ contents.setLayout(new GridLayout());
+ setTitle(QUICK_FIX);
+ setMessage("Select a marker and click the Quick Fix button.");
+ getShell().setText(QUICK_FIX);
+ applyDialogFont(contents);
+ initializeDialogUnits(area);
+
+ Label markersLabel = new Label(contents, SWT.NULL);
+ markersLabel.setText("Markers:");
+ tableViewer = new TableViewer(contents, SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE);
+ Table table = tableViewer.getTable();
+ gd = new GridData(GridData.FILL_BOTH);
+ table.setLayoutData(gd);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ String[] columnNames = new String[] { "Description", "Resource",
"Type" };
+ int[] columnWidths = new int[] { 200, 150, 150 };
+
+ for (int i = 0; i < columnNames.length; i++) {
+ TableColumn tc = new TableColumn(table, SWT.LEFT);
+ tc.setText(columnNames[i]);
+ tc.setWidth(columnWidths[i]);
+ }
+
+ tableViewer.setLabelProvider(new MarkerLabelProvider());
+ tableViewer.setContentProvider(new MarkerContentProvider(projects));
+ tableViewer.setInput(projects);
+
+ tableViewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection source = event.getSelection();
+ if (source instanceof IStructuredSelection) {
+ IMarkerResolution[] resolutions = getMarkerResolutions(source);
+ quickFixButton.setEnabled(resolutions.length > 0);
+ }
+ }
+
+ });
+ resourceChangeListener = new IResourceChangeListener() {
+
+ public void resourceChanged(IResourceChangeEvent event) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ if (tableViewer != null && !tableViewer.getTable().isDisposed()) {
+ refreshTableViewer();
+ }
+ }
+
+ });
+
+ }
+
+ };
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(
+ resourceChangeListener);
+ return area;
+ }
+
+ @Override
+ public boolean close() {
+ if (_dlgTitleImage != null) {
+ _dlgTitleImage.dispose();
+ }
+ if (resourceChangeListener != null) {
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+ resourceChangeListener = null;
+ }
+ return super.close();
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ quickFixButton = getButton(IDialogConstants.OK_ID);
+ quickFixButton.setText("Quick Fix");
+ finishButton = getButton(IDialogConstants.CANCEL_ID);
+ finishButton.setText("Finish");
+ quickFixButton.setEnabled(false);
+ }
+
+ @Override
+ protected void cancelPressed() {
+ setReturnCode(OK);
+ close();
+ }
+
+ @Override
+ protected void okPressed() {
+ ISelection source = tableViewer.getSelection();
+ if (source instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) source;
+ Object object = selection.getFirstElement();
+ if (object instanceof IMarker) {
+ IMarker selected = (IMarker) object;
+ try {
+ quickFixButton.setSelection(false);
+ openQuickFixWizard(selected);
+ for (Project project:projects) {
+ IProject eclipseProject =
ResourcesPlugin.getWorkspace().getRoot().getProject(project.getName());
+ if (eclipseProject != null && eclipseProject.isOpen()) {
+ eclipseProject.build(IncrementalProjectBuilder.CLEAN_BUILD, null);
+ }
+ }
+ ProjectExamplesActivator.waitForBuildAndValidation.schedule();
+ ProjectExamplesActivator.waitForBuildAndValidation.join();
+ } catch (Exception e) {
+ ProjectExamplesActivator.log(e);
+ } finally {
+ refreshTableViewer();
+ }
+ }
+ }
+ }
+
+
+ private void refreshTableViewer() {
+ tableViewer.setInput(projects);
+ ISelection source = tableViewer.getSelection();
+ if (source instanceof IStructuredSelection) {
+ IMarkerResolution[] resolutions = getMarkerResolutions(source);
+ quickFixButton.setEnabled(resolutions.length > 0);
+ } else {
+ quickFixButton.setSelection(false);
+ }
+ }
+
+ private void openQuickFixWizard(final IMarker selected) throws ExecutionException {
+ final Map resolutions = new LinkedHashMap();
+
+ IRunnableWithProgress resolutionsRunnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) {
+ monitor
+ .beginTask(
+ MarkerMessages.resolveMarkerAction_computationManyAction,
+ 100);
+
+ IMarker[] allMarkers = (IMarker[])
ProjectExamplesActivator.getMarkers(projects).toArray(new IMarker[0]);
+ monitor.worked(20);
+ IMarkerResolution[] found = IDE.getMarkerHelpRegistry()
+ .getResolutions(selected);
+ int progressCount = 80;
+ if (found.length > 1)
+ progressCount = progressCount / found.length;
+ for (int i = 0; i < found.length; i++) {
+ IMarkerResolution markerResolution = found[i];
+ if (markerResolution instanceof WorkbenchMarkerResolution) {
+ IMarker[] other = ((WorkbenchMarkerResolution) markerResolution)
+ .findOtherMarkers(allMarkers);
+ Collection markers = new ArrayList();
+ markers.add(selected);
+ for (int j = 0; j < other.length; j++) {
+ markers.add(other[j]);
+ }
+ resolutions.put(markerResolution, markers);
+ } else {
+ Collection markers = new ArrayList();
+ markers.add(selected);
+ resolutions.put(markerResolution, markers);
+ }
+ monitor.worked(progressCount);
+ }
+ monitor.done();
+ }
+ };
+
+ Object service = null;
+
+ IRunnableContext context = new
ProgressMonitorDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .getShell());
+
+ try {
+ if (service == null) {
+ PlatformUI.getWorkbench().getProgressService().runInUI(context,
+ resolutionsRunnable, null);
+ } else {
+ ((IWorkbenchSiteProgressService) service).runInUI(context,
+ resolutionsRunnable, null);
+ }
+ } catch (InvocationTargetException exception) {
+ throw new ExecutionException(exception.getLocalizedMessage(),
+ exception);
+ } catch (InterruptedException exception) {
+
+ throw new ExecutionException(exception.getLocalizedMessage(),
+ exception);
+ }
+
+ String markerDescription = selected.getAttribute(IMarker.MESSAGE,
+ MarkerSupportInternalUtilities.EMPTY_STRING);
+ if (resolutions.isEmpty()) {
+ Status newStatus = new Status(
+ IStatus.INFO,
+ IDEWorkbenchPlugin.IDE_WORKBENCH,
+ NLS
+ .bind(
+ MarkerMessages.MarkerResolutionDialog_NoResolutionsFound,
+ new Object[] { markerDescription }));
+ StatusAdapter adapter = new StatusAdapter(newStatus);
+ adapter.setProperty(IStatusAdapterConstants.TITLE_PROPERTY,
+ MarkerMessages.MarkerResolutionDialog_CannotFixTitle);
+ StatusManager.getManager().handle(adapter, StatusManager.SHOW);
+ } else {
+
+ String description = NLS.bind(
+ MarkerMessages.MarkerResolutionDialog_Description,
+ markerDescription);
+
+ Wizard wizard = new QuickFixWizard(description, resolutions);
+ wizard.setWindowTitle(MarkerMessages.resolveMarkerAction_dialogTitle);
+ WizardDialog dialog = new
QuickFixWizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
wizard);
+ dialog.open();
+ }
+ }
+
+ private IMarkerResolution[] getMarkerResolutions(ISelection source) {
+ IStructuredSelection selection = (IStructuredSelection) source;
+ IMarker marker = (IMarker) selection
+ .getFirstElement();
+ if (marker == null) {
+ return EMPTY_ARRAY;
+ }
+ IMarkerResolution[] resolutions = IDE
+ .getMarkerHelpRegistry().getResolutions(
+ marker);
+ return resolutions;
+ }
+}
\ No newline at end of file
Added:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerLabelProvider.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerLabelProvider.java
(rev 0)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/MarkerLabelProvider.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -0,0 +1,67 @@
+/*************************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat and others.
+ * 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:
+ * JBoss, a division of Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.jboss.tools.project.examples.dialog;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+* @author snjeza
+*
+*/
+public class MarkerLabelProvider extends LabelProvider implements
+ ITableLabelProvider {
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ if (!(element instanceof IMarker)) {
+ return null;
+ }
+ IMarker marker = (IMarker) element;
+ switch (columnIndex) {
+ case 0:
+ return marker.getAttribute(IMarker.MESSAGE, "");
+ case 1:
+ return marker.getResource().getName();
+ case 2:
+ try {
+ IExtensionPoint extensionPoint = Platform
+ .getExtensionRegistry().getExtensionPoint(
+ "org.eclipse.core.resources.markers");
+ IExtension[] extensions = extensionPoint.getExtensions();
+ for (int i = 0; i < extensions.length; i++) {
+ IExtension extension = extensions[i];
+ String id = extension.getUniqueIdentifier();
+ if (id != null && id.equals(marker.getType())) {
+ String name = extension.getLabel();
+ if (name != null) {
+ return name;
+ }
+ }
+ }
+ return marker.getType();
+ } catch (CoreException e) {
+ return "";
+ }
+ }
+ return null;
+ }
+
+}
Added:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixPage.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixPage.java
(rev 0)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixPage.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -0,0 +1,639 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.jboss.tools.project.examples.dialog.xpl;
+
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.WizardPage;
+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.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+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.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.views.markers.ExtendedMarkersView;
+import org.eclipse.ui.internal.views.markers.MarkerSupportInternalUtilities;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.ui.views.markers.WorkbenchMarkerResolution;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
+import org.eclipse.ui.views.markers.internal.Util;
+
+/**
+ * QuickFixPage is a page for the quick fixes of a marker.
+ *
+ * @since 3.4
+ *
+ */
+public class QuickFixPage extends WizardPage {
+
+ static final IMarker[] EMPTY_MARKER_ARRAY = new IMarker[0];
+ private Map resolutions;
+ private ListViewer resolutionsList;
+ private CheckboxTableViewer markersTable;
+ //private IWorkbenchPartSite site;
+
+ /**
+ * Create a new instance of the receiver.
+ *
+ * @param problemDescription
+ * the description of the problem being fixed
+ * @param resolutions
+ * {@link Map} with key of {@link IMarkerResolution} and value of
+ * {@link Collection} of {@link IMarker}
+ * @param site
+ * The IWorkbenchPartSite to show markers
+ */
+ public QuickFixPage(String problemDescription, Map resolutions) {
+ super(problemDescription);
+ this.resolutions = resolutions;
+ //this.site = site;
+ setTitle(MarkerMessages.resolveMarkerAction_dialogTitle);
+ setMessage(problemDescription);
+ }
+
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ // Create a new composite as there is the title bar seperator
+ // to deal with
+ Composite control = new Composite(parent, SWT.NONE);
+ control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ setControl(control);
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(control,
+ IWorkbenchHelpContextIds.PROBLEMS_VIEW);
+
+ FormLayout layout = new FormLayout();
+ layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+ layout.marginWidth =
convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+ layout.spacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ control.setLayout(layout);
+
+ Label resolutionsLabel = new Label(control, SWT.NONE);
+ resolutionsLabel
+ .setText(MarkerMessages.MarkerResolutionDialog_Resolutions_List_Title);
+
+ resolutionsLabel.setLayoutData(new FormData());
+
+ createResolutionsList(control);
+
+ FormData listData = new FormData();
+ listData.top = new FormAttachment(resolutionsLabel, 0);
+ listData.left = new FormAttachment(0);
+ listData.right = new FormAttachment(100, 0);
+ listData.height = convertHeightInCharsToPixels(10);
+ resolutionsList.getControl().setLayoutData(listData);
+
+ Label title = new Label(control, SWT.NONE);
+ title
+ .setText(MarkerMessages.MarkerResolutionDialog_Problems_List_Title);
+ FormData labelData = new FormData();
+ labelData.top = new FormAttachment(resolutionsList.getControl(), 0);
+ labelData.left = new FormAttachment(0);
+ title.setLayoutData(labelData);
+
+ createMarkerTable(control);
+
+ Composite buttons = createTableButtons(control);
+ FormData buttonData = new FormData();
+ buttonData.top = new FormAttachment(title, 0);
+ buttonData.right = new FormAttachment(100);
+ buttonData.height = convertHeightInCharsToPixels(10);
+ buttons.setLayoutData(buttonData);
+
+ FormData tableData = new FormData();
+ tableData.top = new FormAttachment(buttons, 0, SWT.TOP);
+ tableData.left = new FormAttachment(0);
+ tableData.bottom = new FormAttachment(100);
+ tableData.right = new FormAttachment(buttons, 0);
+ tableData.height = convertHeightInCharsToPixels(10);
+ markersTable.getControl().setLayoutData(tableData);
+
+ Dialog.applyDialogFont(control);
+
+ resolutionsList.setSelection(new StructuredSelection(resolutionsList
+ .getElementAt(0)));
+
+ markersTable.setAllChecked(true);
+ }
+
+ /**
+ * Create the table buttons for the receiver.
+ *
+ * @param control
+ * @return {@link Composite}
+ */
+ private Composite createTableButtons(Composite control) {
+
+ Composite buttonComposite = new Composite(control, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ layout.horizontalSpacing =
convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ layout.verticalSpacing =
convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+ buttonComposite.setLayout(layout);
+
+ Button selectAll = new Button(buttonComposite, SWT.PUSH);
+ selectAll.setText(MarkerMessages.selectAllAction_title);
+ selectAll.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
+
+ selectAll.addSelectionListener(new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent arg0) {
+ markersTable.setAllChecked(true);
+ setPageComplete(!resolutionsList.getSelection().isEmpty());
+ }
+ });
+
+ Button deselectAll = new Button(buttonComposite, SWT.PUSH);
+ deselectAll.setText(MarkerMessages.filtersDialog_deselectAll);
+ deselectAll
+ .setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
+
+ deselectAll.addSelectionListener(new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent arg0) {
+ markersTable.setAllChecked(false);
+ setPageComplete(false);
+ }
+ });
+
+ return buttonComposite;
+ }
+
+ /**
+ * @param control
+ */
+ private void createResolutionsList(Composite control) {
+ resolutionsList = new ListViewer(control, SWT.BORDER | SWT.SINGLE
+ | SWT.V_SCROLL);
+ resolutionsList.setContentProvider(new IStructuredContentProvider() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return resolutions.keySet().toArray();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {
+
+ }
+ });
+
+ resolutionsList.setLabelProvider(new LabelProvider() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+ */
+ public String getText(Object element) {
+ return ((IMarkerResolution) element).getLabel();
+ }
+ });
+
+ resolutionsList.setInput(this);
+
+ resolutionsList.setComparator(new ViewerComparator() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return ((IMarkerResolution) e1).getLabel().compareTo(
+ ((IMarkerResolution) e1).getLabel());
+ }
+ });
+
+ resolutionsList
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+
+ markersTable.refresh();
+
+ IWorkbenchWindow window = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow();
+ if (window == null)
+ return;
+ IWorkbenchPage page = window.getActivePage();
+ if (page == null)
+ return;
+
+ }
+
+ });
+ }
+
+ /**
+ * Create the table that shows the markers.
+ *
+ * @param control
+ */
+ private void createMarkerTable(Composite control) {
+ markersTable = CheckboxTableViewer.newCheckList(control, SWT.BORDER
+ | SWT.V_SCROLL | SWT.SINGLE);
+
+ createTableColumns();
+
+ markersTable.setContentProvider(new IStructuredContentProvider() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ IMarkerResolution selected = getSelectedResolution();
+ if (selected == null) {
+ return new Object[0];
+ }
+
+ if (resolutions.containsKey(selected)) {
+ return ((Collection) resolutions.get(selected)).toArray();
+ }
+ return EMPTY_MARKER_ARRAY;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {
+
+ }
+ });
+
+ markersTable.setLabelProvider(new ITableLabelProvider() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
+ * int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (columnIndex == 0)
+ return Util.getImage(((IMarker) element).getAttribute(
+ IMarker.SEVERITY, -1));
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
+ * int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ if (columnIndex == 0)
+ return Util.getResourceName((IMarker) element);
+ int line = ((IMarker) element).getAttribute(
+ IMarker.LINE_NUMBER, -1);
+ if (line < 0) {
+ return MarkerMessages.Unknown;
+ }
+ return NLS.bind(MarkerMessages.label_lineNumber, Integer
+ .toString(line));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void addListener(ILabelProviderListener listener) {
+ // do nothing
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+ */
+ public void dispose() {
+ // do nothing
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+ * java.lang.String)
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ // do nothing
+
+ }
+ });
+
+ markersTable.addCheckStateListener(new ICheckStateListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent)
+ */
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ if (event.getChecked() == true) {
+ setPageComplete(true);
+ } else {
+ setPageComplete(markersTable.getCheckedElements().length > 0);
+ }
+
+ }
+ });
+
+ markersTable
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+
+ if (event.getSelection().isEmpty())
+ return;
+ IMarker marker = (IMarker) ((IStructuredSelection) event
+ .getSelection()).getFirstElement();
+ ExtendedMarkersView.openMarkerInEditor(marker,PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage());
+
+ }
+ });
+
+ markersTable.setInput(this);
+ }
+
+ /**
+ * Create the table columns for the receiver.
+ */
+ private void createTableColumns() {
+ TableLayout layout = new TableLayout();
+
+ Table table = markersTable.getTable();
+ table.setLayout(layout);
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ layout.addColumnData(new ColumnWeightData(70, true));
+ TableColumn tc = new TableColumn(table, SWT.NONE, 0);
+ tc
+ .setText(MarkerMessages.MarkerResolutionDialog_Problems_List_Location);
+ layout.addColumnData(new ColumnWeightData(30, true));
+ tc = new TableColumn(table, SWT.NONE, 0);
+ tc
+ .setText(MarkerMessages.MarkerResolutionDialog_Problems_List_Resource);
+
+ }
+
+ /**
+ * Return the marker being edited.
+ *
+ * @return IMarker or <code>null</code>
+ */
+ public IMarker getSelectedMarker() {
+ ISelection selection = markersTable.getSelection();
+ if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
+ IStructuredSelection struct = (IStructuredSelection) selection;
+ if (struct.size() == 1)
+ return (IMarker) struct.getFirstElement();
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+ */
+ public boolean isPageComplete() {
+ return true;
+ }
+
+ /**
+ * Finish has been pressed. Process the resolutions. monitor the monitor to
+ * report to.
+ */
+ /**
+ * @param monitor
+ */
+ /**
+ * @param monitor
+ */
+ void performFinish(IProgressMonitor monitor) {
+
+ final IMarkerResolution resolution = getSelectedResolution();
+ if (resolution == null)
+ return;
+
+ final Object[] checked = markersTable.getCheckedElements();
+ if (checked.length == 0)
+ return;
+
+ if (resolution instanceof WorkbenchMarkerResolution) {
+
+ try {
+ getWizard().getContainer().run(false, true,
+ new IRunnableWithProgress() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void run(IProgressMonitor monitor) {
+ IMarker[] markers = new IMarker[checked.length];
+ System.arraycopy(checked, 0, markers, 0,
+ checked.length);
+ ((WorkbenchMarkerResolution) resolution).run(
+ markers, monitor);
+ }
+
+ });
+ } catch (InvocationTargetException e) {
+ StatusManager.getManager().handle(
+ errorFor(e));
+ } catch (InterruptedException e) {
+ StatusManager.getManager().handle(
+ errorFor(e));
+ }
+
+ } else {
+
+ try {
+ getWizard().getContainer().run(false, true,
+ new IRunnableWithProgress() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void run(IProgressMonitor monitor) {
+ monitor
+ .beginTask(
+ MarkerMessages.MarkerResolutionDialog_Fixing,
+ checked.length);
+ for (int i = 0; i < checked.length; i++) {
+ // Allow paint events and wake up the button
+ getShell().getDisplay().readAndDispatch();
+ if (monitor.isCanceled())
+ return;
+ IMarker marker = (IMarker) checked[i];
+ monitor.subTask(Util.getProperty(
+ IMarker.MESSAGE, marker));
+ resolution.run(marker);
+ monitor.worked(1);
+ }
+ }
+
+ });
+ } catch (InvocationTargetException e) {
+ StatusManager.getManager().handle(
+ errorFor(e));
+ } catch (InterruptedException e) {
+ StatusManager.getManager().handle(
+ errorFor(e));
+ }
+
+ }
+
+ }
+
+ /**
+ * Return the marker resolution that is currently selected/
+ *
+ * @return IMarkerResolution or <code>null</code> if there is no
+ * selection.
+ */
+ private IMarkerResolution getSelectedResolution() {
+ ISelection selection = resolutionsList.getSelection();
+ if (!(selection instanceof IStructuredSelection)) {
+ return null;
+ }
+
+ Object first = ((IStructuredSelection) selection).getFirstElement();
+
+ return (IMarkerResolution) first;
+
+ }
+
+ /**
+ * Return a StatusAdapter for the error
+ *
+ * @param exception
+ * @return StatusAdapter
+ */
+ static final StatusAdapter errorFor(Throwable exception) {
+ IStatus status = new Status(IStatus.ERROR,
+ IDEWorkbenchPlugin.IDE_WORKBENCH, IStatus.ERROR, exception
+ .getLocalizedMessage(), exception);
+ return new StatusAdapter(status);
+ }
+
+}
Added:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixWizard.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixWizard.java
(rev 0)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/xpl/QuickFixWizard.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.jboss.tools.project.examples.dialog.xpl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
+import org.eclipse.ui.internal.ide.StatusUtil;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
+
+/**
+ * QuickFixWizard is the wizard for quick fixes.
+ *
+ * @since 3.4
+ *
+ */
+public class QuickFixWizard extends Wizard {
+
+ private Map resolutionMap;
+ private String description;
+ //private IWorkbenchPartSite partSite;
+
+ /**
+ * Create the wizard with the map of resolutions.
+ *
+ * @param description the description of the problem
+ * @param resolutions
+ * Map key {@link IMarkerResolution} value {@link IMarker} []
+ * @param site the {@link IWorkbenchPartSite} to open the markers in
+ */
+ public QuickFixWizard(String description,Map resolutions) {
+ super();
+ this.resolutionMap = resolutions;
+ this.description = description;
+ //partSite = site;
+ setDefaultPageImageDescriptor(IDEInternalWorkbenchImages
+ .getImageDescriptor(IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG));
+ setNeedsProgressMonitor(true);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#addPages()
+ */
+ public void addPages() {
+ super.addPages();
+ addPage(new QuickFixPage(description,resolutionMap));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ public boolean performFinish() {
+ IRunnableWithProgress finishRunnable = new IRunnableWithProgress() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void run(IProgressMonitor monitor)
+ {
+ IWizardPage[] pages = getPages();
+ monitor.beginTask(MarkerMessages.MarkerResolutionDialog_Fixing,
+ (10 * pages.length) + 1);
+ monitor.worked(1);
+ for (int i = 0; i < pages.length; i++) {
+ //Allow for cancel event processing
+ getShell().getDisplay().readAndDispatch();
+ if(monitor.isCanceled())
+ return;
+ QuickFixPage wizardPage = (QuickFixPage) pages[i];
+ wizardPage.performFinish(new SubProgressMonitor(monitor,10));
+ monitor.worked(1);
+ }
+ monitor.done();
+
+ }
+ };
+
+ try {
+ getContainer().run(false, true, finishRunnable);
+ } catch (InvocationTargetException e) {
+ StatusManager.getManager().handle(
+ StatusUtil.newStatus(IStatus.ERROR,
+ e.getLocalizedMessage(), e));
+ return false;
+ } catch (InterruptedException e) {
+ StatusManager.getManager().handle(
+ StatusUtil.newStatus(IStatus.ERROR,
+ e.getLocalizedMessage(), e));
+ return false;
+ }
+
+ return true;
+ }
+
+}
+
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectUtil.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectUtil.java 2008-11-09
00:29:23 UTC (rev 11620)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectUtil.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -112,7 +112,7 @@
Category other = Category.OTHER;
try {
// TODO add a progress monitor
- File file = getProjectExamplesFile(PROJECT_EXAMPLES_XML,"projectExamples",
".xml",null);
+ File file =
getProjectExamplesFile(getProjectExamplesXml(),"projectExamples",
".xml",null);
if (file.exists() && file.isFile()) {
DocumentBuilderFactory dbf = DocumentBuilderFactory
.newInstance();
@@ -182,6 +182,14 @@
return list;
}
+ private static String getProjectExamplesXml() {
+ String projectXML =
System.getProperty("org.jboss.tools.project.examples.xml");
+ if (projectXML != null && projectXML.length() > 0) {
+ return projectXML;
+ }
+ return PROJECT_EXAMPLES_XML;
+ }
+
private static String getContent(Element child) {
String value = child.getTextContent();
if (value == null) {
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizard.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizard.java 2008-11-09
00:29:23 UTC (rev 11620)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizard.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -20,6 +20,7 @@
import java.util.List;
import java.util.zip.ZipFile;
+import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -27,19 +28,28 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.IOverwriteQuery;
import org.eclipse.ui.wizards.datatransfer.ImportOperation;
import org.eclipse.ui.wizards.datatransfer.ZipFileStructureProvider;
+import org.eclipse.wst.validation.internal.operations.ValidationBuilder;
import org.jboss.tools.project.examples.ProjectExamplesActivator;
+import org.jboss.tools.project.examples.dialog.MarkerDialog;
import org.jboss.tools.project.examples.model.Project;
import org.jboss.tools.project.examples.model.ProjectUtil;
@@ -51,6 +61,7 @@
}
};
+ private List<Project> projects = new ArrayList<Project>();
/**
* The workbench.
*/
@@ -65,6 +76,8 @@
protected boolean overwrite;
+ private WorkspaceJob workspaceJob;
+
public NewProjectExamplesWizard() {
super();
setWindowTitle("New Project Example");
@@ -77,18 +90,18 @@
@Override
public boolean performFinish() {
-
+
if (page.getSelection() == null || page.getSelection().size() <= 0) {
return false;
}
- WorkspaceJob job = new WorkspaceJob("Downloading...") {
+ workspaceJob = new WorkspaceJob("Downloading...") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor)
throws CoreException {
- IStructuredSelection selection= page.getSelection();
+ IStructuredSelection selection = page.getSelection();
Iterator iterator = selection.iterator();
- List<Project> projects = new ArrayList<Project>();
+ projects.clear();
List<File> files = new ArrayList<File>();
while (iterator.hasNext()) {
Object object = iterator.next();
@@ -107,37 +120,94 @@
}
try {
int i = 0;
- for (Project project:projects) {
+ setName("Importing...");
+ for (Project project : projects) {
importProject(project, files.get(i++), monitor);
}
} catch (final Exception e) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
- MessageDialogWithToggle.openError(getShell(), "Error", e
- .getMessage(), "Detail", false,
+ MessageDialogWithToggle.openError(getShell(),
+ "Error", e.getMessage(), "Detail", false,
ProjectExamplesActivator.getDefault()
- .getPreferenceStore(), "errorDialog");
+ .getPreferenceStore(),
+ "errorDialog");
}
-
+
});
ProjectExamplesActivator.log(e);
- }
+ }
return Status.OK_STATUS;
}
};
- job.setUser(true);
- job.schedule();
- //try {
- // job.join();
- //} catch (InterruptedException e) {
- // return false;
- //}
+ workspaceJob.setUser(true);
+ final boolean showQuickFix = page.showQuickFix();
+ workspaceJob.schedule();
+
+ if (showQuickFix) {
+ workspaceJob.addJobChangeListener(new IJobChangeListener() {
+
+ public void aboutToRun(IJobChangeEvent event) {
+
+ }
+
+ public void awake(IJobChangeEvent event) {
+
+ }
+
+ public void done(IJobChangeEvent event) {
+ try {
+ ProjectExamplesActivator.waitForBuildAndValidation.schedule();
+ ProjectExamplesActivator.waitForBuildAndValidation.join();
+
+ } catch (InterruptedException e) {
+ return;
+ }
+ if (showQuickFix) {
+ List<IMarker> markers = ProjectExamplesActivator
+ .getMarkers(projects);
+ if (markers != null && markers.size() > 0) {
+ showQuickFix();
+ }
+ }
+ }
+
+ public void running(IJobChangeEvent event) {
+
+ }
+
+ public void scheduled(IJobChangeEvent event) {
+
+ }
+
+ public void sleeping(IJobChangeEvent event) {
+
+ }
+
+ });
+ }
return true;
}
- private void importProject(Project projectDescription, File file, IProgressMonitor
monitor) throws Exception {
+ private void showQuickFix() {
+
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+
+ Shell shell = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getShell();
+ Dialog dialog = new MarkerDialog(shell, projects);
+ dialog.open();
+ }
+
+ });
+ }
+
+ private void importProject(Project projectDescription, File file,
+ IProgressMonitor monitor) throws Exception {
final String projectName = projectDescription.getName();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProject project = workspace.getRoot().getProject(projectName);
@@ -145,9 +215,11 @@
Display.getDefault().syncExec(new Runnable() {
public void run() {
- overwrite = MessageDialog.openQuestion(getShell(), "Question",
"Overwrite project '" + projectName + "'");
+ overwrite = MessageDialog.openQuestion(getShell(),
+ "Question", "Overwrite project '" + projectName
+ + "'");
}
-
+
});
if (!overwrite) {
return;
@@ -160,8 +232,8 @@
ZipFileStructureProvider structureProvider = new ZipFileStructureProvider(
sourceFile);
- ImportOperation operation = new ImportOperation(workspace.getRoot().getFullPath(),
- structureProvider.getRoot(), structureProvider,
+ ImportOperation operation = new ImportOperation(workspace.getRoot()
+ .getFullPath(), structureProvider.getRoot(), structureProvider,
OVERWRITE_ALL_QUERY);
operation.setContext(getShell());
operation.run(monitor);
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizardPage.java
===================================================================
---
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizardPage.java 2008-11-09
00:29:23 UTC (rev 11620)
+++
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/wizard/NewProjectExamplesWizardPage.java 2008-11-09
00:29:36 UTC (rev 11621)
@@ -26,6 +26,7 @@
import org.eclipse.swt.graphics.Image;
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;
@@ -42,6 +43,7 @@
public class NewProjectExamplesWizardPage extends WizardPage {
private IStructuredSelection selection;
+ private Button showQuickFixButton;
public NewProjectExamplesWizardPage() {
super("org.jboss.tools.project.examples");
@@ -59,6 +61,7 @@
gd.widthHint= 225;
composite.setLayoutData(gd);
+ new Label(composite,SWT.NONE).setText("Projects:");
TreeViewer viewer = new TreeViewer(composite,SWT.MULTI);
Tree tree = viewer.getTree();
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
@@ -107,7 +110,7 @@
projectURL.setText(selectedProject.getUrl());
projectSize.setText(selectedProject.getSizeAsText());
} else {
- Project selectedProject=null;
+ //Project selectedProject=null;
text.setText("");
projectName.setText("");
projectURL.setText("");
@@ -128,6 +131,16 @@
}
});
+
+ showQuickFixButton = new Button(internal,SWT.CHECK);
+ showQuickFixButton.setText("Show the Quick Fix dialog");
+ showQuickFixButton.setSelection(true);
+ gd=new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan=2;
+ showQuickFixButton.setLayoutData(gd);
+ //Label showQuickFixLabel = new Label(internal,SWT.NULL);
+ //showQuickFixLabel.setText("Show the Quick Fix dialog:");
+
setPageComplete(false);
setControl(composite);
@@ -194,4 +207,11 @@
public IStructuredSelection getSelection() {
return selection;
}
+
+ public boolean showQuickFix() {
+ if (showQuickFixButton != null) {
+ return showQuickFixButton.getSelection();
+ }
+ return false;
+ }
}