You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2008/11/28 09:12:12 UTC

svn commit: r721376 - /ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Archives.java

Author: bodewig
Date: Fri Nov 28 00:12:12 2008
New Revision: 721376

URL: http://svn.apache.org/viewvc?rev=721376&view=rev
Log:
some refactoring

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Archives.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Archives.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Archives.java?rev=721376&r1=721375&r2=721376&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Archives.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Archives.java Fri Nov 28 00:12:12 2008
@@ -23,6 +23,7 @@
 import java.util.Stack;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.ArchiveFileSet;
 import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
@@ -65,13 +66,17 @@
     }
 
     /**
-     * Iterates through the collections and counts.
+     * Sums the sizes of nested archives.
      */
     public int size() {
         if (isReference()) {
             return ((Archives) getCheckedRef()).size();
         }
-        return grabResources().size();
+        int total = 0;
+        for (Iterator i = grabArchives(); i.hasNext(); ) {
+            total += ((ResourceCollection) i.next()).size();
+        }
+        return total;
     }
 
     /**
@@ -81,7 +86,12 @@
         if (isReference()) {
             return ((Archives) getCheckedRef()).iterator();
         }
-        return grabResources().iterator();
+        List l = new LinkedList();
+        for (Iterator i = grabArchives(); i.hasNext(); ) {
+            l.addAll(CollectionUtils
+                     .asCollection(((ResourceCollection) i.next()).iterator()));
+        }
+        return l.iterator();
     }
 
     /**
@@ -111,28 +121,34 @@
         }
     }
 
-    // TODO this is a pretty expensive operation and so the result is
-    // cached.
+    // TODO this is a pretty expensive operation and so the result
+    // should be cached.
     /**
-     * Performs the job by iterating over all archives, turning them
-     * into the correct type of ArchiveFileSet and iterating through
-     * their contents.
+     * Turns all nested resources into corresponding ArchiveFileSets
+     * and returns an iterator over the collected archives.
      */
-    protected List grabResources() {
+    protected Iterator/*<ArchiveFileset>*/ grabArchives() {
         List l = new LinkedList();
         for (Iterator iter = zips.iterator(); iter.hasNext(); ) {
-            ZipFileSet zfs = new ZipFileSet();
-            zfs.setProject(getProject());
-            zfs.setSrcResource((Resource) iter.next());
-            l.addAll(CollectionUtils.asCollection(zfs.iterator()));
+            l.add(configureArchive(new ZipFileSet(),
+                                   (Resource) iter.next()));
         }
         for (Iterator iter = tars.iterator(); iter.hasNext(); ) {
-            TarFileSet tfs = new TarFileSet();
-            tfs.setProject(getProject());
-            tfs.setSrcResource((Resource) iter.next());
-            l.addAll(CollectionUtils.asCollection(tfs.iterator()));
+            l.add(configureArchive(new TarFileSet(),
+                                   (Resource) iter.next()));
         }
-        return l;
+        return l.iterator();
+    }
+
+    /**
+     * Configures the archivefileset based on this type's settings,
+     * set the source.
+     */
+    protected ArchiveFileSet configureArchive(ArchiveFileSet afs,
+                                              Resource src) {
+        afs.setProject(getProject());
+        afs.setSrcResource(src);
+        return afs;
     }
 
     /**
@@ -150,13 +166,15 @@
         if (isReference()) {
             super.dieOnCircularReference(stk, p);
         } else {
-            stk.push(zips);
-            invokeCircularReferenceCheck(zips, stk, p);
-            stk.pop();
-            stk.push(tars);
-            invokeCircularReferenceCheck(tars, stk, p);
-            stk.pop();
+            checkForCircularReference(zips, stk, p);
+            checkForCircularReference(tars, stk, p);
             setChecked(true);
         }
     }
+
+    protected void checkForCircularReference(DataType t, Stack stk, Project p) {
+        stk.push(t);
+        invokeCircularReferenceCheck(t, stk, p);
+        stk.pop();
+    }
 }
\ No newline at end of file