You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/04/11 13:03:12 UTC

svn commit: r1324698 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/main/java/org/apache/jackrabbit/oak/util/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ oak-jcr/src/main/java/org/apache/jackr...

Author: mduerig
Date: Wed Apr 11 11:03:11 2012
New Revision: 1324698

URL: http://svn.apache.org/viewvc?rev=1324698&view=rev
Log:
OAK-15: Clean up oak-jcr
move iterator utilities to oak-core

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Function1.java
      - copied, changed from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Function1.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java
      - copied, changed from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Iterators.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PagedIterator.java
      - copied, changed from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/PagedIterator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Predicate.java
      - copied, changed from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Predicate.java
Removed:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Function0.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Function1.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Iterators.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/PagedIterator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Predicate.java
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientKernelNodeState.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientKernelNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientKernelNodeState.java?rev=1324698&r1=1324697&r2=1324698&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientKernelNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientKernelNodeState.java Wed Apr 11 11:03:11 2012
@@ -18,29 +18,27 @@
  */
 package org.apache.jackrabbit.oak.kernel;
 
-import org.apache.commons.collections.iterators.EmptyIterator;
-import org.apache.commons.collections.iterators.FilterIterator;
-import org.apache.commons.collections.iterators.IteratorChain;
-import org.apache.commons.collections.iterators.TransformIterator;
 import org.apache.jackrabbit.oak.api.ChildNodeEntry;
 import org.apache.jackrabbit.oak.api.NodeState;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.TransientNodeState;
-import org.apache.jackrabbit.oak.kernel.TransientKernelNodeState.Iterators.PagedIterator;
+import org.apache.jackrabbit.oak.util.Function1;
+import org.apache.jackrabbit.oak.util.Iterators;
+import org.apache.jackrabbit.oak.util.PagedIterator;
+import org.apache.jackrabbit.oak.util.Predicate;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.NoSuchElementException;
 import java.util.Set;
 
-import static org.apache.jackrabbit.oak.kernel.TransientKernelNodeState.Iterators.Function1;
-import static org.apache.jackrabbit.oak.kernel.TransientKernelNodeState.Iterators.Predicate;
-import static org.apache.jackrabbit.oak.kernel.TransientKernelNodeState.Iterators.add;
-import static org.apache.jackrabbit.oak.kernel.TransientKernelNodeState.Iterators.filter;
-import static org.apache.jackrabbit.oak.kernel.TransientKernelNodeState.Iterators.map;
+import static org.apache.jackrabbit.oak.util.Iterators.chain;
+import static org.apache.jackrabbit.oak.util.Iterators.empty;
+import static org.apache.jackrabbit.oak.util.Iterators.filter;
+import static org.apache.jackrabbit.oak.util.Iterators.flatten;
+import static org.apache.jackrabbit.oak.util.Iterators.map;
 
 public class TransientKernelNodeState implements TransientNodeState {
     /** Editor acting upon this instance */
@@ -258,15 +256,15 @@ public class TransientKernelNodeState im
 
                 // persisted states - removed states
                 Iterator<PropertyState> persistedMinusRemoved =
-                    filter(properties, new Predicate<PropertyState>() {
-                        @Override
-                        public boolean evaluate(PropertyState state) {
-                            return !removed.contains(state.getName());
-                        }
-                });
+                        filter(properties, new Predicate<PropertyState>() {
+                            @Override
+                            public boolean evaluate(PropertyState state) {
+                                return !removed.contains(state.getName());
+                            }
+                        });
 
                 // persisted states - removed states + added states
-                return add(persistedMinusRemoved, added.iterator());
+                return chain(persistedMinusRemoved, added.iterator());
             }
         };
     }
@@ -298,7 +296,7 @@ public class TransientKernelNodeState im
                         public boolean evaluate(ChildNodeEntry entry) {
                             return !removed.contains(entry.getName());
                         }
-                });
+                    });
 
                 // persisted states - removed states
                 Iterator<TransientNodeState> persistedMinusRemoved =
@@ -308,10 +306,10 @@ public class TransientKernelNodeState im
                             public TransientNodeState apply(ChildNodeEntry entry) {
                                 return getExistingChildNode(entry.getName());
                             }
-                });
+                        });
 
                 // persisted states - removed states + added states
-                return add(persistedMinusRemoved, added.iterator());
+                return chain(persistedMinusRemoved, added.iterator());
             }
         };
     }
