com.liferay.ide.portlet.ui.editor.internal.ResourceBundleJumpActionHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.portlet.ui.editor.internal.ResourceBundleJumpActionHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 * Contributors:
 *      Kamesh Sampath - initial implementation
 *      Gregory Amerson - initial implemenation and ongoing maintanence
 *******************************************************************************/

package com.liferay.ide.portlet.ui.editor.internal;

import static com.liferay.ide.core.model.internal.GenericResourceBundlePathService.RB_FILE_EXTENSION;

import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.portlet.core.util.PortletUtil;
import com.liferay.ide.portlet.ui.PortletUIPlugin;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.sapphire.Element;
import org.eclipse.sapphire.Value;
import org.eclipse.sapphire.ValueProperty;
import org.eclipse.sapphire.modeling.Path;
import org.eclipse.sapphire.ui.Presentation;
import org.eclipse.sapphire.ui.forms.JumpActionHandler;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;

/**
 * @author Kamesh Sampath
 */
public class ResourceBundleJumpActionHandler extends JumpActionHandler {

    /*
     * (non-Javadoc)
     * @see org.eclipse.sapphire.ui.SapphirePropertyEditorActionHandler#computeEnablementState()
     */
    @Override
    protected boolean computeEnablementState() {
        final Element element = getModelElement();
        IProject project = element.adapt(IProject.class);

        final ValueProperty property = (ValueProperty) property().definition();

        final String text = element.property(property).text(true);
        boolean isEnabled = super.computeEnablementState();
        if (isEnabled && text != null) {
            final IWorkspace workspace = ResourcesPlugin.getWorkspace();
            final IWorkspaceRoot wroot = workspace.getRoot();
            final IClasspathEntry[] cpEntries = CoreUtil.getClasspathEntries(project);
            String ioFileName = PortletUtil.convertJavaToIoFileName(text, RB_FILE_EXTENSION);
            for (IClasspathEntry iClasspathEntry : cpEntries) {
                if (IClasspathEntry.CPE_SOURCE == iClasspathEntry.getEntryKind()) {
                    IPath entryPath = wroot.getFolder(iClasspathEntry.getPath()).getLocation();
                    entryPath = entryPath.append(ioFileName);
                    IFile resourceBundleFile = wroot.getFileForLocation(entryPath);
                    if (resourceBundleFile != null && resourceBundleFile.exists()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.sapphire.ui.SapphireActionHandler#run(org.eclipse.sapphire.ui.SapphireRenderingContext)
     */
    @Override
    protected Object run(Presentation context) {

        final Element element = getModelElement();

        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

        final ValueProperty property = (ValueProperty) property().definition();

        final IProject project = element.adapt(IProject.class);

        final Value<Path> value = element.property(property);

        final String text = value.text(false);

        final IWorkspace workspace = ResourcesPlugin.getWorkspace();
        final IWorkspaceRoot wroot = workspace.getRoot();
        final IClasspathEntry[] cpEntries = CoreUtil.getClasspathEntries(project);
        String ioFileName = PortletUtil.convertJavaToIoFileName(text, RB_FILE_EXTENSION);

        for (IClasspathEntry iClasspathEntry : cpEntries) {
            if (IClasspathEntry.CPE_SOURCE == iClasspathEntry.getEntryKind()) {
                IPath entryPath = wroot.getFolder(iClasspathEntry.getPath()).getLocation();
                entryPath = entryPath.append(ioFileName);
                IFile resourceBundleFile = wroot.getFileForLocation(entryPath);
                if (resourceBundleFile != null && resourceBundleFile.exists()) {
                    if (window != null) {
                        final IWorkbenchPage page = window.getActivePage();
                        IEditorDescriptor editorDescriptor = null;

                        try {
                            editorDescriptor = IDE.getEditorDescriptor(resourceBundleFile.getName());
                        } catch (PartInitException e) {
                            // No editor was found for this file type.
                        }

                        if (editorDescriptor != null) {
                            try {
                                IDE.openEditor(page, resourceBundleFile, editorDescriptor.getId(), true);
                            } catch (PartInitException e) {
                                PortletUIPlugin.logError(e);
                            }
                        }
                    }
                }
            }
        }
        return null;
    }
}