/******************************************************************************* * 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; } }