|
|
@@ -35,10 +35,26 @@ import org.apache.tools.ant.types.resources.selectors.ResourceSelectorContainer; |
|
|
|
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 @@ public class Restrict |
|
|
|
if (isReference()) { |
|
|
|
throw noChildrenAllowed(); |
|
|
|
} |
|
|
|
if (rc != null) { |
|
|
|
throw new BuildException(ONE_NESTED_MESSAGE); |
|
|
|
} |
|
|
|
rc = c; |
|
|
|
w.add(c); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -72,10 +85,7 @@ public class Restrict |
|
|
|
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 @@ public class Restrict |
|
|
|
return ((Restrict) getCheckedRef()).size(); |
|
|
|
} |
|
|
|
dieOnCircularReference(); |
|
|
|
return getCollection().size(); |
|
|
|
return w.size(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -99,39 +109,7 @@ public class Restrict |
|
|
|
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(); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |