You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by eh...@apache.org on 2002/03/05 04:26:57 UTC

cvs commit: jakarta-ant/proposal/xdocs/src/org/apache/tools/ant/xdoclet DatatypeSubTask.java DatatypeTagsHandler.java

ehatcher    02/03/04 19:26:57

  Modified:    proposal/xdocs build.xml
  Added:       proposal/xdocs/templates datatype_xdoc.template
               proposal/xdocs/src/org/apache/tools/ant/xdoclet
                        DatatypeSubTask.java DatatypeTagsHandler.java
  Removed:     proposal/xdocs/templates defaults_properties.template
  Log:
  Substantial refactoring.
  
  Added datatype defaults.properties generation as well as xdocs for them. Created wrapper task somewhat similar to Darrell DoBoer's in mymidon (although his is still slicker!).
  
  Since its already processing all of Ant's main source code, I added in generation of todo lists of both Ant and this proposal - into two separate directories.
  
  Revision  Changes    Path
  1.7       +78 -30    jakarta-ant/proposal/xdocs/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/xdocs/build.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- build.xml	3 Mar 2002 01:48:28 -0000	1.6
  +++ build.xml	5 Mar 2002 03:26:57 -0000	1.7
  @@ -1,21 +1,27 @@
   <?xml version="1.0" ?>
  -<project name="XDoclet" default="default">
  +<project name="XDoclet" default="main">
   
     <property name="log4j.jar" location="../../lib/optional/log4j.jar"/>
     <property name="xdoclet.jar" location="lib/xdoclet.jar"/>
   
     <property name="src.dir"
  -            location="../../src/main/org/apache/tools/ant/taskdefs"/>
  +            location="../../src/main/org/apache/tools/ant"/>
     <property name="src.root"
               location="../../src/main"/>
  +  <property name="docs.src"
  +            location="../../xdocs"/>
     <property name="build.dir" location="build"/>
     <property name="gen.dir" location="${build.dir}/gen"/>
   
     <property name="template.dir" location="templates"/>
  -  <property name="defaults.properties.template"
  -            location="${template.dir}/defaults_properties.template"/>
  -  <property name="xdoc.template"
  +  <property name="task.properties.template"
  +            location="${template.dir}/task_defaults_properties.template"/>
  +  <property name="type.properties.template"
  +            location="${template.dir}/type_defaults_properties.template"/>
  +  <property name="task_xdoc.template"
               location="${template.dir}/task_xdoc.template"/>
  +  <property name="datatype_xdoc.template"
  +            location="${template.dir}/datatype_xdoc.template"/>
   
   
     <target name="init">
  @@ -31,6 +37,11 @@
         <pathelement path="${java.class.path}"/>
         <pathelement location="${build.dir}"/>
       </path>
  +
  +    <taskdef name="document"
  +             classname="xdoclet.doc.DocumentDocletTask"
  +             classpathref="xdoclet.classpath"/>
  +
     </target>
   
   
  @@ -41,46 +52,83 @@
     <target name="compile" depends="init">
       <javac srcdir="src" destdir="${build.dir}"
              debug="true" classpathref="xdoclet.classpath"/>
  +    <taskdef name="xdocs"
  +             classname="org.apache.tools.ant.xdoclet.AntXDocletTask"
  +             classpathref="xdoclet.classpath"/>
     </target>
   
     <target name="gen" depends="compile">
  -    <delete dir="${gen.dir}"/>
  -
  -    <taskdef name="document"
  -             classname="xdoclet.doc.DocumentDocletTask"
  -             classpathref="xdoclet.classpath"/>
  -
  -    <document sourcepath="${src.root}"
  -              destdir="${gen.dir}"
  -              classpathref="xdoclet.classpath">
  +    <xdocs sourcepath="${src.root}"
  +           destdir="${gen.dir}"
  +           mergedir="${basedir}/src"
  +           classpathref="xdoclet.classpath">
         <fileset dir="${src.dir}">
           <include name="**/*.java" unless="class.name"/>
           <include name="**/${class.name}.java" if="class.name"/>
         </fileset>
  -      <template subTaskClassName="org.apache.tools.ant.xdoclet.AntSubTask"
  -                templateFile="${defaults.properties.template}"
  -                destinationfile="defaults.properties"/>
  -      <template subTaskClassName="org.apache.tools.ant.xdoclet.AntSubTask"
  -                templateFile="${xdoc.template}"
  -                destinationfile="{0}.xml" extent="concrete-type"/>
  -    </document>
   
  -    <!-- currently not working - bug in XDoclet?
  -    <document sourcepath="src"
  -              destdir="${gen.dir}"
  -              classpathref="xdoclet.classpath">
  -      <fileset dir="src">
  -        <include name="**/*.java"/>
  +      <!-- Generate XML task descriptor files -->
  +      <tasks templateFile="${task_xdoc.template}"
  +             destinationfile="{0}.xml"/>
  +
  +      <!-- Generate XML datatype descriptor files -->
  +      <datatypes templateFile="${datatype_xdoc.template}"
  +                 destdir="${gen.dir}/datatypes"
  +                 destinationfile="{0}.xml"/>
  +
  +      <!-- @todo - with some additional logic in these subtasks, they
  +           could be used similar to above instead of <template> -->
  +      <!-- Generate task defaults.properties -->
  +      <template subTaskClassName="org.apache.tools.ant.xdoclet.TaskSubTask"
  +                templateFile="${task.properties.template}"
  +                destinationfile="task_defaults.properties"/>
  +
  +      <!-- Generate datatype defaults.properties -->
  +      <template subTaskClassName="org.apache.tools.ant.xdoclet.DatatypeSubTask"
  +                templateFile="${type.properties.template}"
  +                destinationfile="type_defaults.properties"/>
  +
  +      <!-- Generate to-do list -->
  +      <info destdir="${gen.dir}/todo/ant"
  +            header="To-do List"
  +            projectname="Ant"/>
  +    </xdocs>
  +
  +  </target>
  +
  +  <target name="document" depends="init">
  +    <document sourcepath="${basedir}/src"
  +           destdir="${gen.dir}"
  +           mergedir="${basedir}/src"
  +           classpathref="xdoclet.classpath">
  +      <fileset dir="${basedir}/src">
  +        <include name="**/*.java" unless="class.name"/>
  +        <include name="**/${class.name}.java" if="class.name"/>
         </fileset>
  -      <documenttags/>
  -    </document> -->
   
  +      <info destdir="${gen.dir}/todo/xdocs"/>
  +
  +      <!-- This is currently broken, checking into...
  +      <documenttags/> -->
  +
  +    </document>
     </target>
   
     <target name="docs" depends="gen">
  +    <mkdir dir="${build.dir}/docs" />
  +    <!-- Copy stuff so things are in the correct relative location. -->
  +    <copy todir="${build.dir}/docs">
  +      <fileset dir="${basedir}/../../docs" includes="artwork/**" />
  +    </copy>
  +    <mkdir dir="${basedir}/xdocs" />
  +    <copy todir="${basedir}/xdocs">
  +      <fileset dir="${docs.src}" includes="stylesheets/project.xml" />
  +    </copy>
  +    <!-- Generate HTML using DVSL -->
       <ant dir="dvsl"/>
     </target>
   
  -  <target name="default" depends="gen"/>
  +  <target name="main" depends="gen,document"/>
  +
   </project>
   
  
  
  
  1.1                  jakarta-ant/proposal/xdocs/templates/datatype_xdoc.template
  
  Index: datatype_xdoc.template
  ===================================================================
  <XDtTagDef:tagDef namespace="AntDatatype" handler="org.apache.tools.ant.xdoclet.DatatypeTagsHandler"/>
  <XDtTagDef:tagDef namespace="AntTask" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
  <datatype name="<XDtAntDatatype:typeName/>"
            classname="<XDtClass:fullClassName/>">
    <short-description><![CDATA[<XDtClass:firstSentenceDescription/>]]></short-description>
    <long-description>
      <![CDATA[<XDtClass:classComment no-comment-signs="true"/>]]>
    </long-description>
  
    <structure>
  
      <attributes>
      <XDtAntTask:forAllAttributes>
        <attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
          <description><![CDATA[
            <XDtMethod:methodComment no-comment-signs="true"/>
          ]]></description>
        </attribute>
      </XDtAntTask:forAllAttributes>
      </attributes>
  
      <elements>
      <XDtAntTask:forAllElements>
        <element name="<XDtAntTask:elementName/>" type="<XDtAntTask:elementType/>">
          <description>
            <![CDATA[<XDtMethod:methodComment no-comment-signs="true"/>]]>
          </description>
          <XDtClass:pushClass value="<XDtAntTask:elementType/>">
          <XDtAntTask:ifHasAttributes>
          <attributes>
            <XDtAntTask:forAllAttributes>
            <attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
              <description><![CDATA[
                <XDtMethod:methodComment no-comment-signs="true"/>
              ]]></description>
            </attribute>
            </XDtAntTask:forAllAttributes>
          </attributes>
          </XDtAntTask:ifHasAttributes>
          </XDtClass:pushClass>
        </element>
  
      </XDtAntTask:forAllElements>
      </elements>
  
      </structure>
  </datatype>
  
  
  
  
  
  1.1                  jakarta-ant/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.java
  
  Index: DatatypeSubTask.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.tools.ant.xdoclet;
  
  import com.sun.javadoc.ClassDoc;
  import xdoclet.TemplateSubTask;
  import xdoclet.XDocletException;
  import xdoclet.XDocletTagSupport;
  import xdoclet.tags.TypeTagsHandler;
  import xdoclet.util.TypeConversionUtil;
  
  import java.io.File;
  import java.text.MessageFormat;
  
  /**
   * Custom XDoclet subtask to handle Ant datatypes
   */
  public class DatatypeSubTask extends TemplateSubTask {
      public final static String SUBTASK_NAME = "datatypes";
  
      public String getSubTaskName() {
          return SUBTASK_NAME;
      }
  
      /**
       * Returns true if the class is an Ant task. This causes the task to be processed
       * by the XDoclet template task.
       */
      protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException {
          return isAntDatatype(clazz);
          ;
      }
  
      /**
       * @todo a datatype doesn't have to extend Datatype, right?  so perhaps should
       *       another condition to flag a class with @ant.datatype name="..."
       */
      public static final boolean isAntDatatype(ClassDoc clazz) throws XDocletException {
          if (clazz.isAbstract()) {
              return false;
          }
  
          // no inner classes
          if (clazz.containingClass() != null) {
              return false;
          }
  
          String ignoreValue = XDocletTagSupport.getClassTagValue(clazz, "ant:datatype", "ignore", 0, null, "false", false, false);
          boolean ignore = TypeConversionUtil.stringToBoolean(ignoreValue, true);
  
          if (ignore) {
              return false;
          }
  
          return TypeTagsHandler.isOfType(clazz,
                  "org.apache.tools.ant.types.DataType",
                  TypeTagsHandler.TYPE_HIERARCHY);
      }
  
      /**
       * Custom file naming. Use the task name for the file name rather than the
       * default class name.
       *
       * @todo fix hardcoded path name
       */
      protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException {
          String typeName = DatatypeTagsHandler.getDatatypeName(clazz);
          return typeName + ".xml";
      }
  
  }
  
  
  
  1.1                  jakarta-ant/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeTagsHandler.java
  
  Index: DatatypeTagsHandler.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.tools.ant.xdoclet;
  
  import com.sun.javadoc.ClassDoc;
  import com.sun.javadoc.MethodDoc;
  import com.sun.javadoc.Parameter;
  import com.sun.javadoc.Type;
  
  import xdoclet.XDocletException;
  import xdoclet.XDocletTagSupport;
  import xdoclet.tags.AbstractProgramElementTagsHandler;
  
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collections;
  import java.util.Comparator;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  import java.util.Properties;
  
  /**
   * Custom tag handler for XDoclet templates for Ant-specific processing.
   *
   * @author     Erik Hatcher
   * @created    February 17, 2002
   *
   * @todo clean up logic so that all setters are gathered first (even
   * superclass) and sorted along wih them
   * @todo need to create better logic for finding proper setters
   * @todo add ifIsAntTask, among other convenience tags
   */
  public class DatatypeTagsHandler extends XDocletTagSupport {
  
      /**
       * Iterates over all Ant datatypes
       */
      public void forAllDatatypes(String template, Properties attributes) throws XDocletException {
          ClassDoc[] classes = AbstractProgramElementTagsHandler.getAllClasses();
          ClassDoc cur_class = null;
  
          for (int i = 0; i < classes.length; i++) {
              cur_class = classes[i];
              setCurrentClass(cur_class);
  
              if (DatatypeSubTask.isAntDatatype(cur_class)) {
                  generate(template);
              }
          }
      }
  
      /**
       * Provides the datatype name
       */
      public String typeName() throws XDocletException {
          return getDatatypeName(getCurrentClass());
      }
  
      public static final String getDatatypeName(ClassDoc clazz) throws XDocletException {
          // sheesh!  There should be a friendlier method than this!
          String tagValue = getTagValue(clazz, "ant:datatype", "name", -1,
                  null, null, null, null,
                  null, false, XDocletTagSupport.FOR_CLASS, false);
  
          if (tagValue == null) {
              tagValue = clazz.name();
  
              tagValue = tagValue.toLowerCase();
          }
          return tagValue;
      }
  }
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>