You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apex.apache.org by ch...@apache.org on 2016/09/08 10:55:31 UTC

[1/2] apex-malhar git commit: APEXMALHAR-2176 expressionFunctions for FilterOperator

Repository: apex-malhar
Updated Branches:
  refs/heads/master a5ffae6fb -> 99f89731b


APEXMALHAR-2176 expressionFunctions for FilterOperator

1. added setExpressionFunctionsItem method

2. incorporating review comments.


Project: http://git-wip-us.apache.org/repos/asf/apex-malhar/repo
Commit: http://git-wip-us.apache.org/repos/asf/apex-malhar/commit/54c847a8
Tree: http://git-wip-us.apache.org/repos/asf/apex-malhar/tree/54c847a8
Diff: http://git-wip-us.apache.org/repos/asf/apex-malhar/diff/54c847a8

Branch: refs/heads/master
Commit: 54c847a84b792fb8f48e778ce625882fc19300a5
Parents: 2e47b4c
Author: yogidevendra <yo...@apache.org>
Authored: Thu Aug 4 20:01:11 2016 +0530
Committer: yogidevendra <yo...@apache.org>
Committed: Wed Aug 31 17:03:39 2016 +0530

----------------------------------------------------------------------
 .../datatorrent/lib/filter/FilterOperator.java  | 50 +++++++++++++++-----
 .../com/datatorrent/lib/filter/FilterTest.java  | 27 +++++++++--
 2 files changed, 60 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/apex-malhar/blob/54c847a8/library/src/main/java/com/datatorrent/lib/filter/FilterOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/filter/FilterOperator.java b/library/src/main/java/com/datatorrent/lib/filter/FilterOperator.java
index 8d61d00..3bf637c 100644
--- a/library/src/main/java/com/datatorrent/lib/filter/FilterOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/filter/FilterOperator.java
@@ -19,7 +19,8 @@
 
 package com.datatorrent.lib.filter;
 
-import java.util.LinkedList;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.slf4j.Logger;
@@ -27,6 +28,8 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.hadoop.classification.InterfaceStability;
 
+import com.google.common.annotations.VisibleForTesting;
+
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.PortContext;
@@ -59,7 +62,8 @@ import com.datatorrent.lib.util.PojoUtils;
 public class FilterOperator extends BaseOperator implements Operator.ActivationListener
 {
   private String condition;
-  private List<String> expressionFunctions = new LinkedList<>();
+  private List<String> expressionFunctions;
+  private List<String> additionalExpressionFunctions = new ArrayList<>();
 
   private transient Class<?> inClazz = null;
   private transient Expression<Boolean> expr = null;
@@ -81,11 +85,9 @@ public class FilterOperator extends BaseOperator implements Operator.ActivationL
 
   public FilterOperator()
   {
-    expressionFunctions.add("java.lang.Math.*");
-    expressionFunctions.add("org.apache.commons.lang3.StringUtils.*");
-    expressionFunctions.add("org.apache.commons.lang3.StringEscapeUtils.*");
-    expressionFunctions.add("org.apache.commons.lang3.time.DurationFormatUtils.*");
-    expressionFunctions.add("org.apache.commons.lang3.time.DateFormatUtils.*");
+    expressionFunctions = new ArrayList<>(Arrays.asList(new String[] {"java.lang.Math.*",
+        "org.apache.commons.lang3.StringUtils.*", "org.apache.commons.lang3.StringEscapeUtils.*",
+        "org.apache.commons.lang3.time.DurationFormatUtils.*", "org.apache.commons.lang3.time.DateFormatUtils.*" }));
   }
 
   @InputPortFieldAnnotation(schemaRequired = true)
@@ -127,6 +129,11 @@ public class FilterOperator extends BaseOperator implements Operator.ActivationL
   protected void createExpression()
   {
     logger.info("Creating an expression for condition {}", condition);
+    for (String expression : additionalExpressionFunctions) {
+      if (expression != null) {
+        expressionFunctions.add(expression);
+      }
+    }
     expr = PojoUtils.createExpression(inClazz, condition, Boolean.class,
         expressionFunctions.toArray(new String[expressionFunctions.size()]));
   }
@@ -185,13 +192,14 @@ public class FilterOperator extends BaseOperator implements Operator.ActivationL
 
   /**
    * Returns the list of expression function which would be made available to
-   * expression to use.
+   * expression to use. This is in addition to default expression functions
+   * added by the operator
    *
    * @return List of functions available in expression.
    */
-  public List<String> getExpressionFunctions()
+  public List<String> getAdditionalExpressionFunctions()
   {
-    return expressionFunctions;
+    return additionalExpressionFunctions;
   }
 
   /**
@@ -199,15 +207,31 @@ public class FilterOperator extends BaseOperator implements Operator.ActivationL
    * to expression to use.
    * For ex. org.apache.apex.test1.Test would mean that "Test" method will be
    * available in the expression to be used directly.
+   * This is in addition to default expression functions added by the operator.
    * This is an optional property. See constructor to see defaults that are included.
    *
-   * @param expressionFunctions List of qualified class/method that needs to be
+   * @param additionalExpressionFunctions List of qualified class/method that needs to be
    *                            imported to expression.
    */
-  public void setExpressionFunctions(List<String> expressionFunctions)
+  public void setAdditionalExpressionFunctions(List<String> additionalExpressionFunctions)
   {
-    this.expressionFunctions = expressionFunctions;
+    this.additionalExpressionFunctions = additionalExpressionFunctions;
   }
 
+  public void setOptionalExpressionFunctionsItem(int index, String value)
+  {
+    final int need = index - additionalExpressionFunctions.size() + 1;
+    for (int i = 0; i < need; i++) {
+      additionalExpressionFunctions.add(null);
+    }
+    additionalExpressionFunctions.set(index, value);
+  }
+
+  @VisibleForTesting
+  List<String> getExpressionFunctions()
+  {
+    return expressionFunctions;
+  }
+  
   private static final Logger logger = LoggerFactory.getLogger(FilterOperator.class);
 }

