Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.m2e.core/src/org/eclipse/m2e/core/wizards/MavenProjectSelectionDialog.java')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/wizards/MavenProjectSelectionDialog.java192
1 files changed, 192 insertions, 0 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/wizards/MavenProjectSelectionDialog.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/wizards/MavenProjectSelectionDialog.java
new file mode 100644
index 00000000..77db0415
--- /dev/null
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/wizards/MavenProjectSelectionDialog.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2010 Sonatype, Inc.
+ * 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:
+ * Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.core.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+import org.eclipse.m2e.core.core.IMavenConstants;
+import org.eclipse.m2e.core.core.MavenLogger;
+import org.eclipse.m2e.core.core.Messages;
+import org.eclipse.m2e.core.ui.dialogs.AbstractMavenDialog;
+
+
+/**
+ * A simple dialog allowing the selection of Maven projects and subfolders containing POMs.
+ */
+public class MavenProjectSelectionDialog extends AbstractMavenDialog {
+
+ protected static final String DIALOG_SETTINGS = MavenProjectSelectionDialog.class.getName();
+
+ protected static final long SEARCH_DELAY = 500L; //in milliseconds
+
+ private FilteredTree filteredTree;
+
+ private boolean useCheckboxTree;
+
+ /** Creates a dialog instance. */
+ public MavenProjectSelectionDialog(Shell parent, boolean useCheckboxTree) {
+ this(parent);
+ this.useCheckboxTree = useCheckboxTree;
+ }
+
+ /** Creates a dialog instance. */
+ public MavenProjectSelectionDialog(Shell parent) {
+ super(parent, DIALOG_SETTINGS);
+
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ setTitle(Messages.getString("projectSelectionDialog.title")); //$NON-NLS-1$
+ }
+
+ /** Produces the result of the selection. */
+ protected void computeResult() {
+ if(useCheckboxTree) {
+ List<Object> result = new ArrayList<Object>();
+ collectCheckedItems(getViewer().getTree().getItems(), result);
+ setResult(result);
+ } else {
+ setResult(((IStructuredSelection) getViewer().getSelection()).toList());
+ }
+ }
+
+ private void collectCheckedItems(TreeItem[] items, List<Object> list) {
+ for(TreeItem item : items) {
+ if(item.getChecked()) {
+ Object data = item.getData();
+ if(data != null) {
+ list.add(data);
+ }
+ }
+ collectCheckedItems(item.getItems(), list);
+ }
+ }
+
+ /** Creates the dialog controls. */
+ protected Control createDialogArea(Composite parent) {
+ readSettings();
+
+ Composite composite = (Composite) super.createDialogArea(parent);
+
+ filteredTree = new FilteredTree(composite, SWT.BORDER | (useCheckboxTree ? SWT.CHECK : 0), new PatternFilter(),
+ true);
+ filteredTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ getViewer().setContentProvider(new MavenContainerContentProvider());
+ getViewer().setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider());
+ getViewer().setInput(ResourcesPlugin.getWorkspace());
+
+ getViewer().addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(DoubleClickEvent event) {
+ okPressed();
+ }
+ });
+
+ return composite;
+ }
+
+ protected void okPressed() {
+ super.okPressed();
+ }
+
+ protected TreeViewer getViewer() {
+ return filteredTree.getViewer();
+ }
+
+ /** The content provider class. */
+ protected static class MavenContainerContentProvider implements ITreeContentProvider {
+
+ /** Returns the children of the parent node. */
+ public Object[] getChildren(Object parent) {
+ if(parent instanceof IWorkspace) {
+ IProject[] projects = ((IWorkspace) parent).getRoot().getProjects();
+
+ List<IProject> children = new ArrayList<IProject>();
+ for(IProject project : projects) {
+ try {
+ if(project.isOpen() && project.hasNature(IMavenConstants.NATURE_ID)) {
+ children.add(project);
+ }
+ } catch(CoreException e) {
+ MavenLogger.log("Error checking project: " + e.getMessage(), e);
+ }
+ }
+ return children.toArray();
+ } else if(parent instanceof IContainer) {
+ IContainer container = (IContainer) parent;
+ if(container.isAccessible()) {
+ try {
+ List<IResource> children = new ArrayList<IResource>();
+ IResource[] members = container.members();
+ for(int i = 0; i < members.length; i++ ) {
+ if(members[i] instanceof IContainer
+ && ((IContainer) members[i]).exists(new Path(IMavenConstants.POM_FILE_NAME))) {
+ children.add(members[i]);
+ }
+ }
+ return children.toArray();
+ } catch(CoreException e) {
+ MavenLogger.log("Error checking container: " + e.getMessage(), e);
+ }
+ }
+ }
+ return new Object[0];
+ }
+
+ /** Returns the parent of the given element. */
+ public Object getParent(Object element) {
+ if(element instanceof IResource) {
+ return ((IResource) element).getParent();
+ }
+ return null;
+ }
+
+ /** Returns true if the element has any children. */
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ /** Disposes of any resources used. */
+ public void dispose() {
+ }
+
+ /** Handles the input change. */
+ public void inputChanged(Viewer viewer, Object arg1, Object arg2) {
+ }
+
+ /** Returns the elements of the given root. */
+ public Object[] getElements(Object element) {
+ return getChildren(element);
+ }
+ }
+}

Back to the top