org.jboss.tools.seam.ui.wizard.SelectJavaPackageAction.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.seam.ui.wizard.SelectJavaPackageAction.java

Source

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