@@ -460,10 +458,10 @@ public class TransientKernelNodeState im
             final NodeState persistentState) {
 
         if (persistentState == null) {
-            return Iterators.empty();
+            return empty();
         }
         else {
-            return Iterators.flatten(
+            return flatten(
                 new PagedIterator<ChildNodeEntry>(1024) {
                     @Override
                     protected Iterator<? extends ChildNodeEntry> getPage(long pos, int size) {
@@ -473,201 +471,4 @@ public class TransientKernelNodeState im
         }
     }
 
-    // TODO: move to a more suitable location
-    static final class Iterators {
-        private Iterators() { }
-
-        /**
-         * Returns an empty iterator of type {@code T}.
-         *
-         * @param <T>
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public static <T> Iterator<T> empty() {
-            return EmptyIterator.INSTANCE;
-        }
-
-        /**
-         * Returns an iterator for the concatenation of {@code iterator1} and
-         * {@code iterator2}.
-         *
-         * @param <T>
-         * @param iterator1
-         * @param iterator2
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public static <T> Iterator<T> add(Iterator<? extends T> iterator1,
-                Iterator<? extends T> iterator2) {
-
-            return new IteratorChain(iterator1, iterator2);
-        }
-
-        /**
-         * Returns an iterator containing only the elements from an original
-         * {@code iterator} where the given {@code predicate} matches.
-         *
-         * @param <T>
-         * @param iterator
-         * @param predicate
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public static <T> Iterator<T> filter(Iterator<? extends T> iterator,
-                final Predicate<? super T> predicate) {
-
-            return new FilterIterator(iterator, new org.apache.commons.collections.Predicate() {
-                @Override
-                public boolean evaluate(Object object) {
-                    return predicate.evaluate((T) object);
-                }
-            });
-        }
-
-        /**
-         * Returns an iterator with elements of an original  {@code iterator} mapped by
-         * a function {@code f}.
-         *
-         * @param <T>
-         * @param <R>
-         * @param <S>
-         * @param iterator
-         * @param f
-         * @return
-         */
-        @SuppressWarnings("unchecked")
-        public static <T, R, S extends T> Iterator<R> map(Iterator<? extends T> iterator,
-                final Function1<S, ? super R> f) {
-
-            return new TransformIterator(iterator, new org.apache.commons.collections.Transformer() {
-                @Override
-                public Object transform(Object input) {
-                    return f.apply((S) input);
-                }
-            });
-        }
-
-        /**
-         * Type safe counter part of {@link org.apache.commons.collections.Predicate}.
-         *
-         * @param <T> type of values this predicate is defined on
-         */
-        interface Predicate<T> {
-            boolean evaluate(T arg);
-        }
-
-        /**
-         * Type safe counter part of {@link org.apache.commons.collections.Transformer}.
-         *
-         * @param <S>  argument type to transform from
-         * @param <T>  result type to transform to
-         */
-        public interface Function1<S, T> {
-            T apply(S argument);
-        }
-
-        /**
-         * Flattens an iterator of iterators into a single iterator.
-         * @param iterators
-         * @param <T>
-         * @return
-         */
-        public static <T> Iterator<? extends T> flatten(
-                final Iterator<Iterator<? extends T>> iterators) {
-
-            return new Iterator<T>() {
-                private Iterator<? extends T> current;
-
-                @Override
-                public boolean hasNext() {
-                    if (current != null && current.hasNext()) {
-                        return true;
-                    }
-                    else if (!iterators.hasNext()) {
-                        return false;
-                    }
-                    else {
-                        do {
-                            current = iterators.next();
-                        } while (!current.hasNext() && iterators.hasNext());
-                        return current.hasNext();
-                    }
-                }
-
-                @Override
-                public T next() {
-                    if (!hasNext()) {
-                        throw new NoSuchElementException();
-                    }
-
-                    return current.next();
-                }
-
-                @Override
-                public void remove() {
-                    if (current == null) {
-                        throw new IllegalStateException();
-                    }
-
-                    current.remove();
-                }
-            };
-        }
-
-        /**
-         * A {@code PagedIterator} is an iterator of several pages. A page itself is
-         * an iterator. The abstract {@code getPage} method is called whenever this
-         * iterator needs to fetch another page.<p/>
-         *
-         * Lazy flattening (e.g. with {@link Iterators#flatten(java.util.Iterator)}
-         * results in an iterator which does batch reading from its back end.
-         *
-         * @param <T>
-         */
-        public abstract static class PagedIterator<T>
-                implements Iterator<Iterator<? extends T>> {
-
-            private final int pageSize;
-            private long pos;
-            private Iterator<? extends T> current;
-
-            protected PagedIterator(int pageSize) {
-                this.pageSize = pageSize;
-            }
-
-            /**
-             * @param pos  start index
-             * @param size  maximal number of elements
-             * @return  iterator starting at index {@code pos} containing at most {@code size} elements.
-             */
-            protected abstract Iterator<? extends T> getPage(long pos, int size);
-
-            @Override
-            public boolean hasNext() {
-                if (current == null) {
-                    current = getPage(pos, pageSize);
-                    pos += pageSize;
-                }
-
-                return current.hasNext();
-            }
-
-            @Override
-            public Iterator<? extends T> next() {
-                if (!hasNext()) {
-                    throw new NoSuchElementException();
-                }
-                Iterator<? extends T> e = current;
-                current = null;
-                return e;
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("remove");
-            }
-        }
-
-    }
 }

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Function1.java (from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Function1.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Function1.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Function1.java&p1=jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Function1.java&r1=1324672&r2=1324698&rev=1324698&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Function1.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Function1.java Wed Apr 11 11:03:11 2012
@@ -14,7 +14,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.jackrabbit.oak.jcr.util;
+package org.apache.jackrabbit.oak.util;
 
 /**
  * Type safe counter part of {@link org.apache.commons.collections.Transformer}.

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java (from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Iterators.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java&p1=jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Iterators.java&r1=1324672&r2=1324698&rev=1324698&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Iterators.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java Wed Apr 11 11:03:11 2012
@@ -14,7 +14,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.jackrabbit.oak.jcr.util;
+package org.apache.jackrabbit.oak.util;
 
 import org.apache.commons.collections.iterators.ArrayIterator;
 import org.apache.commons.collections.iterators.EmptyIterator;

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PagedIterator.java (from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/PagedIterator.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PagedIterator.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PagedIterator.java&p1=jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/PagedIterator.java&r1=1324672&r2=1324698&rev=1324698&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/PagedIterator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PagedIterator.java Wed Apr 11 11:03:11 2012
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.jackrabbit.oak.jcr.util;
+package org.apache.jackrabbit.oak.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
@@ -27,7 +27,7 @@ import java.util.NoSuchElementException;
  * an iterator. The abstract {@code getPage} method is called whenever this
  * iterator needs to fetch another page.<p/>
  *
- * Lazy flattening (e.g. with {@link org.apache.jackrabbit.oak.jcr.util.Iterators#flatten(java.util.Iterator)}
+ * Lazy flattening (e.g. with {@link Iterators#flatten(java.util.Iterator)}
  * results in an iterator which does batch reading from its back end.
  *
  * @param <T>

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Predicate.java (from r1324672, jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Predicate.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Predicate.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Predicate.java&p1=jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Predicate.java&r1=1324672&r2=1324698&rev=1324698&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/Predicate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Predicate.java Wed Apr 11 11:03:11 2012
@@ -14,7 +14,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.jackrabbit.oak.jcr.util;
+package org.apache.jackrabbit.oak.util;
 
 /**
  * Type safe counter part of {@link org.apache.commons.collections.Predicate}.

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1324698&r1=1324697&r2=1324698&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Wed Apr 11 11:03:11 2012
@@ -23,11 +23,11 @@ import org.apache.jackrabbit.mk.util.Pat
 import org.apache.jackrabbit.oak.api.NodeStateEditor;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.TransientNodeState;
-import org.apache.jackrabbit.oak.jcr.util.Function1;
+import org.apache.jackrabbit.oak.util.Function1;
 import org.apache.jackrabbit.oak.jcr.util.ItemNameMatcher;
-import org.apache.jackrabbit.oak.jcr.util.Iterators;
+import org.apache.jackrabbit.oak.util.Iterators;
 import org.apache.jackrabbit.oak.jcr.util.LogUtil;
-import org.apache.jackrabbit.oak.jcr.util.Predicate;
+import org.apache.jackrabbit.oak.util.Predicate;
 import org.apache.jackrabbit.oak.jcr.util.ValueConverter;
 import org.apache.jackrabbit.oak.kernel.ScalarImpl;
 import org.apache.jackrabbit.value.ValueHelper;
@@ -59,7 +59,7 @@ import java.math.BigDecimal;
 import java.util.Calendar;
 import java.util.Iterator;
 
-import static org.apache.jackrabbit.oak.jcr.util.Iterators.filter;
+import static org.apache.jackrabbit.oak.util.Iterators.filter;
 
 /**
  * {@code NodeImpl}...