Package net.sf.jpluck.util.el

Source Code of net.sf.jpluck.util.el.FunctionDoclet

package net.sf.jpluck.util.el;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.RootDoc;

import net.sf.jpluck.xml.DOMUtil;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import java.io.File;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;


/**
* JavaDoc Doclet that creates an XML file describing the EL functions.
* @author L.M. Fridael
*/
public class FunctionDoclet {
  public static boolean start(RootDoc root) {
    Document document = DOMUtil.createDocument();
    document.appendChild(document.createProcessingInstruction("xml-stylesheet",
                                  "type=\"text/xsl\" href=\"html.xsl\""));

    Element functions = document.createElement("functions");
    document.appendChild(functions);

    ClassDoc[] classes = root.classes();
    for (int i = 0; i < classes.length; ++i) {
      ClassDoc classDoc = classes[i];
      Element cls = document.createElement("class");
      functions.appendChild(cls);
      if (classDoc.tags("prefix").length == 1) {
        cls.setAttribute("prefix", classDoc.tags("prefix")[0].text());
      }
      cls.setAttribute("description", classDoc.commentText());

      MethodDoc[] methods = classDoc.methods();
      for (int j = 0; j < methods.length; j++) {
        MethodDoc method = methods[j];
        Element function = document.createElement("function");
        cls.appendChild(function);
        function.setAttribute("name", method.name());
        function.setAttribute("description", method.commentText());
        function.setAttribute("type", method.returnType().typeName());

        Parameter[] params = method.parameters();
        for (int k = 0; k < params.length; k++) {
          Parameter param = params[k];
          Element parameter = document.createElement("parameter");
          parameter.setAttribute("name", param.name());
          parameter.setAttribute("type", param.typeName());
          function.appendChild(parameter);
        }

        String name = method.name();
        String description = method.getRawCommentText();
      }
    }
    try {
      Transformer transformer = TransformerFactory.newInstance().newTransformer();
      transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
      transformer.setOutputProperty(OutputKeys.INDENT, "yes");

      File file = new File("el/functions.xml");
      StreamResult result = new StreamResult(file);
      transformer.transform(new DOMSource(document), result);
    } catch (TransformerException e) {
      throw new RuntimeException(e);
    }
    return true;
  }
}
TOP

Related Classes of net.sf.jpluck.util.el.FunctionDoclet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.