Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/AssignWorkingSetDialog.java')
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/AssignWorkingSetDialog.java174
1 files changed, 174 insertions, 0 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/AssignWorkingSetDialog.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/AssignWorkingSetDialog.java
new file mode 100644
index 00000000..3acd4bee
--- /dev/null
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/AssignWorkingSetDialog.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Igor Fedorenko
+ * 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:
+ * Igor Fedorenko - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.core.ui.internal.dialogs;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+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.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkingSet;
+import org.eclipse.ui.IWorkingSetManager;
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.m2e.core.internal.IMavenConstants;
+import org.eclipse.m2e.core.ui.internal.Messages;
+import org.eclipse.m2e.core.ui.internal.components.NestedProjectsComposite;
+import org.eclipse.m2e.core.ui.internal.components.WorkingSetGroup;
+
+
+/**
+ * @since 1.5
+ */
+@SuppressWarnings("restriction")
+public class AssignWorkingSetDialog extends TitleAreaDialog {
+
+ private final IProject[] initialSelection;
+
+ NestedProjectsComposite selectedProjects;
+
+ private List<IWorkingSet> workingSets = new ArrayList<IWorkingSet>();
+
+ Set<IProject> allWorkingSetProjects = getAllWorkingSetProjects();
+
+ WorkingSetGroup workingSetGroup;
+
+ public AssignWorkingSetDialog(Shell parentShell, IProject[] initialSelection) {
+ super(parentShell);
+ this.initialSelection = initialSelection;
+ }
+
+ private static Set<IProject> getAllWorkingSetProjects() {
+ Set<IProject> projects = new HashSet<IProject>();
+ IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager();
+ for(IWorkingSet workingSet : manager.getAllWorkingSets()) {
+ try {
+ for(IAdaptable element : workingSet.getElements()) {
+ IProject project = (IProject) element.getAdapter(IProject.class);
+ if(project != null) {
+ projects.add(project);
+ }
+ }
+ } catch(IllegalStateException ignored) {
+ // ignore bad/misconfigured working sets
+ }
+ }
+ return projects;
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ setTitle(Messages.AssignWorkingSetDialog_title);
+
+ Composite area = (Composite) super.createDialogArea(parent);
+
+ Composite composite = new Composite(area, SWT.NONE);
+ composite.setLayout(new GridLayout(3, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+
+ Composite filtersComposite = new Composite(composite, SWT.NONE);
+ filtersComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
+ GridLayout gl_filtersComposite = new GridLayout(4, false);
+ gl_filtersComposite.verticalSpacing = 0;
+ gl_filtersComposite.marginWidth = 0;
+ gl_filtersComposite.marginHeight = 0;
+ filtersComposite.setLayout(gl_filtersComposite);
+
+ final Button btnFilterAssignedProjects = new Button(filtersComposite, SWT.CHECK);
+ btnFilterAssignedProjects.setText(Messages.AssignWorkingSetDialog_btnFilterAssignedProjects_text);
+ btnFilterAssignedProjects.setSelection(true);
+ btnFilterAssignedProjects.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selectedProjects.refresh();
+ }
+ });
+
+ final Button btnFilterClosedProjects = new Button(filtersComposite, SWT.CHECK);
+ btnFilterClosedProjects.setText(Messages.AssignWorkingSetDialog_btnFilterClosedProjects_text);
+ btnFilterClosedProjects.setSelection(true);
+ btnFilterClosedProjects.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selectedProjects.refresh();
+ }
+ });
+
+ this.selectedProjects = new NestedProjectsComposite(composite, SWT.NONE, initialSelection) {
+ @Override
+ protected boolean isInteresting(IProject project) throws CoreException {
+ if(btnFilterClosedProjects.getSelection() && !project.isAccessible()) {
+ return false;
+ }
+ if(project.isAccessible() && !project.hasNature(IMavenConstants.NATURE_ID)) {
+ // project.hasNature throws an exception for inaccessible projects
+ return false;
+ }
+ return !btnFilterAssignedProjects.getSelection() || !allWorkingSetProjects.contains(project);
+ }
+
+ @Override
+ protected void createButtons(Composite selectionActionComposite) {
+ super.createButtons(selectionActionComposite);
+
+ Label label = new Label(selectionActionComposite, SWT.SEPARATOR | SWT.HORIZONTAL);
+ label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+
+ Button btnAssign = new Button(selectionActionComposite, SWT.NONE);
+ btnAssign.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+ btnAssign.setText(Messages.AssignWorkingSetDialog_btnAssign_text);
+ btnAssign.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ assignWorkingSets();
+ reset();
+ }
+ });
+ }
+ };
+ selectedProjects.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
+
+ this.workingSetGroup = new WorkingSetGroup(composite, workingSets, getShell());
+
+ return area;
+ }
+
+ public IWorkingSet[] getWorkingSets() {
+ return workingSets.toArray(new IWorkingSet[workingSets.size()]);
+ }
+
+ public IProject[] getSelectedProjects() {
+ return selectedProjects.getSelectedProjects();
+ }
+
+ public void assignWorkingSets() {
+ IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager();
+ IWorkingSet[] workingSets = getWorkingSets();
+ for(IProject project : getSelectedProjects()) {
+ manager.addToWorkingSets(project, workingSets);
+ allWorkingSetProjects.add(project);
+ }
+ }
+
+}

Back to the top