org.limy.eclipse.qalab.propertypage.SourceDirSelector.java Source code

Java tutorial

Introduction

Here is the source code for org.limy.eclipse.qalab.propertypage.SourceDirSelector.java

Source

/*
 * Created 2007/01/08
 * Copyright (C) 2003-2009  Naoki Iwami (naoki@limy.org)
 *
 * This file is part of Limy Eclipse Plugin.
 *
 * Limy Eclipse Plugin is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Limy Eclipse Plugin is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Limy Eclipse Plugin.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.limy.eclipse.qalab.propertypage;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.model.AdaptableList;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.limy.eclipse.common.LimyEclipsePluginUtils;
import org.limy.eclipse.qalab.Messages;

/**
 * Java\?[XfBNgI??NX?B
 * @author Naoki Iwami
 */
public class SourceDirSelector extends SelectionAdapter {

    // ------------------------ Fields

    /** v?WFNg */
    private final Collection<IProject> projects;

    /** ?lli[Rg??[ */
    private List control;

    /** tH_I?oXi?[ */
    private PropertyChangeListener listener;

    // ------------------------ Constructors

    /**
     * SourceDirSelectorCX^X?\z?B
     * @param control ?lli[Rg??[
     * @param project v?WFNg
     * @param listener tH_I?oXi?[?inull?j
     */
    public SourceDirSelector(List control, IProject project, PropertyChangeListener listener) {
        super();
        this.control = control;
        this.projects = new ArrayList<IProject>();
        projects.add(project);
        this.listener = listener;
    }

    /**
     * SourceDirSelectorCX^X?\z?B
     * @param control ?lli[Rg??[
     * @param projects v?WFNg
     * @param listener tH_I?oXi?[
     */
    public SourceDirSelector(List control, Collection<IProject> projects, PropertyChangeListener listener) {

        super();
        this.control = control;
        this.projects = projects;
        this.listener = listener;
    }

    // ------------------------ Override Methods

    @Override
    public void widgetSelected(SelectionEvent evt) {
        try {
            setPackageDir();
        } catch (JavaModelException e) {
            LimyEclipsePluginUtils.log(e);
        }
    }

    // ------------------------ Private Methods

    /**
     * pbP?[WfBNgI???s?B
     * @throws JavaModelException 
     */
    private void setPackageDir() throws JavaModelException {

        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(new Shell(),
                new WorkbenchLabelProvider(), new WorkbenchContentProvider());

        dialog.setTitle(Messages.TITLE_SELECT_SOURCE_DIR);
        dialog.setMessage(Messages.MES_SELECT_SOURCE_DIR);
        ViewerFilter filter = new ViewerFilter() {
            @Override
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                if (element instanceof IPackageFragmentRoot) {
                    return true;
                }
                return false;
            }
        };
        dialog.addFilter(filter);

        Collection<IPackageFragmentRoot> targetElements = new ArrayList<IPackageFragmentRoot>();
        for (IProject project : projects) {
            IJavaProject javaProject = JavaCore.create(project);
            for (IPackageFragmentRoot root : javaProject.getAllPackageFragmentRoots()) {
                if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
                    // jarpbP?[W?O
                    targetElements.add(root);
                }
            }
        }

        dialog.setInput(new AdaptableList(targetElements));

        if (dialog.open() == Dialog.OK) {

            Object[] results = dialog.getResult();
            for (Object result : results) {
                IPackageFragmentRoot fragment = (IPackageFragmentRoot) result;
                control.add(fragment.getElementName());
                if (listener != null) {
                    PropertyChangeEvent evt = new PropertyChangeEvent(control, "resultPath", null,
                            fragment.getPath());
                    listener.propertyChange(evt);
                }
            }
        }
    }

}