org.jboss.tools.forge.ui.internal.ext.control.JavaPackageChooserControlBuilder.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.forge.ui.internal.ext.control.JavaPackageChooserControlBuilder.java

Source

/**
 * Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package org.jboss.tools.forge.ui.internal.ext.control;

import java.util.Set;
import java.util.TreeSet;

import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
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.Text;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UICompleter;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.util.InputComponents;
import org.jboss.tools.forge.ui.internal.ForgeUIPlugin;
import org.jboss.tools.forge.ui.internal.ext.context.UISelectionImpl;
import org.jboss.tools.forge.ui.internal.ext.wizards.ForgeWizardPage;

public class JavaPackageChooserControlBuilder extends AbstractTextButtonControl {

    /**
     * Adds the project source packages if no completer was specified for the
     * input
     */
    @Override
    protected void decorateContainerText(ForgeWizardPage page, InputComponent<?, ?> input, Text containerText) {

        if (InputComponents.getCompleterFor(input) != null) {
            return;
        }
        final IJavaProject selectedProject = getSelectedProject(page);
        if (selectedProject != null) {
            UICompleter<Object> completer = new UICompleter<Object>() {
                @Override
                public Iterable<Object> getCompletionProposals(UIContext context, InputComponent<?, Object> input,
                        String value) {
                    Set<Object> proposals = new TreeSet<>();
                    try {
                        for (IPackageFragment pkg : selectedProject.getPackageFragments()) {
                            if (pkg.getKind() == IPackageFragmentRoot.K_BINARY) {
                                continue;
                            }
                            String name = pkg.getElementName();
                            if (name.startsWith(value)) {
                                proposals.add(name);
                            }
                        }
                    } catch (JavaModelException jme) {
                        ForgeUIPlugin.log(jme);
                    }
                    return proposals;
                }
            };
            setupAutoCompleteForText(page.getWizard().getUIContext(), input, completer, containerText);
        }
    }

    @Override
    protected void browseButtonPressed(ForgeWizardPage page, InputComponent<?, ?> input, Text containerText) {
        final IJavaProject project = getSelectedProject(page);
        if (project == null) {
            MessageDialog.openError(page.getShell(), "No project selected", "No project was selected");
            return;
        }
        int style = IJavaElementSearchConstants.CONSIDER_REQUIRED_PROJECTS;
        try {
            SelectionDialog dialog = JavaUI.createPackageDialog(page.getShell(), project, style,
                    containerText.getText());
            dialog.setTitle("Package Selection");
            dialog.setMessage("Select a package.");
            if (dialog.open() == Window.OK) {
                IPackageFragment res = (IPackageFragment) dialog.getResult()[0];
                containerText.setText(res.getElementName());
            }
        } catch (JavaModelException ex) {
            ForgeUIPlugin.log(ex);
        }
    }

    /**
     * Resolves the selected project in the workspace
     * 
     * @return null if no selected project was found
     */
    private IJavaProject getSelectedProject(ForgeWizardPage page) {
        UISelectionImpl<?> initialSelection = page.getWizard().getUIContext().getInitialSelection();
        final IJavaProject project;
        if (initialSelection != null) {
            IResource resource = initialSelection.getResource();
            if (resource != null) {
                project = JavaCore.create(resource.getProject());
            } else {
                project = null;
            }
        } else {
            project = null;
        }
        return project;
    }

    @Override
    protected Class<String> getProducedType() {
        return String.class;
    }

    @Override
    protected String getSupportedInputType() {
        return InputType.JAVA_PACKAGE_PICKER;
    }

    @Override
    protected Class<?>[] getSupportedInputComponentTypes() {
        return new Class<?>[] { UIInput.class };
    }
}