com.siteview.mde.internal.ui.util.PluginWorkingSet.java Source code

Java tutorial

Introduction

Here is the source code for com.siteview.mde.internal.ui.util.PluginWorkingSet.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2009 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 com.siteview.mde.internal.ui.util;

import com.siteview.mde.core.monitor.*;

import java.util.ArrayList;
import java.util.HashSet;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.WizardPage;
import com.siteview.mde.internal.core.MDECore;
import com.siteview.mde.internal.core.MDEPreferencesManager;
import com.siteview.mde.internal.ui.*;
import com.siteview.mde.internal.ui.elements.DefaultContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.dialogs.*;

public class PluginWorkingSet extends WizardPage implements IWorkingSetPage {

    class ContentProvider extends DefaultContentProvider implements ITreeContentProvider {
        public Object[] getElements(Object inputElement) {
            return MonitorRegistry.getAllModels();
        }

        public Object[] getChildren(Object parentElement) {
            return null;
        }

        public Object getParent(Object element) {
            return null;
        }

        public boolean hasChildren(Object element) {
            return false;
        }
    }

    class WorkingSetLabelProvider extends LabelProvider {

        MDEPreferencesManager pref = MDEPlugin.getDefault().getPreferenceManager();

        public WorkingSetLabelProvider() {
            MDEPlugin.getDefault().getLabelProvider().connect(this);
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
         */
        public String getText(Object element) {
            if (element instanceof IMonitorModelBase) {
                IMonitorBase plugin = ((IMonitorModelBase) element).getMonitorBase();
                String showType = pref.getString(IPreferenceConstants.PROP_SHOW_OBJECTS);
                if (showType.equals(IPreferenceConstants.VALUE_USE_IDS))
                    return plugin.getId();
                return plugin.getTranslatedName();
            }
            return super.getText(element);
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
         */
        public Image getImage(Object element) {
            return MDEPlugin.getDefault().getLabelProvider().getImage(element);
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.LabelProvider#dispose()
         */
        public void dispose() {
            super.dispose();
            MDEPlugin.getDefault().getLabelProvider().disconnect(this);
        }

    }

    class CheckboxFilteredTree extends FilteredTree {

        public CheckboxFilteredTree(Composite parent, int treeStyle, PatternFilter filter) {
            super(parent, treeStyle, filter, true);
        }

        protected TreeViewer doCreateTreeViewer(Composite parent, int style) {
            return new CheckboxTreeViewer(parent, style);
        }

        public CheckboxTreeViewer getCheckboxTreeViewer() {
            return (CheckboxTreeViewer) getViewer();
        }

    }

    private IWorkingSet fWorkingSet;
    private Text fWorkingSetName;
    private CheckboxFilteredTree fTree;
    private boolean fFirstCheck;

    public PluginWorkingSet() {
        super("page1", MDEUIMessages.PluginWorkingSet_title, MDEPluginImages.DESC_DEFCON_WIZ); //$NON-NLS-1$ 
        MDEPlugin.getDefault().getLabelProvider().connect(this);
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.dialogs.IWorkingSetPage#finish()
     */
    public void finish() {
        Object[] checked = fTree.getCheckboxTreeViewer().getCheckedElements();
        ArrayList list = new ArrayList();
        for (int i = 0; i < checked.length; i++) {
            String id = ((IMonitorModelBase) checked[i]).getMonitorBase().getId();
            if (id != null && id.length() > 0)
                list.add(new PersistablePluginObject(id));
        }
        PersistablePluginObject[] objects = (PersistablePluginObject[]) list
                .toArray(new PersistablePluginObject[list.size()]);

        String workingSetName = fWorkingSetName.getText().trim();
        if (fWorkingSet == null) {
            IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
            fWorkingSet = workingSetManager.createWorkingSet(workingSetName, objects);
        } else {
            fWorkingSet.setName(workingSetName);
            fWorkingSet.setElements(objects);
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.dialogs.IWorkingSetPage#getSelection()
     */
    public IWorkingSet getSelection() {
        return fWorkingSet;
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.dialogs.IWorkingSetPage#setSelection(org.eclipse.ui.IWorkingSet)
     */
    public void setSelection(IWorkingSet workingSet) {
        fWorkingSet = workingSet;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout());
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        setControl(composite);

        Label label = new Label(composite, SWT.WRAP);
        label.setText(MDEUIMessages.PluginWorkingSet_setName);
        label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        fWorkingSetName = new Text(composite, SWT.SINGLE | SWT.BORDER);
        fWorkingSetName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        fWorkingSetName.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                validatePage();
            }
        });
        fWorkingSetName.setFocus();

        label = new Label(composite, SWT.WRAP);
        label.setText(MDEUIMessages.PluginWorkingSet_setContent);
        label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        fTree = new CheckboxFilteredTree(composite, SWT.BORDER, new PatternFilter());
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 250;
        fTree.getViewer().getControl().setLayoutData(gd);
        final IStructuredContentProvider fTableContentProvider = new ContentProvider();
        fTree.getCheckboxTreeViewer().setContentProvider(fTableContentProvider);
        fTree.getCheckboxTreeViewer().setLabelProvider(new WorkingSetLabelProvider());
        fTree.getCheckboxTreeViewer().setUseHashlookup(true);
        fTree.getCheckboxTreeViewer().setInput(MDECore.getDefault());

        fTree.getCheckboxTreeViewer().addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                validatePage();
            }
        });

