jvanzyl     02/03/24 14:24:47

  Modified:    src/java/org/apache/maven ProjectResolver.java
  Log:
  Modified the project resolver to walk through a base directory looking
  for JAR and class files instead of just a single JAR file. I basically
  want to make something to unpack a distribution and make a project
  descriptor from the contents.
  
  Revision  Changes    Path
  1.5       +70 -33    
jakarta-turbine-maven/src/java/org/apache/maven/ProjectResolver.java
  
  Index: ProjectResolver.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-maven/src/java/org/apache/maven/ProjectResolver.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ProjectResolver.java      24 Mar 2002 21:46:13 -0000      1.4
  +++ ProjectResolver.java      24 Mar 2002 22:24:47 -0000      1.5
  @@ -77,7 +77,7 @@
    * in a project descriptor.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Jason van Zyl</a>
  - * @version $Id: ProjectResolver.java,v 1.4 2002/03/24 21:46:13 jvanzyl Exp $
  + * @version $Id: ProjectResolver.java,v 1.5 2002/03/24 22:24:47 jvanzyl Exp $
    */
   public class ProjectResolver
   {
  @@ -85,7 +85,7 @@
        * Base directory in which JAR files and class files will
        * be searched for.
        */
  -    private File file;
  +    private File baseDirectory;
       
       /**
        * Listener that registers class references as they
  @@ -111,6 +111,7 @@
       {
           packageReferences = new LinkedList();
           packageExcludes = new LinkedList();
  +        treeMapListener = new TreeMapListener();
       }
       
       /**
  @@ -138,9 +139,9 @@
        * @param baseDirectory Directory in which JARs and class files
        *                      are searched for.
        */
  -    public void setFile(File file)
  +    public void setBaseDirectory(File baseDirectory)
       {
  -        this.file = file;
  +        this.baseDirectory = baseDirectory;
       }        
       
       /**
  @@ -153,22 +154,49 @@
       {
           return packageReferences;
       }        
  -    
  +
       /**
        * Resolve the package dependencies from the set of JARs
        * and classes used as the input.
        */
       public void resolveDependencies()
       {
  +        // Collect all the JAR and class file that we can find
  +        // in the baseDirectory.
  +        
  +        String[] files = 
  +            MavenUtils.getFiles(baseDirectory.getAbsolutePath(), "*.jar,*.class");
  +        
  +        for (int i = 0; i < files.length; i++)
  +        {
  +            String file = files[i];
  +            
  +            if (file.endsWith("jar"))
  +            {
  +                processJAR(file);
  +            }
  +            else
  +            {
  +                processClassReference(file);
  +            }
  +        }
  +        
  +    }
  +    
  +    /**
  +     * Process an individual JAR file looking package
  +     * dependencies.
  +     */
  +    public void processJAR(String file)
  +    {
           JarFile jarFile = null;
  -        treeMapListener = null;
           
           try
           {   
  -            jarFile = new JarFile(file);
  -            treeMapListener = new TreeMapListener();
  +            jarFile = new JarFile(new File(file));
               List classEntries = JarUtil.getClassEntries(jarFile);
               
  +            treeMapListener.getTreeMap().clear();
               for (Iterator i = classEntries.iterator(); i.hasNext();)
               {
                   JarEntry jarEntry = (JarEntry) i.next();
  @@ -178,32 +206,10 @@
   
               jarFile.close();
               
  -            Map map = treeMapListener.getTreeMap();            
  -            for (Iterator i = map.keySet().iterator(); i.hasNext();)
  +            for (Iterator i = treeMapListener.getTreeMap().keySet().iterator(); 
i.hasNext();)
               {
                   String classReference = (String) i.next();
  -                
  -                // Don't care about internal classes or classes
  -                // that don't belong to a real package.
  -                if (classReference.indexOf("$") < 0)
  -                {
  -                    boolean includePackage = true;
  -                    
  -                    for (Iterator j = packageExcludes.iterator(); j.hasNext();)
  -                    {
  -                        String packageExclude = (String) j.next();
  -                        if (classReference.startsWith(packageExclude))
  -                        {
  -                            includePackage = false;
  -                            break;
  -                        }
  -                    }
  -                    
  -                    if (includePackage)
  -                    {
  -                        packageReferences.add(map.get(classReference));
  -                    }                        
  -                }                    
  +                processClassReference(classReference);
               }
           }
           catch (Exception e)
  @@ -213,12 +219,43 @@
       }
       
       /**
  +     * Process an individual class file.
  +     *
  +     * @param classReference An individual class reference in the form of a string.
  +     */
  +    private void processClassReference(String classReference)
  +    {
  +        // Don't care about internal classes or classes
  +        // that don't belong to a real package.
  +        if (classReference.indexOf("$") < 0)
  +        {
  +            boolean includePackage = true;
  +                    
  +            for (Iterator j = packageExcludes.iterator(); j.hasNext();)
  +            {
  +                String packageExclude = (String) j.next();
  +                if (classReference.startsWith(packageExclude))
  +                {
  +                    includePackage = false;
  +                    break;
  +                }
  +            }
  +                    
  +            if (includePackage)
  +            {
  +                packageReferences.add(
  +                    treeMapListener.getTreeMap().get(classReference));
  +            }                        
  +        }                    
  +    }    
  +    
  +    /**
        * Used for testing only.
        */
       public static void main(String[] args)
       {
           ProjectResolver bdr = new ProjectResolver();
  -        bdr.setFile(new File(args[0]));
  +        bdr.setBaseDirectory(new File(args[0]));
           bdr.setPackageExcludes(args[1]);
           bdr.resolveDependencies();
           List packageReferences = bdr.getPackageReferences();
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to