You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by bi...@apache.org on 2011/11/28 20:30:28 UTC

svn commit: r1207529 [1/2] - in /incubator/accumulo/branches/1.4/src/core/src: main/java/org/apache/accumulo/core/client/mock/ main/java/org/apache/accumulo/core/iterators/ main/java/org/apache/accumulo/core/iterators/system/ main/java/org/apache/accum...

Author: billie
Date: Mon Nov 28 19:30:20 2011
New Revision: 1207529

URL: http://svn.apache.org/viewvc?rev=1207529&view=rev
Log:
ACCUMULO-167 added static methods, removed constructors or made them private, converted tests to configure through init instead

Added:
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFamilySkippingIteratorTest.java
      - copied, changed from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFamilySkippingIteratorTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java
      - copied, changed from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java
      - copied, changed from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/CombinerTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
      - copied, changed from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/LargeRowFilterTest.java
      - copied, changed from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/LargeRowFilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/RegExFilterTest.java
      - copied, changed from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RegExFilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/VersioningIteratorTest.java
      - copied, changed from r1205055, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/VersioningIteratorTest.java
Removed:
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFamilySkippingIteratorTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/CombinerTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/LargeRowFilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RegExFilterTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/VersioningIteratorTest.java
Modified:
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchScanner.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockScanner.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/NoVisFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java
    incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FamilyIntersectingIteratorTest.java
    incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RowDeletingIteratorTest.java

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchScanner.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchScanner.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchScanner.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchScanner.java Mon Nov 28 19:30:20 2011
@@ -49,8 +49,8 @@ public class MockBatchScanner extends Mo
   static class RangesFilter extends Filter {
     List<Range> ranges;
     
-    public RangesFilter(SortedKeyValueIterator<Key,Value> iterator, List<Range> ranges) {
-      super(iterator);
+    RangesFilter(SortedKeyValueIterator<Key,Value> iterator, List<Range> ranges) {
+      setSource(iterator);
       this.ranges = ranges;
     }
     

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockScanner.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockScanner.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockScanner.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/client/mock/MockScanner.java Mon Nov 28 19:30:20 2011
@@ -78,8 +78,8 @@ public class MockScanner extends MockSca
   static class RangeFilter extends Filter {
     Range range;
     
-    public RangeFilter(SortedKeyValueIterator<Key,Value> i, Range range) {
-      super(i);
+    RangeFilter(SortedKeyValueIterator<Key,Value> i, Range range) {
+      setSource(i);
       this.range = range;
     }
     

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java Mon Nov 28 19:30:20 2011
@@ -26,14 +26,13 @@ import java.util.Map;
 import java.util.NoSuchElementException;
 
 import org.apache.accumulo.core.client.IteratorSetting;
+import org.apache.accumulo.core.client.IteratorSetting.Column;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.PartialKey;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.conf.ColumnSet;
-import org.apache.accumulo.core.util.Pair;
-import org.apache.hadoop.io.Text;
 import org.apache.log4j.Logger;
 
 /**
@@ -46,7 +45,7 @@ import org.apache.log4j.Logger;
  */
 public abstract class Combiner extends WrappingIterator implements OptionDescriber {
   static final Logger log = Logger.getLogger(Combiner.class);
-  public static final String COLUMNS_OPTION = "columns";
+  protected static final String COLUMNS_OPTION = "columns";
   
   /**
    * A Java Iterator that iterates over the Values for a given Key from a source SortedKeyValueIterator.
@@ -115,8 +114,6 @@ public abstract class Combiner extends W
   Key topKey;
   Value topValue;
   
-  public Combiner() {}
-  
   @Override
   public Key getTopKey() {
     if (topKey == null)
@@ -231,7 +228,7 @@ public abstract class Combiner extends W
         Collections
             .singletonMap(
                 COLUMNS_OPTION,
-        "<col fam>[:<col qual>]{,<col fam>[:<col qual>]} escape non aplhanum chars using %<hex>."),
+        "<col fam>[:<col qual>]{,<col fam>[:<col qual>]} escape non-alphanum chars using %<hex>."),
         null);
   }
   
@@ -253,38 +250,15 @@ public abstract class Combiner extends W
   }
   
   /**
-   * A convenience class for passing column family and column qualifiers
-   */
-  public static class Column extends Pair<Text,Text> {
-    
-    public Column(Text columnFamily, Text columnQualifier) {
-      super(columnFamily, columnQualifier);
-    }
-    
-    public Column(Text columnFamily) {
-      super(columnFamily, null);
-    }
-    
-    public Column(String columnFamily, String columnQualifier) {
-      super(new Text(columnFamily), new Text(columnQualifier));
-    }
-    
-    public Column(String columnFamily) {
-      super(new Text(columnFamily), null);
-    }
-    
-  }
-
-  /**
    * A convenience method to set which columns a combiner should be applied to.
    * 
    * @param is
    *          iterator settings object to configure
    * @param columns
-   *          a list columns to encode as the value for the combiner column configuration
+   *          a list of columns to encode as the value for the combiner column configuration
    */
   
-  public static void setColumns(IteratorSetting is, List<Column> columns) {
+  public static void setColumns(IteratorSetting is, List<IteratorSetting.Column> columns) {
     String sep = "";
     StringBuilder sb = new StringBuilder();
     

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java Mon Nov 28 19:30:20 2011
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
@@ -50,14 +51,7 @@ public abstract class Filter extends Wra
   }
   
   private static final String NEGATE = "negate";
-  boolean negate;
-  
-  public Filter() {}
-  
-  public Filter(SortedKeyValueIterator<Key,Value> iterator) {
-    setSource(iterator);
-    negate = false;
-  }
+  boolean negate = false;
   
   @Override
   public void next() throws IOException {
@@ -111,4 +105,16 @@ public abstract class Filter extends Wra
     }
     return true;
   }
+  
+  /**
+   * A convenience method for setting the negation option on a filter.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param negate
+   *          if false, filter accepts k/v for which the accept method returns true; if true, filter accepts k/v for which the accept method returns false.
+   */
+  public static void setNegate(IteratorSetting is, boolean negate) {
+    is.addOption(NEGATE, Boolean.toString(negate));
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java Mon Nov 28 19:30:20 2011
@@ -23,8 +23,10 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.Map;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.start.classloader.AccumuloClassLoader;
 import org.apache.hadoop.io.WritableUtils;
 
 /**
@@ -38,7 +40,8 @@ import org.apache.hadoop.io.WritableUtil
  * VARNUM, LONG, and STRING which indicate the VarNumEncoder, LongEncoder, and StringEncoder respectively.
  */
 public abstract class LongCombiner extends TypedValueCombiner<Long> {
-  public static final String TYPE = "type";
+  protected static final String TYPE = "type";
+  protected static final String CLASS_PREFIX = "class:";
   
   public static enum Type {
     VARNUM, LONG, STRING
@@ -47,20 +50,44 @@ public abstract class LongCombiner exten
   @Override
   public void init(SortedKeyValueIterator<Key,Value> source, Map<String,String> options, IteratorEnvironment env) throws IOException {
     super.init(source, options, env);
-    if (options.get(TYPE) == null)
+    setEncoder(options);
+  }
+  
+  private void setEncoder(Map<String,String> options) {
+    String type = options.get(TYPE);
+    if (type == null)
       throw new IllegalArgumentException("no type specified");
-    switch (Type.valueOf(options.get(TYPE))) {
-      case VARNUM:
-        encoder = new VarNumEncoder();
-        return;
-      case LONG:
-        encoder = new LongEncoder();
-        return;
-      case STRING:
-        encoder = new StringEncoder();
-        return;
-      default:
-        throw new IllegalArgumentException();
+    if (type.startsWith(CLASS_PREFIX)) {
+      try {
+        @SuppressWarnings("unchecked")
+        Class<? extends Encoder<Long>> clazz = (Class<? extends Encoder<Long>>) AccumuloClassLoader.loadClass(type.substring(CLASS_PREFIX.length()),
+            Encoder.class);
+        encoder = clazz.newInstance();
+        if (encoder.decode(encoder.encode(42l)) != 42l) {
+          throw new IllegalArgumentException("something wrong with " + type + " -- doesn't encode and decode a Long properly");
+        }
+      } catch (ClassNotFoundException e) {
+        throw new IllegalArgumentException(e);
+      } catch (InstantiationException e) {
+        throw new IllegalArgumentException(e);
+      } catch (IllegalAccessException e) {
+        throw new IllegalArgumentException(e);
+      }
+    }
+    else {
+      switch (Type.valueOf(type)) {
+        case VARNUM:
+          encoder = new VarNumEncoder();
+          return;
+        case LONG:
+          encoder = new LongEncoder();
+          return;
+        case STRING:
+          encoder = new StringEncoder();
+          return;
+        default:
+          throw new IllegalArgumentException();
+      }
     }
   }
   
@@ -76,13 +103,7 @@ public abstract class LongCombiner exten
   @Override
   public boolean validateOptions(Map<String,String> options) {
     super.validateOptions(options);
-    if (options.get(TYPE) == null)
-      return false;
-    try {
-      Type.valueOf(options.get(TYPE));
-    } catch (Exception e) {
-      return false;
-    }
+    setEncoder(options);
     return true;
   }
   
@@ -175,4 +196,40 @@ public abstract class LongCombiner exten
     }
     return a + b;
   }
+  
+  /**
+   * A convenience method for setting the long encoding type.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param type
+   *          LongCombiner.Type specifying the encoding type.
+   */
+  public static void setEncodingType(IteratorSetting is, LongCombiner.Type type) {
+    is.addOption(TYPE, type.toString());
+  }
+  
+  /**
+   * A convenience method for setting the long encoding type.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param encoderClass
+   *          Class<? extends Encoder<Long>> specifying the encoding type.
+   */
+  public static void setEncodingType(IteratorSetting is, Class<? extends Encoder<Long>> encoderClass) {
+    is.addOption(TYPE, CLASS_PREFIX + encoderClass.getName());
+  }
+  
+  /**
+   * A convenience method for setting the long encoding type.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param encoderClassName
+   *          name of a class specifying the encoding type.
+   */
+  public static void setEncodingType(IteratorSetting is, String encoderClassName) {
+    is.addOption(TYPE, CLASS_PREFIX + encoderClassName);
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java Mon Nov 28 19:30:20 2011
@@ -37,13 +37,13 @@ public class ColumnQualifierFilter exten
   public ColumnQualifierFilter() {}
   
   public ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, HashSet<Column> columns) {
-    super(iterator);
+    setSource(iterator);
     init(columns);
   }
   
   public ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, HashSet<ByteSequence> columnFamilies,
       HashMap<ByteSequence,HashSet<ByteSequence>> columnsQualifiers, boolean scanColumns) {
-    super(iterator);
+    setSource(iterator);
     this.columnFamilies = columnFamilies;
     this.columnsQualifiers = columnsQualifiers;
     this.scanColumns = scanColumns;

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java Mon Nov 28 19:30:20 2011
@@ -41,7 +41,7 @@ public class VisibilityFilter extends Fi
   public VisibilityFilter() {}
   
   public VisibilityFilter(SortedKeyValueIterator<Key,Value> iterator, Authorizations authorizations, byte[] defaultVisibility) {
-    super(iterator);
+    setSource(iterator);
     this.ve = new VisibilityEvaluator(authorizations);
     this.defaultVisibility = new Text(defaultVisibility);
     this.cache = new LRUMap(1000);

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java Mon Nov 28 19:30:20 2011
@@ -19,6 +19,7 @@ package org.apache.accumulo.core.iterato
 import java.io.IOException;
 import java.util.Map;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.Filter;
@@ -32,6 +33,7 @@ import org.apache.accumulo.core.iterator
  */
 public class AgeOffFilter extends Filter {
   private static final String TTL = "ttl";
+  private static final String CURRENT_TIME = "currentTime";
   private long threshold;
   private long currentTime;
   
@@ -49,8 +51,8 @@ public class AgeOffFilter extends Filter
    * @param threshold
    *          Current time in milliseconds.
    */
-  public AgeOffFilter(SortedKeyValueIterator<Key,Value> iterator, long threshold, long currentTime) {
-    super(iterator);
+  private AgeOffFilter(SortedKeyValueIterator<Key,Value> iterator, long threshold, long currentTime) {
+    setSource(iterator);
     this.threshold = threshold;
     this.currentTime = currentTime;
   }
@@ -80,7 +82,7 @@ public class AgeOffFilter extends Filter
     
     threshold = Long.parseLong(ttl);
     
-    String time = options.get("currentTime");
+    String time = options.get(CURRENT_TIME);
     if (time != null)
       currentTime = Long.parseLong(time);
     else
@@ -98,7 +100,7 @@ public class AgeOffFilter extends Filter
   public IteratorOptions describeOptions() {
     IteratorOptions io = super.describeOptions();
     io.addNamedOption(TTL, "time to live (milliseconds)");
-    io.addNamedOption("currentTime", "if set, use the given value as the absolute time in milliseconds as the current time of day");
+    io.addNamedOption(CURRENT_TIME, "if set, use the given value as the absolute time in milliseconds as the current time of day");
     io.setName("ageoff");
     io.setDescription("AgeOffFilter removes entries with timestamps more than <ttl> milliseconds old");
     return io;
@@ -114,4 +116,28 @@ public class AgeOffFilter extends Filter
     }
     return true;
   }
+  
+  /**
+   * A convenience method for setting the age off threshold.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param ttl
+   *          age off threshold in milliseconds.
+   */
+  public static void setTTL(IteratorSetting is, Long ttl) {
+    is.addOption(TTL, Long.toString(ttl));
+  }
+  
+  /**
+   * A convenience method for setting the current time (from which to measure the age off threshold).
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param currentTime
+   *          time in milliseconds.
+   */
+  public static void setCurrentTime(IteratorSetting is, Long currentTime) {
+    is.addOption(CURRENT_TIME, Long.toString(currentTime));
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java Mon Nov 28 19:30:20 2011
@@ -20,13 +20,16 @@ import java.io.IOException;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.Filter;
 import org.apache.accumulo.core.iterators.IteratorEnvironment;
 import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
+import org.apache.accumulo.core.iterators.conf.ColumnSet;
 import org.apache.accumulo.core.iterators.conf.ColumnToClassMapping;
-import org.apache.accumulo.core.iterators.conf.PerColumnIteratorConfig;
+import org.apache.accumulo.core.util.Pair;
+import org.apache.hadoop.io.Text;
 
 /**
  * A filter that ages off key/value pairs based on the Key's column and timestamp. It removes an entry if its timestamp is less than currentTime - threshold.
@@ -36,8 +39,8 @@ public class ColumnAgeOffFilter extends 
   
   public ColumnAgeOffFilter() {}
   
-  public ColumnAgeOffFilter(SortedKeyValueIterator<Key,Value> iterator, TTLSet ttls, long currentTime) {
-    super(iterator);
+  private ColumnAgeOffFilter(SortedKeyValueIterator<Key,Value> iterator, TTLSet ttls, long currentTime) {
+    setSource(iterator);
     this.ttls = ttls;
     this.currentTime = currentTime;
   }
@@ -51,12 +54,12 @@ public class ColumnAgeOffFilter extends 
         String ttl = entry.getValue();
         Long l = Long.parseLong(ttl);
         
-        PerColumnIteratorConfig ac = PerColumnIteratorConfig.decodeColumns(column, ttl);
+        Pair<Text,Text> colPair = ColumnSet.decodeColumns(column);
         
-        if (ac.getColumnQualifier() == null) {
-          addObject(ac.getColumnFamily(), l);
+        if (colPair.getSecond() == null) {
+          addObject(colPair.getFirst(), l);
         } else {
-          addObject(ac.getColumnFamily(), ac.getColumnQualifier(), l);
+          addObject(colPair.getFirst(), colPair.getSecond(), l);
         }
       }
     }
@@ -96,7 +99,7 @@ public class ColumnAgeOffFilter extends 
     IteratorOptions io = super.describeOptions();
     io.setName("colageoff");
     io.setDescription("ColumnAgeOffFilter ages off columns at different rates given a time to live in milliseconds for each column");
-    io.addUnnamedOption("<columnName> <Long>");
+    io.addUnnamedOption("<col fam>[:<col qual>] <Long> (escape non-alphanum chars using %<hex>)");
     return io;
   }
   
@@ -106,4 +109,30 @@ public class ColumnAgeOffFilter extends 
     this.ttls = new TTLSet(options);
     return true;
   }
+  
+  /**
+   * A convenience method for adding or changing an age off threshold for a column.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param column
+   *          column to encode as a parameter name.
+   * @param ttl
+   *          age off threshold in milliseconds.
+   */
+  public static void addTTL(IteratorSetting is, IteratorSetting.Column column, Long ttl) {
+    is.addOption(ColumnSet.encodeColumns(column.getFirst(), column.getSecond()), Long.toString(ttl));
+  }
+
+  /**
+   * A convenience method for removing an age off threshold for a column.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param column
+   *          column to encode as a parameter name.
+   */
+  public static void removeTTL(IteratorSetting is, IteratorSetting.Column column) {
+    is.removeOption(ColumnSet.encodeColumns(column.getFirst(), column.getSecond()));
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java Mon Nov 28 19:30:20 2011
@@ -115,7 +115,7 @@ public class IntersectingIterator implem
     return new IntersectingIterator(this, env);
   }
   
-  public IntersectingIterator(IntersectingIterator other, IteratorEnvironment env) {
+  private IntersectingIterator(IntersectingIterator other, IteratorEnvironment env) {
     if (other.sources != null) {
       sourcesCount = other.sourcesCount;
       sources = new TermSource[sourcesCount];

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java Mon Nov 28 19:30:20 2011
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.ArrayByteSequence;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
@@ -48,7 +49,7 @@ public class LargeRowFilter implements S
   private static final ByteSequence EMPTY = new ArrayByteSequence(new byte[] {});
   
   /* key into hash map, value refers to the row supression limit (maxColumns) */
-  public static final String MAX_COLUMNS = "max_columns";
+  private static final String MAX_COLUMNS = "max_columns";
   
   private SortedKeyValueIterator<Key,Value> source;
   
@@ -275,4 +276,15 @@ public class LargeRowFilter implements S
     return true;
   }
   
+  /**
+   * A convenience method for setting the maximum number of columns to keep.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param maxColumns
+   *          number of columns to keep.
+   */
+  public static void setMaxColumns(IteratorSetting is, int maxColumns) {
+    is.addOption(MAX_COLUMNS, Integer.toString(maxColumns));
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/NoVisFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/NoVisFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/NoVisFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/NoVisFilter.java Mon Nov 28 19:30:20 2011
@@ -19,7 +19,6 @@ package org.apache.accumulo.core.iterato
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.Filter;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.security.ColumnVisibility;
 
 /**
@@ -27,12 +26,6 @@ import org.apache.accumulo.core.security
  */
 public class NoVisFilter extends Filter {
   
-  public NoVisFilter() {}
-  
-  public NoVisFilter(SortedKeyValueIterator<Key,Value> iterator) {
-    super(iterator);
-  }
-  
   @Override
   public boolean accept(Key k, Value v) {
     ColumnVisibility vis = new ColumnVisibility(k.getColumnVisibility());

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java Mon Nov 28 19:30:20 2011
@@ -37,7 +37,8 @@ public class RegExFilter extends Filter 
   
   @Override
   public SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) {
-    RegExFilter result = new RegExFilter(getSource().deepCopy(env));
+    RegExFilter result = new RegExFilter();
+    result.setSource(getSource().deepCopy(env));
     result.rowMatcher = rowMatcher.pattern().matcher("");
     result.colfMatcher = colfMatcher.pattern().matcher("");
     result.colqMatcher = colqMatcher.pattern().matcher("");
@@ -46,12 +47,6 @@ public class RegExFilter extends Filter 
     return result;
   }
   
-  public RegExFilter() {}
-  
-  public RegExFilter(SortedKeyValueIterator<Key,Value> iterator) {
-    super(iterator);
-  }
-  
   public static final String ROW_REGEX = "rowRegex";
   public static final String COLF_REGEX = "colfRegex";
   public static final String COLQ_REGEX = "colqRegex";

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java Mon Nov 28 19:30:20 2011
@@ -22,23 +22,32 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.IteratorEnvironment;
 import org.apache.accumulo.core.iterators.LongCombiner;
-import org.apache.accumulo.core.iterators.LongCombiner.Type;
 import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.iterators.TypedValueCombiner;
+import org.apache.accumulo.start.classloader.AccumuloClassLoader;
 import org.apache.hadoop.io.WritableUtils;
 
 /**
  * A Combiner that interprets Values as arrays of Longs and returns an array of element-wise sums.
  */
 public class SummingArrayCombiner extends TypedValueCombiner<List<Long>> {
+  private static final String TYPE = "type";
+  private static final String CLASS_PREFIX = "class:";
+
+  public static enum Type {
+    VARNUM, LONG, STRING
+  }
+
   @Override
   public List<Long> typedReduce(Key key, Iterator<List<Long>> iter) {
     List<Long> sum = new ArrayList<Long>();
@@ -65,20 +74,44 @@ public class SummingArrayCombiner extend
   @Override
   public void init(SortedKeyValueIterator<Key,Value> source, Map<String,String> options, IteratorEnvironment env) throws IOException {
     super.init(source, options, env);
-    if (options.get(LongCombiner.TYPE) == null)
+    setEncoder(options);
+  }
+  
+  private void setEncoder(Map<String,String> options) {
+    String type = options.get(TYPE);
+    if (type == null)
       throw new IllegalArgumentException("no type specified");
-    switch (Type.valueOf(options.get(LongCombiner.TYPE))) {
-      case VARNUM:
-        encoder = new VarNumArrayEncoder();
-        return;
-      case LONG:
-        encoder = new LongArrayEncoder();
-        return;
-      case STRING:
-        encoder = new StringArrayEncoder();
-        return;
-      default:
-        throw new IllegalArgumentException();
+    if (type.startsWith(CLASS_PREFIX)) {
+      try {
+        @SuppressWarnings("unchecked")
+        Class<? extends Encoder<List<Long>>> clazz = (Class<? extends Encoder<List<Long>>>) AccumuloClassLoader.loadClass(
+            type.substring(CLASS_PREFIX.length()), Encoder.class);
+        encoder = clazz.newInstance();
+        List<Long> testList = encoder.decode(encoder.encode(Arrays.asList(0l, 1l)));
+        if (testList.size() != 3 || testList.get(0) != 0l || testList.get(1) != 1l) {
+          throw new IllegalArgumentException("something wrong with " + type + " -- doesn't encode and decode a List<Long> properly");
+        }
+      } catch (ClassNotFoundException e) {
+        throw new IllegalArgumentException(e);
+      } catch (InstantiationException e) {
+        throw new IllegalArgumentException(e);
+      } catch (IllegalAccessException e) {
+        throw new IllegalArgumentException(e);
+      }
+    } else {
+      switch (Type.valueOf(options.get(TYPE))) {
+        case VARNUM:
+          encoder = new VarNumArrayEncoder();
+          return;
+        case LONG:
+          encoder = new LongArrayEncoder();
+          return;
+        case STRING:
+          encoder = new StringArrayEncoder();
+          return;
+        default:
+          throw new IllegalArgumentException();
+      }
     }
   }
   
@@ -87,20 +120,14 @@ public class SummingArrayCombiner extend
     IteratorOptions io = super.describeOptions();
     io.setName("typedcombiner");
     io.setDescription("TypedValueCombiner can interpret Values as a variety of number encodings (VLong, Long, or String) before combining");
-    io.addNamedOption(LongCombiner.TYPE, "<VARNUM|LONG|STRING>");
+    io.addNamedOption(TYPE, "<VARNUM|LONG|STRING>");
     return io;
   }
   
   @Override
   public boolean validateOptions(Map<String,String> options) {
     super.validateOptions(options);
-    if (options.get(LongCombiner.TYPE) == null)
-      return false;
-    try {
-      Type.valueOf(options.get(LongCombiner.TYPE));
-    } catch (Exception e) {
-      return false;
-    }
+    setEncoder(options);
     return true;
   }
   
@@ -190,4 +217,40 @@ public class SummingArrayCombiner extend
       return la;
     }
   }
+  
+  /**
+   * A convenience method for setting the encoding type.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param type
+   *          SummingArrayCombiner.Type specifying the encoding type.
+   */
+  public static void setEncodingType(IteratorSetting is, Type type) {
+    is.addOption(TYPE, type.toString());
+  }
+  
+  /**
+   * A convenience method for setting the encoding type.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param encoderClass
+   *          Class<? extends Encoder<Long>> specifying the encoding type.
+   */
+  public static void setEncodingType(IteratorSetting is, Class<? extends Encoder<List<Long>>> encoderClass) {
+    is.addOption(TYPE, CLASS_PREFIX + encoderClass.getName());
+  }
+  
+  /**
+   * A convenience method for setting the encoding type.
+   * 
+   * @param is
+   *          IteratorSetting object to configure.
+   * @param encoderClassName
+   *          name of a class specifying the encoding type.
+   */
+  public static void setEncodingType(IteratorSetting is, String encoderClassName) {
+    is.addOption(TYPE, CLASS_PREFIX + encoderClassName);
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java Mon Nov 28 19:30:20 2011
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Map;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.Filter;
@@ -40,25 +41,30 @@ public class TimestampFilter extends Fil
   private long end;
   private boolean startInclusive;
   private boolean endInclusive;
+  private boolean hasStart;
+  private boolean hasEnd;
   
   public TimestampFilter() {}
   
-  public TimestampFilter(SortedKeyValueIterator<Key,Value> iterator, long start, boolean startInclusive, long end, boolean endInclusive) {
-    super(iterator);
+  private TimestampFilter(SortedKeyValueIterator<Key,Value> iterator, boolean hasStart, long start, boolean startInclusive, boolean hasEnd, long end,
+      boolean endInclusive) {
+    setSource(iterator);
     this.start = start;
     this.startInclusive = startInclusive;
+    this.hasStart = true;
     this.end = end;
     this.endInclusive = endInclusive;
+    this.hasEnd = true;
   }
   
   @Override
   public boolean accept(Key k, Value v) {
     long ts = k.getTimestamp();
-    if (ts < start || ts > end)
+    if ((hasStart && (ts < start)) || (hasEnd && (ts > end)))
       return false;
-    if (!startInclusive && ts == start)
+    if (hasStart && !startInclusive && ts == start)
       return false;
-    if (!endInclusive && ts == end)
+    if (hasEnd && !endInclusive && ts == end)
       return false;
     return true;
   }
@@ -68,13 +74,25 @@ public class TimestampFilter extends Fil
     super.init(source, options, env);
     
     if (options == null)
-      throw new IllegalArgumentException("ttl must be set for AgeOffFilter");
+      throw new IllegalArgumentException("start and/or end must be set for " + TimestampFilter.class.getName());
     
+    hasStart = false;
+    hasEnd = false;
     startInclusive = true;
     endInclusive = true;
+    
+    if (options.containsKey(START))
+      hasStart = true;
+    if (options.containsKey(END))
+      hasEnd = true;
+    if (!hasStart && !hasEnd)
+      throw new IllegalArgumentException("must have either start or end for " + TimestampFilter.class.getName());
+
     try {
-      start = dateParser.parse(options.get(START)).getTime();
-      end = dateParser.parse(options.get(END)).getTime();
+      if (hasStart)
+        start = dateParser.parse(options.get(START)).getTime();
+      if (hasEnd)
+        end = dateParser.parse(options.get(END)).getTime();
     } catch (Exception e) {
       throw new IllegalArgumentException(e);
     }
@@ -86,7 +104,7 @@ public class TimestampFilter extends Fil
   
   @Override
   public SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) {
-    return new TimestampFilter(getSource(), start, startInclusive, end, endInclusive);
+    return new TimestampFilter(getSource(), hasStart, start, startInclusive, hasEnd, end, endInclusive);
   }
   
   @Override
@@ -105,8 +123,10 @@ public class TimestampFilter extends Fil
   public boolean validateOptions(Map<String,String> options) {
     super.validateOptions(options);
     try {
-      dateParser.parse(options.get(START));
-      dateParser.parse(options.get(END));
+      if (options.containsKey(START))
+        dateParser.parse(options.get(START));
+      if (options.containsKey(END))
+        dateParser.parse(options.get(END));
       if (options.get(START_INCL) != null)
         Boolean.parseBoolean(options.get(START_INCL));
       if (options.get(END_INCL) != null)
@@ -116,4 +136,67 @@ public class TimestampFilter extends Fil
     }
     return true;
   }
+  
+  /**
+   * A convenience method for setting the range of timestamps accepted by the timestamp filter.
+   * 
+   * @param is
+   *          the iterator setting object to configure
+   * @param start
+   *          the start timestamp, inclusive (yyyyMMddHHmmssz)
+   * @param end
+   *          the end timestamp, inclusive (yyyyMMddHHmmssz)
+   */
+  public static void setRange(IteratorSetting is, String start, String end) {
+    setRange(is, start, true, end, true);
+  }
+  
+  /**
+   * A convenience method for setting the range of timestamps accepted by the timestamp filter.
+   * 
+   * @param is
+   *          the iterator setting object to configure
+   * @param start
+   *          the start timestamp (yyyyMMddHHmmssz)
+   * @param startInclusive
+   *          boolean indicating whether the start is inclusive
+   * @param end
+   *          the end timestamp (yyyyMMddHHmmssz)
+   * @param endInclusive
+   *          boolean indicating whether the end is inclusive
+   */
+  public static void setRange(IteratorSetting is, String start, boolean startInclusive, String end, boolean endInclusive) {
+    setStart(is, start, startInclusive);
+    setEnd(is, end, endInclusive);
+  }
+  
+  /**
+   * A convenience method for setting the start timestamp accepted by the timestamp filter.
+   * 
+   * @param is
+   *          the iterator setting object to configure
+   * @param start
+   *          the start timestamp (yyyyMMddHHmmssz)
+   * @param startInclusive
+   *          boolean indicating whether the start is inclusive
+   */
+  public static void setStart(IteratorSetting is, String start, boolean startInclusive) {
+    is.addOption(START, start);
+    is.addOption(START_INCL, Boolean.toString(startInclusive));
+  }
+  
+  /**
+   * A convenience method for setting the end timestamp accepted by the timestamp filter.
+   * 
+   * @param is
+   *          the iterator setting object to configure
+   * @param end
+   *          the end timestamp (yyyyMMddHHmmssz)
+   * @param endInclusive
+   *          boolean indicating whether the end is inclusive
+   */
+  public static void setEnd(IteratorSetting is, String end, boolean endInclusive) {
+    is.addOption(END, end);
+    is.addOption(END_INCL, Boolean.toString(endInclusive));
+  }
 }

Modified: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java Mon Nov 28 19:30:20 2011
@@ -38,7 +38,6 @@ import org.apache.accumulo.core.data.Mut
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.Combiner;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.iterators.user.SummingCombiner;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.hadoop.io.Text;
@@ -93,10 +92,9 @@ public class MockConnectorTest {
     Connector c = mockInstance.getConnector("root", new byte[] {});
     String table = "perDayCounts";
     c.tableOperations().create(table);
-    Class<? extends SortedKeyValueIterator<Key,Value>> clazz = SummingCombiner.class;
-    IteratorSetting is = new IteratorSetting(10, "String Summation", clazz);
-    Combiner.setColumns(is, Collections.singletonList(new Combiner.Column("day")));
-    is.addOption(SummingCombiner.TYPE, SummingCombiner.Type.STRING.name());
+    IteratorSetting is = new IteratorSetting(10, "String Summation", SummingCombiner.class);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("day")));
+    SummingCombiner.setEncodingType(is, SummingCombiner.Type.STRING);
     c.tableOperations().attachIterator(table, is);
     String keys[][] = { {"foo", "day", "20080101"}, {"foo", "day", "20080101"}, {"foo", "day", "20080103"}, {"bar", "day", "20080101"},
         {"bar", "day", "20080101"},};

Modified: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FamilyIntersectingIteratorTest.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FamilyIntersectingIteratorTest.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FamilyIntersectingIteratorTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FamilyIntersectingIteratorTest.java Mon Nov 28 19:30:20 2011
@@ -22,9 +22,9 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Random;
 import java.util.TreeMap;
-import java.util.Map.Entry;
 
 import junit.framework.TestCase;
 
@@ -34,9 +34,6 @@ import org.apache.accumulo.core.data.Ran
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.file.rfile.RFileTest;
 import org.apache.accumulo.core.file.rfile.RFileTest.TestRFile;
-import org.apache.accumulo.core.iterators.FamilyIntersectingIterator;
-import org.apache.accumulo.core.iterators.IteratorEnvironment;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.iterators.system.MultiIterator;
 import org.apache.accumulo.core.iterators.user.IntersectingIterator;
 import org.apache.hadoop.io.Text;
@@ -158,8 +155,8 @@ public class FamilyIntersectingIteratorT
     Logger.getRootLogger().setLevel(Level.ERROR);
   }
   
-  private static final int NUM_ROWS = 10;
-  private static final int NUM_DOCIDS = 1000;
+  private static final int NUM_ROWS = 5;
+  private static final int NUM_DOCIDS = 200;
   
   public void test1() throws IOException {
     columnFamilies = new Text[2];

Modified: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RowDeletingIteratorTest.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RowDeletingIteratorTest.java?rev=1207529&r1=1207528&r2=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RowDeletingIteratorTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/RowDeletingIteratorTest.java Mon Nov 28 19:30:20 2011
@@ -21,30 +21,26 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.TreeMap;
 
+import junit.framework.TestCase;
+
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.data.ArrayByteSequence;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.iterators.IteratorEnvironment;
-import org.apache.accumulo.core.iterators.RowDeletingIterator;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
-import org.apache.accumulo.core.iterators.SortedMapIterator;
 import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
 import org.apache.accumulo.core.iterators.system.ColumnFamilySkippingIterator;
 import org.apache.hadoop.io.Text;
 
-import junit.framework.TestCase;
-
 public class RowDeletingIteratorTest extends TestCase {
   
-  static class TestIE implements IteratorEnvironment {
+  public static class TestIE implements IteratorEnvironment {
     
     private IteratorScope scope;
     private boolean fmc;
     
-    TestIE(IteratorScope scope, boolean fmc) {
+    public TestIE(IteratorScope scope, boolean fmc) {
       this.scope = scope;
       this.fmc = fmc;
     }

Copied: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFamilySkippingIteratorTest.java (from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFamilySkippingIteratorTest.java)
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFamilySkippingIteratorTest.java?p2=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFamilySkippingIteratorTest.java&p1=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFamilySkippingIteratorTest.java&r1=1204997&r2=1207529&rev=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFamilySkippingIteratorTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFamilySkippingIteratorTest.java Mon Nov 28 19:30:20 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.accumulo.core.iterators;
+package org.apache.accumulo.core.iterators.system;
 
 import java.util.Collection;
 import java.util.HashSet;

Copied: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java (from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFilterTest.java)
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java?p2=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java&p1=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFilterTest.java&r1=1204997&r2=1207529&rev=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/ColumnFilterTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java Mon Nov 28 19:30:20 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.accumulo.core.iterators;
+package org.apache.accumulo.core.iterators.system;
 
 import java.util.HashSet;
 

Copied: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java (from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/CombinerTest.java)
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java?p2=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java&p1=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/CombinerTest.java&r1=1204997&r2=1207529&rev=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/CombinerTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java Mon Nov 28 19:30:20 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.accumulo.core.iterators;
+package org.apache.accumulo.core.iterators.user;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -23,22 +23,26 @@ import static org.junit.Assert.assertTru
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.TreeMap;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.iterators.Combiner;
 import org.apache.accumulo.core.iterators.Combiner.ValueIterator;
+import org.apache.accumulo.core.iterators.DefaultIteratorEnvironment;
+import org.apache.accumulo.core.iterators.LongCombiner;
+import org.apache.accumulo.core.iterators.LongCombiner.LongEncoder;
+import org.apache.accumulo.core.iterators.LongCombiner.StringEncoder;
+import org.apache.accumulo.core.iterators.LongCombiner.VarNumEncoder;
+import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
+import org.apache.accumulo.core.iterators.SortedMapIterator;
 import org.apache.accumulo.core.iterators.TypedValueCombiner.Encoder;
 import org.apache.accumulo.core.iterators.system.MultiIterator;
-import org.apache.accumulo.core.iterators.user.MaxCombiner;
-import org.apache.accumulo.core.iterators.user.MinCombiner;
-import org.apache.accumulo.core.iterators.user.SummingArrayCombiner;
-import org.apache.accumulo.core.iterators.user.SummingCombiner;
 import org.apache.hadoop.io.Text;
 import org.junit.Test;
 
@@ -91,12 +95,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, SummingCombiner.Type.VARNUM);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("2")));
     
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.VARNUM.name());
-    opts.put(Combiner.COLUMNS_OPTION, "2");
-    
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -157,12 +160,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
-    
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.VARNUM.name());
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, VarNumEncoder.class);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -224,12 +226,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
-    
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.LONG.name());
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, LongEncoder.class.getName());
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -294,12 +295,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, SummingCombiner.Type.STRING);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.STRING.name());
-    
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -366,17 +366,18 @@ public class CombinerTest {
     nkv(tm3, 1, 1, 1, 1, false, 4l, encoder);
     
     Combiner ai = new SummingCombiner();
-    Map<String,String> opts = new HashMap<String,String>();
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.STRING.name());
     
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, StringEncoder.class);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
+
     List<SortedKeyValueIterator<Key,Value>> sources = new ArrayList<SortedKeyValueIterator<Key,Value>>(3);
     sources.add(new SortedMapIterator(tm1));
     sources.add(new SortedMapIterator(tm2));
     sources.add(new SortedMapIterator(tm3));
     
     MultiIterator mi = new MultiIterator(sources, true);
-    ai.init(mi, opts, null);
+    ai.init(mi, is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -396,12 +397,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, VarNumEncoder.class.getName());
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.VARNUM.name());
-    
-    ai.init(new SortedMapIterator(tm1), opts, new DefaultIteratorEnvironment());
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), new DefaultIteratorEnvironment());
     
     // try seeking to the beginning of a key that aggregates
     
@@ -425,12 +425,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
-    
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.LONG.name());
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, SummingCombiner.Type.LONG);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    ai.init(new SortedMapIterator(tm1), opts, new DefaultIteratorEnvironment());
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), new DefaultIteratorEnvironment());
     
     ai.seek(nr(1, 1, 1, 4, true), EMPTY_COL_FAMS, false);
     
