net.sf.sveditor.ui.wizards.DocGenSelectPkgsWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.sveditor.ui.wizards.DocGenSelectPkgsWizardPage.java

Source

/****************************************************************************
 * Copyright (c) 2008-2010 Matthew Ballance 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:
 *     Armond Paiva - initial implementation
 ****************************************************************************/

package net.sf.sveditor.ui.wizards;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.sveditor.core.SVCorePlugin;
import net.sf.sveditor.core.Tuple;
import net.sf.sveditor.core.db.index.ISVDBIndex;
import net.sf.sveditor.core.db.index.SVDBDeclCacheItem;
import net.sf.sveditor.core.db.search.SVDBFindPackageMatcher;
import net.sf.sveditor.ui.SVDBIconUtils;

import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
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.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.dialogs.PatternFilter;

public class DocGenSelectPkgsWizardPage extends WizardPage {

    private FilteredTree fLeftList;
    private FilteredTree fRightList;

    private Set<SVDBDeclCacheItem> fPackagesLeft;
    private Set<SVDBDeclCacheItem> fPackagesRight;

    Map<String, Tuple<SVDBDeclCacheItem, ISVDBIndex>> fPkgMap;

    public Map<String, Tuple<SVDBDeclCacheItem, ISVDBIndex>> getPkgMap() {
        return fPkgMap;
    }

    public Set<SVDBDeclCacheItem> getSelectedPackages() {
        return fPackagesRight;
    }

    public void setfSelectedPackages(Set<SVDBDeclCacheItem> fSelectedPackages) {
        this.fPackagesRight = fSelectedPackages;
    }

    protected DocGenSelectPkgsWizardPage() {
        super("Select Packages");
        fPackagesLeft = new HashSet<SVDBDeclCacheItem>();
        fPackagesRight = new HashSet<SVDBDeclCacheItem>();
        fPkgMap = new HashMap<String, Tuple<SVDBDeclCacheItem, ISVDBIndex>>();
    }

    public void createControl(Composite parent) {

        Composite container = new Composite(parent, SWT.NULL);
        final GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 3;
        container.setLayout(gridLayout);
        setControl(container);

        createLabel(container);
        createLeftTable(container);
        createSelectionControls(container);
        createRightTable(container);

        List<ISVDBIndex> projIndexList = SVCorePlugin.getDefault().getSVDBIndexRegistry().getAllProjectLists();
        for (ISVDBIndex svdbIndex : projIndexList) {
            List<SVDBDeclCacheItem> pkgs = svdbIndex.findGlobalScopeDecl(new NullProgressMonitor(), "pkgs",
                    new SVDBFindPackageMatcher());
            for (SVDBDeclCacheItem pkg : pkgs) {
                if (!fPkgMap.containsKey(pkg.getName())) {
                    fPkgMap.put(pkg.getName(), new Tuple<SVDBDeclCacheItem, ISVDBIndex>(pkg, svdbIndex));
                }
            }
        }

        for (Tuple<SVDBDeclCacheItem, ISVDBIndex> tuple : fPkgMap.values()) {
            fPackagesLeft.add(tuple.first());
        }

        fLeftList.getViewer().setInput(fPackagesLeft);
        fRightList.getViewer().setInput(fPackagesRight);

    }