        // Add select / deselect all buttons for bug 46669
        Composite buttonComposite = new Composite(composite, SWT.NONE);
        buttonComposite.setLayout(new GridLayout(2, true));
        buttonComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

        Button selectAllButton = new Button(buttonComposite, SWT.PUSH);
        selectAllButton.setText(MDEUIMessages.PluginWorkingSet_selectAll_label);
        selectAllButton.setToolTipText(MDEUIMessages.PluginWorkingSet_selectAll_toolTip);
        selectAllButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent selectionEvent) {
                fTree.getCheckboxTreeViewer().setCheckedElements(
                        fTableContentProvider.getElements(fTree.getCheckboxTreeViewer().getInput()));
                validatePage();
            }
        });
        selectAllButton.setLayoutData(new GridData());
        SWTUtil.setButtonDimensionHint(selectAllButton);

        Button deselectAllButton = new Button(buttonComposite, SWT.PUSH);
        deselectAllButton.setText(MDEUIMessages.PluginWorkingSet_deselectAll_label);
        deselectAllButton.setToolTipText(MDEUIMessages.PluginWorkingSet_deselectAll_toolTip);
        deselectAllButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent selectionEvent) {
                fTree.getCheckboxTreeViewer().setCheckedElements(new Object[0]);
                validatePage();
            }
        });
        deselectAllButton.setLayoutData(new GridData());
        SWTUtil.setButtonDimensionHint(deselectAllButton);
        setPageComplete(false);
        setMessage(MDEUIMessages.PluginWorkingSet_message);

        initialize();
        Dialog.applyDialogFont(composite);

        PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.PLUGIN_WORKING_SET);
    }

    /**
     * 
     */
    private void initialize() {
        if (fWorkingSet != null) {
            HashSet set = new HashSet();
            IAdaptable[] elements = fWorkingSet.getElements();
            for (int i = 0; i < elements.length; i++) {
                if (elements[i] instanceof PersistablePluginObject)
                    set.add(((PersistablePluginObject) elements[i]).getPluginID());
            }

            IMonitorModelBase[] bases = MonitorRegistry.getAllModels();
            for (int i = 0; i < bases.length; i++) {

                String id = bases[i].getMonitorBase().getId();
                if (id == null)
                    continue;
                if (set.contains(id)) {
                    fTree.getCheckboxTreeViewer().setChecked(bases[i], true);
                    set.remove(id);
                }
                if (set.isEmpty())
                    break;
            }
            fWorkingSetName.setText(fWorkingSet.getName());
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#dispose()
     */
    public void dispose() {
        MDEPlugin.getDefault().getLabelProvider().disconnect(this);
        super.dispose();
    }

    private void validatePage() {
        String errorMessage = null;
        String newText = fWorkingSetName.getText();

        if (newText.trim().length() == 0) {
            errorMessage = MDEUIMessages.PluginWorkingSet_emptyName;
            if (fFirstCheck) {
                setPageComplete(false);
                fFirstCheck = false;
                return;
            }
        }
        if (errorMessage == null && fTree.getCheckboxTreeViewer().getCheckedElements().length == 0) {
            errorMessage = MDEUIMessages.PluginWorkingSet_noPluginsChecked;
        }

        if (errorMessage == null && fWorkingSet == null) {
            IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
            for (int i = 0; i < workingSets.length; i++) {
                if (newText.equals(workingSets[i].getName())) {
                    errorMessage = MDEUIMessages.PluginWorkingSet_nameInUse;
                    break;
                }
            }
        }
        setErrorMessage(errorMessage);
        setPageComplete(errorMessage == null);
    }

}