@@ -449,7 +448,7 @@ public class CombinerTest {
     tm1 = new TreeMap<Key,Value>();
     nkv(tm1, 1, 1, 1, 2, true, 0l, encoder);
     ai = new SummingCombiner();
-    ai.init(new SortedMapIterator(tm1), opts, new DefaultIteratorEnvironment());
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), new DefaultIteratorEnvironment());
     
     ai.seek(nr(1, 1, 1, 4, true), EMPTY_COL_FAMS, false);
     
@@ -487,12 +486,11 @@ public class CombinerTest {
     
     Combiner ai = new MaxCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, SummingCombiner.Type.VARNUM);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, SummingCombiner.Type.VARNUM.name());
-    
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -505,7 +503,7 @@ public class CombinerTest {
     
     ai = new MinCombiner();
     
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());
@@ -541,12 +539,11 @@ public class CombinerTest {
     
     Combiner ai = new SummingArrayCombiner();
     
-    Map<String,String> opts = new HashMap<String,String>();
-    
-    opts.put(Combiner.COLUMNS_OPTION, "cf001");
-    opts.put(SummingCombiner.TYPE, type);
+    IteratorSetting is = new IteratorSetting(1, SummingCombiner.class);
+    LongCombiner.setEncodingType(is, SummingCombiner.Type.valueOf(type));
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001")));
     
-    ai.init(new SortedMapIterator(tm1), opts, null);
+    ai.init(new SortedMapIterator(tm1), is.getProperties(), null);
     ai.seek(new Range(), EMPTY_COL_FAMS, false);
     
     assertTrue(ai.hasTop());

Copied: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java (from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FilterTest.java)
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java?p2=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java&p1=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FilterTest.java&r1=1204997&r2=1207529&rev=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/FilterTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java Mon Nov 28 19:30:20 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.accumulo.core.iterators;
+package org.apache.accumulo.core.iterators.user;
 
 import java.io.IOException;
 import java.text.ParseException;
@@ -23,24 +23,23 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.TreeMap;
 
 import junit.framework.TestCase;
 
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Column;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.iterators.DefaultIteratorEnvironment;
 import org.apache.accumulo.core.iterators.Filter;
 import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.iterators.SortedMapIterator;
 import org.apache.accumulo.core.iterators.system.ColumnQualifierFilter;
 import org.apache.accumulo.core.iterators.system.VisibilityFilter;
-import org.apache.accumulo.core.iterators.user.AgeOffFilter;
-import org.apache.accumulo.core.iterators.user.ColumnAgeOffFilter;
-import org.apache.accumulo.core.iterators.user.NoVisFilter;
-import org.apache.accumulo.core.iterators.user.TimestampFilter;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.accumulo.core.security.ColumnVisibility;
 import org.apache.hadoop.io.Text;
@@ -48,12 +47,9 @@ import org.apache.hadoop.io.Text;
 public class FilterTest extends TestCase {
   
   private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>();
+  private static final Map<String,String> EMPTY_OPTS = new HashMap<String,String>();
   
   public class SimpleFilter extends Filter {
-    public SimpleFilter(SortedKeyValueIterator<Key,Value> iterator) {
-      super(iterator);
-    }
-    
     public boolean accept(Key k, Value v) {
       // System.out.println(k.getRow());
       if (k.getRow().toString().endsWith("0"))
@@ -63,10 +59,6 @@ public class FilterTest extends TestCase
   }
   
   public class SimpleFilter2 extends Filter {
-    public SimpleFilter2(SortedKeyValueIterator<Key,Value> iterator) {
-      super(iterator);
-    }
-    
     public boolean accept(Key k, Value v) {
       if (k.getColumnFamily().toString().equals("a"))
         return false;
@@ -96,31 +88,66 @@ public class FilterTest extends TestCase
     }
     assertTrue(tm.size() == 1000);
     
-    Filter filter1 = new SimpleFilter(new SortedMapIterator(tm));
+    Filter filter1 = new SimpleFilter();
+    filter1.init(new SortedMapIterator(tm), EMPTY_OPTS, null);
     filter1.seek(new Range(), EMPTY_COL_FAMS, false);
     int size = size(filter1);
     assertTrue("size = " + size, size == 100);
     
-    try {
-      Filter fi = new SimpleFilter(new SortedMapIterator(tm));
-      Key k = new Key(new Text("500"));
-      fi.seek(new Range(k, null), EMPTY_COL_FAMS, false);
-      TreeMap<Key,Value> tmOut = new TreeMap<Key,Value>();
-      while (fi.hasTop()) {
-        tmOut.put(fi.getTopKey(), fi.getTopValue());
-        fi.next();
-      }
-      assertTrue(tmOut.size() == 50);
-    } catch (IOException e) {
-      assertFalse(true);
+    Filter fi = new SimpleFilter();
+    fi.init(new SortedMapIterator(tm), EMPTY_OPTS, null);
+    Key k = new Key(new Text("500"));
+    fi.seek(new Range(k, null), EMPTY_COL_FAMS, false);
+    size = size(fi);
+    assertTrue("size = " + size, size == 50);
+    
+    filter1 = new SimpleFilter();
+    filter1.init(new SortedMapIterator(tm), EMPTY_OPTS, null);
+    Filter filter2 = new SimpleFilter2();
+    filter2.init(filter1, EMPTY_OPTS, null);
+    filter2.seek(new Range(), EMPTY_COL_FAMS, false);
+    size = size(filter2);
+    assertTrue("size = " + size, size == 0);
+  }
+  
+  public void test1neg() throws IOException {
+    Text colf = new Text("a");
+    Text colq = new Text("b");
+    Value dv = new Value();
+    TreeMap<Key,Value> tm = new TreeMap<Key,Value>();
+    
+    for (int i = 0; i < 1000; i++) {
+      Key k = new Key(new Text(String.format("%03d", i)), colf, colq);
+      tm.put(k, dv);
     }
+    assertTrue(tm.size() == 1000);
     
-    Filter filter2 = new SimpleFilter2(new SimpleFilter(new SortedMapIterator(tm)));
+    Filter filter1 = new SimpleFilter();
+    
+    IteratorSetting is = new IteratorSetting(1, SimpleFilter.class);
+    Filter.setNegate(is, true);
+    
+    filter1.init(new SortedMapIterator(tm), is.getProperties(), null);
+    filter1.seek(new Range(), EMPTY_COL_FAMS, false);
+    int size = size(filter1);
+    assertTrue("size = " + size, size == 900);
+    
+    Filter fi = new SimpleFilter();
+    fi.init(new SortedMapIterator(tm), is.getProperties(), null);
+    Key k = new Key(new Text("500"));
+    fi.seek(new Range(k, null), EMPTY_COL_FAMS, false);
+    size = size(fi);
+    assertTrue("size = " + size, size == 450);
+    
+    filter1 = new SimpleFilter();
+    filter1.init(new SortedMapIterator(tm), EMPTY_OPTS, null);
+    Filter filter2 = new SimpleFilter2();
+    filter2.init(filter1, is.getProperties(), null);
     filter2.seek(new Range(), EMPTY_COL_FAMS, false);
     size = size(filter2);
-    assertTrue("tmOut wasn't empty " + size, size == 0);
+    assertTrue("size = " + size, size == 100);
   }
-  
+
   public void test2() throws IOException {
     Text colf = new Text("a");
     Text colq = new Text("b");
@@ -134,7 +161,11 @@ public class FilterTest extends TestCase
     }
     assertTrue(tm.size() == 1000);
     
-    AgeOffFilter a = new AgeOffFilter(new SortedMapIterator(tm), 101, 1001);
+    AgeOffFilter a = new AgeOffFilter();
+    IteratorSetting is = new IteratorSetting(1, AgeOffFilter.class);
+    AgeOffFilter.setTTL(is, 101l);
+    AgeOffFilter.setCurrentTime(is, 1001l);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 100);
   }
@@ -144,8 +175,8 @@ public class FilterTest extends TestCase
     Text colq = new Text("b");
     Value dv = new Value();
     TreeMap<Key,Value> tm = new TreeMap<Key,Value>();
-    HashMap<String,String> options = new HashMap<String,String>();
-    options.put("a", "901");
+    IteratorSetting is = new IteratorSetting(1, ColumnAgeOffFilter.class);
+    ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("a"), 901l);
     long ts = System.currentTimeMillis();
     
     for (long i = 0; i < 1000; i++) {
@@ -154,17 +185,23 @@ public class FilterTest extends TestCase
     }
     assertTrue(tm.size() == 1000);
     
-    ColumnAgeOffFilter a = new ColumnAgeOffFilter(new SortedMapIterator(tm), null, 0l);
-    a.init(new SortedMapIterator(tm), options, new DefaultIteratorEnvironment());
+    ColumnAgeOffFilter a = new ColumnAgeOffFilter();
+    a.init(new SortedMapIterator(tm), is.getProperties(), new DefaultIteratorEnvironment());
     a.overrideCurrentTime(ts);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 902);
     
