com.ibm.research.tours.content.url.delegates.ClassFileTextRegionURLTourElementDelegate.java Source code

Java tutorial

Introduction

Here is the source code for com.ibm.research.tours.content.url.delegates.ClassFileTextRegionURLTourElementDelegate.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 *     IBM Corporation - initial API and implementation
 *     IBM Research
 *******************************************************************************/
package com.ibm.research.tours.content.url.delegates;

import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.texteditor.ITextEditor;

import com.ibm.research.tours.ITourElement;
import com.ibm.research.tours.content.ToursContentPlugin;
import com.ibm.research.tours.content.elements.ResourceURLTourElement;
import com.ibm.research.tours.content.url.IURL;

public class ClassFileTextRegionURLTourElementDelegate implements IURLTourElementDelegate {
    private JavaElementLabelProvider fJavaElementLabelProvider;
    private JavaElementLabelProvider fRuntimeJavaElementLabelProvider;
    private IClassFile fFile;
    private IRegion fTextRegion;
    private IRegion fLineRegion;
    private IMarker fMarker;
    private String fSnippet;

    public ClassFileTextRegionURLTourElementDelegate(IClassFile file, IRegion textRegion) {
        fFile = file;
        fTextRegion = textRegion;
        init();
    }

    private void init() {
        IPackageFragmentRoot root = null;
        root = JavaModelUtil.getPackageFragmentRoot(fFile);

        IClasspathEntry entry = null;
        try {
            entry = root.getRawClasspathEntry();
        } catch (JavaModelException e) {
            e.printStackTrace();
        }

        if (entry != null && entry.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
            IPath path = entry.getPath().makeRelative();
        }
    }

    private JavaElementLabelProvider getJavaElementLabelProvider() {
        if (fJavaElementLabelProvider == null)
            fJavaElementLabelProvider = new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_QUALIFIED
                    | JavaElementLabelProvider.SHOW_SMALL_ICONS | JavaElementLabelProvider.SHOW_PARAMETERS);
        return fJavaElementLabelProvider;
    }

    private JavaElementLabelProvider getRuntimeJavaElementLabelProvider() {
        if (fRuntimeJavaElementLabelProvider == null)
            fRuntimeJavaElementLabelProvider = new JavaElementLabelProvider(
                    JavaElementLabelProvider.SHOW_SMALL_ICONS | JavaElementLabelProvider.SHOW_PARAMETERS);
        return fRuntimeJavaElementLabelProvider;
    }

    public ITourElement createClone() {
        return new ResourceURLTourElement(fFile, fTextRegion);
    }

    public Image getImage() {
        return ToursContentPlugin.getImage(fFile);
    }

    private String getLineRegionString() {
        if (fLineRegion.getLength() == 0)
            return " (Line #" + fLineRegion.getOffset() + ")";
        else
            return " (Lines #" + fLineRegion.getOffset() + "-"
                    + (fLineRegion.getOffset() + fLineRegion.getLength() + ")");
    }

    public String getShortText() {
        return getRuntimeJavaElementLabelProvider().getText(fFile) + getLineRegionString();
    }

    public String getText() {
        return getJavaElementLabelProvider().getText(fFile) + getLineRegionString();
    }

    public void start() {
        //      try 
        //      {
        //         fMarker = fFile.createMarker("com.ibm.research.tours.content.tourtextmarker");
        //         fMarker.setAttribute(IMarker.CHAR_START, fTextRegion.getOffset());
        //         fMarker.setAttribute(IMarker.CHAR_END, fTextRegion.getOffset() + fTextRegion.getLength());
        //      } 
        //      catch (CoreException e) 
        //      {
        //      e.printStackTrace();
        //      }
    }

    public void stop() {
        try {
            fMarker.delete();
        } catch (CoreException e) {
            e.printStackTrace();
        }
    }

    public void transition() {
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();

        try {
            IEditorPart part = IDE.openEditor(page, fMarker, true);

            if (part instanceof ITextEditor) {
                ITextEditor editor = (ITextEditor) part;
                editor.setHighlightRange(0, 0, true);
            }
        } catch (PartInitException e) {
            e.printStackTrace();
        }
    }

    public IURL getUrl() {
        return null;
    }

    /**
     * Returns the package fragment root of this file.
     */
    private IPackageFragmentRoot getPackageFragmentRoot(IClassFile file) {

        IJavaElement element = file.getParent();
        while (element != null && element.getElementType() != IJavaElement.PACKAGE_FRAGMENT_ROOT)
            element = element.getParent();

        return (IPackageFragmentRoot) element;
    }
}