/******************************************************************************* * Copyright (c) 2009 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.seam.text.ext.hyperlink; import java.text.MessageFormat; import java.util.Set; import org.eclipse.core.runtime.Assert; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PartInitException; import org.jboss.tools.seam.core.IBijectedAttribute; import org.jboss.tools.seam.core.IOpenableElement; import org.jboss.tools.seam.core.IRole; import org.jboss.tools.seam.core.ISeamComponent; import org.jboss.tools.seam.core.ISeamComponentDeclaration; import org.jboss.tools.seam.core.ISeamContextVariable; import org.jboss.tools.seam.core.ISeamJavaComponentDeclaration; import org.jboss.tools.seam.text.ext.SeamExtMessages; import org.jboss.tools.seam.text.ext.SeamExtPlugin; /** * * @author Victor Rubezhny * */ public class SeamComponentHyperlink implements IHyperlink { private IRegion fRegion; private String fResourceName; private IJavaElement fElement; private IOpenableElement fOpenable; private String fLabel; private String fName; /** * Creates a new Seam Component hyperlink. */ SeamComponentHyperlink(IRegion region, String resourceName, IJavaElement element, String name) { Assert.isNotNull(region); Assert.isNotNull(element); Assert.isNotNull(name); fRegion = region; fResourceName = resourceName; fElement = element; fOpenable = null; fLabel = SeamExtMessages.SeamFactory; fName = name; } /** * Creates a new Seam Component hyperlink. */ SeamComponentHyperlink(IRegion region, String resourceName, ISeamComponent element, String name) { Assert.isNotNull(region); Assert.isNotNull(element); Assert.isNotNull(name); fRegion = region; fResourceName = resourceName; fElement = null; fLabel = SeamExtMessages.SeamComponent; fName = name; fOpenable = null; ISeamJavaComponentDeclaration javaDeclaration = element.getJavaDeclaration(); if (javaDeclaration != null && javaDeclaration instanceof IOpenableElement) { fOpenable = (IOpenableElement)javaDeclaration; } else { Set<ISeamComponentDeclaration> declarations = element.getAllDeclarations(); for (ISeamComponentDeclaration componentDeclaration : declarations) { if (componentDeclaration instanceof IOpenableElement) { fOpenable = (IOpenableElement)componentDeclaration; break; } } } } /** * Creates a new Seam Component hyperlink. */ SeamComponentHyperlink(IRegion region, String resourceName, IBijectedAttribute element, String name) { Assert.isNotNull(region); Assert.isNotNull(element); Assert.isNotNull(name); fRegion = region; fResourceName = resourceName; fElement = element.getSourceMember(); fLabel = SeamExtMessages.SeamBijected; fName = name; fOpenable = null; } /** * Creates a new Seam Component hyperlink. */ SeamComponentHyperlink(IRegion region, String resourceName, IRole element, String name) { Assert.isNotNull(region); Assert.isNotNull(element); Assert.isTrue(element instanceof IOpenableElement); Assert.isNotNull(name); fRegion = region; fResourceName = resourceName; fElement = null; fOpenable = (IOpenableElement)element; fLabel = SeamExtMessages.SeamRole; fName = name; } /* * @see org.eclipse.jdt.internal.ui.javaeditor.IHyperlink#getHyperlinkRegion() * @since 3.1 */ public IRegion getHyperlinkRegion() { return fRegion; } /* * @see org.eclipse.jdt.internal.ui.javaeditor.IHyperlink#open() * @since 3.1 */ public void open() { if (fOpenable != null) { fOpenable.open(); return; } if (fElement != null) { try { IEditorPart part = null; part = JavaUI.openInEditor(fElement); if (part != null) { JavaUI.revealInEditor(part, fElement); } } catch (PartInitException e) { SeamExtPlugin.getPluginLog().logError(e); } catch (JavaModelException e) { SeamExtPlugin.getPluginLog().logError(e); } } } /* * @see org.eclipse.jdt.internal.ui.javaeditor.IHyperlink#getTypeLabel() * @since 3.1 */ public String getTypeLabel() { return null; } /* * (non-Javadoc) * * @see IHyperlink#getHyperlinkText() */ public String getHyperlinkText() { String formattedIn = ""; if (fResourceName != null && fResourceName.trim().length() > 0) { formattedIn = MessageFormat.format(SeamExtMessages.InResource, fResourceName); } return MessageFormat.format(SeamExtMessages.OpenSeamDeclarationAs, fName, fLabel, formattedIn); } }