http://git-wip-us.apache.org/repos/asf/apex-malhar/blob/54c847a8/library/src/test/java/com/datatorrent/lib/filter/FilterTest.java
----------------------------------------------------------------------
diff --git a/library/src/test/java/com/datatorrent/lib/filter/FilterTest.java b/library/src/test/java/com/datatorrent/lib/filter/FilterTest.java
index ba32942..1fe6484 100644
--- a/library/src/test/java/com/datatorrent/lib/filter/FilterTest.java
+++ b/library/src/test/java/com/datatorrent/lib/filter/FilterTest.java
@@ -19,8 +19,10 @@
 
 package com.datatorrent.lib.filter;
 
+import java.util.Arrays;
+
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 import com.datatorrent.api.Attribute;
@@ -173,9 +175,26 @@ public class FilterTest
 
     clearFilterOperator();
   }
-
-  @BeforeClass
-  public static void setup()
+  
+  @Test
+  public void testOptionalExpressionFunctions()
+  {
+    filter.setAdditionalExpressionFunctions(Arrays.asList(new String[] {"org.apache.commons.lang3.BooleanUtils.*"}));
+    prepareFilterOperator(DummyPublicPOJO.class, "({$}.val == 1)");
+    Assert.assertEquals(6, filter.getExpressionFunctions().size());
+  }
+  
+  @Test
+  public void testSetOptionalExpressionFunctionsItem()
+  {
+    filter.setOptionalExpressionFunctionsItem(10,"org.apache.commons.lang3.BooleanUtils.*");
+    prepareFilterOperator(DummyPublicPOJO.class, "({$}.val == 1)");
+    Assert.assertEquals(6, filter.getExpressionFunctions().size());
+  }
+  
+  
+  @Before
+  public void setup()
   {
     data = new DummyPrivatePOJO();
     pdata = new DummyPublicPOJO();


[2/2] apex-malhar git commit: Merge branch 'APEXMALHAR-2176-filter-expressionFunctions' of https://github.com/yogidevendra/apex-malhar

Posted by ch...@apache.org.
Merge branch 'APEXMALHAR-2176-filter-expressionFunctions' of https://github.com/yogidevendra/apex-malhar


Project: http://git-wip-us.apache.org/repos/asf/apex-malhar/repo
Commit: http://git-wip-us.apache.org/repos/asf/apex-malhar/commit/99f89731
Tree: http://git-wip-us.apache.org/repos/asf/apex-malhar/tree/99f89731
Diff: http://git-wip-us.apache.org/repos/asf/apex-malhar/diff/99f89731

Branch: refs/heads/master
Commit: 99f89731b9a40c573dfc4cc607599a5c68b2f5d4
Parents: a5ffae6 54c847a
Author: Chinmay Kolhatkar <ch...@datatorrent.com>
Authored: Thu Sep 8 16:24:12 2016 +0530
Committer: Chinmay Kolhatkar <ch...@datatorrent.com>
Committed: Thu Sep 8 16:24:12 2016 +0530

----------------------------------------------------------------------
 .../datatorrent/lib/filter/FilterOperator.java  | 50 +++++++++++++++-----
 .../com/datatorrent/lib/filter/FilterTest.java  | 27 +++++++++--
 2 files changed, 60 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/apex-malhar/blob/99f89731/library/src/main/java/com/datatorrent/lib/filter/FilterOperator.java
----------------------------------------------------------------------