Author: mrdon Date: Sun Apr 17 22:36:29 2005 New Revision: 161732 URL: http://svn.apache.org/viewcvs?view=rev&rev=161732 Log: Adding more docs and xdoc generation system
Added: struts/flow/trunk/src/doc/extensions2xdoc.xsl (with props) struts/flow/trunk/src/doc/jsdoc2xdoc.xsl (with props) Modified: struts/flow/trunk/build.xml struts/flow/trunk/src/doc/extensions.xdt struts/flow/trunk/src/doc/jsdoc.js struts/flow/trunk/src/java/org/apache/struts/flow/Struts.java struts/flow/trunk/src/java/system.js Modified: struts/flow/trunk/build.xml URL: http://svn.apache.org/viewcvs/struts/flow/trunk/build.xml?view=diff&r1=161731&r2=161732 ============================================================================== --- struts/flow/trunk/build.xml (original) +++ struts/flow/trunk/build.xml Sun Apr 17 22:36:29 2005 @@ -138,31 +138,53 @@ <delete dir="${doc.dir}" /> </target> + <target name="doc.extensions" depends="prepare"> - <delete dir="${build.doc}"/> + <delete dir="${build.doc}/extensions"/> <taskdef name="doclet" classname="xdoclet.DocletTask" classpathref="base.classpath"/> - <doclet destdir="${build.doc}" verbose="true"> + <doclet destdir="${build.doc}/extensions" verbose="true"> <fileset dir="${src.java}" includes="**/*Extensions.java"/> <template templateFile="${src.doc}/extensions.xdt" destinationFile="extensions.xml"/> </doclet> + + <xslt basedir="${build.doc}/extensions" includes="extensions.xml" destdir="${build.doc}" + extension=".xml" style="${src.doc}/extensions2xdoc.xsl" /> </target> - <target name="doc.jsdoc" depends="prepare"> + <!-- + <target name="doc.extensions" depends="prepare"> + <delete dir="${build.doc}/jsobjects"/> <taskdef name="doclet" classname="xdoclet.DocletTask" classpathref="base.classpath"/> + <doclet destdir="${build.doc}/jsobjects" verbose="true"> + <fileset dir="${src.java}" includes="org/apache/struts/flow/Struts.java"/> + <template templateFile="${src.doc}/jsobjects.xdt" destinationFile="struts.xml"/> + </doclet> + + <xslt basedir="${build.doc}/jsobjects" includes="*.xml" destdir="${build.doc}" + extension=".xml" style="${src.doc}/jsobjects2xdoc.xsl" /> + </target> + --> + <target name="doc.jsdoc" depends="compile"> + <delete dir="${build.doc}/jsdoc"/> + <mkdir dir="${build.doc}/jsdoc" /> + <java classname="org.apache.struts.flow.sugar.SugarWrapFactory"> <arg value="${src.doc}/jsdoc.js" /> <arg value="-d" /> - <arg value="${build.doc}"/> + <arg value="${build.doc}/jsdoc"/> <arg value="-i" /> <arg value="${src.java}"/> <classpath refid="base.classpath" /> </java> + + <xslt basedir="${build.doc}/jsdoc" includes="*.xml" destdir="${build.doc}" + extension=".xml" style="${src.doc}/jsdoc2xdoc.xsl" /> </target> <!-- Modified: struts/flow/trunk/src/doc/extensions.xdt URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/doc/extensions.xdt?view=diff&r1=161731&r2=161732 ============================================================================== --- struts/flow/trunk/src/doc/extensions.xdt (original) +++ struts/flow/trunk/src/doc/extensions.xdt Sun Apr 17 22:36:29 2005 @@ -26,7 +26,7 @@ </XDtMethod:ifHasMethodTag> </XDtMethod:ifIsPublic> </XDtMethod:forAllMethods> + </class> </XDtClass:ifHasClassTag> - </class> </XDtClass:forAllClasses> </extensions> Added: struts/flow/trunk/src/doc/extensions2xdoc.xsl URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/doc/extensions2xdoc.xsl?view=auto&rev=161732 ============================================================================== --- struts/flow/trunk/src/doc/extensions2xdoc.xsl (added) +++ struts/flow/trunk/src/doc/extensions2xdoc.xsl Sun Apr 17 22:36:29 2005 @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="1.0" +xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +> + <xsl:output method="xml" /> + + <xsl:template match="/"> + <xsl:apply-templates /> + </xsl:template> + + <xsl:template match="extensions"> +<document url="extensions.html"> + <xsl:comment> + WARNING: This file is automatically generated from an xdoclet extension that + turns javadoc tags in the extensions Java source code into an xml file, + which is then processed by an xsl file to create this document. Do not + modify this file, but rather either modify the comments or xsl file. + </xsl:comment> + <properties> + <title>Java API Extensions</title> + </properties> + <body> + <section name="Java API Extensions" href="summary"> + + <p> + Struts Flow adds properties and methods to Java API classes to make using the Java API easier in the flow scripts. Each documented extension listed here includes a description and example of its use. + </p> + <xsl:for-each select="class"> + <strong><xsl:value-of select="name" /></strong> + <blockquote> + <table> + <xsl:for-each select="method"> + <tr> + <td><xsl:value-of select="type" /></td> + <td> + <a href="#{../name}_{name}"><xsl:value-of select="name" /></a>(<xsl:value-of select="params" />) - + <xsl:value-of select="firstSentence" /></td> + </tr> + </xsl:for-each> + </table> + </blockquote> + </xsl:for-each> + </section> + <xsl:apply-templates select="class" /> + </body> +</document> + </xsl:template> + + + <xsl:template match="class"> + <section name="{name}" href="cls_{name}"> + <xsl:apply-templates /> + </section> + </xsl:template> + + <xsl:template match="method"> + <section name="{name}" href="{../name}_{name}"> +<pre> + <xsl:value-of select="concat(type,' ',name,'(',params,')')" /> +</pre> + <blockquote> + <p><xsl:value-of select="comment" disable-output-escaping="yes"/> + </p> + <dl> + <dt><strong>Example:</strong></dt> + <dd><code><xsl:value-of select="example" /></code></dd> + </dl> + </blockquote> + </section> + </xsl:template> + + <xsl:template match="text()" /> + +</xsl:stylesheet> Propchange: struts/flow/trunk/src/doc/extensions2xdoc.xsl ------------------------------------------------------------------------------ svn:executable = * Modified: struts/flow/trunk/src/doc/jsdoc.js URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/doc/jsdoc.js?view=diff&r1=161731&r2=161732 ============================================================================== --- struts/flow/trunk/src/doc/jsdoc.js (original) +++ struts/flow/trunk/src/doc/jsdoc.js Sun Apr 17 22:36:29 2005 @@ -75,12 +75,12 @@ indexFileArray[fname] = ""; // write the header of the output file - out.append('<HTML><HEADER><TITLE>' + fname + '</TITLE><BODY>'); - if (inputdir != null) { - outstr = '<a name=\"_top_\"></a><pre><a href=\"' + indexFile + '\">Index Files</a> '; - outstr += '<a href=\"' + indexFunction + '\">Index Functions</a></pre><hr>'; - out.append(outstr); - } + out.append('<jsdoc><fileName>' + fname + '</fileName>'); + //if (inputdir != null) { + // outstr = '<a name=\"_top_\"></a><pre><a href=\"' + indexFile + '\">Index Files</a> '; + // outstr += '<a href=\"' + indexFunction + '\">Index Functions</a></pre><hr>'; + // out.append(outstr); + //} // process the input file var lines = f.getLines(); @@ -108,9 +108,7 @@ if (firstLine) { // We have a comment for the whole file. - out.append('<H1>File ' + fname + '</H1>'); out.append(processComment(comment,firstLine,fname)); - out.append('<HR>'); firstLine = false; comment = ""; continue; @@ -124,6 +122,7 @@ { // Found a function start var htmlText = processFunction(m[1], m[5], comment); // sjm changed from 2nd to 5th arg + out.append(htmlText); // Save the text in a global variable, so we // can write out a table of contents first. @@ -152,6 +151,8 @@ // Found a method being bound to a prototype. var htmlText = processPrototypeMethod(m[1], m[2], m[3], comment); + out.append(htmlText); + // Save the text in a global variable, so we // can write out a table of contents first. functionDocArray[functionDocArray.length] = {name:m[1]+".prototype."+m[2], text:htmlText}; @@ -177,6 +178,7 @@ firstLine = false; } + /* // Write table of contents. for (var i=0; i < functionDocArray.length; i++) { with (functionDocArray[i]) { @@ -185,6 +187,7 @@ } } out.append('<HR>'); + // Now write the saved function documentation. for (i=0; i < functionDocArray.length; i++) { @@ -193,7 +196,8 @@ out.append(text); } } - out.append('</BODY></HTML>'); + */ + out.append('</jsdoc>'); // Now clean up the doc array functionDocArray = []; @@ -210,12 +214,10 @@ function processFunction(name, args, comment) { if (debug) print("Processing " + name + " " + args + " " + comment); - return "<H2>Function " + name + "</H2>" + - "<PRE>" + - "function " + name + "(" + args + ")" + - "</PRE>" + + return "<function><name>" + name + "</name>" + + "<args>" + args + "</args>" + processComment(comment,0,name) + - "<P><BR><BR>"; + "</function>"; } /** @@ -229,12 +231,10 @@ function processPrototypeMethod(proto, name, args, comment) { if (debug) print("Processing " + proto + ".prototype." + name + " " + args + " " + comment); - return "<H2> Method " + proto + ".prototype." + name + "</H2>" + - "<PRE>" + - proto + ".prototype." + name + " = function(" + args + ")" + - "</PRE>" + + return "<prototypeFunction><type>" + proto + "</type><name>" + name + "</name>" + + "<args>" + args + "</args>" + processComment(comment,0,name) + - "<P><BR><BR>"; + "</protytpeFunction>"; } @@ -271,60 +271,29 @@ indexFileArray[fname] = comment; } - var out = comment + '<P>'; + var out = "<comment><![CDATA[" + comment + "]]></comment>"; if (tags["param"]) { // Create a table of parameters and their descriptions. var array = tags["param"]; - var params = ""; for (var i=0; i < array.length; i++) { var m = array[i].match(/(\w+)\s+(.*)/); - params += '<TR><TD><I>'+m[1]+'</I></TD>' + - '<TD>'+m[2]+'</TD></TR>'; - } - out += '<TABLE WIDTH="90%" BORDER=1>'; - out += '<TR BGCOLOR=0xdddddddd>'; - out += '<TD><B>Parameter</B></TD>'; - out += '<TD><B>Description</B></TD></TR>'; - out += params; - out += '</TABLE><P>'; - } - if (tags["return"]) { - out += "<DT><B>Returns:</B><DD>"; - out += tags["return"][0] + "</DL><P>"; - } - if (tags["author"]) { - // List the authors together, separated by commas. - out += '<DT><B>Author:</B><DD>'; - var array = tags["author"]; - for (var i=0; i < array.length; i++) { - out += array[i]; - if (i+1 < array.length) - out += ", "; - } - out += '</DL><P>'; - } - if (tags["version"]) { - // Show the version. - out += '<DT><B>Version:</B><DD>'; - var array = tags["version"]; - for (var i=0; i < array.length; i++) { - out += array[i]; - if (i+1 < array.length) - out += "<BR><DD>"; - } - out += '</DL><P>'; - } - if (tags["see"]) { - // List the see modules together, separated by <BR>. - out += '<DT><B>Dependencies:</B><DD>'; - var array = tags["see"]; - for (var i=0; i < array.length; i++) { - out += array[i]; - if (i+1 < array.length) - out += "<BR><DD>"; + out += '<param><name>' + m[1] + '</name>'; + out += '<description>' + m[2] + '</description>'; + out += "</param>"; } - out += '</DL><P>'; + } + for (tag in tags) { + if (tag != "param") { + var array = tags[tag]; + if (array != null && array.length > 0) { + for (var i=0; i < array.length; i++) { + out += '<' + tag + '>' + array[i] + '</' + tag + '>'; + } + } + } + } + /* if (tags["lastmodified"]) { // Shows a last modified description with client-side js. out += '<DT><B>Last modified:</B><DD>'; @@ -333,6 +302,7 @@ out += '// ---></script>\n'; out += '</DL><P>'; } + */ // additional tags can be added here (i.e., "if (tags["see"])...") return out; @@ -388,7 +358,7 @@ var f = new java.io.File(inname); // create the output file - var htmlfile = filename.replace(/\.js$/, ".html"); + var htmlfile = filename.replace(/\.js$/, ".xml"); var out = CreateOutputFile(outputdir,htmlfile); @@ -406,13 +376,7 @@ var out = CreateOutputFile(outputdir,indexFile); // write the beginning of the file - out.append('<HTML><HEADER><TITLE>File Index - directory: ' + dirname + '</TITLE><BODY>'); - out.append('<H1>File Index - directory: ' + dirname + '</H1>\n'); - out.append('<TABLE WIDTH="90%" BORDER=1>'); - out.append('<TR BGCOLOR=0xdddddddd>'); - out.append('<TD><B>File</B></TD>'); - out.append('<TD><B>Description</B></TD></TR>'); - + out.append('<jsdoc type="index"><directory>' + dirname + '</directory>'); var separator = Packages.java.io.File.separator; // sort the index file array @@ -423,15 +387,14 @@ for (var i=0; i < SortedFileArray.length; i++) { var fname = SortedFileArray[i]; - var htmlfile = fname.replace(/\.js$/, ".html"); - out.append('<TR><TD><A HREF=\"' + htmlfile + '\">' + fname + '</A></TD></TD><TD>'); + //var htmlfile = fname.replace(/\.js$/, ".html"); + out.append('<file><name>' + fname + '</name>'); + if (indexFileArray[fname]) - out.append(indexFileArray[fname]); - else - out.append('No comments'); - out.append('</TD></TR>\n'); + out.append('<description>' + indexFileArray[fname] + '</description>'); + out.append('</file>\n'); } - out.append('</TABLE></BODY></HTML>'); + out.append('</jsdoc>'); // construct the functions index file var out = CreateOutputFile(outputdir,indexFunction); @@ -556,7 +519,7 @@ } // generate the index files for the input directory - GenerateIndex(inputDirName); + //GenerateIndex(inputDirName); } Added: struts/flow/trunk/src/doc/jsdoc2xdoc.xsl URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/doc/jsdoc2xdoc.xsl?view=auto&rev=161732 ============================================================================== --- struts/flow/trunk/src/doc/jsdoc2xdoc.xsl (added) +++ struts/flow/trunk/src/doc/jsdoc2xdoc.xsl Sun Apr 17 22:36:29 2005 @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="1.0" +xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +> + <xsl:output method="xml" /> + + <xsl:template match="/"> + <xsl:apply-templates /> + </xsl:template> + + <xsl:template match="jsdoc"> + <xsl:variable name="name" select="substring(fileName, 0, string-length(fileName) - 3)" /> +<document url="{$name}.html"> + <xsl:comment> + WARNING: This file is automatically generated from a jsdoc processor that + turns javadoc-type comments of Javascript files into an xml file, which is + then processed by an xsl file to create this document. Do not modify this + file, but rather either modify the comments or xsl file. + </xsl:comment> + <properties> + <title>File <xsl:value-of select="fileName" /></title> + </properties> + <body> + <xsl:variable name="title"> + <xsl:if test="title"><xsl:value-of select="title" /></xsl:if> + <xsl:if test="not(title)"><xsl:value-of select="concat('File ',fileName)" /></xsl:if> + </xsl:variable> + <section name="{title}" href="summary"> + <p> + <xsl:value-of select="comment" disable-output-escaping="yes"/> + </p> + <dl> + <xsl:apply-templates select="author" /> + <xsl:apply-templates select="version" /> + <xsl:apply-templates select="see" /> + </dl> + <hr /> + <strong>Functions</strong> + <blockquote> + <xsl:for-each select="function"> + <a href="#{concat('fn_',name)}"><xsl:value-of select="name" /></a>(<xsl:value-of select="args" />)<br /> + </xsl:for-each> + </blockquote> + </section> + <xsl:apply-templates select="function" /> + </body> +</document> + </xsl:template> + + <xsl:template match="author"> + <dt><strong>Author: </strong></dt><dd><xsl:value-of select="." /></dd> + </xsl:template> + + <xsl:template match="see"> + <dt><strong>See Also: </strong></dt><dd><xsl:value-of select="." /></dd> + </xsl:template> + + <xsl:template match="version"> + <dt><strong>Version: </strong></dt><dd><xsl:value-of select="." /></dd> + </xsl:template> + + <xsl:template match="return"> + <dt><strong>Returns: </strong></dt><dd><xsl:value-of select="." /></dd> + </xsl:template> + + <xsl:template match="function"> + <section name="{name}" href="fn_{name}"> +<pre> + <xsl:value-of select="concat(name,'(',args,')')" /> +</pre> + <p><xsl:value-of select="comment" disable-output-escaping="yes"/> + </p> + <xsl:if test="param"> + <table> + <tr> + <th>Parameter</th> + <th>Description</th> + </tr> + <xsl:for-each select="param"> + <tr> + <td><xsl:value-of select="name" /></td> + <td><xsl:value-of select="description" /></td> + </tr> + </xsl:for-each> + </table> + </xsl:if> + <dl> + <xsl:apply-templates select="return" /> + <xsl:apply-templates select="version" /> + <xsl:apply-templates select="see" /> + <xsl:apply-templates select="throws" /> + </dl> + </section> + </xsl:template> + + <xsl:template match="text()" /> + +</xsl:stylesheet> Propchange: struts/flow/trunk/src/doc/jsdoc2xdoc.xsl ------------------------------------------------------------------------------ svn:executable = * Modified: struts/flow/trunk/src/java/org/apache/struts/flow/Struts.java URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/Struts.java?view=diff&r1=161731&r2=161732 ============================================================================== --- struts/flow/trunk/src/java/org/apache/struts/flow/Struts.java (original) +++ struts/flow/trunk/src/java/org/apache/struts/flow/Struts.java Sun Apr 17 22:36:29 2005 @@ -28,6 +28,8 @@ /** * Access to Struts and Servlet resources + * + * @jsname struts */ public class Struts { Modified: struts/flow/trunk/src/java/system.js URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/system.js?view=diff&r1=161731&r2=161732 ============================================================================== --- struts/flow/trunk/src/java/system.js (original) +++ struts/flow/trunk/src/java/system.js Sun Apr 17 22:36:29 2005 @@ -1,5 +1,18 @@ /** - * System methods to simplify interactions with the flow engine. + * <p> + * These methods are available to every flow script automatically to simplify + * interactions with the flow engine. They can be overridden as necessary for + * advanced customizations like intercepting every function call to perform some + * common logic like security checks. + * </p> + * + * <p>The only method that should be called from an application's flow scripts + * is <a href="#fn_forwardAndWait">forwardAndWait()</a> as the others are mainly + * just used by the framework. + * They are exposed to allow the user to easily customize functionality. + * </p> + * + * @title Core Flow Methods */ var suicide; @@ -37,7 +50,8 @@ /** * Forwards to a page and creates a continuation. Contains special support * for client FlowCall's (calling flow functions through asynchrous javascript - * calls from the client. + * calls from the client). The forward name will be used to find the + * appropriate Struts ActionForward to return from the Action. * * @param name The Struts forward name to call * @param atts Map of business objects to place in the request scope @@ -87,9 +101,10 @@ } /** - * Do the actual work to forward to a page and create a continuation. The + * Does the actual work to forward to a page and create a continuation. The * forward name, continuation id, and business object map are passed through - * <code>flow</code> context values. + * <code>flow</code> context values. This method shouldn't be called from + * flow scripts but the method forwardAndWait() should be called instead. * * @param name The Struts forward to call * @param atts The business object map to make available to the page --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]