-    options.put("a:b", "101");
-    a.init(new SortedMapIterator(tm), options, new DefaultIteratorEnvironment());
+    ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("a", "b"), 101l);
+    a.init(new SortedMapIterator(tm), is.getProperties(), new DefaultIteratorEnvironment());
     a.overrideCurrentTime(ts);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 102);
+    
+    ColumnAgeOffFilter.removeTTL(is, new IteratorSetting.Column("a", "b"));
+    a.init(new SortedMapIterator(tm), is.getProperties(), new DefaultIteratorEnvironment());
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 902);
   }
   
   public void test3() throws IOException {
@@ -275,7 +312,6 @@ public class FilterTest extends TestCase
     
     size = size(ncqf(tm, new Column("a".getBytes(), "x".getBytes(), null), new Column("b".getBytes(), null, null)));
     assertTrue(size == 3);
-    
   }
   
   public void testNoVisFilter() throws IOException {
@@ -287,7 +323,8 @@ public class FilterTest extends TestCase
     }
     assertTrue(tm.size() == 1000);
     
-    Filter filter = new NoVisFilter(new SortedMapIterator(tm));
+    Filter filter = new NoVisFilter();
+    filter.init(new SortedMapIterator(tm), EMPTY_OPTS, null);
     filter.seek(new Range(), EMPTY_COL_FAMS, false);
     int size = size(filter);
     assertTrue("size = " + size, size == 100);
