/******************************************************************************* * Copyright (c) 2007-2009 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.jsf.text.ext.hyperlink; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IRegion; import org.jboss.tools.common.text.ext.util.StructuredModelWrapper; import org.jboss.tools.common.text.ext.util.Utils; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Opens hyperlinks in the following form: * {@code <h:a_jsf_2_tag lib="a_lib_name" name="SELECTED_HYPERLINK">}. * * @see JSF2JSPLinkHyperlinkPartitioner * @see <a href="https://jira.jboss.org/jira/browse/JBIDE-5382">JBIDE-5382</a> * * @author yradtsevich */ public class JSF2LinkHyperlink extends JSFLinkHyperlink { private static final String JSF2_RESOURCES_FOLDER = "/resources"; //$NON-NLS-1$ /* (non-Javadoc) * @see org.jboss.tools.common.text.ext.hyperlink.LinkHyperlink#getFilePath(org.eclipse.jface.text.IRegion) */ @Override protected String getFilePath(IRegion region) { StructuredModelWrapper smw = new StructuredModelWrapper(); smw.init(getDocument()); try { Document xmlDocument = smw.getDocument(); if (xmlDocument == null) { return null; } Node n = Utils.findNodeForOffset(xmlDocument, region.getOffset()); if (!(n instanceof Attr) ) { return null; } Element element = ((Attr)n).getOwnerElement(); Attr libraryAttr = element.getAttributeNode("library"); //$NON-NLS-1$ String name = getDocument().get(region.getOffset(), region.getLength()); if (libraryAttr != null && libraryAttr.getNodeValue() != null) { String library = libraryAttr.getNodeValue().trim(); if (library.length() != 0) { return JSF2_RESOURCES_FOLDER + '/' + library + '/' + name; } } return JSF2_RESOURCES_FOLDER + '/' + name; } catch (BadLocationException x) { //ignore return null; } finally { smw.dispose(); } } }