/******************************************************************************* * Copyright (c) 2007 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.seam.ui.wizard; import java.util.ArrayList; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.JavaElementLabelProvider; import org.eclipse.jface.window.Window; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.jboss.tools.common.model.util.EclipseResourceUtil; import org.jboss.tools.common.ui.widget.editor.ButtonFieldEditor; import org.jboss.tools.seam.core.SeamProjectsSet; import org.jboss.tools.seam.core.SeamCoreMessages; import org.jboss.tools.seam.ui.SeamGuiPlugin; /** * @author Alexey Kazakov */ public class SelectJavaPackageAction extends ButtonFieldEditor.ButtonPressedAction { public SelectJavaPackageAction() { super(SeamCoreMessages.SELECT_SEAM_PROJECT_ACTION_BROWSE); } @Override public void run() { String projectName = (String)getFieldEditor().getData(ISeamParameter.SEAM_PROJECT_NAME); if(projectName == null) { return; } IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); if(project == null) { SeamGuiPlugin.getPluginLog().logError("Can't find java project with name: " + projectName); return; } SeamProjectsSet seamPrjSet = new SeamProjectsSet(project); IProject ejbProject = seamPrjSet.getEjbProject(); if(ejbProject!=null) { project = ejbProject; } IJavaProject javaProject = EclipseResourceUtil.getJavaProject(project); if(javaProject == null) { SeamGuiPlugin.getPluginLog().logError("Can't find java project with name: " + projectName); return; } IPackageFragmentRoot packageFragmentRoot = null; IPackageFragmentRoot[] roots; try { roots = javaProject.getPackageFragmentRoots(); for (int i = 0; i < roots.length; i++) { if (roots[i].getKind() == IPackageFragmentRoot.K_SOURCE) { packageFragmentRoot = roots[i]; break; } } } catch (JavaModelException e) { SeamGuiPlugin.getPluginLog().logError(e); } if (packageFragmentRoot == null) { packageFragmentRoot = javaProject.getPackageFragmentRoot(javaProject.getResource()); } if (packageFragmentRoot == null) { SeamGuiPlugin.getPluginLog().logError("Can't find src folder for project " + projectName); return; } IJavaElement[] packages = null; try { packages = packageFragmentRoot.getChildren(); } catch (JavaModelException e) { SeamGuiPlugin.getPluginLog().logError(e); } if (packages == null) { packages = new IJavaElement[0]; } String initialValue = getFieldEditor().getValue().toString(); IJavaElement initialElement = null; ArrayList<IJavaElement> packagesWithoutDefaultPackage = new ArrayList<IJavaElement>(); for (IJavaElement packageElement : packages) { String packageName = packageElement.getElementName(); if(packageName.length()>0) { packagesWithoutDefaultPackage.add(packageElement); if(packageName.equals(initialValue)) { initialElement = packageElement; } } } packages = packagesWithoutDefaultPackage.toArray(new IJavaElement[packagesWithoutDefaultPackage.size()]); ElementListSelectionDialog dialog = new ElementListSelectionDialog(Display.getCurrent().getActiveShell(), new JavaElementLabelProvider( JavaElementLabelProvider.SHOW_DEFAULT)); dialog.setTitle(J2EEUIMessages.PACKAGE_SELECTION_DIALOG_TITLE); dialog.setMessage(J2EEUIMessages.PACKAGE_SELECTION_DIALOG_DESC); dialog.setEmptyListMessage(J2EEUIMessages.PACKAGE_SELECTION_DIALOG_MSG_NONE); dialog.setElements(packages); if(initialElement!=null) { dialog.setInitialSelections(new Object[]{initialElement}); } if (dialog.open() == Window.OK) { IPackageFragment fragment = (IPackageFragment) dialog.getFirstResult(); if (fragment != null) { getFieldEditor().setValue(fragment.getElementName()); } else { getFieldEditor().setValue(""); } } } }