/*******************************************************************************
* Copyright (c) 2011-2012 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.text.ext.hyperlink;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.text.IRegion;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.IEditorPart;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.XModelObjectConstants;
import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
import org.jboss.tools.common.model.util.FindObjectHelper;
import org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlink;
import org.jboss.tools.jsf.text.ext.JSFTextExtMessages;
import org.jboss.tools.jst.web.kb.internal.KbObject;
import org.jboss.tools.jst.web.kb.internal.taglib.AbstractComponent;
import org.jboss.tools.jst.web.kb.taglib.ITagLibrary;
public class TLDTagHyperlink extends AbstractHyperlink {
protected AbstractComponent tag;
protected XModelObject xmodelObject;
protected String xmodelObjectName = null;
protected IFile file = null;
public TLDTagHyperlink(AbstractComponent tag, IRegion region){
this.tag = tag;
setRegion(region);
file = getFile(tag);
xmodelObject = getXModelObject(tag);
if(xmodelObject != null && file != null) {
String fileName = file.getName();
String libraryName = getFileName(xmodelObject);
String objectName = xmodelObject.getAttributeValue(XModelObjectConstants.ATTR_NAME);
if(objectName == null) {
objectName = xmodelObject.getAttributeValue("tag-name");
}
xmodelObjectName = fileName;
if(libraryName != null && !libraryName.equals(fileName)) {
xmodelObjectName += " : " + libraryName;
}
if(objectName != null && !objectName.equals(libraryName)) {
xmodelObjectName += " : " + objectName;
}
}
}
public String getObjectName() {
return xmodelObjectName;
}
public static IFile getFile(AbstractComponent tag){
ITagLibrary tagLib = tag.getTagLib();
IResource r = tagLib.getResource();
if(r instanceof IFile)
return (IFile)r;
return null;
}
public static XModelObject getXModelObject(KbObject tag){
Object id = tag.getId();
if(id instanceof XModelObject)
return (XModelObject)id;
return null;
}
public static String getFileName(XModelObject xmodelObject){
FileAnyImpl fai = null;
XModelObject f = xmodelObject;
while(f != null && f.getFileType() != XModelObject.FILE) f = f.getParent();
if(f instanceof FileAnyImpl) fai = (FileAnyImpl)f;
return FileAnyImpl.toFileName(fai);
}
public AbstractComponent getComponent(){
return tag;
}
@Override
protected void doHyperlink(IRegion region) {
if(xmodelObjectName != null){
int q = FindObjectHelper.findModelObject(xmodelObject, FindObjectHelper.IN_EDITOR_ONLY);
if(q == 1) {
openFileFailed();
}
} else if(file != null){
IEditorPart part = null;
part = openFileInEditor(file);
if(part == null) {
openFileFailed();
}
}else
openFileFailed();
}
@Override
public String getHyperlinkText() {
if(xmodelObjectName != null)
return NLS.bind(JSFTextExtMessages.Open, xmodelObjectName);
else if(file != null)
return NLS.bind(JSFTextExtMessages.Open, file.getName());
else
return NLS.bind(JSFTextExtMessages.Open, "");
}
}