org.jboss.tools.common.model.ui.attribute.editor.JavaEclipseChoicerEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.model.ui.attribute.editor.JavaEclipseChoicerEditor.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and 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:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.common.model.ui.attribute.editor;

import java.text.MessageFormat;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog;
import org.eclipse.jdt.ui.dialogs.ITypeInfoFilterExtension;
import org.eclipse.jdt.ui.dialogs.ITypeInfoRequestor;
import org.eclipse.jdt.ui.dialogs.TypeSelectionExtension;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;

import org.jboss.tools.common.meta.key.WizardKeys;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.ui.IValueProvider;
import org.jboss.tools.common.model.ui.ModelUIPlugin;
import org.jboss.tools.common.model.ui.attribute.IValueFilter;
import org.jboss.tools.common.model.ui.attribute.adapter.DefaultValueAdapter;
import org.jboss.tools.common.model.ui.widgets.IWidgetSettings;
import org.jboss.tools.common.model.util.EclipseResourceUtil;

public class JavaEclipseChoicerEditor extends ValueEditor {

    protected JavaHyperlinkCellEditor cellEditor;
    //protected JavaChoicerFieldEditor fieldEditor;
    protected JavaHyperlinkLineFieldEditor fieldEditor;

    public JavaEclipseChoicerEditor() {
    }

    public JavaEclipseChoicerEditor(IWidgetSettings settings) {
        super(settings);
    }

    public void dispose() {
        super.dispose();
        if (cellEditor != null)
            cellEditor.dispose();
        cellEditor = null;
        if (fieldEditor != null)
            fieldEditor.dispose();
        fieldEditor = null;
    }

    public boolean isGreedyEditor() {
        return false;
    }

    protected CellEditor createCellEditor(Composite parent) {
        //      cellEditor = new DialogCellEditorEx(parent, SWT.NONE);
        cellEditor = new JavaHyperlinkCellEditor(parent, SWT.NONE);
        cellEditor.setPropertyEditor(this);
        return cellEditor;
    }

    protected ExtendedFieldEditor createFieldEditor(Composite parent) {
        fieldEditor = new JavaHyperlinkLineFieldEditor(settings);
        return fieldEditor;
    }

    public String getChangeButtonName() {
        return JFaceResources.getString("openBrowse"); //$NON-NLS-1$
    }

    public boolean callsExternal() {
        return true;
    }

    public Object callExternal(Shell shell) {
        IJavaProject jp = null;
        DefaultValueAdapter adapter = (DefaultValueAdapter) getInput();
        XModelObject o = adapter.getModelObject();
        if (o != null) {
            IProject p = EclipseResourceUtil.getProject(o);
            if (p != null) {
                jp = EclipseResourceUtil.getJavaProject(p);
            }
        }
        String title = MessageFormat.format("Select {0}", getAttributeName());
        if (adapter != null && adapter.getAttribute() != null) {
            String key = "" + adapter.getAttribute().getModelEntity().getName() + "." //$NON-NLS-1$//$NON-NLS-2$
                    + adapter.getAttribute().getName().replace(' ', '_') + ".edit"; //$NON-NLS-1$
            String t = WizardKeys.getLabelText(key);
            if (t != null) {
                title = t;
            } else {
                title = MessageFormat.format("Select {0}",
                        WizardKeys.getAttributeDisplayName(adapter.getAttribute(), true));
            }
        }

        FilteredTypesSelectionDialog dialog = new FilteredTypesSelectionDialog(shell, false,
                ModelUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow(),
                jp == null ? SearchEngine.createWorkspaceScope()
                        : SearchEngine.createJavaSearchScope(new IJavaElement[] { jp }),
                IJavaSearchConstants.TYPE, createTypeSelectionExtension());
        dialog.setTitle(title);
        IValueProvider valueProvider = (IValueProvider) adapter.getAdapter(IValueProvider.class);
        String v = valueProvider.getStringValue(true);
        dialog.setInitialPattern(v);
        int status = dialog.open();
        if (status == FilteredItemsSelectionDialog.OK) {
            Object result = dialog.getFirstResult();
            if (result instanceof IType) {
                return ((IType) result).getFullyQualifiedName('.');
            }
        }
        return null;
    }

    TypeSelectionExtension createTypeSelectionExtension() {
        final ITypeInfoFilterExtension filter = createFilterExtension();
        if (filter == null)
            return null;
        return new TypeSelectionExtension() {
            public ITypeInfoFilterExtension getFilterExtension() {
                return filter;
            }
        };
    }

    ITypeInfoFilterExtension createFilterExtension() {
        if (getInput() instanceof IAdaptable) {
            IValueFilter filter = (IValueFilter) ((IAdaptable) getInput()).getAdapter(IValueFilter.class);
            if (filter != null) {
                return new FilterExtension(filter);
            }
        }
        return null;
    }

    class FilterExtension implements ITypeInfoFilterExtension {
        IValueFilter filter;

        public FilterExtension(IValueFilter filter) {
            this.filter = filter;
        }

        public boolean select(ITypeInfoRequestor typeInfoRequestor) {
            String pkg = typeInfoRequestor.getPackageName();
            String cls = typeInfoRequestor.getTypeName();
            String q = pkg == null || pkg.length() == 0 ? cls : pkg + "." + cls;
            return filter.accept(q);
        }
    }
}