@@ -306,19 +343,6 @@ public class FilterTest extends TestCase
     }
     assertTrue(tm.size() == 100);
     
-    TimestampFilter a = new TimestampFilter(new SortedMapIterator(tm), 11, true, 31, false);
-    a.seek(new Range(), EMPTY_COL_FAMS, false);
-    assertEquals(size(a), 20);
-    a = new TimestampFilter(new SortedMapIterator(tm), 11, true, 31, true);
-    a.seek(new Range(), EMPTY_COL_FAMS, false);
-    assertEquals(size(a), 21);
-    a = new TimestampFilter(new SortedMapIterator(tm), 11, false, 31, false);
-    a.seek(new Range(), EMPTY_COL_FAMS, false);
-    assertEquals(size(a), 19);
-    a = new TimestampFilter(new SortedMapIterator(tm), 11, false, 31, true);
-    a.seek(new Range(), EMPTY_COL_FAMS, false);
-    assertEquals(size(a), 20);
-    
     SimpleDateFormat dateParser = new SimpleDateFormat("yyyyMMddHHmmssz");
     long baseTime = dateParser.parse("19990101000000GMT").getTime();
     tm.clear();
@@ -328,27 +352,48 @@ public class FilterTest extends TestCase
       tm.put(k, dv);
     }
     assertTrue(tm.size() == 100);
