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;
}
}