com.liferay.ide.project.ui.wizard.WorkingSetGroup.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.project.ui.wizard.WorkingSetGroup.java

Source

/*******************************************************************************
 * 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 com.liferay.ide.project.ui.wizard;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.resource.DeviceResourceException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.window.Window;
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.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.IWorkingSetManager;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog;

/**
 * Copied from org.eclipse.m2e.core.ui.internal.components.WorkingSetGroup
 */
// TODO reconcile with WorkingSets
public class WorkingSetGroup {

    static final List<String> WORKING_SET_IDS = Arrays.asList( //
            "org.eclipse.ui.resourceWorkingSetPage", "org.eclipse.jdt.ui.JavaWorkingSetPage"); //$NON-NLS-1$ //$NON-NLS-2$

    ComboViewer workingsetComboViewer;

    Button addToWorkingSetButton;

    final List<IWorkingSet> workingSets;

    final Shell shell;

    public WorkingSetGroup(Composite container, List<IWorkingSet> workingSets, Shell shell) {
        this.workingSets = workingSets;
        this.shell = shell;

        createControl(container);
    }

    private void createControl(Composite container) {
        addToWorkingSetButton = new Button(container, SWT.CHECK);
        GridData gd_addToWorkingSetButton = new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1);
        gd_addToWorkingSetButton.verticalIndent = 12;
        addToWorkingSetButton.setLayoutData(gd_addToWorkingSetButton);
        addToWorkingSetButton.setSelection(true);
        addToWorkingSetButton.setData("name", "addToWorkingSetButton"); //$NON-NLS-1$ //$NON-NLS-2$
        addToWorkingSetButton.setText("Add project to working set");
        addToWorkingSetButton.setSelection(false);

        final Label workingsetLabel = new Label(container, SWT.NONE);
        GridData gd_workingsetLabel = new GridData();
        gd_workingsetLabel.horizontalIndent = 10;
        workingsetLabel.setLayoutData(gd_workingsetLabel);
        workingsetLabel.setEnabled(false);
        workingsetLabel.setData("name", "workingsetLabel"); //$NON-NLS-1$ //$NON-NLS-2$
        workingsetLabel.setText("Working set:");

        Combo workingsetCombo = new Combo(container, SWT.READ_ONLY);
        workingsetCombo.setEnabled(false);
        workingsetCombo.setData("name", "workingsetCombo"); //$NON-NLS-1$ //$NON-NLS-2$
        workingsetCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        workingsetComboViewer = new ComboViewer(workingsetCombo);
        workingsetComboViewer.setContentProvider(new IStructuredContentProvider() {
            public Object[] getElements(Object input) {
                if (input instanceof IWorkingSet[]) {
                    return (IWorkingSet[]) input;
                } else if (input instanceof List<?>) {
                    return new Object[] { input };
                } else if (input instanceof Set<?>) {
                    return ((Set<?>) input).toArray();
                }
                return new IWorkingSet[0];
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            public void dispose() {
            }
        });
        workingsetComboViewer.setLabelProvider(new LabelProvider() {
            private ResourceManager images = new LocalResourceManager(JFaceResources.getResources());

            @SuppressWarnings("deprecation")
            public Image getImage(Object element) {
                if (element instanceof IWorkingSet) {
                    ImageDescriptor imageDescriptor = ((IWorkingSet) element).getImage();
                    if (imageDescriptor != null) {
                        try {
                            return (Image) images.create(imageDescriptor);
                        } catch (DeviceResourceException ex) {
                            return null;
                        }
                    }
                }
                return super.getImage(element);
            }

            public String getText(Object element) {
                if (element instanceof IWorkingSet) {
                    return ((IWorkingSet) element).getLabel();
                } else if (element instanceof List<?>) {
                    StringBuffer sb = new StringBuffer();
                    for (Object o : (List<?>) element) {
                        if (o instanceof IWorkingSet) {
                            if (sb.length() > 0) {
                                sb.append(", "); //$NON-NLS-1$
                            }
                            sb.append(((IWorkingSet) o).getLabel());
                        }
                    }
                    return sb.toString();
                }
                return super.getText(element);
            }

            public void dispose() {
                images.dispose();
                super.dispose();
            }
        });

        workingsetComboViewer.setComparator(new ViewerComparator());

        final Button newWorkingSetButton = new Button(container, SWT.NONE);
        newWorkingSetButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
        newWorkingSetButton.setData("name", "configureButton"); //$NON-NLS-1$ //$NON-NLS-2$
        newWorkingSetButton.setText("More...");
        newWorkingSetButton.setEnabled(false);
        newWorkingSetButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
                IWorkingSetSelectionDialog dialog = workingSetManager.createWorkingSetSelectionDialog(shell, true,
                        WORKING_SET_IDS.toArray(new String[0]));
                if (dialog.open() == Window.OK) {
                    IWorkingSet[] workingSets = dialog.getSelection();
                    selectWorkingSets(Arrays.asList(workingSets));
                }
            }
        });

        if (selectWorkingSets(workingSets)) {
            addToWorkingSetButton.setSelection(true);
            workingsetLabel.setEnabled(true);
            workingsetComboViewer.getCombo().setEnabled(true);
            newWorkingSetButton.setEnabled(true);
        }

        addToWorkingSetButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                boolean addToWorkingingSet = addToWorkingSetButton.getSelection();
                workingsetLabel.setEnabled(addToWorkingingSet);
                workingsetComboViewer.getCombo().setEnabled(addToWorkingingSet);
                newWorkingSetButton.setEnabled(addToWorkingingSet);
                if (addToWorkingingSet) {
                    updateConfiguration();
                } else {
                    workingSets.clear();
                }
            }
        });

        workingsetComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateConfiguration();
            }
        });
    }

    protected void updateConfiguration() {
        if (addToWorkingSetButton.getSelection()) {
            IStructuredSelection selection = (IStructuredSelection) workingsetComboViewer.getSelection();
            Object o = selection.getFirstElement();
            if (o != null) {
                workingSets.clear();
                if (o instanceof IWorkingSet) {
                    workingSets.add((IWorkingSet) o);
                } else if (o instanceof List<?>) {
                    @SuppressWarnings("unchecked")
                    List<IWorkingSet> l = (List<IWorkingSet>) o;
                    workingSets.addAll(l);
                }
            }
        }
    }

    Set<IWorkingSet> getWorkingSets() {
        Set<IWorkingSet> workingSets = new HashSet<IWorkingSet>();

        IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
        for (IWorkingSet workingSet : workingSetManager.getWorkingSets()) {
            if (!workingSet.isEmpty()) {
                IAdaptable[] elements = workingSet.getElements();
                IResource resource = (IResource) elements[0].getAdapter(IResource.class);
                if (resource != null) {
                    workingSets.add(workingSet);
                }
            } else {
                if (WORKING_SET_IDS.contains(workingSet.getId())) {
                    workingSets.add(workingSet);
                }
            }
        }

        return workingSets;
    }

    public void dispose() {
        workingsetComboViewer.getLabelProvider().dispose();
    }

    public boolean selectWorkingSets(List<IWorkingSet> workingSets) {
        Set<IWorkingSet> defaultSets = getWorkingSets();
        workingsetComboViewer.setInput(defaultSets);

        if (workingSets != null && workingSets.size() > 0) {
            if (workingSets.size() == 1) {
                IWorkingSet workingSet = workingSets.get(0);
                if (defaultSets.contains(workingSet)) {
                    workingsetComboViewer.setSelection(new StructuredSelection(workingSet));
                }
            } else {
                workingsetComboViewer.add(workingSets);
                workingsetComboViewer.setSelection(new StructuredSelection((Object) workingSets));
            }
            return true;
        }
        return false;
    }
}