-    a = new TimestampFilter();
-    TreeMap<String,String> opts = new TreeMap<String,String>();
-    opts.put(TimestampFilter.START, "19990101000011GMT");
-    opts.put(TimestampFilter.END, "19990101000031GMT");
-    a.init(new SortedMapIterator(tm), opts, null);
+    TimestampFilter a = new TimestampFilter();
+    IteratorSetting is = new IteratorSetting(1, TimestampFilter.class);
+    TimestampFilter.setRange(is, "19990101000011GMT", "19990101000031GMT");
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 21);
     
-    opts.put(TimestampFilter.END_INCL, "false");
-    a.init(new SortedMapIterator(tm), opts, null);
+    TimestampFilter.setEnd(is, "19990101000031GMT", false);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 20);
     
-    opts.put(TimestampFilter.START_INCL, "false");
-    a.init(new SortedMapIterator(tm), opts, null);
+    TimestampFilter.setStart(is, "19990101000011GMT", false);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 19);
     
-    opts.put(TimestampFilter.END_INCL, "true");
-    a.init(new SortedMapIterator(tm), opts, null);
+    TimestampFilter.setEnd(is, "19990101000031GMT", true);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
     a.seek(new Range(), EMPTY_COL_FAMS, false);
     assertEquals(size(a), 20);
