Jump to: navigation, search

JET FAQ How do I create custom XPath Function?

Revision as of 10:41, 25 June 2007 by Aleks dworak.fr.ibm.com (Talk | contribs)



JET provides tools for creating custom XPath functions. How does it work ?


1. Create a plug-in project 2. In the Plug-in manifest editor, go to the Dependencies tab and add : org.eclipse.jet, org.eclipse.core.runtime, org.eclipse.core.resources 3. In the Plug-in manifest editor, go to the Extensions tab, and add org.eclipse.jet.taglibraries. 4. Create a tagLibrary entry under this. Give it an ID like "MyCustomWorkspaceTags", and a default prefix like mcws. 5. Under the tagLibrary entry, create a tag of wanted type and name. 5. Under the Tag node, add as much attributes you need, and set options (required or note, type). 6. Return the the conditionalTag entry, and click on the 'class' entry to create the Java class for the tag. Specify a class name and check the package, a case problem could happen. 6. Code the Java class.

The following example is an AbstractConditionalTag which name is "resourcesExists". It has an attribute called "path" (required = true, String).

package org.eclipse.jet.example.customtags;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jet.JET2Context;
import org.eclipse.jet.taglib.AbstractConditionalTag;
import org.eclipse.jet.taglib.JET2TagException;
import org.eclipse.jet.taglib.TagInfo;

 * Implements <mcws:resourceExists path="somepath">
public class ResourceExistsTag extends AbstractConditionalTag {
  public boolean doEvalCondition(TagInfo td, JET2Context context)
    throws JET2TagException {
    String path = getAttribute("path");	
    IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
    return resource != null && resource.exists();

Usage would then be in your template : Taglib declaration :

<%@taglib id="your-plugin-id.MyCustomWorkspaceTags" prefix="mcws"%>

Tag usage :

<mcws:resourceExists path="someproject/somefolder/somefile.c">
    ... do this if exits

See Also

Back to the M2T-JET-FAQ