aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java156
1 files changed, 156 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java
new file mode 100644
index 00000000..2ea1a861
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.types.resources;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
+import org.apache.tools.ant.types.resources.selectors.ResourceSelector;
+import org.apache.tools.ant.types.resources.selectors.ResourceSelectorContainer;
+
+/**
+ * ResourceCollection that allows a number of selectors to be
+ * applied to a single ResourceCollection for the purposes of
+ * restricting or narrowing results.
+ * @since Ant 1.7
+ */
+public class Restrict
+ extends ResourceSelectorContainer implements ResourceCollection {
+
+ private LazyResourceCollectionWrapper w = new LazyResourceCollectionWrapper() {
+ /**
+ * Restrict the nested ResourceCollection based on the nested selectors.
+ */
+ protected boolean filterResource(Resource r) {
+ for (Iterator<ResourceSelector> i = getSelectors(); i.hasNext();) {
+ if (!i.next().isSelected(r)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ };
+
+ /**
+ * Add the ResourceCollection.
+ * @param c the ResourceCollection to add.
+ */
+ public synchronized void add(ResourceCollection c) {
+ if (isReference()) {
+ throw noChildrenAllowed();
+ }
+ if (c == null) {
+ return;
+ }
+ w.add(c);
+ setChecked(false);
+ }
+
+ /**
+ * Set whether to cache collections.
+ * @param b boolean cache flag.
+ */
+ public synchronized void setCache(boolean b) {
+ w.setCache(b);
+ }
+
+ /**
+ * Learn whether to cache collections. Default is <code>true</code>.
+ * @return boolean cache flag.
+ */
+ public synchronized boolean isCache() {
+ return w.isCache();
+ }
+
+ /**
+ * Add a ResourceSelector.
+ * @param s the ResourceSelector to add.
+ */
+ public synchronized void add(ResourceSelector s) {
+ if (s == null) {
+ return;
+ }
+ super.add(s);
+ FailFast.invalidate(this);
+ }
+
+ /**
+ * Fulfill the ResourceCollection contract.
+ * @return an Iterator of Resources.
+ */
+ public final synchronized Iterator<Resource> iterator() {
+ if (isReference()) {
+ return ((Restrict) getCheckedRef()).iterator();
+ }
+ dieOnCircularReference();
+ return w.iterator();
+ }
+
+ /**
+ * Fulfill the ResourceCollection contract.
+ * @return number of elements as int.
+ */
+ public synchronized int size() {
+ if (isReference()) {
+ return ((Restrict) getCheckedRef()).size();
+ }
+ dieOnCircularReference();
+ return w.size();
+ }
+
+ /**
+ * Fulfill the ResourceCollection contract.
+ * @return whether this is a filesystem-only resource collection.
+ */
+ public synchronized boolean isFilesystemOnly() {
+ if (isReference()) {
+ return ((Restrict) getCheckedRef()).isFilesystemOnly();
+ }
+ dieOnCircularReference();
+ return w.isFilesystemOnly();
+ }
+
+ /**
+ * Format this Restrict collection as a String.
+ * @return the String value of this collection.
+ */
+ public synchronized String toString() {
+ if (isReference()) {
+ return getCheckedRef().toString();
+ }
+ dieOnCircularReference();
+ return w.toString();
+ }
+
+ protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p) {
+ if (isChecked()) {
+ return;
+ }
+
+ // takes care of Selectors
+ super.dieOnCircularReference(stk, p);
+
+ if (!isReference()) {
+ pushAndInvokeCircularReferenceCheck(w, stk, p);
+ setChecked(true);
+ }
+ }
+}