/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.configuration.editors.utils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.jboss.tools.smooks.configuration.SmooksConfigurationActivator;
/**
* @author Dart (dpeng@redhat.com)<p>
* Apr 8, 2009
*/
public class JavaTypeFieldDialog implements IFieldDialog {
IResource workspaceResource = null;
public JavaTypeFieldDialog(IResource resource) {
super();
workspaceResource = resource;
}
/* (non-Javadoc)
* @see org.jboss.tools.smooks.configuration.editors.utils.IFieldDialog#open()
*/
public Object open(Shell shell) {
if (workspaceResource != null && workspaceResource instanceof IFile) {
IProject project = ((IFile) workspaceResource).getProject();
IJavaProject jp = JavaCore.create(project);
if (jp != null) {
return openJavaTypeDialog(shell, jp);
}
}
MessageDialog.openInformation(shell, Messages.JavaTypeFieldDialog_CantOpenErrorTitle,
Messages.JavaTypeFieldDialog_CantOpenErrorMessage);
return null;
}
public static String openJavaTypeDialog(Shell shell, IJavaProject javaProject ) {
return openJavaTypeDialog(shell, javaProject, IJavaElementSearchConstants.CONSIDER_CLASSES);
}
public static String openJavaTypeDialog(Shell shell, IJavaProject javaProject , int javaType) {
IJavaSearchScope scope = null;
String className = null;
if (javaProject == null) {
scope = JavaSearchScopeFactory.getInstance().createWorkspaceScope(true);
} else {
String[] requiredProjects = null;
try {
requiredProjects = javaProject.getRequiredProjectNames();
} catch (Exception e) {
}
if (requiredProjects == null) {
requiredProjects = new String[] { javaProject.getElementName() };
} else {
String[] temp = new String[requiredProjects.length + 1];
temp[0] = javaProject.getElementName();
System.arraycopy(requiredProjects, 0, temp, 1, requiredProjects.length);
requiredProjects = temp;
}
scope = JavaSearchScopeFactory.getInstance().createJavaProjectSearchScope(requiredProjects, true);
}
SelectionDialog dialog;
try {
dialog = JavaUI.createTypeDialog(shell, SmooksConfigurationActivator.getDefault().getWorkbench()
.getActiveWorkbenchWindow(), scope,javaType, false);
dialog.setMessage(Messages.JavaTypeFieldDialog_SearchDialogTitle);
dialog.setTitle(Messages.JavaTypeFieldDialog_SearchDialogTitle);
if (dialog.open() == Window.OK) {
Object[] results = dialog.getResult();
if (results.length > 0) {
Object result = results[0];
String packageFullName = JavaModelUtil.getTypeContainerName((IType) result);
if (packageFullName == null || packageFullName.length() <= 0) {
className = ((IType) result).getElementName();
} else {
className = packageFullName + "." //$NON-NLS-1$
+ ((IType) result).getElementName();
}
return className;
}
}
} catch (Throwable t) {
SmooksConfigurationActivator.getDefault().log(t);
}
return className;
}
public IModelProcsser getModelProcesser() {
// TODO Auto-generated method stub
return null;
}
public void setModelProcesser(IModelProcsser processer) {
// TODO Auto-generated method stub
}
}