Author: vsiveton
Date: Wed Oct 17 06:33:15 2007
New Revision: 585489
URL: http://svn.apache.org/viewvc?rev=585489&view=rev
Log:
o fixed XMLDoclet to generated the XML from a user option
o added test case which call javadoc tool
o updated javadoc and added maven-javadoc-plugin in pom
Added:
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java
(with props)
Modified:
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/pom.xml
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/main/java/org/apache/maven/jxr/java/doc/XMLDoclet.java
Modified: maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/pom.xml?rev=585489&r1=585488&r2=585489&view=diff
==============================================================================
--- maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/pom.xml (original)
+++ maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/pom.xml Wed Oct 17
06:33:15 2007
@@ -95,4 +95,19 @@
<antlrArtifactId>antlrall</antlrArtifactId>
<antlrVersion>2.7.4</antlrVersion>
</properties>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2se/1.4.2/docs/api</link>
+
<link>http://java.sun.com/j2se/1.4.2/docs/tooldocs/javadoc/doclet/</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
</project>
Modified:
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/main/java/org/apache/maven/jxr/java/doc/XMLDoclet.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/main/java/org/apache/maven/jxr/java/doc/XMLDoclet.java?rev=585489&r1=585488&r2=585489&view=diff
==============================================================================
---
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/main/java/org/apache/maven/jxr/java/doc/XMLDoclet.java
(original)
+++
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/main/java/org/apache/maven/jxr/java/doc/XMLDoclet.java
Wed Oct 17 06:33:15 2007
@@ -20,16 +20,19 @@
*/
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.Enumeration;
import java.util.Vector;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
-import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
@@ -37,6 +40,7 @@
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.ConstructorDoc;
import com.sun.javadoc.Doc;
+import com.sun.javadoc.DocErrorReporter;
import com.sun.javadoc.Doclet;
import com.sun.javadoc.ExecutableMemberDoc;
import com.sun.javadoc.FieldDoc;
@@ -57,9 +61,10 @@
public class XMLDoclet
extends Doclet
{
-
- /** Logger for this class */
- private static final Logger log = Logger.getLogger( XMLDoclet.class );
+ /**
+ * The specified DTD for the generated Javadoc XML.
+ */
+ public static final String XMLDOCLET_DTD = "javadoc-v04draft.dtd";
private String xmlns = "jvx";
@@ -69,15 +74,19 @@
private TransformerHandler handler = null;
- private String targetFileName = "simple.xml";
-
private Attributes emptyAtts = new AttributesImpl();
- public XMLDoclet( RootDoc root )
+ /**
+ * Default constructor
+ *
+ * @param root of the Javadoc structure information
+ * @param outputXML the XML file generated by this doclet.
+ * @throws Exception if any
+ */
+ protected XMLDoclet( RootDoc root, String outputXML )
throws Exception
{
-
- SAXTransformerFactory tFactory = (SAXTransformerFactory)
SAXTransformerFactory.newInstance();
+ SAXTransformerFactory tFactory = (SAXTransformerFactory)
TransformerFactory.newInstance();
if ( !( tFactory.getFeature( javax.xml.transform.sax.SAXSource.FEATURE
) && tFactory
.getFeature( javax.xml.transform.stream.StreamResult.FEATURE ) ) )
{
@@ -85,9 +94,13 @@
throw new Exception( "The supplied TrAX transformer library is
inadeguate."
+ "Please upgrade to the latest version." );
}
+ if ( outputXML == null )
+ {
+ throw new IllegalArgumentException( "outputXML could not be null"
);
+ }
- File writer = new File( targetFileName );
- StreamResult result = new StreamResult( writer );
+ File outputXMLFile = new File( outputXML );
+ StreamResult result = new StreamResult( outputXMLFile );
// SAX2.0 ContentHandler.
handler = tFactory.newTransformerHandler();
@@ -96,11 +109,103 @@
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" );
+ serializer.setOutputProperty( OutputKeys.DOCTYPE_SYSTEM, XMLDOCLET_DTD
);
handler.setResult( result );
javadocXML( root );
+
+ copyDtd( this.getClass().getClassLoader(),
outputXMLFile.getParentFile() );
+ }
+
+ /** @see Doclet#validOptions(String[][], DocErrorReporter) */
+ public static boolean validOptions( String options[][], DocErrorReporter
reporter )
+ {
+ boolean foundOutputDirOption = false;
+ for ( int i = 0; i < options.length; i++ )
+ {
+ String[] opt = options[i];
+
+ if ( opt[0].equals( "-o" ) )
+ {
+ if ( foundOutputDirOption )
+ {
+ reporter.printError( "Only one -o option allowed." );
+ return false;
+ }
+
+ String outputXML = opt[1];
+ if ( outputXML == null || outputXML.length() == 0 )
+ {
+ reporter
+ .printError( "Usage: javadoc -o
/path/to/generatedXmlFile -doclet org.apache.maven.jxr.java.doc.XMLDoclet ..."
);
+ return false;
+ }
+ File outputXMLFile = new File( outputXML );
+ if ( outputXMLFile.exists() && outputXMLFile.isDirectory() )
+ {
+ reporter.printError( "Output XML '" + outputXML + "'
should be a file." );
+ return false;
+ }
+ if ( !outputXMLFile.getParentFile().exists() &&
!outputXMLFile.getParentFile().mkdirs() )
+ {
+ reporter.printError( "Cannot create the parent directory
for: " + outputXML );
+ return false;
+ }
+
+ foundOutputDirOption = true;
+ }
+ }
+
+ if ( !foundOutputDirOption )
+ {
+ reporter
+ .printError( "Usage: javadoc -o /path/to/generatedXmlFile
-doclet org.apache.maven.jxr.java.doc.XMLDoclet ..." );
+ return false;
+ }
+
+ return foundOutputDirOption;
+ }
+
+ /** @see Doclet#optionLength(String) */
+ public static int optionLength( String option )
+ {
+ // -o generatedXmlFile
+ return 2;
+ }
+
+ /** @see Doclet#start(RootDoc) */
+ public static boolean start( RootDoc root )
+ {
+ try
+ {
+ new XMLDoclet( root, getOutputDir( root.options() ) );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ return false;
+ }
+
+ return true;
+ }
+
+ // ----------------------------------------------------------------------
+ // Private
+ // ----------------------------------------------------------------------
+
+ private static String getOutputDir( String[][] options )
+ {
+ for ( int i = 0; i < options.length; i++ )
+ {
+ String[] opt = options[i];
+ if ( opt[0].equals( "-o" ) )
+ {
+ return opt[1];
+ }
+ }
+
+ throw new IllegalArgumentException( "No output option specified." );
}
/**
@@ -110,7 +215,6 @@
private void javadocXML( RootDoc root )
throws SAXException
{
-
handler.startDocument();
handler.startElement( xmlns, localName, "javadoc", emptyAtts );
@@ -798,17 +902,44 @@
}
}
- public static boolean start( RootDoc root )
+ /**
+ * Copy the Javadoc DTD near the generated XML
+ *
+ * @param classloader the given class loader, not null
+ * @param resourcesPath the path of a resources file in the given class
loader, not null
+ * @param outputDirectory the output directory, not null
+ * @throws IOException if any
+ */
+ private static void copyDtd( ClassLoader classloader, File outputDirectory
)
+ throws IOException
{
- try
+ InputStream is = classloader.getResourceAsStream(
XMLDoclet.class.getPackage().getName().replace( ".", "/" )
+ + "/" + XMLDOCLET_DTD );
+
+ if ( is == null )
{
- new XMLDoclet( root );
- return true;
+ throw new IOException( "The resource " +
XMLDoclet.class.getPackage().getName().replace( ".", "/" ) + "/"
+ + XMLDOCLET_DTD + " doesn't exist." );
}
- catch ( Exception e )
+
+ File outputFile = new File( outputDirectory, XMLDOCLET_DTD );
+
+ if ( !outputFile.getParentFile().exists() )
{
- log.error( "Exception: " + e.getMessage(), e );
- return false;
+ outputFile.getParentFile().mkdirs();
}
+
+ FileOutputStream w = new FileOutputStream( outputFile );
+
+ final byte[] buffer = new byte[1024 * 4];
+ int n = 0;
+ while ( -1 != ( n = is.read( buffer ) ) )
+ {
+ w.write( buffer, 0, n );
+ }
+
+ is.close();
+
+ w.close();
}
}
Added:
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java?rev=585489&view=auto
==============================================================================
---
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java
(added)
+++
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java
Wed Oct 17 06:33:15 2007
@@ -0,0 +1,77 @@
+package org.apache.maven.jxr.java.doc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import com.sun.tools.javadoc.Main;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class XMLDocletTest
+ extends TestCase
+{
+ /**
+ * Call Javadoc tool with XML doclet.
+ *
+ * @throws Exception if any
+ */
+ public void testDefaultExecute()
+ throws Exception
+ {
+ final String basedir = new File( "" ).getAbsolutePath();
+
+ File outputXML = new File( basedir,
"target/unit/xmldoclet-default/javadoc.xml" );
+
+ // test phase is after compile phase, so we are sure that classes dir
exists
+ // TODO wrap syso and syserr
+ String[] args = {
+ "-package",
+ "-sourcepath",
+ new File( basedir, "src/test/resources/javasrc"
).getAbsolutePath(),
+ "-doclet",
+ "org.apache.maven.jxr.java.doc.XMLDoclet",
+ "-docletpath",
+ new File( basedir, "target/classes" ).getAbsolutePath(),
+ "-o",
+ outputXML.getAbsolutePath(),
+ "test.packA",
+ "test.packB",
+ "test.packC",
+ "test.packD",
+ "test.packE",
+ "test.packF",
+ "test.packG.a",
+ "test.packG.b" };
+
+ Main.execute( "javadoc", XMLDoclet.class.getName(), args );
+
+ // Generated files
+ assertTrue( outputXML.exists() );
+ assertTrue( outputXML.length() > 0 );
+ File dtd = new File( basedir, "target/unit/xmldoclet-default/" +
XMLDoclet.XMLDOCLET_DTD );
+ assertTrue( dtd.exists() );
+ assertTrue( dtd.length() > 0 );
+ }
+}
Propchange:
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/sandbox/trunk/jxr/maven-jxr/maven-jxr-java/src/test/java/org/apache/maven/jxr/java/doc/XMLDocletTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"