org.jboss.tools.common.model.java.handlers.OpenJavaSourceHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.model.java.handlers.OpenJavaSourceHandler.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.java.handlers;

import java.util.*;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.ui.*;

import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.plugin.ModelMessages;
import org.jboss.tools.common.model.plugin.ModelPlugin;
import org.jboss.tools.common.meta.action.impl.*;

public class OpenJavaSourceHandler extends AbstractHandler {

    public OpenJavaSourceHandler() {
    }

    public boolean isEnabled(XModelObject object) {
        if (object == null)
            return false;
        String type = getType(object);
        if (type == null || type.length() == 0)
            return false;
        return true;
    }

    protected String getType(XModelObject object) {
        String attr = getAttribute();
        if (attr == null)
            return null;
        return object.getAttributeValue(attr);
    }

    protected String getAttribute() {
        return action.getProperty("attribute"); //$NON-NLS-1$
    }

    public void executeHandler(XModelObject object, Properties p) throws XModelException {
        if (!isEnabled(object))
            return;
        String type = getType(object);
        type = type.replace('.', '/') + ".java"; //$NON-NLS-1$

        if (p == null || p.getProperty("property") == null) { //$NON-NLS-1$
            String n = action.getProperty("property"); //$NON-NLS-1$
            if (n != null) {
                String v = object.getAttributeValue(n);
                if (v != null) {
                    if (p == null)
                        p = new Properties();
                    p.put("property", v); //$NON-NLS-1$
                }
            }
        }

        try {
            open(object.getModel(), type, p);
        } catch (CoreException e) {
            throw new XModelException(e);
        }
    }

    public static void open(XModel model, String type, Properties p) throws XModelException, CoreException {
        IProject project = (IProject) model.getProperties().get(XModelObjectConstants.PROJECT);
        IJavaProject javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
        IJavaElement javaElement = javaProject.findElement(new Path(type));
        if (javaElement == null) {
            String message = "Cannot find java source.";
            if (p != null && XModelObjectConstants.TRUE.equals(p.getProperty("ignoreWarning"))) { //$NON-NLS-1$
                p.setProperty("error", message); //$NON-NLS-1$
            } else {
                ServiceDialog d = model.getService();
                d.showDialog(ModelMessages.WARNING, message, new String[] { "Close" }, null, ServiceDialog.WARNING);
            }
        } else {
            if (p != null && XModelObjectConstants.TRUE.equals(p.getProperty("onlySelectIfOpen"))) { //$NON-NLS-1$
                IEditorInput ii = EditorUtility.getEditorInput(javaElement);
                IWorkbenchPage page = getWorkbenchPage();
                if (page == null)
                    return;
                IEditorPart editor = page.findEditor(ii);
                if (editor == null)
                    return;
                else
                    page.bringToTop(editor);
            }
            IJavaElement child = getElement(javaElement, p);
            if (child != null) {
                JavaUI.revealInEditor(JavaUI.openInEditor(javaElement), child);
            } else {
                JavaUI.openInEditor(javaElement);
            }
        }
    }

    private static IJavaElement getElement(IJavaElement javaElement, Properties p) {
        if (p == null || !(javaElement instanceof IParent))
            return null;
        String childName = p.getProperty("property"); //$NON-NLS-1$
        if (childName == null)
            return null;
        IJavaElement[] cs = null;
        try {
            cs = ((IParent) javaElement).getChildren();
        } catch (JavaModelException e) {
            //ignore
        }
        if (cs != null)
            for (int i = 0; i < cs.length; i++) {
                if (cs[i] instanceof IType) {
                    IType t = (IType) cs[i];
                    if (childName.length() > 0) {
                        String getter = "get" + childName.substring(0, 1).toUpperCase() + childName.substring(1); //$NON-NLS-1$
                        IMethod m = t.getMethod(getter, new String[0]);
                        if (m != null && m.exists())
                            return m;
                    }
                    IField f = t.getField(childName);
                    if (f != null && f.exists())
                        return f;
                } else {
                    if (childName.equals(cs[i].getElementName()))
                        return cs[i];
                }
            }
        return null;
    }

    private static IWorkbenchPage getWorkbenchPage() {
        ModelPlugin plugin = ModelPlugin.getDefault();
        IWorkbench workbench = (plugin == null) ? null : plugin.getWorkbench();
        IWorkbenchWindow window = (workbench == null) ? null : workbench.getActiveWorkbenchWindow();
        return (window == null) ? null : window.getActivePage();
    }

}