org.hibernate.eclipse.console.utils.DialogSelectionHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.eclipse.console.utils.DialogSelectionHelper.java

Source

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2005, JBoss Inc., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.hibernate.eclipse.console.utils;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.debug.internal.ui.stringsubstitution.StringVariableLabelProvider;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.internal.ui.dialogs.PackageSelectionDialog;
import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.IFilter;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.dialogs.FilteredList;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.hibernate.eclipse.console.HibernateConsolePlugin;

/**
 * @author max
 *
 */
@SuppressWarnings("restriction")
public class DialogSelectionHelper extends org.hibernate.eclipse.console.utils.xpl.DialogSelectionHelper {

    /**
     * Realize a Java Project selection dialog and return the first selected project,
     * or null if there was none.
     */
    public static IJavaProject chooseJavaProject(Shell shell, IJavaProject initialSelection, String title,
            String description) {
        IJavaProject[] projects;
        try {
            projects = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()).getJavaProjects();
        } catch (JavaModelException e) {
            HibernateConsolePlugin.getDefault().log(e.getStatus());
            projects = new IJavaProject[0];
        }

        ILabelProvider labelProvider = new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
        ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell, labelProvider);
        dialog.setTitle(title);
        dialog.setMessage(description);
        dialog.setElements(projects);

        IJavaProject javaProject = initialSelection;
        if (javaProject != null) {
            dialog.setInitialSelections(new Object[] { javaProject });
        }
        if (dialog.open() == Window.OK) {
            return (IJavaProject) dialog.getFirstResult();
        }
        return initialSelection;
    }

    /**
     * Realize a Persistence Unit selection dialog and return the first selected persistence unit,
     * or null if there was none.
     */
    public static String choosePersistenceUnit(Shell shell, String initialSelection, String title,
            String description, IJavaProject javaProject) {
        String[] availablePersistenceUnit = ProjectUtils.availablePersistenceUnits(javaProject);
        ILabelProvider labelProvider = new StringVariableLabelProvider();
        ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell, labelProvider);
        dialog.setTitle(title);
        dialog.setMessage(description);
        dialog.setElements(availablePersistenceUnit);

        String persistenceUnit = initialSelection;
        if (persistenceUnit != null) {
            dialog.setInitialSelections(new Object[] { persistenceUnit });
        }
        if (dialog.open() == Window.OK) {
            return (String) dialog.getFirstResult();
        }
        return initialSelection;
    }

    static public String chooseImplementation(String supertype, String initialSelection, String title,
            Shell shell) {
        SelectionDialog dialog = null;
        try {
            final IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
            // TODO: limit to a certain implementor
            dialog = JavaUI.createTypeDialog(shell, PlatformUI.getWorkbench().getProgressService(), scope,
                    IJavaElementSearchConstants.CONSIDER_CLASSES, false, supertype);
        } catch (JavaModelException jme) {
            return null;
        }

        dialog.setTitle(title);
        dialog.setMessage(title);

        if (dialog.open() == IDialogConstants.CANCEL_ID)
            return null;

        Object[] types = dialog.getResult();
        if (types != null && types.length > 0) {
            IType type = (IType) types[0];
            return type.getFullyQualifiedName('.');
        }
        return null;
    }

    public static IPackageFragment choosePackage(Shell shell, IJavaElement[] javaProjects, final IFilter filter,
            String title, String message) {
        BusyIndicatorRunnableContext context = new BusyIndicatorRunnableContext();
        IJavaSearchScope scope = SearchEngine.createJavaSearchScope(javaProjects,
                IJavaSearchScope.SOURCES | IJavaSearchScope.REFERENCED_PROJECTS);

        PackageSelectionDialog packageSelectionDialog = new PackageSelectionDialog(shell, context,
                PackageSelectionDialog.F_HIDE_DEFAULT_PACKAGE | PackageSelectionDialog.F_HIDE_EMPTY_INNER, scope) {

            @Override
            protected FilteredList createFilteredList(Composite parent) {
                FilteredList list = super.createFilteredList(parent);
                if (filter != null) {
                    list.setFilterMatcher(new FilteredList.FilterMatcher() {

                        @Override
                        public void setFilter(String pattern, boolean ignoreCase, boolean ignoreWildCards) {
                        }

                        @Override
                        public boolean match(Object element) {
                            return filter.select(element);
                        }
                    });
                }
                return list;
            }
        };

        packageSelectionDialog.setTitle(title);
        packageSelectionDialog.setMessage(message);

        if (packageSelectionDialog.open() == Window.OK) {
            return (IPackageFragment) packageSelectionDialog.getResult()[0];
        }

        return null;

    }

}