cvs commit: jakarta-alexandria/src/java/org/apache/alexandria/doclets XMLDoclet.java

[email protected] 1 Apr 2003 16:35:26 -0000
Newsgroups gmane.comp.jakarta.alexandria.devel
Message-ID <[email protected]>
nicolaken    2003/04/01 08:35:26

  Modified:    src/java/org/apache/alexandria/doclets XMLDoclet.java
  Log:
  Convert to use JAXP.
  
  Revision  Changes    Path
  1.4       +72 -56    jakarta-alexandria/src/java/org/apache/alexandria/doclets/XMLDoclet.java
  
  Index: XMLDoclet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/src/java/org/apache/alexandria/doclets/XMLDoclet.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLDoclet.java	1 Apr 2003 13:56:43 -0000	1.3
  +++ XMLDoclet.java	1 Apr 2003 16:35:26 -0000	1.4
  @@ -52,7 +52,9 @@
   import java.io.*;
   import java.util.*;
   import com.sun.javadoc.*;
  -import org.apache.xml.serialize.*;
  +import javax.xml.transform.*;
  +import javax.xml.transform.sax.*;
  +import javax.xml.transform.stream.*;
   import org.xml.sax.*;
   import org.xml.sax.helpers.*;
   
  @@ -60,6 +62,7 @@
    * Main Doclet class to generate JavaDocXML.  This doclet generates the
    * document conforming to DTD specified in javadoc-v04draft.dtd.
    * @author <a href="mailto:[email protected]">Gopinath M.R.</a>
  + * @author <a href="mailto:[email protected]">Nicola Ken Barozzi</a>
    */
   
   public class XMLDoclet extends Doclet {
  @@ -67,27 +70,35 @@
       private String xmlns = "jvx";
       private String encodingFormat="ISO-8859-1";
       private String localName = "javadoc";
  -    private ContentHandler cm = null;
  +    private TransformerHandler handler = null;
       private String targetFileName="simple.xml";
       private Attributes emptyAtts = new AttributesImpl();
   
       public XMLDoclet (RootDoc root) throws Exception {
  -        FileWriter writer = new FileWriter(targetFileName);
  -        try {
  -            OutputFormat format = new OutputFormat();
  -            format.setEncoding(encodingFormat);
  -            format.setIndenting(true);
  -            format.setIndent(4);
  -            format.setLineWidth(4);
  -            format.setDoctype("-//APACHE//DTD JavaDoc V0.4//EN", "javadoc-v04draft.dtd");
  -            XMLSerializer serializer = new XMLSerializer(writer, format);
  -            cm = serializer.asContentHandler();
  -            javadocXML(root);
  -            writer.close();
  -        } catch (IOException e) {
  -            writer.close();
  -            throw e;
  -        }
  +
  +      SAXTransformerFactory tFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
  +      if (!(tFactory.getFeature(javax.xml.transform.sax.SAXSource.FEATURE) && 
  +            tFactory.getFeature(javax.xml.transform.stream.StreamResult.FEATURE))){
  +      
  +        throw new Exception("The supplied TrAX transformer library is inadeguate."+
  +                            "Please upgrade to the latest version.");
  +      }
  +      
  +     File writer = new File(targetFileName);
  +     StreamResult result = new StreamResult(writer);        
  +            
  +      // SAX2.0 ContentHandler.
  +      handler = tFactory.newTransformerHandler();
  +            
  +      Transformer serializer = handler.getTransformer();
  +      serializer.setOutputProperty(OutputKeys.ENCODING, encodingFormat);    
  +      serializer.setOutputProperty(OutputKeys.INDENT , "yes");      
  +      serializer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC , "-//APACHE//DTD JavaDoc V0.4//EN");       
  +      serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM , "javadoc-v04draft.dtd");
  +
  +      handler.setResult(result);            
  +
  +      javadocXML(root);
       }
   
       /**
  @@ -95,7 +106,10 @@
        * <xmp><!ELEMENT javadoc (package*, class*, interface*)></xmp>
        */
       private void javadocXML(RootDoc root) throws SAXException {
  -        cm.startElement(xmlns, localName, "javadoc", emptyAtts);
  +   
  +        handler.startDocument();
  + 
  +        handler.startElement(xmlns, localName, "javadoc", emptyAtts);
           PackageDoc[] packageArray = root.specifiedPackages();
   
           // Generate for packages.
  @@ -120,7 +134,9 @@
               ClassDoc interfaceDoc = (ClassDoc)interfaceEnum.nextElement();
               interfaceXML(interfaceDoc);
           }
  -        cm.endElement(xmlns, localName, "javadoc");
  +        handler.endElement(xmlns, localName, "javadoc");
  +        
  +        handler.endDocument();
       }
   
      /**
  @@ -132,7 +148,7 @@
       private void packageXML(PackageDoc packageDoc) throws SAXException {
           AttributesImpl atts = new AttributesImpl();
           atts.addAttribute(xmlns, localName, "name", "String", packageDoc.name());
  -        cm.startElement(xmlns, localName, "package", atts);
  +        handler.startElement(xmlns, localName, "package", atts);
   
           // generate Doc element.
           docXML(packageDoc);
  @@ -163,7 +179,7 @@
               interfaceXML(interfaceArray[i]);
           }
   
  -        cm.endElement(xmlns, localName, "package");
  +        handler.endElement(xmlns, localName, "package");
       }
   
       /**
  @@ -195,7 +211,7 @@
               access = "public";
           }
           atts.addAttribute(xmlns, localName, "access", "String", access);
  -        cm.startElement(xmlns, localName, "class", atts);
  +        handler.startElement(xmlns, localName, "class", atts);
   
           // generate "doc" sub-element
           docXML(classDoc);
  @@ -230,7 +246,7 @@
               innerClassXML(innerClassArray[i]);
           }
   
  -        cm.endElement(xmlns, localName, "class");
  +        handler.endElement(xmlns, localName, "class");
       }
   
       /**
  @@ -239,9 +255,9 @@
        */
       private void extendsXML(ClassDoc classDoc) throws SAXException {
           if (classDoc.superclass() != null) {
  -            cm.startElement(xmlns, localName, "extends_class", emptyAtts);
  +            handler.startElement(xmlns, localName, "extends_class", emptyAtts);
               createRefXML("classref", classDoc.superclass().qualifiedName());
  -            cm.endElement(xmlns, localName, "extends_class");
  +            handler.endElement(xmlns, localName, "extends_class");
           }
       }
   
  @@ -277,7 +293,7 @@
           atts.addAttribute(xmlns, localName, "anonymous", "String", ""+ anonymous);
           atts.addAttribute(xmlns, localName, "final", "String", ""+ "" + classDoc.isFinal());
           atts.addAttribute(xmlns, localName, "static", "String", ""+ "" + classDoc.isStatic());
  -        cm.startElement(xmlns, localName, "innerclass", atts);
  +        handler.startElement(xmlns, localName, "innerclass", atts);
   
           // generate "doc" sub-element
           docXML(classDoc);
  @@ -306,7 +322,7 @@
               methodXML(methodArray[i]);
           }
   
  -        cm.endElement(xmlns, localName,"innerclass");
  +        handler.endElement(xmlns, localName,"innerclass");
       }
   
       /**
  @@ -327,7 +343,7 @@
               access = "public";
           }
           atts.addAttribute(xmlns, localName, "access", "String", access);
  -        cm.startElement(xmlns, localName, "interface", atts);
  +        handler.startElement(xmlns, localName, "interface", atts);
   
           // generate "doc" sub-element
           docXML(interfaceDoc);
  @@ -347,7 +363,7 @@
               methodXML(methodArray[i]);
           }
   
  -       cm.endElement(xmlns, localName, "interface");
  +       handler.endElement(xmlns, localName, "interface");
       }
   
       /**
  @@ -357,11 +373,11 @@
       private void extends_interfaceXML(ClassDoc interfaceDoc) throws SAXException {
           ClassDoc[] interfaceArray = interfaceDoc.interfaces();
           if (interfaceArray.length > 0) {
  -            cm.startElement(xmlns, localName, "extends_interface", emptyAtts);
  +            handler.startElement(xmlns, localName, "extends_interface", emptyAtts);
               for (int i = 0; i < interfaceArray.length; ++i) {
                   createRefXML("interfaceref", interfaceArray[i].qualifiedName());
               }
  -            cm.endElement(xmlns, localName, "extends_interface");
  +            handler.endElement(xmlns, localName, "extends_interface");
           }
       }
   
  @@ -372,11 +388,11 @@
       private void implementsXML(ClassDoc classDoc) throws SAXException {
           ClassDoc[] interfaceArray = classDoc.interfaces();
           if (interfaceArray.length > 0) {
  -            cm.startElement(xmlns, localName, "implements", emptyAtts);
  +            handler.startElement(xmlns, localName, "implements", emptyAtts);
               for (int i = 0; i < interfaceArray.length; ++i) {
                   createRefXML("interfaceref", interfaceArray[i].qualifiedName());
               }
  -            cm.endElement(xmlns, localName, "implements");
  +            handler.endElement(xmlns, localName, "implements");
           }
       }
   
  @@ -387,7 +403,7 @@
       private void throwsXML(ExecutableMemberDoc member) throws SAXException {
           ThrowsTag[] tagArray = member.throwsTags();
           if(tagArray.length > 0) {
  -            cm.startElement(xmlns, localName, "throws", emptyAtts);
  +            handler.startElement(xmlns, localName, "throws", emptyAtts);
               for (int i = 0; i < tagArray.length; ++i) {
                   ClassDoc exceptionClass = tagArray[i].exception();
                   String name = null;
  @@ -398,7 +414,7 @@
                   }
                   createRefXML("classref", name);
               }
  -            cm.endElement(xmlns, localName, "throws");
  +            handler.endElement(xmlns, localName, "throws");
           }
       }
   
  @@ -416,8 +432,8 @@
       private void createRefXML(String elementName, String nameValue) throws SAXException {
           AttributesImpl atts = new AttributesImpl();
           atts.addAttribute(xmlns, localName, "name", "String", nameValue);
  -        cm.startElement(xmlns, localName, elementName, atts);
  -        cm.endElement(xmlns, localName, elementName);
  +        handler.startElement(xmlns, localName, elementName, atts);
  +        handler.endElement(xmlns, localName, elementName);
       }
   
       /**
  @@ -430,8 +446,8 @@
               // primitive data type
               AttributesImpl subElmAtts = new AttributesImpl();
               subElmAtts.addAttribute(xmlns, localName, "type", "String", qualifiedName);
  -            cm.startElement(xmlns, localName, "primitive", subElmAtts);
  -            cm.endElement(xmlns, localName, "primitive");
  +            handler.startElement(xmlns, localName, "primitive", subElmAtts);
  +            handler.endElement(xmlns, localName, "primitive");
           } else if (fieldType.isInterface()) {
               // interface
               createRefXML("interfaceref", qualifiedName);
  @@ -474,7 +490,7 @@
           atts.addAttribute(xmlns, localName, "final", "String", "" + field.isFinal());
           atts.addAttribute(xmlns, localName, "transient", "String", "" + field.isTransient());
           atts.addAttribute(xmlns, localName, "volatile", "String", "" + field.isVolatile());
  -        cm.startElement(xmlns, localName, "field", atts);
  +        handler.startElement(xmlns, localName, "field", atts);
   
           // generate "doc" sub-element
           docXML(field);
  @@ -482,7 +498,7 @@
           // generate "(classref|interfaceref|primitive)" sub-element
           createTypeRef(field.type()); // foo , field.qualifiedName());
   
  -        cm.endElement(xmlns, localName, "field");
  +        handler.endElement(xmlns, localName, "field");
       }
   
       /**
  @@ -506,7 +522,7 @@
           }
           atts.addAttribute(xmlns, localName, "access", "String", access);
           atts.addAttribute(xmlns, localName, "synthetic", "String", "" + constrDoc.isSynthetic());
  -        cm.startElement(xmlns, localName, "constructor", atts);
  +        handler.startElement(xmlns, localName, "constructor", atts);
   
           // generate "doc" sub-element
           docXML(constrDoc);
  @@ -520,7 +536,7 @@
           // generate "throws" sub-element
           throwsXML(constrDoc);
   
  -        cm.endElement(xmlns, localName, "constructor");
  +        handler.endElement(xmlns, localName, "constructor");
       }
   
       /**
  @@ -562,7 +578,7 @@
           atts.addAttribute(xmlns, localName, "synthetic", "String", "" + methodDoc.isSynthetic());
           atts.addAttribute(xmlns, localName, "static", "String", "" + methodDoc.isStatic());
           atts.addAttribute(xmlns, localName, "synchronized", "String", ""+ methodDoc.isSynchronized());
  -        cm.startElement(xmlns, localName, "method", atts);
  +        handler.startElement(xmlns, localName, "method", atts);
   
           // generate "doc" sub-element
           docXML(methodDoc);
  @@ -579,7 +595,7 @@
           // generate "throws" sub-element
           throwsXML(methodDoc);
   
  -        cm.endElement(xmlns, localName, "field");
  +        handler.endElement(xmlns, localName, "method");
       }
   
       /**
  @@ -590,12 +606,12 @@
       private void returnsXML(Type type) throws SAXException {
           AttributesImpl atts = new AttributesImpl();
           atts.addAttribute(xmlns, localName, "dimension", "String", type.dimension());
  -        cm.startElement(xmlns, localName, "returns", atts);
  +        handler.startElement(xmlns, localName, "returns", atts);
   
           // generate "(classref|interfaceref|primitive)" sub-element
           createTypeRef(type);
   
  -        cm.endElement(xmlns, localName, "returns");
  +        handler.endElement(xmlns, localName, "returns");
       }
   
       /**
  @@ -616,12 +632,12 @@
           }
           atts.addAttribute(xmlns, localName, "final", "String", ""+ "" + isFinal);
           atts.addAttribute(xmlns, localName, "dimension", "String", parameter.type().dimension());
  -        cm.startElement(xmlns, localName, "parameter", atts);
  +        handler.startElement(xmlns, localName, "parameter", atts);
   
           // generate "(classref|interfaceref|primitive)" sub-element
           createTypeRef(parameter.type());
   
  -        cm.endElement(xmlns, localName,"parameter");
  +        handler.endElement(xmlns, localName,"parameter");
       }
   
       /**
  @@ -653,14 +669,14 @@
               createDoc = true;
           }
           if (createDoc) {
  -            cm.startElement(xmlns, localName, "doc", emptyAtts);
  +            handler.startElement(xmlns, localName, "doc", emptyAtts);
               if (! commentText.equals("")) {
  -                cm.characters(commentText.toCharArray(), 0, commentText.length());
  +                handler.characters(commentText.toCharArray(), 0, commentText.length());
               }
               for (int i = 0; i < tags.length; ++i) {
                   tagXML(tags[i]);
               }
  -            cm.endElement(xmlns, localName, "doc");
  +            handler.endElement(xmlns, localName, "doc");
           }
       }
   
  @@ -670,9 +686,9 @@
       private void tagXML(Tag tag) throws SAXException {
           String name = tag.name().substring(1) + "tag";
           if (! tag.text().equals("")) {
  -            cm.startElement(xmlns, localName, name, emptyAtts);
  -            cm.characters(tag.text().toCharArray(), 0, tag.text().length());
  -            cm.endElement(xmlns, localName, name);
  +            handler.startElement(xmlns, localName, name, emptyAtts);
  +            handler.characters(tag.text().toCharArray(), 0, tag.text().length());
  +            handler.endElement(xmlns, localName, name);
           }
       }