Author: dennisl
Date: Sun Mar  4 07:31:15 2007
New Revision: 514409

URL: http://svn.apache.org/viewvc?view=rev&rev=514409
Log:
[JXR-11] JXR does not handles multiple classes in one source file
[JXR-14] JXR does not seem to handle inner classes properly

o Add the notion that a class belongs to a file. This is needed to handle 
multiple classes in one java file. These may be normal classes or inner classes.
o Create links to javadocs and xref files based on the filename of a class.

Modified:
    maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
    maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
    maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
    maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java
    maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
    
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java
    maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm
    maven/jxr/trunk/src/main/resources/templates/package-frame.vm
    maven/jxr/trunk/src/main/resources/templates/package-summary.vm

Modified: 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java 
(original)
+++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java 
Sun Mar  4 07:31:15 2007
@@ -365,6 +365,13 @@
 
                 String className = clazz.getName();
                 Map classInfo = new HashMap();
+                if( clazz.getFilename() != null )
+                {
+                    classInfo.put( "filename", clazz.getFilename() );
+                }
+                else {
+                    classInfo.put( "filename", "" );
+                }
                 classInfo.put( "name", className );
                 classInfo.put( "dir", pkgDir );
 

Modified: 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java 
(original)
+++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java 
Sun Mar  4 07:31:15 2007
@@ -289,9 +289,10 @@
         try
         {
             JavaFile javaFile = fileManager.getFile( this.getCurrentFilename() 
);
-            if ( javaFile.getClassType() != null )
+            // Use the name of the file instead of the class to handle inner 
classes properly
+            if ( javaFile.getClassType() != null && 
javaFile.getClassType().getFilename() != null )
             {
-                buffer.append( javaFile.getClassType().getName() );
+                buffer.append( javaFile.getClassType().getFilename() );
             }
             else
             {
@@ -1101,9 +1102,10 @@
 
                 javadocURI.append( StringUtils.replace( 
jf.getPackageType().getName(), ".", "/" ) );
                 javadocURI.append( "/" );
-                if ( jf.getClassType() != null )
+                // Use the name of the file instead of the class to handle 
inner classes properly
+                if ( jf.getClassType() != null && 
jf.getClassType().getFilename() != null )
                 {
-                    javadocURI.append( jf.getClassType().getName() );
+                    javadocURI.append( jf.getClassType().getFilename() );
                 }
                 else
                 {
@@ -1293,11 +1295,11 @@
 
         href.append( dest );
 
-        //now append the classname.html file
+        // Now append filename.html
         if ( jc != null )
         {
             href.append( "/" );
-            href.append( jc.getName() );
+            href.append( jc.getFilename() );
             href.append( ".html" );
         }
 

Modified: 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java 
(original)
+++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/ClassType.java 
Sun Mar  4 07:31:15 2007
@@ -20,15 +20,22 @@
  */
 
 /**
- * Represents a Java class or interface
+ * Represents a Java class or interface.
  */
 public class ClassType
     extends BaseType
 {
+    /**
+     * The name of the file that this class resides in, without path or
+     * extension. It might be different from the name of the class when dealing
+     * with inner classes.
+     */
+    private String filename = null;
 
     /**
-     * Create a new ClassType
+     * Create a new ClassType without a filename.
      *
+     * @deprecated Please use [EMAIL PROTECTED] #ClassType( String, String )} 
instead
      * @param name
      */
     public ClassType( String name )
@@ -36,4 +43,26 @@
         this.setName( name );
     }
 
+    /**
+     * Create a new ClassType.
+     *
+     * @param name
+     * @param filename
+     */
+    public ClassType( String name , String filename)
+    {
+        this.setName( name );
+        this.setFilename( filename );
+    }
+
+
+    public String getFilename()
+    {
+        return filename;
+    }
+
+    public void setFilename( String filename )
+    {
+        this.filename = filename;
+    }
 }

Modified: 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java 
(original)
+++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java Sun 
Mar  4 07:31:15 2007
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Vector;
 
 /**
@@ -32,7 +34,7 @@
 
     private Vector imports = new Vector();
 
-    private ClassType classType = null;
+    private ArrayList classTypes = new ArrayList();
 
     private PackageType packageType = new PackageType();
 
@@ -56,7 +58,23 @@
      */
     public ClassType getClassType()
     {
-        return this.classType;
+        if ( classTypes.isEmpty() )
+        {
+            return null;
+        }
+        else
+        {
+            // To retain backward compatibility, return the first class
+            return (ClassType) this.classTypes.get( 0 );
+        }
+    }
+
+    /**
+     * Get the names of the classes in this file.
+     */
+    public List getClassTypes()
+    {
+        return this.classTypes;
     }
 
     /**
@@ -69,7 +87,15 @@
 
 
     /**
-     * Add an ImportType to the current imports
+     * Add a ClassType to the current list of class types.
+     */
+    public void addClassType( ClassType classType )
+    {
+        this.classTypes.add( classType );
+    }
+
+    /**
+     * Add an ImportType to the current imports.
      */
     public void addImportType( ImportType importType )
     {
@@ -81,7 +107,9 @@
      */
     public void setClassType( ClassType classType )
     {
-        this.classType = classType;
+        // To retain backward compatibility, make sure the list contains only 
the supplied classType
+        this.classTypes.clear();
+        this.classTypes.add( classType );
     }
 
     /**

Modified: 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java 
(original)
+++ maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java 
Sun Mar  4 07:31:15 2007
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import org.codehaus.plexus.util.StringUtils;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileReader;
@@ -111,14 +113,13 @@
                     this.addImportType( new ImportType( name ) );
                 }
 
-                //set the Class... if the class is found no more information is
-                //valid so just break out of the while loop at this point.
-                //set the imports
+                // Add the class or classes. There can be several classes in 
one file so
+                // continue with the while loop to get them all.
                 if ( stok.sval.equals( "class" ) || stok.sval.equals( 
"interface" ) || stok.sval.equals( "enum" ) )
                 {
                     stok.nextToken();
-                    this.setClassType( new ClassType( stok.sval ) );
-                    break;
+                    this.addClassType( new ClassType( stok.sval,
+                                                      
getFilenameWithoutPathOrExtension( this.getFilename()) ) );
                 }
 
             }
@@ -130,6 +131,36 @@
             {
                 this.reader.close();
             }
+        }
+    }
+
+    /**
+     * Remove the path and the ".java" extension from a filename.
+     */
+    private static String getFilenameWithoutPathOrExtension( String filename )
+    {
+        String newFilename;
+        // Remove the ".java" extension from the filename, if it exists
+        int extensionIndex = filename.lastIndexOf( ".java" );
+        if ( extensionIndex == -1 )
+        {
+            newFilename = filename;
+        }
+        else
+        {
+            newFilename = filename.substring( 0, extensionIndex );
+        }
+
+        // Remove the path, after unifying path separators
+        newFilename = StringUtils.replace( newFilename, "\\", "/" );
+        int pathIndex = newFilename.lastIndexOf( "/" );
+        if ( pathIndex == -1 )
+        {
+            return newFilename;
+        }
+        else
+        {
+            return newFilename.substring( pathIndex + 1 );
         }
     }
 

Modified: 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java 
(original)
+++ 
maven/jxr/trunk/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java 
Sun Mar  4 07:31:15 2007
@@ -26,6 +26,7 @@
 import java.io.IOException;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.Iterator;
 
 
 /**
@@ -134,10 +135,13 @@
                     jp = jfi.getPackageType();
                 }
 
-                //add the current class to this global package.
-                if ( jfi.getClassType() != null && 
jfi.getClassType().getName() != null )
+                // Add the current file's class(es) to this global package.
+                if ( jfi.getClassTypes() != null && 
!jfi.getClassTypes().isEmpty() )
                 {
-                    jp.addClassType( jfi.getClassType() );
+                    for ( Iterator iterator = jfi.getClassTypes().iterator(); 
iterator.hasNext(); )
+                    {
+                        jp.addClassType( (ClassType) iterator.next() );
+                    }
                 }
 
             }

Modified: maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm (original)
+++ maven/jxr/trunk/src/main/resources/templates/allclasses-frame.vm Sun Mar  4 
07:31:15 2007
@@ -32,7 +32,7 @@
                <ul>
                        #foreach ($classInfo in $info.allClasses.values())
                        <li>
-                               <a 
href="${classInfo.dir}/${classInfo.name}.html" 
target="classFrame">$classInfo.name</a>
+                               <a 
href="${classInfo.dir}/${classInfo.filename}.html" 
target="classFrame">$classInfo.name</a>
                        </li>
                        #end
       </ul>

Modified: maven/jxr/trunk/src/main/resources/templates/package-frame.vm
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/resources/templates/package-frame.vm?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/resources/templates/package-frame.vm (original)
+++ maven/jxr/trunk/src/main/resources/templates/package-frame.vm Sun Mar  4 
07:31:15 2007
@@ -36,7 +36,7 @@
        <ul>
                #foreach ($classInfo in $pkgInfo.classes.values())
                <li>
-               <a href="${classInfo.name}.html" 
target="classFrame">$classInfo.name</a>
+               <a href="${classInfo.filename}.html" 
target="classFrame">$classInfo.name</a>
                </li>
                #end
        </ul>

Modified: maven/jxr/trunk/src/main/resources/templates/package-summary.vm
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/src/main/resources/templates/package-summary.vm?view=diff&rev=514409&r1=514408&r2=514409
==============================================================================
--- maven/jxr/trunk/src/main/resources/templates/package-summary.vm (original)
+++ maven/jxr/trunk/src/main/resources/templates/package-summary.vm Sun Mar  4 
07:31:15 2007
@@ -60,7 +60,7 @@
                        #foreach ($classInfo in $pkgInfo.classes.values())
                <tr>
                        <td>
-                               <a href="${classInfo.name}.html" 
target="classFrame">$classInfo.name</a>
+                               <a href="${classInfo.filename}.html" 
target="classFrame">$classInfo.name</a>
                        </td>
                </tr>
                                #end


Reply via email to