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/30 20:48:38 UTC
svn commit: r1208732 - in /incubator/accumulo/branches/1.4/src/core/src:
main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java
test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
Author: billie
Date: Wed Nov 30 19:48:38 2011
New Revision: 1208732
URL: http://svn.apache.org/viewvc?rev=1208732&view=rev
Log:
ACCUMULO-167 added new convenience methods for configuring TimestampFilter
Modified:
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/iterators/user/FilterTest.java
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=1208732&r1=1208731&r2=1208732&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 Wed Nov 30 19:48:38 2011
@@ -18,7 +18,9 @@ package org.apache.accumulo.core.iterato
import java.io.IOException;
import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.Map;
+import java.util.TimeZone;
import org.apache.accumulo.core.client.IteratorSetting;
import org.apache.accumulo.core.data.Key;
@@ -31,7 +33,13 @@ import org.apache.accumulo.core.iterator
* A Filter that matches entries whose timestamps fall within a range.
*/
public class TimestampFilter extends Filter {
- private final SimpleDateFormat dateParser = new SimpleDateFormat("yyyyMMddHHmmssz");
+ private final SimpleDateFormat dateParser = initDateParser();
+
+ private static SimpleDateFormat initDateParser() {
+ SimpleDateFormat dateParser = new SimpleDateFormat("yyyyMMddHHmmssz");
+ dateParser.setTimeZone(TimeZone.getTimeZone("GMT"));
+ return dateParser;
+ }
public static final String START = "start";
public static final String START_INCL = "startInclusive";
@@ -87,7 +95,7 @@ public class TimestampFilter extends Fil
hasEnd = true;
if (!hasStart && !hasEnd)
throw new IllegalArgumentException("must have either start or end for " + TimestampFilter.class.getName());
-
+
try {
if (hasStart)
start = dateParser.parse(options.get(START)).getTime();
@@ -199,4 +207,69 @@ public class TimestampFilter extends Fil
is.addOption(END, end);
is.addOption(END_INCL, Boolean.toString(endInclusive));
}
+
+ /**
+ * 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
+ * @param end
+ * the end timestamp, inclusive
+ */
+ public static void setRange(IteratorSetting is, long start, long 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
+ * @param startInclusive
+ * boolean indicating whether the start is inclusive
+ * @param end
+ * the end timestamp
+ * @param endInclusive
+ * boolean indicating whether the end is inclusive
+ */
+ public static void setRange(IteratorSetting is, long start, boolean startInclusive, long 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
+ * @param startInclusive
+ * boolean indicating whether the start is inclusive
+ */
+ public static void setStart(IteratorSetting is, long start, boolean startInclusive) {
+ SimpleDateFormat dateParser = initDateParser();
+ is.addOption(START, dateParser.format(new Date(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
+ * @param endInclusive
+ * boolean indicating whether the end is inclusive
+ */
+ public static void setEnd(IteratorSetting is, long end, boolean endInclusive) {
+ SimpleDateFormat dateParser = initDateParser();
+ is.addOption(END, dateParser.format(new Date(end)));
+ is.addOption(END_INCL, Boolean.toString(endInclusive));
+ }
}
Modified: incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/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?rev=1208732&r1=1208731&r2=1208732&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java (original)
+++ incubator/accumulo/branches/1.4/src/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java Wed Nov 30 19:48:38 2011
@@ -147,7 +147,7 @@ public class FilterTest extends TestCase
size = size(filter2);
assertTrue("size = " + size, size == 100);
}
-
+
public void test2() throws IOException {
Text colf = new Text("a");
Text colq = new Text("b");
@@ -354,7 +354,11 @@ public class FilterTest extends TestCase
assertTrue(tm.size() == 100);
TimestampFilter a = new TimestampFilter();
IteratorSetting is = new IteratorSetting(1, TimestampFilter.class);
- TimestampFilter.setRange(is, "19990101000011GMT", "19990101000031GMT");
+ TimestampFilter.setRange(is, "19990101010011GMT+01:00", "19990101010031GMT+01:00");
+ a.init(new SortedMapIterator(tm), is.getProperties(), null);
+ a.seek(new Range(), EMPTY_COL_FAMS, false);
+ assertEquals(size(a), 21);
+ TimestampFilter.setRange(is, baseTime + 11000, baseTime + 31000);
a.init(new SortedMapIterator(tm), is.getProperties(), null);
a.seek(new Range(), EMPTY_COL_FAMS, false);
assertEquals(size(a), 21);