    private void createSelectionControls(Composite parent) {
        Composite container = new Composite(parent, SWT.NULL);
        Button button;

        container.setLayoutData(new GridData(GridData.FILL_VERTICAL));
        container.setLayout(new RowLayout(SWT.VERTICAL));

        /**
         * Add all packages to the right hand side
         */
        button = new Button(container, SWT.PUSH);
        button.setText("&Select All");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                fPackagesLeft.clear();
                fPackagesRight.clear();
                for (Tuple<SVDBDeclCacheItem, ISVDBIndex> tuple : fPkgMap.values()) {
                    fPackagesRight.add(tuple.first());
                }
                fRightList.getViewer().setInput(fPackagesRight);
                fLeftList.getViewer().setInput(fPackagesLeft);
                updatePageComplete();
            }
        });

        /**
         * Clear all from the right to the left
         */
        button = new Button(container, SWT.PUSH);
        button.setText("&Clear All");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                for (Tuple<SVDBDeclCacheItem, ISVDBIndex> tuple : fPkgMap.values()) {
                    fPackagesLeft.add(tuple.first());
                }
                fPackagesRight.clear();
                fLeftList.getViewer().setInput(fPackagesLeft);
                fRightList.getViewer().setInput(fPackagesRight);
                updatePageComplete();
            }
        });

        /**
         * Button to add currently selected items
         */
        button = new Button(container, SWT.PUSH);
        button.setText("&Add Selected");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                SVDBDeclCacheItem svdbci = new SVDBDeclCacheItem();
                TreeSelection selection = (TreeSelection) fLeftList.getViewer().getSelection();
                if ((selection != null) && (selection.getFirstElement() instanceof SVDBDeclCacheItem)) {
                    svdbci = (SVDBDeclCacheItem) selection.getFirstElement();
                }

                for (Tuple<SVDBDeclCacheItem, ISVDBIndex> tuple : fPkgMap.values()) {
                    if (tuple.first().equals(svdbci)) {
                        fPackagesLeft.remove(tuple.first());
                        fPackagesRight.add(tuple.first());
                    }
                }
                fLeftList.getViewer().setInput(fPackagesLeft);
                fRightList.getViewer().setInput(fPackagesRight);
                updatePageComplete();
            }
        });

        /**
         * Button to remove selected items
         */
        button = new Button(container, SWT.PUSH);
        button.setText("&Remove Selected");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                SVDBDeclCacheItem svdbci = new SVDBDeclCacheItem();
                TreeSelection selection = (TreeSelection) fRightList.getViewer().getSelection();
                if ((selection != null) && (selection.getFirstElement() instanceof SVDBDeclCacheItem)) {
                    svdbci = (SVDBDeclCacheItem) selection.getFirstElement();
                }

                for (Tuple<SVDBDeclCacheItem, ISVDBIndex> tuple : fPkgMap.values()) {
                    if (tuple.first().equals(svdbci)) {
                        fPackagesLeft.add(tuple.first());
                        fPackagesRight.remove(tuple.first());
                    }
                }
                fLeftList.getViewer().setInput(fPackagesLeft);
                fRightList.getViewer().setInput(fPackagesRight);
                updatePageComplete();
            }
        });

    }

    private void createLabel(Composite container) {
        final Label label = new Label(container, SWT.NONE);
        final GridData gridData = new GridData();
        gridData.horizontalSpan = 3;
        label.setLayoutData(gridData);
        label.setText("Select the packages for which the documentation is to be generated for");
    }

    private void createLeftTable(Composite parent) {

        fLeftList = new FilteredTree(parent, SWT.H_SCROLL | SWT.V_SCROLL, new PatternFilter(), true);

        fLeftList.setLayoutData(new GridData(GridData.FILL_BOTH));

        TreeViewer viewer = fLeftList.getViewer();

        viewer.setContentProvider(new ITreeContentProvider() {
            Object fInput;

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

            public void dispose() {
            }

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

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

            public Object[] getElements(Object inputElement) {
                if (fInput instanceof Collection<?>) {
                    return ((Collection<?>) fInput).toArray();
                } else {
                    return new Object[0];
                }
            }

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

        viewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                if (element instanceof SVDBDeclCacheItem) {
                    return ((SVDBDeclCacheItem) element).getName();
                } else {
                    return "<unexpected-item-type>";
                }
            }

            @Override
            public Image getImage(Object element) {
                if (element instanceof SVDBDeclCacheItem) {
                    return SVDBIconUtils.getIcon(((SVDBDeclCacheItem) element).getType());
                }
                return super.getImage(element);
            }
        });

    }

    private void createRightTable(Composite parent) {

        fRightList = new FilteredTree(parent, SWT.H_SCROLL | SWT.V_SCROLL, new PatternFilter(), true);

        fRightList.setLayoutData(new GridData(GridData.FILL_BOTH));

        TreeViewer viewer = fRightList.getViewer();

        viewer.setContentProvider(new ITreeContentProvider() {
            Object fInput;

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

            public void dispose() {
            }

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

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

            public Object[] getElements(Object inputElement) {
                if (fInput instanceof Collection<?>) {
                    return ((Collection<?>) fInput).toArray();
                } else {
                    return new Object[0];
                }
            }

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

        viewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                if (element instanceof SVDBDeclCacheItem) {
                    return ((SVDBDeclCacheItem) element).getName();
                } else {
                    return "<unexpected-item-type>";
                }
            }

            @Override
            public Image getImage(Object element) {
                if (element instanceof SVDBDeclCacheItem) {
                    return SVDBIconUtils.getIcon(((SVDBDeclCacheItem) element).getType());
                }
                return super.getImage(element);
            }
        });
    }

    public boolean hasSelection() {
        return fPackagesRight.size() != 0;
    }

    protected void updatePageComplete() {
        setPageComplete(hasSelection());
    }

}