diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-10-23 10:00:02 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-10-23 10:00:02 -0700 |
commit | 753a6c60f47f3ac4f270005b65e9d6481de8eb68 (patch) | |
tree | 3d0a1ae3b4d994550f6614b417b991eee3eb8911 /framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java | |
parent | c62d20eb3b4620c06d833be06f50b2600d96dd42 (diff) |
Adding maven and ant source trees
Change-Id: I0a39b9add833a31b9c3f98d193983ae2f3a5a445
Signed-off-by: Ashlee Young <ashlee@onosfw.com>
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java new file mode 100644 index 00000000..4f9acd32 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java @@ -0,0 +1,176 @@ +/* + * 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.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +import org.apache.tools.ant.types.Resource; + +/** + * Resource collection which load underlying resource collection only on demand + * with support for caching + */ +public class LazyResourceCollectionWrapper extends + AbstractResourceCollectionWrapper { + + /** List of cached resources */ + private final List<Resource> cachedResources = new ArrayList<Resource>(); + + private FilteringIterator filteringIterator; + + @Override + protected Iterator<Resource> createIterator() { + Iterator<Resource> iterator; + if (isCache()) { + if (filteringIterator == null) { + // no worry of thread safety here, see function's contract + filteringIterator = new FilteringIterator( + getResourceCollection().iterator()); + } + iterator = new CachedIterator(filteringIterator); + } else { + iterator = new FilteringIterator(getResourceCollection().iterator()); + } + return iterator; + } + + @Override + protected int getSize() { + // to compute the size, just iterate: the iterator will take care of + // caching + final Iterator<Resource> it = createIterator(); + int size = 0; + while (it.hasNext()) { + it.next(); + size++; + } + return size; + } + + /** + * Specify if the resource should be filtered or not. This function should + * be overrided in order to define the filtering algorithm + * + * @param r resource considered for filtration + * @return whether the resource should be filtered or not + */ + protected boolean filterResource(final Resource r) { + return false; + } + + private class FilteringIterator implements Iterator<Resource> { + + Resource next = null; + + boolean ended = false; + + protected final Iterator<Resource> it; + + public FilteringIterator(final Iterator<Resource> it) { + this.it = it; + } + + public boolean hasNext() { + if (ended) { + return false; + } + while (next == null) { + if (!it.hasNext()) { + ended = true; + return false; + } + next = it.next(); + if (filterResource(next)) { + next = null; + } + } + return true; + } + + public Resource next() { + if (!hasNext()) { + throw new UnsupportedOperationException(); + } + final Resource r = next; + next = null; + return r; + } + + public void remove() { + throw new UnsupportedOperationException(); + } + } + + /** + * Iterator that will put in the shared cache array list the selected + * resources + */ + private class CachedIterator implements Iterator<Resource> { + + int cusrsor = 0; + + private final Iterator<Resource> it; + + /** + * Default constructor + * + * @param it + * the iterator which will provide the resources to put in + * cache + */ + public CachedIterator(final Iterator<Resource> it) { + this.it = it; + } + + public boolean hasNext() { + synchronized (cachedResources) { + // have we already cached the next entry ? + if (cachedResources.size() > cusrsor) { + return true; + } + // does the wrapped iterator any more resource ? + if (!it.hasNext()) { + return false; + } + // put in cache the next resource + final Resource r = it.next(); + cachedResources.add(r); + } + return true; + } + + public Resource next() { + // first check that we have some to deliver + if (!hasNext()) { + throw new NoSuchElementException(); + } + synchronized (cachedResources) { + // return the cached entry as hasNext should have put one for + // this iterator + return cachedResources.get(cusrsor++); + } + } + + public void remove() { + throw new UnsupportedOperationException(); + } + } +} |