From: <tho...@us...> - 2010-09-27 23:38:55
|
Revision: 3644 http://bigdata.svn.sourceforge.net/bigdata/?rev=3644&view=rev Author: thompsonbry Date: 2010-09-27 23:38:47 +0000 (Mon, 27 Sep 2010) Log Message: ----------- Hand off to Martyn on the striterators. This commit DOES NOT include the class path changes. DO NOT commit them until we have this all worked out or we will break the build. Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appender.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appenderator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractor.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractorator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expander.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expanderator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filter.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filterator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IFilter.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapper.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapperator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Merger.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mergerator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolver.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolverator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorter.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorterator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Striterator.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/UniquenessFilter.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitor.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitorator.java Added Paths: ----------- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/FilterBase.java branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IPropertySet.java Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appender.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appender.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appender.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -33,7 +33,7 @@ * Used with Appenderator by Striterator to filter returned objects. */ -public class Appender implements IFilter { +public class Appender extends FilterBase { protected Iterator m_xtra = null; public Appender() {} @@ -44,8 +44,9 @@ //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Appenderator(src, (Iterator) m_xtra); + @Override + final public Iterator filterOnce(Iterator src, Object context) { + return new Appenderator(src, context, (Iterator) m_xtra); } //------------------------------------------------------------- Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appenderator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appenderator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Appenderator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -33,13 +33,15 @@ public class Appenderator implements Iterator { - Iterator m_src; - Iterator m_xtra; + private final Iterator m_src; + protected final Object m_ctx; + private final Iterator m_xtra; - Iterator m_current; + private Iterator m_current; - public Appenderator(Iterator src, Iterator xtra) { + public Appenderator(Iterator src, Object ctx, Iterator xtra) { m_src = src; + m_ctx = ctx; m_xtra = xtra; m_current = m_src; Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractor.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractor.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractor.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -31,9 +31,17 @@ * Used with a Contractorator to contract an Expanded iterator * * The Contractorator will call contract on this object + * * @author Martyn Cutcher + * + * @todo CONTRACTOR annotation and allow it to be set as an argument, moving + * contract() onto the contractorator. + * + * @todo CONTRACTOR should be able to break an iterator into many chunks, not + * just one. Maybe the API should return an Iterator from an Iterator + * in which the chunkiness is changed? */ -public abstract class Contractor implements IFilter { +public abstract class Contractor extends FilterBase { protected Object m_state = null; @@ -45,8 +53,9 @@ //------------------------------------------------------------- - public Iterator filter(Iterator src) { - return new Contractorator(src, this); + @Override + public Iterator filterOnce(Iterator src, Object context) { + return new Contractorator(src, context, this); } //------------------------------------------------------------- Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractorator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractorator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Contractorator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -43,12 +43,14 @@ * @author Martyn Cutcher */ public class Contractorator implements Iterator { - Iterator m_src; - Contractor m_contractor; - Object m_next; + private final Iterator m_src; + protected final Object m_ctx; + private final Contractor m_contractor; + private Object m_next; - public Contractorator(Iterator src, Contractor contractor) { + public Contractorator(Iterator src, final Object ctx, Contractor contractor) { m_src = src; + m_ctx = ctx; m_contractor = contractor; m_next = m_contractor.contract(m_src); Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expander.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expander.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expander.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -35,22 +35,22 @@ * Derivations must implement expand method. */ -public abstract class Expander implements IFilter { - protected Object m_state = null; +public abstract class Expander extends FilterBase { public Expander() { } public Expander(Object state) { - m_state = state; + super(state); } //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Expanderator(src, this); - } + @Override + final public Iterator filterOnce(Iterator src, Object context) { + return new Expanderator(src, context, this); + } - //------------------------------------------------------------- + // ------------------------------------------------------------- - protected abstract Iterator expand(Object obj); + protected abstract Iterator expand(Object obj); } \ No newline at end of file Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expanderator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expanderator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Expanderator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -39,13 +39,14 @@ public class Expanderator implements Iterator { - Iterator m_src; - Iterator m_child = null; + private final Iterator m_src; + private Iterator m_child = null; + protected final Object m_context; + private final Expander m_expander; - Expander m_expander; - - public Expanderator(Iterator src, Expander expander) { + public Expanderator(Iterator src, Object context, Expander expander) { m_src = src; + m_context = context; m_expander = expander; } Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filter.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filter.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filter.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -28,25 +28,30 @@ import java.util.Iterator; /** - * Used with Filterator by Striterator to filter returned objects. + * Used with Filterator by Striterator to filter returned objects. This can + * represent either a single {@link IFilter} or a chain of {@link IFilter}s. */ -public abstract class Filter implements IFilter { +public abstract class Filter extends FilterBase { - protected Object m_state = null; - + /** + * + */ + private static final long serialVersionUID = 7584586850408369853L; + public Filter() {} public Filter(Object state) { - m_state = state; + super(state); } //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Filterator(src, this); - } + @Override + protected Iterator filterOnce(Iterator src, final Object context) { + return new Filterator(src, context, this); + } - //------------------------------------------------------------- + // ------------------------------------------------------------- - protected abstract boolean isValid(Object obj); + protected abstract boolean isValid(Object obj); } Added: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/FilterBase.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/FilterBase.java (rev 0) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/FilterBase.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -0,0 +1,222 @@ +/* +Striterator - transformation and mapping patterns over java Iterators + +Copyright (C) SYSTAP, LLC 2010. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package cutthecrap.utils.striterators; + +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * Used with Filterator by Striterator to filter returned objects. This can + * represent either a single {@link IFilter} or a chain of {@link IFilter}s. + */ +public abstract class FilterBase implements IFilter, Cloneable { + + private static final long serialVersionUID = 1L; + + /** + * An optional filter chain. When non-<code>null</code> this contains the + * {@link IFilter} in the same order in which they were added to this + * {@link IFilter}, but <i>this</i> is NOT included in the filter chain. + * <p> + * Note: package private for unit tests. + */ + /*private*/ volatile List<IFilter> filterChain = null; + + /** + * Annotations may be used to decorate the {@link IFilter} with required or + * optional metadata. + * <p> + * Note: package private for unit tests. + */ + /*private*/ volatile Map<String, Object> annotations; + + /** + * State from the constructor (optional). + * <p> + * Note: Striterators should not have a side-effect on state object since + * that can have unexpected consequences if the {@link IFilter} is reused. + */ + final protected Object m_state; + + public FilterBase() { + m_state = null; + } + + /** + * + * @param state + * State (optional). + */ + public FilterBase(final Object state) { + m_state = state; + } + +// public FilterBase clone() { +// +// final FilterBase inst = new FilterBase(m_state); +// +// for(IFilter filter : filterChain) { +// +// inst.addFilter(filter); +// +// } +// +// return inst; +// +// } + + /** + * Add a filter to the end of this filter chain. + * + * @param filter + * The filter. + * + * @return This filter. + */ + final public FilterBase addFilter(final IFilter filter) { + if (filter == null) + throw new IllegalArgumentException(); + if (filterChain == null) { + synchronized (this) { + /* + * Note: double-checked locking pattern and volatile field are + * used to ensure visibility in combination with lazy create of + * the backing list. + */ + if (filterChain == null) { + filterChain = Collections + .synchronizedList(new LinkedList<IFilter>()); + } + } + } + filterChain.add(filter); + + return this; + } + + final public Iterator filter(Iterator src, final Object context) { + // wrap src with _this_ filter. + src = filterOnce(src, context); + if (filterChain != null) { + // wrap source with each additional filter from the filter chain. + for (IFilter filter : filterChain) { + src = filter.filter(src, context); + } + } + return src; + } + + /** + * Wrap the source iterator with <i>this</i> filter. + * + * @param src + * The source iterator. + * @param context + * The iterator evaluation context. + * + * @return The wrapped iterator. + */ + abstract protected Iterator filterOnce(Iterator src, final Object context); + + final public Object getProperty(String name) { + + if (annotations == null) + return null; + + return annotations.get(name); + + } + + /** + * Return the value of a named property. + * + * @param name + * The property name. + * + * @return The property value. + * + * @throws IllegalStateException + * unless the named property is bound. + */ + final protected Object getRequiredProperty(final String name) { + + final Object value = getProperty(name); + + if (value == null) + throw new IllegalStateException(name); + + return value; + + } + + /** + * Set an annotation. + * + * @param name + * The name. + * @param value + * The value. + * + * @return The old value. + */ + final public Object setProperty(final String name, final Object value) { + + if (name == null) + throw new IllegalArgumentException(); + + if (annotations == null) { + /* + * Note: double-checked locking pattern and volatile field are used + * to ensure visibility in combination with lazy create of the + * annotations map. + */ + synchronized (this) { + if (annotations == null) { + annotations = Collections + .synchronizedMap(new LinkedHashMap<String, Object>()); + } + } + } + return annotations.put(name, value); + } + + /** + * Human readable representation of the filter chain. + */ + public String toString() { + final StringBuilder sb = new StringBuilder(); + sb.append(super.toString()); + sb.append("{annotations=" + annotations); + sb.append(",filterChain=" + filterChain); + sb.append("}"); + return sb.toString(); + } + +} Property changes on: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/FilterBase.java ___________________________________________________________________ Added: svn:keywords + Id Date Revision Author HeadURL Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filterator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filterator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Filterator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -42,13 +42,15 @@ public class Filterator implements Iterator { - Iterator m_src; - Object m_value = null; + private Iterator m_src; + private Object m_value = null; - protected Filter m_filter = null; + final protected Object m_context; + final protected Filter m_filter; - public Filterator(Iterator src, Filter filter) { + public Filterator(final Iterator src, final Object context, final Filter filter) { m_src = src; + m_context = context; m_filter = filter; m_value = getNext(); Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IFilter.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IFilter.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IFilter.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -32,16 +32,20 @@ /** * Provides the hook interface that allows use by Striterators */ -public interface IFilter extends Serializable { +public interface IFilter extends Serializable, IPropertySet { /** * <p>The filter method is provided to allow the creation of the filtering iterator.</p> * * <p>Any implementation should follow the following pattern:</p> * <pre> - * public Iterator filter(Iterator src) { - * return new Filterator(src, this); + * public Iterator filter(Iterator src, Object context) { + * return new Filterator(src, context, this); * } * </pre> + * This pattern makes the source iterator, the evaluation context, and the + * {@link IPropertySet} annotations visible to the runtime striterator + * implementation. **/ - public abstract Iterator filter(Iterator src); + public abstract Iterator filter(Iterator src, Object context); + } \ No newline at end of file Added: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IPropertySet.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IPropertySet.java (rev 0) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IPropertySet.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -0,0 +1,47 @@ +/** + +Copyright (C) SYSTAP, LLC 2006-2010. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +/* + * Created on Sep 27, 2010 + */ + +package cutthecrap.utils.striterators; + +/** + * Interface for access to named property values. + * + * @author <a href="mailto:tho...@us...">Bryan Thompson</a> + */ +public interface IPropertySet { + + /** + * Return the value of a named property. + * + * @param name + * The property name. + * + * @return The property value. + */ + Object getProperty(String name); + +} Property changes on: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/IPropertySet.java ___________________________________________________________________ Added: svn:keywords + Id Date Revision Author HeadURL Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapper.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapper.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapper.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -25,8 +25,8 @@ package cutthecrap.utils.striterators; +import java.lang.reflect.Method; import java.util.Iterator; -import java.lang.reflect.Method; /** * Mapper @@ -34,9 +34,9 @@ * Used with Mapperator by Striterator to map instance methods against member objects. */ -public class Mapper implements IFilter { +public class Mapper extends FilterBase { protected Object m_client = null; - protected Method m_method = null; + protected Method m_method = null; // @todo Not serializable. Defer reflection? protected Object[] m_args = {null}; public Mapper(Object client, Method method) { @@ -46,9 +46,10 @@ //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Mapperator(src, this); - } + @Override + final public Iterator filterOnce(Iterator src, Object context) { + return new Mapperator(src, context, this); + } //------------------------------------------------------------- Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapperator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapperator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mapperator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -35,11 +35,13 @@ public class Mapperator implements Iterator { - Iterator m_iter; - Mapper m_mapper; + final private Iterator m_iter; + final protected Object m_context; + final private Mapper m_mapper; - public Mapperator(Iterator iter, Mapper mapper) { + public Mapperator(Iterator iter, Object context, Mapper mapper) { m_iter = iter; + m_context = context; m_mapper = mapper; } Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Merger.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Merger.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Merger.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -32,8 +32,9 @@ * Used with Mergerator by Striterator to merge returned objects. */ -public class Merger implements IFilter { - protected Iterator m_xtra = null; +public class Merger extends FilterBase { + + protected Iterator m_xtra = null; // @todo Non-Serializable. protected Comparator m_comparator = null; public Merger() {} @@ -45,8 +46,9 @@ //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Mergerator(src, m_xtra, m_comparator); + @Override + final public Iterator filterOnce(Iterator src, Object context) { + return new Mergerator(src, m_xtra, context, m_comparator); } //------------------------------------------------------------- Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mergerator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mergerator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Mergerator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -33,14 +33,16 @@ **/ public class Mergerator implements Iterator { - Iterator m_setA; - Iterator m_setB; - Comparator m_comparator; + final private Iterator m_setA; + final private Iterator m_setB; + final protected Object m_context; + final private Comparator m_comparator; - Object m_valA = null; - Object m_valB = null; + private Object m_valA = null; + private Object m_valB = null; - public Mergerator(Iterator setA, Iterator setB, Comparator comparator) { + public Mergerator(Iterator setA, Iterator setB, Object context, Comparator comparator) { + m_context = context; m_setA = setA; m_setB = setB; Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolver.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolver.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolver.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -35,19 +35,19 @@ * Cannot be instantiated directly since an implementation of the resolve method is required. */ -public abstract class Resolver implements IFilter { - protected Object m_state = null; +public abstract class Resolver extends FilterBase { public Resolver() {} public Resolver(Object state) { - m_state = state; + super(state); } //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Resolverator(src, this); + @Override + final public Iterator filterOnce(Iterator src, Object context) { + return new Resolverator(src, context, this); } //------------------------------------------------------------- Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolverator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolverator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Resolverator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -35,11 +35,13 @@ public class Resolverator implements Iterator { - Iterator m_iter; - Resolver m_resolver; + private final Iterator m_iter; + protected final Object m_context; + private final Resolver m_resolver; - public Resolverator(Iterator iter, Resolver resolver) { + public Resolverator(Iterator iter, Object context, Resolver resolver) { m_iter = iter; + m_context = context; m_resolver = resolver; } Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorter.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorter.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorter.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -25,7 +25,8 @@ package cutthecrap.utils.striterators; -import java.util.*; +import java.util.Comparator; +import java.util.Iterator; /** * <p>Used with Sorterator by Striterator to sort iterations.</p> @@ -37,17 +38,40 @@ * for sets that may be very large.</p> */ -public abstract class Sorter implements IFilter, Comparator { - public Sorter() { - } - - //------------------------------------------------------------- +abstract public class Sorter extends FilterBase implements Comparator { + +// /** +// * Annotation giving the {@link Comparator} to be applied. +// */ +// static final public String COMPARATOR = Sorter.class.getName() +// + ".comparator"; - final public Iterator filter(Iterator src) { - return new Sorterator(src, this); - } + public Sorter() { + } - //------------------------------------------------------------- +// public Sorter(Comparator c) { +// +// setProperty(COMPARATOR, c); +// +// } - public abstract int compare(Object o1, Object o2); -} \ No newline at end of file + // ------------------------------------------------------------- + + @Override + final public Iterator filterOnce(Iterator src, Object context) { + + return new Sorterator(src, context, this); + + } + + // ------------------------------------------------------------- + +// public Comparator getComparator() { +// +// return (Comparator) getRequiredProperty(COMPARATOR); +// +// } + + public abstract int compare(Object o1, Object o2); + +} Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorterator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorterator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Sorterator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -33,18 +33,36 @@ public class Sorterator implements Iterator { - Iterator m_iter; + private final Iterator m_iter; + protected final Object m_context; - public Sorterator(Iterator iter, Sorter sorter) { - TreeSet set = new TreeSet(sorter); - - while (iter.hasNext()) { - set.add(iter.next()); - } - - m_iter = set.iterator(); - } + public Sorterator(Iterator iter, Object context, Sorter sorter) { + this.m_context = context; + + // materialize the objects to be sorted. + LinkedList tmp = new LinkedList(); + + while(iter.hasNext()) { + tmp.add(iter.next()); + } + + Object[] a = tmp.toArray(); + + Arrays.sort(a, sorter/*.getComparator()*/); + + m_iter = Arrays.asList(a).iterator(); + +// TreeSet set = new TreeSet(sorter); +// +// while (iter.hasNext()) { +// set.add(iter.next()); +// } +// +// m_iter = set.iterator(); + + } + public boolean hasNext() { return m_iter.hasNext(); } Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Striterator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Striterator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Striterator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -25,9 +25,10 @@ package cutthecrap.utils.striterators; +import java.lang.reflect.Method; +import java.util.Enumeration; import java.util.Iterator; -import java.util.Enumeration; -import java.lang.reflect.Method; +import java.util.List; /** * Striterator @@ -38,25 +39,47 @@ * The <code>addTypeFilter</code> method allows easy specification of a class type restriction. */ public class Striterator implements IStriterator { - Iterator m_src = null; + private List<IFilter> filters = null; // Note: NOT serializable. + private transient Iterator realSource; + private transient Iterator m_src = null; - /** Constructor takes source iterator **/ - public Striterator(Iterator src) { - m_src = src; - } + /** + * Deserialization constructor. + */ + public Striterator() { + this.realSource = null; + } - public Striterator(Enumeration src) { - this(new EnumIterator(src)); - } + /** Constructor takes source iterator **/ + public Striterator(final Iterator src) { + this.realSource = src; + } - /** delegates hasNext request to source iterator **/ - public boolean hasNext() { - return m_src.hasNext(); - } + public Striterator(final Enumeration src) { + this(new EnumIterator(src)); + } - /** delegates next request to source iterator **/ - public Object next() { - return m_src.next(); + /** + * + * @param src + * @param filter + */ + public Striterator(final Iterator src, final List<IFilter> filters) { + this.realSource = src; + } + + /** delegates hasNext request to source iterator **/ + public boolean hasNext() { + if (m_src == null) + compile(realSource); + return m_src.hasNext(); + } + + /** delegates next request to source iterator **/ + public Object next() { + if (m_src == null) + compile(realSource); + return m_src.next(); } /** Enumeration version of hasNext() **/ @@ -75,12 +98,27 @@ } /** creates a Filterator to apply the filter **/ - public IStriterator addFilter(IFilter filter) { - m_src = filter.filter(m_src); - - return this; + public IStriterator addFilter(final IFilter filter) { + if (filters != null) + filters.add(filter); + + return this; } + public void compile(final Iterator src) { + compile(src, null/* context */); + } + + public void compile(final Iterator src, final Object context) { + if (m_src != null) + throw new IllegalStateException(); + m_src = realSource = src; + if (filters != null) + for (IFilter filter : filters) { + m_src = filter.filter(m_src, context); + } + } + /** check each object against cls.isInstance(object) **/ public IStriterator addTypeFilter(Class cls) { addFilter(new Filter(cls) { Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/UniquenessFilter.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/UniquenessFilter.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/UniquenessFilter.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -25,7 +25,7 @@ package cutthecrap.utils.striterators; -import java.util.*; +import java.util.LinkedHashSet; /****************************************************************************** * UniquenessFilter @@ -33,7 +33,10 @@ * Derived from Filter, and ensures no duplication, not to be used with large sets! */ public class UniquenessFilter extends Filter { - ArrayList m_members = new ArrayList(); + + private static final long serialVersionUID = 424197241022124358L; +// ArrayList m_members = new ArrayList(); + private final LinkedHashSet<Object> m_members = new LinkedHashSet<Object>(); public UniquenessFilter() { super(null); @@ -43,11 +46,12 @@ * Just make sure that the current object has not already been returned **/ protected boolean isValid(Object obj) { - if (m_members.contains(obj)) { - return false; - } - m_members.add(obj); - - return true; + return m_members.add(obj); +// if (m_members.contains(obj)) { +// return false; +// } +// m_members.add(obj); +// +// return true; } } Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitor.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitor.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitor.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -25,17 +25,18 @@ package cutthecrap.utils.striterators; -import java.util.*; +import java.util.Iterator; /** * @author Martyn Cutcher */ -public abstract class Visitor implements IFilter { +public abstract class Visitor extends FilterBase { //------------------------------------------------------------- - final public Iterator filter(Iterator src) { - return new Visitorator(src, this); + @Override + final public Iterator filterOnce(Iterator src, Object context) { + return new Visitorator(src, context, this); } protected abstract void visit(Object obj); Modified: branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitorator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitorator.java 2010-09-27 23:33:28 UTC (rev 3643) +++ branches/QUADS_QUERY_BRANCH/ctc-striterators/src/java/cutthecrap/utils/striterators/Visitorator.java 2010-09-27 23:38:47 UTC (rev 3644) @@ -32,11 +32,13 @@ */ public class Visitorator implements Iterator { - Iterator m_iter; - Visitor m_visitor; + private final Iterator m_iter; + protected final Object m_context; + private final Visitor m_visitor; - public Visitorator(Iterator iter, Visitor visitor) { + public Visitorator(Iterator iter, Object context, Visitor visitor) { m_iter = iter; + m_context = context; m_visitor = visitor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |