/*
* 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;
}
}