+    
+    is.clearOptions();
+    TimestampFilter.setStart(is, "19990101000011GMT", true);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 89);
+    
+    TimestampFilter.setStart(is, "19990101000011GMT", false);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 88);
+    
+    is.clearOptions();
+    TimestampFilter.setEnd(is, "19990101000031GMT", true);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 32);
+    
+    TimestampFilter.setEnd(is, "19990101000031GMT", false);
+    a.init(new SortedMapIterator(tm), is.getProperties(), null);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 31);
   }
 }

Copied: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/LargeRowFilterTest.java (from r1204997, incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/LargeRowFilterTest.java)
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/LargeRowFilterTest.java?p2=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/LargeRowFilterTest.java&p1=incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/LargeRowFilterTest.java&r1=1204997&r2=1207529&rev=1207529&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/LargeRowFilterTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/LargeRowFilterTest.java Mon Nov 28 19:30:20 2011
@@ -14,27 +14,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.accumulo.core.iterators;
+package org.apache.accumulo.core.iterators.user;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.TreeMap;
 
+import junit.framework.TestCase;
+
+import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.data.ArrayByteSequence;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.PartialKey;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.iterators.SortedMapIterator;
 import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
+import org.apache.accumulo.core.iterators.RowDeletingIteratorTest;
+import org.apache.accumulo.core.iterators.SortedMapIterator;
 import org.apache.accumulo.core.iterators.system.ColumnFamilySkippingIterator;
-import org.apache.accumulo.core.iterators.user.LargeRowFilter;
 import org.apache.accumulo.core.util.LocalityGroupUtil;
 
-import junit.framework.TestCase;
-
 public class LargeRowFilterTest extends TestCase {
   
   private String genRow(int r) {
@@ -60,9 +60,9 @@ public class LargeRowFilterTest extends 
   private LargeRowFilter setupIterator(TreeMap<Key,Value> testData, int maxColumns, IteratorScope scope) throws IOException {
     SortedMapIterator smi = new SortedMapIterator(testData);
     LargeRowFilter lrfi = new LargeRowFilter();
-    HashMap<String,String> options = new HashMap<String,String>();
-    options.put(LargeRowFilter.MAX_COLUMNS, "" + maxColumns);
-    lrfi.init(new ColumnFamilySkippingIterator(smi), options, new RowDeletingIteratorTest.TestIE(scope, false));
+    IteratorSetting is = new IteratorSetting(1, LargeRowFilter.class);
+    LargeRowFilter.setMaxColumns(is, maxColumns);
+    lrfi.init(new ColumnFamilySkippingIterator(smi), is.getProperties(), new RowDeletingIteratorTest.TestIE(scope, false));
     return lrfi;
   }