mbenson     2005/08/05 10:58:59

  Modified:    src/main/org/apache/tools/ant/types/resources Restrict.java
  Log:
  Refactor single-nested-collection enforcement into a
  BaseResourceCollectionWrapper via composition.
  
  Revision  Changes    Path
  1.3       +24 -46    
ant/src/main/org/apache/tools/ant/types/resources/Restrict.java
  
  Index: Restrict.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/types/resources/Restrict.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Restrict.java     3 Jun 2005 16:46:55 -0000       1.2
  +++ Restrict.java     5 Aug 2005 17:58:59 -0000       1.3
  @@ -35,10 +35,26 @@
   public class Restrict
       extends ResourceSelectorContainer implements ResourceCollection {
   
  -    private static final String ONE_NESTED_MESSAGE
  -        = "Restriction is to be applied to exactly one nested resource 
collection.";
  +    private BaseResourceCollectionWrapper w = new 
BaseResourceCollectionWrapper() {
  +        /**
  +         * Restrict the nested ResourceCollection based on the nested 
selectors.
  +         * @return a Collection of Resources.
  +         */
  +        protected Collection getCollection() {
  +            ArrayList result = new ArrayList();
  +outer:      for (Iterator ri = w.getResourceCollection().iterator(); 
ri.hasNext();) {
  +                Resource r = (Resource) ri.next();
  +                for (Iterator i = getSelectors(); i.hasNext();) {
  +                    if (!((ResourceSelector) (i.next())).isSelected(r)) {
  +                        continue outer;
  +                    }
  +                }
  +                result.add(r);
  +            }
  +            return result;
  +        }
   
  -    private ResourceCollection rc;
  +    };
   
       /**
        * Add the ResourceCollection.
  @@ -48,10 +64,7 @@
           if (isReference()) {
               throw noChildrenAllowed();
           }
  -        if (rc != null) {
  -            throw new BuildException(ONE_NESTED_MESSAGE);
  -        }
  -        rc = c;
  +        w.add(c);
       }
   
       /**
  @@ -72,10 +85,7 @@
               return ((Restrict) getCheckedRef()).iterator();
           }
           dieOnCircularReference();
  -        if (rc == null) {
  -            throw new BuildException(ONE_NESTED_MESSAGE);
  -        }
  -        return new FailFast(this, getCollection().iterator());
  +        return new FailFast(this, w.iterator());
       }
   
       /**
  @@ -87,7 +97,7 @@
               return ((Restrict) getCheckedRef()).size();
           }
           dieOnCircularReference();
  -        return getCollection().size();
  +        return w.size();
       }
   
       /**
  @@ -99,39 +109,7 @@
               return ((Restrict) getCheckedRef()).isFilesystemOnly();
           }
           dieOnCircularReference();
  -        if (rc == null) {
  -            throw new BuildException(ONE_NESTED_MESSAGE);
  -        }
  -        //first the easy way, if child is filesystem-only, return true:
  -        if (rc.isFilesystemOnly()) {
  -            return true;
  -        }
  -        /* now check each Resource in case the child only
  -           lets through files from any children IT may have: */
  -        for (Iterator i = getCollection().iterator(); i.hasNext();) {
  -            if (!(i.next() instanceof FileResource)) {
  -                return false;
  -            }
  -        }
  -        return true;
  -    }
  -
  -    /**
  -     * Restrict the nested ResourceCollection based on the nested selectors.
  -     * @return a Collection of Resources.
  -     */
  -    protected Collection getCollection() {
  -        ArrayList result = new ArrayList();
  -outer:  for (Iterator ri = rc.iterator(); ri.hasNext();) {
  -            Resource r = (Resource) ri.next();
  -            for (Iterator i = getSelectors(); i.hasNext();) {
  -                if (!((ResourceSelector) (i.next())).isSelected(r)) {
  -                    continue outer;
  -                }
  -            }
  -            result.add(r);
  -        }
  -        return result;
  +        return w.isFilesystemOnly();
       }
   
  -}
  \ No newline at end of file
  +}
  
  
  

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

Reply via email to