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 2015/09/10 00:31:51 UTC

[03/50] [abbrv] incubator-apex-malhar git commit: Cleaned up properties descriptions Renamed some properties Cleaned up categories Cleaned up tags Renamed some classes to improve clarity

Cleaned up properties descriptions
Renamed some properties
Cleaned up categories
Cleaned up tags
Renamed some classes to improve clarity

Conflicts:
	contrib/src/main/java/com/datatorrent/contrib/couchdb/CouchDBPOJOOutputOperator.java
	contrib/src/main/java/com/datatorrent/contrib/memsql/MemsqlPOJOInputOperator.java
	library/src/main/java/com/datatorrent/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java


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

Branch: refs/heads/master
Commit: dd15161de741bd1d2fbea50c972954fbbb098d24
Parents: 56de133
Author: Timothy Farkas <ti...@datatorrent.com>
Authored: Mon Jul 27 14:53:12 2015 -0700
Committer: thomas <th...@datatorrent.com>
Committed: Mon Jul 27 19:50:31 2015 -0700

----------------------------------------------------------------------
 .../apachelog/ApacheLogInputGenerator.java      |   5 +-
 .../couchdb/CouchDBPOJOOutputOperator.java      |   9 +-
 .../couchdb/MapBasedCouchDbOutputOperator.java  |   4 +-
 .../contrib/memsql/MemsqlPOJOInputOperator.java |  85 +++++++----
 .../datatorrent/contrib/ruby/RubyOperator.java  |   4 +-
 .../memsql/AbstractMemsqlInputOperatorTest.java |   4 +-
 .../datatorrent/lib/algo/AllAfterMatchMap.java  |   2 +-
 .../com/datatorrent/lib/algo/BottomNMap.java    |   7 +-
 .../datatorrent/lib/algo/BottomNUniqueMap.java  |   7 +-
 .../lib/algo/CompareExceptCountMap.java         |   4 +-
 .../java/com/datatorrent/lib/algo/Distinct.java |   2 +-
 .../com/datatorrent/lib/algo/DistinctMap.java   |   4 +-
 .../com/datatorrent/lib/algo/FilterKeyVals.java |   6 +-
 .../com/datatorrent/lib/algo/FilterKeysMap.java |  24 +++-
 .../com/datatorrent/lib/algo/FilterValues.java  |  28 +++-
 .../java/com/datatorrent/lib/algo/FirstN.java   |   4 +-
 .../com/datatorrent/lib/algo/InsertSort.java    |   4 +-
 .../datatorrent/lib/algo/InsertSortDesc.java    |   4 +-
 .../com/datatorrent/lib/algo/InvertIndex.java   |   4 +-
 .../datatorrent/lib/algo/InvertIndexArray.java  |   4 +-
 .../com/datatorrent/lib/algo/LastMatchMap.java  |   4 +-
 .../datatorrent/lib/algo/LeastFrequentKey.java  | 137 ------------------
 .../lib/algo/LeastFrequentKeyMap.java           |   4 +-
 .../lib/algo/LeastFrequentKeyValueMap.java      |   4 +-
 .../lib/algo/LeastFrequentValue.java            | 137 ++++++++++++++++++
 .../com/datatorrent/lib/algo/MatchAllMap.java   |   2 +-
 .../com/datatorrent/lib/algo/MatchAnyMap.java   |   2 +-
 .../java/com/datatorrent/lib/algo/MatchMap.java |  11 ++
 .../datatorrent/lib/algo/MergeSortNumber.java   |   2 +-
 .../datatorrent/lib/algo/MostFrequentKey.java   | 140 -------------------
 .../lib/algo/MostFrequentKeyMap.java            |   2 +-
 .../lib/algo/MostFrequentKeyValueMap.java       |   2 +-
 .../datatorrent/lib/algo/MostFrequentValue.java | 140 +++++++++++++++++++
 .../java/com/datatorrent/lib/algo/TopN.java     |   4 +-
 .../com/datatorrent/lib/algo/TopNUnique.java    |   6 +-
 .../com/datatorrent/lib/algo/UniqueCounter.java |  17 ++-
 .../snapshot/AppDataSnapshotServerPOJO.java     |   6 +-
 .../ByteArrayToStringConverterOperator.java     |   3 +
 .../MapToKeyHashValuePairConverter.java         |  34 ++---
 .../converter/MapToKeyValuePairConverter.java   |  17 +--
 .../StringValueToNumberConverterForMap.java     |   7 +-
 .../lib/db/jdbc/AbstractJdbcInputOperator.java  |   9 +-
 .../lib/io/AbstractHttpInputOperator.java       |  21 ++-
 .../datatorrent/lib/io/HttpGetMapOperator.java  |   2 +-
 .../lib/io/HttpJsonChunksInputOperator.java     |   2 +-
 .../lib/io/HttpLinesInputOperator.java          |   2 +-
 .../lib/io/PubSubWebSocketInputOperator.java    |  10 +-
 .../lib/io/PubSubWebSocketOutputOperator.java   |  12 +-
 .../lib/io/SimpleSinglePortInputOperator.java   |   3 +-
 .../lib/io/WebSocketInputOperator.java          |   4 +-
 .../lib/io/WebSocketOutputOperator.java         |   6 +-
 .../com/datatorrent/lib/io/fs/FileSplitter.java |  17 ++-
 .../lib/io/fs/TailFsInputOperator.java          |   7 +-
 .../lib/script/JavaScriptOperator.java          |   2 +-
 .../datatorrent/lib/util/BaseLineTokenizer.java |   4 +-
 .../datatorrent/lib/util/BaseMatchOperator.java |  50 ++++---
 .../lib/util/JavaScriptFilterOperator.java      |   6 +-
 .../lib/algo/LeastFrequentKeyTest.java          |   4 +-
 .../lib/algo/MostFrequentKeyTest.java           |   4 +-
 59 files changed, 596 insertions(+), 465 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/contrib/src/main/java/com/datatorrent/contrib/apachelog/ApacheLogInputGenerator.java
----------------------------------------------------------------------
diff --git a/contrib/src/main/java/com/datatorrent/contrib/apachelog/ApacheLogInputGenerator.java b/contrib/src/main/java/com/datatorrent/contrib/apachelog/ApacheLogInputGenerator.java
index ec1c807..6b3caea 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/apachelog/ApacheLogInputGenerator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/apachelog/ApacheLogInputGenerator.java
@@ -29,7 +29,8 @@ import org.slf4j.LoggerFactory;
  * An implementation of input operator and activation listener that simulates the apache logs.
  * <p>
  * @displayName Apache Log Input Generator
- * @tags input operator, log
+ * @category Test Bench
+ * @tags apache log, generator
  * @since 0.9.4
  */
 public class ApacheLogInputGenerator implements InputOperator, Operator.ActivationListener<OperatorContext>
@@ -340,7 +341,7 @@ public class ApacheLogInputGenerator implements InputOperator, Operator.Activati
   {
     this.refererFile = refererFile;
   }
-  
+
   /**
    * Output port that emits a string into DAG.
    */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/contrib/src/main/java/com/datatorrent/contrib/couchdb/CouchDBPOJOOutputOperator.java
----------------------------------------------------------------------
diff --git a/contrib/src/main/java/com/datatorrent/contrib/couchdb/CouchDBPOJOOutputOperator.java b/contrib/src/main/java/com/datatorrent/contrib/couchdb/CouchDBPOJOOutputOperator.java
index afa500a..f0c3e4c 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/couchdb/CouchDBPOJOOutputOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/couchdb/CouchDBPOJOOutputOperator.java
@@ -36,14 +36,19 @@ public class CouchDBPOJOOutputOperator extends AbstractCouchDBOutputOperator<Obj
   @NotNull
   private String expressionForDocId;
 
-  /*
-   * An Expression to extract value of document Id from input POJO.
+  /**
+   * Gets the getter expression for the document Id.
+   * @return The document Id.
    */
   public String getExpressionForDocId()
   {
     return expressionForDocId;
   }
 
+  /**
+   * An Expression to extract value of document Id from an input POJO.
+   * @param expressionForDocId The getter expression for the document Id.
+   */
   public void setExpressionForDocId(String expressionForDocId)
   {
     this.expressionForDocId = expressionForDocId;

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/contrib/src/main/java/com/datatorrent/contrib/couchdb/MapBasedCouchDbOutputOperator.java
----------------------------------------------------------------------
diff --git a/contrib/src/main/java/com/datatorrent/contrib/couchdb/MapBasedCouchDbOutputOperator.java b/contrib/src/main/java/com/datatorrent/contrib/couchdb/MapBasedCouchDbOutputOperator.java
index e8cf001..c2cfce1 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/couchdb/MapBasedCouchDbOutputOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/couchdb/MapBasedCouchDbOutputOperator.java
@@ -21,8 +21,8 @@ import java.util.Map;
  * Implementation of {@link AbstractCouchDBOutputOperator} that saves a Map in the couch database. <br/>
  * <p>
  * @displayName Map Based CouchDb Output Operator
- * @category Database
- * @tags output operator
+ * @category Output
+ * @tags couchDb, database, nosql
  * @since 0.3.5
  */
 public class MapBasedCouchDbOutputOperator extends AbstractCouchDBOutputOperator<Map<Object, Object>>

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/contrib/src/main/java/com/datatorrent/contrib/memsql/MemsqlPOJOInputOperator.java
----------------------------------------------------------------------
diff --git a/contrib/src/main/java/com/datatorrent/contrib/memsql/MemsqlPOJOInputOperator.java b/contrib/src/main/java/com/datatorrent/contrib/memsql/MemsqlPOJOInputOperator.java
index 64d0227..6022c3d 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/memsql/MemsqlPOJOInputOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/memsql/MemsqlPOJOInputOperator.java
@@ -38,10 +38,11 @@ import org.slf4j.LoggerFactory;
 /**
  * <p>
  * MemsqlPOJOInputOperator</p>
+ *
  * A Generic implementation of AbstractMemsqlInputOperator which gets field values from memsql database columns and sets in a POJO.
  * User should also provide a query to fetch the rows from database. This query is run continuously to fetch new data and
  * hence should be parameterized. The parameters that can be used are %t for table name, %p for primary key, %s for start value
- * and %l for limit. The start value is continuously updated with the value of a primary key column of the last row from
+ * and %l for batchSize. The start value is continuously updated with the value of a primary key column of the last row from
  * the result of the previous run of the query. The primary key column is also identified by the user using a property.
  *
  * @displayName Memsql Input Operator
@@ -51,7 +52,7 @@ import org.slf4j.LoggerFactory;
 public class MemsqlPOJOInputOperator extends AbstractMemsqlInputOperator<Object>
 {
   @Min(1)
-  private int limit = 10;
+  private int batchSize = 10;
   @Min(0)
   private Number startRow = 0;
   @NotNull
@@ -77,60 +78,73 @@ public class MemsqlPOJOInputOperator extends AbstractMemsqlInputOperator<Object>
   private transient Class<?> objectClass = null;
   private transient Class<?> primaryKeyColumnType;
 
-  /*
-   * Set of columns specified by User in case POJO needs to contain fields specific to these columns only.
-   * User should specify columns in same order as expressions for fields.
-   */
   public List<String> getColumns()
   {
     return columns;
   }
 
+  /**
+   * The columns specified by user in case POJO needs to contain fields specific to these columns only.
+   * User should specify columns in same order as expressions for fields.
+   * @param columns The columns.
+   */
   public void setColumns(List<String> columns)
   {
     this.columns = columns;
   }
 
-  /*
-   * Primary Key Column of table.
-   * Gets the primary key column of Memsql table.
+  /**
+   * Gets the primary key column of the input table.
+   * @return The primary key column of the input table.
    */
   public String getPrimaryKeyColumn()
   {
     return primaryKeyColumn;
   }
 
+  /**
+   * The primary key column of the input table.
+   * @param primaryKeyColumn The primary key column of the input table.
+   */
   public void setPrimaryKeyColumn(String primaryKeyColumn)
   {
     this.primaryKeyColumn = primaryKeyColumn;
   }
 
-  /*
-   * User has the option to specify the start row.
+  /**
+   * The row to start reading from the input table at.
+   * @return The row to start reading from the input table at.
    */
   public Number getStartRow()
   {
     return startRow;
   }
 
+  /**
+   * Sets the row to start reading form the input table at.
+   * @param startRow The row to start reading from the input table at.
+   */
   public void setStartRow(Number startRow)
   {
     this.startRow = startRow;
   }
 
-  public void setLimit(int limit)
+  /**
+   * Sets the batch size.
+   * @param batchSize The batch size.
+   */
+  public void setBatchSize(int batchSize)
   {
-    this.limit = limit;
+    this.batchSize = batchSize;
   }
 
-  /*
+  /**
    * Records are read in batches of this size.
-   * Gets the batch size.
    * @return batchsize
    */
-  public int getLimit()
+  public int getBatchSize()
   {
-    return limit;
+    return batchSize;
   }
 
   /*
@@ -152,43 +166,56 @@ public class MemsqlPOJOInputOperator extends AbstractMemsqlInputOperator<Object>
     this.outputClass = outputClass;
   }
 
-  /*
-   * Parameterized query with parameters such as %t for table name , %p for primary key, %s for start value and %l for limit.
-   * Example of retrieveQuery:
-   * select * from %t where %p > %s limit %l;
+  /**
+   * Gets the query used to extract data from memsql.
+   * @return The query.
    */
   public String getQuery()
   {
     return query;
   }
 
+  /**
+   * Parameterized query with parameters such as %t for table name , %p for primary key, %s for start value and %l for batchSize.
+   * Example of retrieveQuery:
+   * select * from %t where %p > %s batchSize %l;
+   */
   public void setQuery(String query)
   {
     this.query = query.replace("%t", tablename);
   }
 
-  /*
-   * An ArrayList of Java expressions that will yield the memsql column value to be set in output object.
-   * Each expression corresponds to one column in the Memsql table.
+  /**
+   * Gets the getter expressions for extracting data from POJOs.
+   * @return The getter expressions for extracting data from pojos.
    */
   public List<String> getExpressions()
   {
     return expressions;
   }
 
+  /**
+   * An ArrayList of Java expressions that will yield the memsql column value to be set in output object.
+   * Each expression corresponds to one column in the Memsql table.
+   */
   public void setExpressions(List<String> expressions)
   {
     this.expressions = expressions;
   }
 
-  /*
-   * Tablename in memsql.
+  /**
+   * Gets the name of the table that is read from memsql.
+   * @return The name of the table that is read from memsql.
    */
   public String getTablename()
   {
     return tablename;
   }
 
+  /**
+   * The table name in memsql to read data from.
+   * @param tablename The table name.
+   */
   public void setTablename(String tablename)
   {
     this.tablename = tablename;
@@ -246,7 +273,7 @@ public class MemsqlPOJOInputOperator extends AbstractMemsqlInputOperator<Object>
         query = query.replace("%p", primaryKeyColumn);
       }
       if (query.contains("%l")) {
-        query = query.replace("%l", limit + "");
+        query = query.replace("%l", batchSize + "");
       }
 
       statement.close();
@@ -366,10 +393,10 @@ public class MemsqlPOJOInputOperator extends AbstractMemsqlInputOperator<Object>
     return obj;
   }
 
-  /*
+  /**
    * This method replaces the parameters in Query with actual values given by user.
    * Example of retrieveQuery:
-   * select * from %t where %p > %s limit %l;
+   * select * from %t where %p > %s batchSize %l;
    */
   @Override
   public String queryToRetrieveData()

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/contrib/src/main/java/com/datatorrent/contrib/ruby/RubyOperator.java
----------------------------------------------------------------------
diff --git a/contrib/src/main/java/com/datatorrent/contrib/ruby/RubyOperator.java b/contrib/src/main/java/com/datatorrent/contrib/ruby/RubyOperator.java
index 35427e0..d4bc916 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/ruby/RubyOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/ruby/RubyOperator.java
@@ -29,12 +29,12 @@ import com.datatorrent.lib.script.ScriptOperator;
  * <p>
  *
  * WARNING: EXPERIMENTAL USE ONLY!  This operator depends on jruby which has
- * a transitive dependency on an incompatible version of ASM that breaks 
+ * a transitive dependency on an incompatible version of ASM that breaks
  * webservice in stram.
  *
  * @displayName Ruby Operator
  * @category Scripting
- * @tags script operator, map, string
+ * @tags script, map, string
  * @since 1.0.4
  */
 public class RubyOperator extends ScriptOperator {

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/contrib/src/test/java/com/datatorrent/contrib/memsql/AbstractMemsqlInputOperatorTest.java
----------------------------------------------------------------------
diff --git a/contrib/src/test/java/com/datatorrent/contrib/memsql/AbstractMemsqlInputOperatorTest.java b/contrib/src/test/java/com/datatorrent/contrib/memsql/AbstractMemsqlInputOperatorTest.java
index abf2969..4cd92f6 100644
--- a/contrib/src/test/java/com/datatorrent/contrib/memsql/AbstractMemsqlInputOperatorTest.java
+++ b/contrib/src/test/java/com/datatorrent/contrib/memsql/AbstractMemsqlInputOperatorTest.java
@@ -181,7 +181,7 @@ public class AbstractMemsqlInputOperatorTest
     OperatorContextTestHelper.TestIdOperatorContext context = new OperatorContextTestHelper.TestIdOperatorContext(OPERATOR_ID, attributeMap);
     MemsqlPOJOInputOperator inputOperator = new MemsqlPOJOInputOperator();
     createStore((MemsqlStore)inputOperator.getStore(), true);
-    inputOperator.setLimit(10);
+    inputOperator.setBatchSize(10);
     inputOperator.setTablename(FQ_TABLE);
     inputOperator.setPrimaryKeyColumn(INDEX_COLUMN);
     ArrayList<String> expressions = new ArrayList<String>();
@@ -222,7 +222,7 @@ public class AbstractMemsqlInputOperatorTest
     inputOperator.setQuery("select * from " + FQ_TABLE + " where " + "%p " + ">= " + "%s" + " LIMIT " + "%l" +";");
     inputOperator.setStartRow(1);
 
-    inputOperator.setLimit(10);
+    inputOperator.setBatchSize(10);
     inputOperator.setup(context);
 
     inputOperator.beginWindow(0);

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/AllAfterMatchMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/AllAfterMatchMap.java b/library/src/main/java/com/datatorrent/lib/algo/AllAfterMatchMap.java
index fb109b7..aedc1e2 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/AllAfterMatchMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/AllAfterMatchMap.java
@@ -61,7 +61,7 @@ import com.datatorrent.lib.util.BaseMatchOperator;
  * </p>
  *
  * @displayName Emit All After Match (Number)
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, compare, numeric, key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/BottomNMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/BottomNMap.java b/library/src/main/java/com/datatorrent/lib/algo/BottomNMap.java
index f442a19..e04bd6b 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/BottomNMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/BottomNMap.java
@@ -49,7 +49,7 @@ import com.datatorrent.lib.util.AbstractBaseNNonUniqueOperatorMap;
  * </p>
  *
  * @displayName Bottom N
- * @category Algorithmic
+ * @category Stats and Aggregations
  * @tags filter, rank, key value
  *
  * @since 0.3.3
@@ -91,9 +91,10 @@ public class BottomNMap<K, V> extends AbstractBaseNNonUniqueOperatorMap<K, V>
   {
     bottom.emit(tuple);
   }
-  
+
   /**
-   * @param val Bottom N values to be returned
+   * Bottom N values to be returned.
+   * @param val Bottom N values to be returned.
    */
   @Override
   public void setN(int val)

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/BottomNUniqueMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/BottomNUniqueMap.java b/library/src/main/java/com/datatorrent/lib/algo/BottomNUniqueMap.java
index 96d45eb..bd8f1c0 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/BottomNUniqueMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/BottomNUniqueMap.java
@@ -44,7 +44,7 @@ import com.datatorrent.lib.util.AbstractBaseNUniqueOperatorMap;
  * </p>
  *
  * @displayName Bottom N Unique Map
- * @category Algorithmic
+ * @category Stats and Aggregations
  * @tags filter, rank, unique, key value
  *
  * @since 0.3.3
@@ -75,9 +75,10 @@ public class BottomNUniqueMap<K, V> extends AbstractBaseNUniqueOperatorMap<K, V>
   {
     bottom.emit(tuple);
   }
-  
+
   /**
-   * @param val Bottom N unique tuples
+   * Bottom N unique tuples.
+   * @param val Bottom N unique tuples.
    */
   @Override
   public void setN(int val)

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/CompareExceptCountMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/CompareExceptCountMap.java b/library/src/main/java/com/datatorrent/lib/algo/CompareExceptCountMap.java
index 30e8159..a609b05 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/CompareExceptCountMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/CompareExceptCountMap.java
@@ -53,8 +53,8 @@ import com.datatorrent.lib.util.UnifierSumNumber;
  * <br>
  * </p>
  *
- * @displayName Compare Match and No Match Count   
- * @category Algorithmic
+ * @displayName Compare Match and No Match Count
+ * @category Rules and Alerts
  * @tags count, key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/Distinct.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/Distinct.java b/library/src/main/java/com/datatorrent/lib/algo/Distinct.java
index 35a7c88..34e2757 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/Distinct.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/Distinct.java
@@ -47,7 +47,7 @@ import com.datatorrent.lib.util.BaseKeyOperator;
  * </p>
  *
  * @displayName Emit Distinct
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, unique
  *
  * @since 0.3.3

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/DistinctMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/DistinctMap.java b/library/src/main/java/com/datatorrent/lib/algo/DistinctMap.java
index 7629923..e7acc0f 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/DistinctMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/DistinctMap.java
@@ -44,8 +44,8 @@ import com.datatorrent.lib.util.UnifierHashMap;
  * <br>
  * </p>
  *
- * @displayName Emit Distinct Keyval Pairs
- * @category Algorithmic
+ * @displayName Distinct Key Value Merge
+ * @category Stream Manipulators
  * @tags filter, unique, key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/FilterKeyVals.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/FilterKeyVals.java b/library/src/main/java/com/datatorrent/lib/algo/FilterKeyVals.java
index 56c3306..f1319d1 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/FilterKeyVals.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/FilterKeyVals.java
@@ -57,7 +57,7 @@ import com.datatorrent.lib.util.BaseKeyOperator;
  * </p>
  *
  * @displayName Filter Keyval Pairs
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value
  *
  * @since 0.3.2
@@ -102,7 +102,7 @@ public class FilterKeyVals<K,V> extends BaseKeyOperator<K>
   private transient HashMap<K,V> entry = new HashMap<K,V>(1);
 
   /**
-   * getter function for parameter inverse
+   * Gets the inverse property.
    * @return inverse
    */
   public boolean getInverse() {
@@ -110,7 +110,7 @@ public class FilterKeyVals<K,V> extends BaseKeyOperator<K>
   }
 
   /**
-   * True means match; False means unmatched
+   * If true then only matches are emitted. If false then only non matches are emitted.
    * @param val
    */
   public void setInverse(boolean val) {

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/FilterKeysMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/FilterKeysMap.java b/library/src/main/java/com/datatorrent/lib/algo/FilterKeysMap.java
index 7596f07..7cd0f1f 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/FilterKeysMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/FilterKeysMap.java
@@ -52,7 +52,7 @@ import com.datatorrent.lib.util.UnifierHashMap;
  * </p>
  *
  * @displayName Filter Keyval Pairs By Key Generic
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value
  *
  * @since 0.3.2
@@ -113,7 +113,7 @@ public class FilterKeysMap<K,V> extends BaseKeyOperator<K>
   };
 
   /**
-   * getter function for parameter inverse
+   * If true then only matches are emitted. If false then only non matches are emitted.
    * @return inverse
    */
   public boolean getInverse() {
@@ -122,7 +122,7 @@ public class FilterKeysMap<K,V> extends BaseKeyOperator<K>
 
 
   /**
-   * True means match; False means unmatched
+   * Sets the inverse property. If true then only matches are emitted. If false then only non matches are emitted.
    * @param val
    */
   public void setInverse(boolean val) {
@@ -150,6 +150,24 @@ public class FilterKeysMap<K,V> extends BaseKeyOperator<K>
     }
   }
 
+  /**
+   * The keys to filter. The values in the map should be null.
+   * @param keys
+   */
+  public void setKeys(HashMap<K, V> keys)
+  {
+    this.keys = keys;
+  }
+
+  /**
+   * Gets the keys to filter.
+   * @return Returns a map containing the keys.
+   */
+  public HashMap<K, V> getKeys()
+  {
+    return keys;
+  }
+
   /*
    * Clears the filter list
    */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/FilterValues.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/FilterValues.java b/library/src/main/java/com/datatorrent/lib/algo/FilterValues.java
index 738d9a5..a8d96eb 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/FilterValues.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/FilterValues.java
@@ -48,7 +48,7 @@ import com.datatorrent.api.annotation.Stateless;
  * </p>
  *
  * @displayName Filter Values
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter
  *
  * @since 0.3.2
@@ -58,7 +58,7 @@ import com.datatorrent.api.annotation.Stateless;
 public class FilterValues<T> extends BaseOperator
 {
   /**
-   * The input port on which tuples are recieved.
+   * The input port on which tuples are received.
    */
   public final transient DefaultInputPort<T> data = new DefaultInputPort<T>()
   {
@@ -86,8 +86,7 @@ public class FilterValues<T> extends BaseOperator
   boolean inverse = false;
 
   /**
-   * getter function for parameter inverse
-   *
+   * Gets the inverse property.
    * @return inverse
    */
   public boolean getInverse()
@@ -96,7 +95,7 @@ public class FilterValues<T> extends BaseOperator
   }
 
   /**
-   * True means match; False means unmatched
+   * If true then only matches are emitted. If false then only non matches are emitted.
    * @param val
    */
   public void setInverse(boolean val)
@@ -131,6 +130,25 @@ public class FilterValues<T> extends BaseOperator
   }
 
   /**
+   * Gets the values to be filtered.
+   * @return The values to be filtered.
+   */
+  public HashMap<T, Object> getValues()
+  {
+    return values;
+  }
+
+  /**
+   * A map containing the values to be filtered. The values are set to be the keys in the map, and the
+   * values are set to be null.
+   * @param values The values to be filtered.
+   */
+  public void setValues(HashMap<T, Object> values)
+  {
+    this.values = values;
+  }
+
+  /**
    * Clears the filter
    */
   public void clearValues()

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/FirstN.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/FirstN.java b/library/src/main/java/com/datatorrent/lib/algo/FirstN.java
index 8677017..b0a502e 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/FirstN.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/FirstN.java
@@ -50,7 +50,7 @@ import com.datatorrent.lib.util.AbstractBaseNOperatorMap;
  * </p>
  *
  * @displayName First N Keyval Pairs Matching Key
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value
  *
  * @since 0.3.2
@@ -96,7 +96,7 @@ public class FirstN<K,V> extends AbstractBaseNOperatorMap<K, V>
   {
     keycount.clear();
   }
-  
+
   /**
    * First N number of KeyValue pairs for each Key.
    * @param val

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/InsertSort.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/InsertSort.java b/library/src/main/java/com/datatorrent/lib/algo/InsertSort.java
index aa306cd..9a84098 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/InsertSort.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/InsertSort.java
@@ -45,8 +45,8 @@ import com.datatorrent.lib.util.AbstractBaseSortOperator;
  * </p>
  *
  * @displayName Sort Ascending
- * @category Algorithmic
- * @tags rank
+ * @category Stream Manipulators
+ * @tags rank, sort
  *
  * @since 0.3.3
  */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/InsertSortDesc.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/InsertSortDesc.java b/library/src/main/java/com/datatorrent/lib/algo/InsertSortDesc.java
index ff908f3..cf8fc53 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/InsertSortDesc.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/InsertSortDesc.java
@@ -47,8 +47,8 @@ import java.util.PriorityQueue;
  * <br>
  * </p>
  * @displayName Sort Descending
- * @category Algorithmic
- * @tags rank
+ * @category Stream Manipulators
+ * @tags rank, sort
  *
  * @since 0.3.2
  */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/InvertIndex.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/InvertIndex.java b/library/src/main/java/com/datatorrent/lib/algo/InvertIndex.java
index 46bd87c..dbf542f 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/InvertIndex.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/InvertIndex.java
@@ -45,8 +45,8 @@ import com.datatorrent.lib.util.BaseKeyValueOperator;
  * <br>
  * </p>
  *
- * @displayName Invert Keyval Pairs
- * @category Algorithmic
+ * @displayName Invert Key Value Pairs
+ * @category Stream Manipulators
  * @tags key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/InvertIndexArray.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/InvertIndexArray.java b/library/src/main/java/com/datatorrent/lib/algo/InvertIndexArray.java
index 6e3ec0b..cb6fa23 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/InvertIndexArray.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/InvertIndexArray.java
@@ -44,8 +44,8 @@ import com.datatorrent.lib.util.BaseKeyValueOperator;
  * <br>
  * </p>
  *
- * @displayName Invert Keyval Pairs (Array)
- * @category Algorithmic
+ * @displayName Invert Key Value Pairs (Array)
+ * @category Stream Manipulators
  * @tags key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/LastMatchMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/LastMatchMap.java b/library/src/main/java/com/datatorrent/lib/algo/LastMatchMap.java
index dbe2045..4031697 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/LastMatchMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/LastMatchMap.java
@@ -26,7 +26,7 @@ import com.datatorrent.lib.util.BaseMatchOperator;
 
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
- * and comparing those values to a specified number.&nbsp;The last key value pair, in each window, to satisfy the comparison is emitted.
+ * and comparing those values to a specified value.&nbsp;The last key value pair, in each window, to satisfy the comparison is emitted.
  * <p>
  * A compare function is  operated on a tuple value sub-classed from Number based on the property "key", "value", and "cmp". Every tuple
  * is checked and the last one that passes the condition is send during end of window on port "last". The comparison is done by getting double
@@ -55,7 +55,7 @@ import com.datatorrent.lib.util.BaseMatchOperator;
  * </p>
  *
  * @displayName Emit Last Match (Number)
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value, numeric
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKey.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKey.java b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKey.java
deleted file mode 100644
index 3dfa68c..0000000
--- a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKey.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * Copyright (C) 2015 DataTorrent, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.datatorrent.lib.algo;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-
-import com.datatorrent.lib.util.AbstractBaseFrequentKey;
-
-/**
- * This operator filters the incoming stream of values by emitting the value or values (if there is a tie)
- * that occurred the fewest number of times within each window to the output port "list".&nbsp;
- * One of the values is emitted to the output port "least" at the end of each window.
- * <p>
- * Occurrences of each tuple is counted and at the end of window any of the least frequent tuple is emitted on output port 'least'
- * All keys with same least frequency value least are emitted on output port 'list'.<br>
- * This module is an end of window module<br>
- * In case of a tie any of the least key would be emitted. The list port would however have all the tied keys
- * <br>
- * <b>StateFull : Yes, </b> tuple are compared across application window(s). <br>
- * <b>Partitions : Yes, </b> least keys are unified on output port. <br>
- * <br>
- * <b>Ports</b>:<br>
- * <b>data</b>: expects K<br>
- * <b>least</b>: emits HashMap&lt;K,Integer&gt;(1), Where K is the least occurring key in the window.
- *               In case of tie any of the least key would be emitted<br>
- * <b>list</b>: emits ArrayList&lt;HashMap&lt;K,Integer&gt;(1)&gt, Where the list includes all the keys that are least frequent<br>
- * <br>
- * </p>
- *
- * @displayName Emit Least Frequent Value
- * @category Algorithmic
- * @tags filter, count
- *
- * @since 0.3.3
- */
-
-@OperatorAnnotation(partitionable = true)
-public class LeastFrequentKey<K> extends AbstractBaseFrequentKey<K>
-{
-  /**
-   * The input port on which tuples are received.
-   */
-  public final transient DefaultInputPort<K> data = new DefaultInputPort<K>()
-  {
-    /**
-     * Calls super.processTuple(tuple)
-     */
-    @Override
-    public void process(K tuple)
-    {
-      processTuple(tuple);
-    }
-  };
-
-  /**
-   * The output port on which one of the tuples,
-   * which occurred the least number of times,
-   * is emitted.
-   */
-  @OutputPortFieldAnnotation(optional=true)
-  public final transient DefaultOutputPort<HashMap<K, Integer>> least = new DefaultOutputPort<HashMap<K, Integer>>()
-  {
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    public Unifier<HashMap<K, Integer>> getUnifier()
-    {
-      return new LeastFrequentKeyUnifier<K>();
-    }
-  };
-
-  /**
-   * The output port on which all the tuples,
-   * which occurred the least number of times,
-   * is emitted.
-   */
-  @OutputPortFieldAnnotation(optional=true)
-  public final transient DefaultOutputPort<ArrayList<HashMap<K, Integer>>> list = new DefaultOutputPort<ArrayList<HashMap<K, Integer>>>()
-  {
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    public Unifier<ArrayList<HashMap<K, Integer>>> getUnifier()
-    {
-      return new LeastFrequentKeyArrayUnifier<K>();
-    }
-  };
-
-  /**
-   * Emits tuple on port "least"
-   * @param tuple
-   */
-  @Override
-  public void emitTuple(HashMap<K, Integer> tuple)
-  {
-    least.emit(tuple);
-  }
-
-  /**
-   * returns val1 < val2
-   * @param val1
-   * @param val2
-   * @return val1 < val2
-   */
-  @Override
-    public boolean compareCount(int val1, int val2)
-  {
-    return val1 < val2;
-  }
-
-  /**
-   * Emits tuple on port "list"
-   * @param tlist
-   */
-  @Override
-  public void emitList(ArrayList<HashMap<K, Integer>> tlist)
-  {
-    list.emit(tlist);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyMap.java b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyMap.java
index 0290d26..36e8e8e 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyMap.java
@@ -48,8 +48,8 @@ import com.datatorrent.lib.util.UnifierHashMapFrequent;
  * <br>
  * </p>
  *
- * @displayName Emit Least Frequent Key
- * @category Algorithmic
+ * @displayName Emit Least Frequent Tuple Key
+ * @category Rules and Alerts
  * @tags filter, key value, count
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyValueMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyValueMap.java b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyValueMap.java
index f8550ee..895c8df 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyValueMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentKeyValueMap.java
@@ -66,8 +66,8 @@ import com.datatorrent.lib.util.AbstractBaseFrequentKeyValueMap;
  * <br>
  * </p>
  *
- * @displayName Emit Lest Frequent Keyval Pair
- * @category Algorithmic
+ * @displayName Emit Least Frequent Keyval Pair
+ * @category Rules and Alerts
  * @tags filter, key value, count
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentValue.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentValue.java b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentValue.java
new file mode 100644
index 0000000..af68ead
--- /dev/null
+++ b/library/src/main/java/com/datatorrent/lib/algo/LeastFrequentValue.java
@@ -0,0 +1,137 @@
+/**
+ * Copyright (C) 2015 DataTorrent, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.datatorrent.lib.algo;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.annotation.OperatorAnnotation;
+import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
+
+import com.datatorrent.lib.util.AbstractBaseFrequentKey;
+
+/**
+ * This operator filters the incoming stream of values by emitting the value or values (if there is a tie)
+ * that occurred the fewest number of times within each window to the output port "list".&nbsp;
+ * One of the values is emitted to the output port "least" at the end of each window.
+ * <p>
+ * Occurrences of each tuple is counted and at the end of window any of the least frequent tuple is emitted on output port 'least'
+ * All keys with same least frequency value least are emitted on output port 'list'.<br>
+ * This module is an end of window module<br>
+ * In case of a tie any of the least key would be emitted. The list port would however have all the tied keys
+ * <br>
+ * <b>StateFull : Yes, </b> tuple are compared across application window(s). <br>
+ * <b>Partitions : Yes, </b> least keys are unified on output port. <br>
+ * <br>
+ * <b>Ports</b>:<br>
+ * <b>data</b>: expects K<br>
+ * <b>least</b>: emits HashMap&lt;K,Integer&gt;(1), Where K is the least occurring key in the window.
+ *               In case of tie any of the least key would be emitted<br>
+ * <b>list</b>: emits ArrayList&lt;HashMap&lt;K,Integer&gt;(1)&gt, Where the list includes all the keys that are least frequent<br>
+ * <br>
+ * </p>
+ *
+ * @displayName Emit Least Frequent Value
+ * @category Rules and Alerts
+ * @tags filter, count
+ *
+ * @since 0.3.3
+ */
+
+@OperatorAnnotation(partitionable = true)
+public class LeastFrequentValue<K> extends AbstractBaseFrequentKey<K>
+{
+  /**
+   * The input port on which tuples are received.
+   */
+  public final transient DefaultInputPort<K> data = new DefaultInputPort<K>()
+  {
+    /**
+     * Calls super.processTuple(tuple)
+     */
+    @Override
+    public void process(K tuple)
+    {
+      processTuple(tuple);
+    }
+  };
+
+  /**
+   * The output port on which one of the tuples,
+   * which occurred the least number of times,
+   * is emitted.
+   */
+  @OutputPortFieldAnnotation(optional=true)
+  public final transient DefaultOutputPort<HashMap<K, Integer>> least = new DefaultOutputPort<HashMap<K, Integer>>()
+  {
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Override
+    public Unifier<HashMap<K, Integer>> getUnifier()
+    {
+      return new LeastFrequentKeyUnifier<K>();
+    }
+  };
+
+  /**
+   * The output port on which all the tuples,
+   * which occurred the least number of times,
+   * is emitted.
+   */
+  @OutputPortFieldAnnotation(optional=true)
+  public final transient DefaultOutputPort<ArrayList<HashMap<K, Integer>>> list = new DefaultOutputPort<ArrayList<HashMap<K, Integer>>>()
+  {
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Override
+    public Unifier<ArrayList<HashMap<K, Integer>>> getUnifier()
+    {
+      return new LeastFrequentKeyArrayUnifier<K>();
+    }
+  };
+
+  /**
+   * Emits tuple on port "least"
+   * @param tuple
+   */
+  @Override
+  public void emitTuple(HashMap<K, Integer> tuple)
+  {
+    least.emit(tuple);
+  }
+
+  /**
+   * returns val1 < val2
+   * @param val1
+   * @param val2
+   * @return val1 < val2
+   */
+  @Override
+    public boolean compareCount(int val1, int val2)
+  {
+    return val1 < val2;
+  }
+
+  /**
+   * Emits tuple on port "list"
+   * @param tlist
+   */
+  @Override
+  public void emitList(ArrayList<HashMap<K, Integer>> tlist)
+  {
+    list.emit(tlist);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MatchAllMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MatchAllMap.java b/library/src/main/java/com/datatorrent/lib/algo/MatchAllMap.java
index 0780419..6fdbb6a 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/MatchAllMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/MatchAllMap.java
@@ -57,7 +57,7 @@ import com.datatorrent.lib.util.UnifierBooleanAnd;
  * </p>
  *
  * @displayName Emit All Matching Values (Number)
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MatchAnyMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MatchAnyMap.java b/library/src/main/java/com/datatorrent/lib/algo/MatchAnyMap.java
index edccb83..1da1e7b 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/MatchAnyMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/MatchAnyMap.java
@@ -59,7 +59,7 @@ import com.datatorrent.lib.util.UnifierBooleanOr;
  * </p>
  *
  * @displayName Emit Boolean For Match (Number)
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MatchMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MatchMap.java b/library/src/main/java/com/datatorrent/lib/algo/MatchMap.java
index dd2ff17..aafaa61 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/MatchMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/MatchMap.java
@@ -122,4 +122,15 @@ public class MatchMap<K,V extends Number> extends BaseMatchOperator<K, V>
   public void tupleNotMatched(Map<K, V> tuple)
   {
   }
+
+
+  /**
+   * The key in the input tuple whose value will be used for comparison.
+   * @param key The key in the input tuple whose value will be used for comparison.
+   */
+  @Override
+  public void setKey(K key)
+  {
+    super.setKey(key);
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MergeSortNumber.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MergeSortNumber.java b/library/src/main/java/com/datatorrent/lib/algo/MergeSortNumber.java
index 8237fa6..83d52dd 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/MergeSortNumber.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/MergeSortNumber.java
@@ -40,7 +40,7 @@ import java.util.ArrayList;
  * 2. getUnifierInstance : Get unifier operator instance for output port, (must return self instance).
  * </p>
  * @displayName Merge Sorted Lists (Number)
- * @category Algorithmic
+ * @category Stream Manipulators
  * @tags rank, numeric
  *
  * @since 0.3.3

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKey.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKey.java b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKey.java
deleted file mode 100644
index 6d6510a..0000000
--- a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKey.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Copyright (C) 2015 DataTorrent, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.datatorrent.lib.algo;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.annotation.OperatorAnnotation;
-
-import com.datatorrent.lib.util.AbstractBaseFrequentKey;
-import com.datatorrent.lib.util.UnifierArrayHashMapFrequent;
-import com.datatorrent.lib.util.UnifierHashMapFrequent;
-
-/**
- * This operator filters the incoming stream of values by emitting the value or values (if there is a tie)
- * that occurred the largest number of times within each window to the output port "list".&nbsp;
- * One of the values is emitted to the output port "least" at the end of each window.
- * <p>
- * Occurrences of each tuple is counted and at the end of window any of the most frequent tuple is emitted on output port least and all least frequent
- * tuples on output port list
- * </p>
- * <p>
- * This module is an end of window module<br>
- * In case of a tie any of the least key would be emitted. The list port would however have all the tied keys
- * <br>
- *  <b>StateFull : Yes</b>, Values are compared all over  application window can be > 1. <br>
- *  <b>Partitions : Yes</b>, Result is unified on output port. <br>
- * <br>
- * <b>Ports</b>:<br>
- * <b>data</b>: expects K<br>
- * <b>most</b>: emits HashMap&lt;K,Integer&gt;(1), Where K is the least occurring key in the window. In case of tie any of the least key would be emitted<br>
- * <b>list</b>: emits ArrayList&lt;HashMap&lt;K,Integer&gt;(1)&gt, Where the list includes all the keys that are least frequent<br>
- * <br>
- * <b>Properties</b>: None<br>
- * <br>
- * <b>Compile time checks</b>: None<br>
- * <b>Specific run time checks</b>: None<br>
- * <br>
- * </p>
- * @displayName Emit Most Frequent Value
- * @category Algorithmic
- * @tags filter, count
- *
- * @since 0.3.2
- */
-
-@OperatorAnnotation(partitionable = true)
-public class MostFrequentKey<K> extends AbstractBaseFrequentKey<K>
-{
-  /**
-   * The input port which receives incoming tuples.
-   */
-  public final transient DefaultInputPort<K> data = new DefaultInputPort<K>()
-  {
-    /**
-     * Calls super.processTuple(tuple)
-     */
-    @Override
-    public void process(K tuple)
-    {
-      processTuple(tuple);
-    }
-  };
-  /**
-   * The output port on which all the tuples,
-   * which occurred the most number of times,
-   * is emitted.
-   */
-  public final transient DefaultOutputPort<HashMap<K, Integer>> most = new DefaultOutputPort<HashMap<K, Integer>>()
-  {
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    public Unifier<HashMap<K, Integer>> getUnifier()
-    {
-      UnifierHashMapFrequent ret = new UnifierHashMapFrequent<K>();
-      ret.setLeast(false);
-      return ret;
-    }
-  };
-
-
-  public final transient DefaultOutputPort<ArrayList<HashMap<K, Integer>>> list = new DefaultOutputPort<ArrayList<HashMap<K, Integer>>>()
-  {
-    @SuppressWarnings({"rawtypes", "ConstantConditions"})
-    @Override
-    public Unifier<ArrayList<HashMap<K, Integer>>> getUnifier()
-    {
-      Unifier<ArrayList<HashMap<K, Integer>>> ret = new UnifierArrayHashMapFrequent<K>();
-      ((UnifierHashMapFrequent) ret).setLeast(false);
-      return ret;
-    }
-  };
-
-  /**
-   * Emits tuple on port "most"
-   * @param tuple
-   */
-  @Override
-  public void emitTuple(HashMap<K, Integer> tuple)
-  {
-    most.emit(tuple);
-  }
-
-  /**
-   * Emits tuple on port "list"
-   * @param tlist
-   */
-  @Override
-  public void emitList(ArrayList<HashMap<K, Integer>> tlist)
-  {
-    list.emit(tlist);
-  }
-
-  /**
-   * returns val1 < val2
-   * @param val1
-   * @param val2
-   * @return val1 > val2
-   */
-  @Override
-  public boolean compareCount(int val1, int val2)
-  {
-    return val1 > val2;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyMap.java b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyMap.java
index cbd62e5..b51d255 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyMap.java
@@ -49,7 +49,7 @@ import com.datatorrent.lib.util.UnifierHashMapFrequent;
  * </p>
  *
  * @displayName Emit Most Frequent Key
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value, count
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyValueMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyValueMap.java b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyValueMap.java
index 0d1827e..582aca0 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyValueMap.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentKeyValueMap.java
@@ -69,7 +69,7 @@ import com.datatorrent.lib.util.AbstractBaseFrequentKeyValueMap;
  * </p>
  *
  * @displayName Emit Most Frequent Keyval Pair
- * @category Algorithmic
+ * @category Rules and Alerts
  * @tags filter, key value, count
  *
  * @since 0.3.2

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/MostFrequentValue.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/MostFrequentValue.java b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentValue.java
new file mode 100644
index 0000000..93ad026
--- /dev/null
+++ b/library/src/main/java/com/datatorrent/lib/algo/MostFrequentValue.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (C) 2015 DataTorrent, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.datatorrent.lib.algo;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.annotation.OperatorAnnotation;
+
+import com.datatorrent.lib.util.AbstractBaseFrequentKey;
+import com.datatorrent.lib.util.UnifierArrayHashMapFrequent;
+import com.datatorrent.lib.util.UnifierHashMapFrequent;
+
+/**
+ * This operator filters the incoming stream of values by emitting the value or values (if there is a tie)
+ * that occurred the largest number of times within each window to the output port "list".&nbsp;
+ * One of the values is emitted to the output port "least" at the end of each window.
+ * <p>
+ * Occurrences of each tuple is counted and at the end of window any of the most frequent tuple is emitted on output port least and all least frequent
+ * tuples on output port list
+ * </p>
+ * <p>
+ * This module is an end of window module<br>
+ * In case of a tie any of the least key would be emitted. The list port would however have all the tied keys
+ * <br>
+ *  <b>StateFull : Yes</b>, Values are compared all over  application window can be > 1. <br>
+ *  <b>Partitions : Yes</b>, Result is unified on output port. <br>
+ * <br>
+ * <b>Ports</b>:<br>
+ * <b>data</b>: expects K<br>
+ * <b>most</b>: emits HashMap&lt;K,Integer&gt;(1), Where K is the least occurring key in the window. In case of tie any of the least key would be emitted<br>
+ * <b>list</b>: emits ArrayList&lt;HashMap&lt;K,Integer&gt;(1)&gt, Where the list includes all the keys that are least frequent<br>
+ * <br>
+ * <b>Properties</b>: None<br>
+ * <br>
+ * <b>Compile time checks</b>: None<br>
+ * <b>Specific run time checks</b>: None<br>
+ * <br>
+ * </p>
+ * @displayName Emit Most Frequent Value
+ * @category Rules and Alerts
+ * @tags filter, count
+ *
+ * @since 0.3.2
+ */
+
+@OperatorAnnotation(partitionable = true)
+public class MostFrequentValue<K> extends AbstractBaseFrequentKey<K>
+{
+  /**
+   * The input port which receives incoming tuples.
+   */
+  public final transient DefaultInputPort<K> data = new DefaultInputPort<K>()
+  {
+    /**
+     * Calls super.processTuple(tuple)
+     */
+    @Override
+    public void process(K tuple)
+    {
+      processTuple(tuple);
+    }
+  };
+  /**
+   * The output port on which all the tuples,
+   * which occurred the most number of times,
+   * is emitted.
+   */
+  public final transient DefaultOutputPort<HashMap<K, Integer>> most = new DefaultOutputPort<HashMap<K, Integer>>()
+  {
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Override
+    public Unifier<HashMap<K, Integer>> getUnifier()
+    {
+      UnifierHashMapFrequent ret = new UnifierHashMapFrequent<K>();
+      ret.setLeast(false);
+      return ret;
+    }
+  };
+
+
+  public final transient DefaultOutputPort<ArrayList<HashMap<K, Integer>>> list = new DefaultOutputPort<ArrayList<HashMap<K, Integer>>>()
+  {
+    @SuppressWarnings({"rawtypes", "ConstantConditions"})
+    @Override
+    public Unifier<ArrayList<HashMap<K, Integer>>> getUnifier()
+    {
+      Unifier<ArrayList<HashMap<K, Integer>>> ret = new UnifierArrayHashMapFrequent<K>();
+      ((UnifierHashMapFrequent) ret).setLeast(false);
+      return ret;
+    }
+  };
+
+  /**
+   * Emits tuple on port "most"
+   * @param tuple
+   */
+  @Override
+  public void emitTuple(HashMap<K, Integer> tuple)
+  {
+    most.emit(tuple);
+  }
+
+  /**
+   * Emits tuple on port "list"
+   * @param tlist
+   */
+  @Override
+  public void emitList(ArrayList<HashMap<K, Integer>> tlist)
+  {
+    list.emit(tlist);
+  }
+
+  /**
+   * returns val1 < val2
+   * @param val1
+   * @param val2
+   * @return val1 > val2
+   */
+  @Override
+  public boolean compareCount(int val1, int val2)
+  {
+    return val1 > val2;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/TopN.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/TopN.java b/library/src/main/java/com/datatorrent/lib/algo/TopN.java
index a0cd903..5ec8dfe 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/TopN.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/TopN.java
@@ -48,7 +48,7 @@ import com.datatorrent.lib.util.AbstractBaseNNonUniqueOperatorMap;
  * </p>
  *
  * @displayName Top N Values Per Key
- * @category Algorithmic
+ * @category Stats and Aggregations
  * @tags filter, rank
  *
  * @since 0.3.3
@@ -101,7 +101,7 @@ public class TopN<K, V> extends AbstractBaseNNonUniqueOperatorMap<K,V> implement
       }
     }
   }
-  
+
   /**
    * Top N tuples per key
    * @param val

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/TopNUnique.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/TopNUnique.java b/library/src/main/java/com/datatorrent/lib/algo/TopNUnique.java
index 10a53d3..4ccef65 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/TopNUnique.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/TopNUnique.java
@@ -24,7 +24,7 @@ import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.lib.util.AbstractBaseNUniqueOperatorMap;
 
 /**
- * This operator orders tuples per key and emits the top N unique tuples per key at the end of the window.
+ * This operator orders tuples per key and emits the top N unique values per key at the end of the window.
  * <p>
  * Orders tuples per key and emits top N unique tuples per key on end of window.
  * </p>
@@ -47,7 +47,7 @@ import com.datatorrent.lib.util.AbstractBaseNUniqueOperatorMap;
  * </p>
  *
  * @displayName Top N Unique Values Per Key
- * @category Algorithmic
+ * @category Stats and Aggregations
  * @tags filter, rank
  *
  * @since 0.3.2
@@ -80,7 +80,7 @@ public class TopNUnique<K, V> extends AbstractBaseNUniqueOperatorMap<K, V>
   {
     top.emit(tuple);
   }
-  
+
   /**
    * Top N unique tuples per key
    * @param val

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/algo/UniqueCounter.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/algo/UniqueCounter.java b/library/src/main/java/com/datatorrent/lib/algo/UniqueCounter.java
index 66fbeb5..460cf4e 100644
--- a/library/src/main/java/com/datatorrent/lib/algo/UniqueCounter.java
+++ b/library/src/main/java/com/datatorrent/lib/algo/UniqueCounter.java
@@ -27,7 +27,7 @@ import com.datatorrent.lib.util.BaseUniqueKeyCounter;
 import com.datatorrent.lib.util.UnifierHashMapSumKeys;
 
 /**
- * This operator counts the number of times a key exists in a window.&nbsp;A map from keys to counts is emitted at the end of each window.
+ * This operator counts the number of times a tuple exists in a window.&nbsp;A map from tuples to counts is emitted at the end of each window.
  * <p>
  * Counts the number of times a key exists in a window; Count is emitted at end of window in a single HashMap.
  * </p>
@@ -44,8 +44,8 @@ import com.datatorrent.lib.util.UnifierHashMapSumKeys;
  * <br>
  * </p>
  *
- * @displayName Count Unique Keys
- * @category Algorithmic
+ * @displayName Count Unique Tuples
+ * @category Stats and Aggregations
  * @tags count
  *
  * @since 0.3.2
@@ -108,10 +108,21 @@ public class UniqueCounter<K> extends BaseUniqueKeyCounter<K>
     }
   }
 
+  /**
+   * Gets the cumulative mode.
+   * @return The cumulative mode.
+   */
   public boolean isCumulative() {
     return cumulative;
   }
 
+  /**
+   * If enabled then the unique keys is counted and maintained in memory for the life of the operator. If not enabled
+   * keys are counted a per window bases.<br/>
+   * <b>Note:</b> If cumulative mode is enabled and the operator receives many unique keys, then this operator
+   * could eventually run out of memory.
+   * @param cumulative
+   */
   public void setCumulative(boolean cumulative) {
     this.cumulative = cumulative;
   }

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java b/library/src/main/java/com/datatorrent/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
index bfd578a..0f87ec0 100644
--- a/library/src/main/java/com/datatorrent/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
+++ b/library/src/main/java/com/datatorrent/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
@@ -28,9 +28,9 @@ import com.datatorrent.lib.appdata.gpo.GPOUtils;
 /**
  * This operator accepts a list of POJOs, and serves the data under the {@link SnapshotSchema}.
  * Each POJO represents a row in the table, and the full list of POJOs represents a table.
- * @displayName App Data Snapshot Server
- * @category App Data
- * @tags appdata, snapshot, pojo
+ * @displayName App Data Snapshot POJO Server
+ * @category Output
+ * @tags app data, snapshot, pojo
  */
 public class AppDataSnapshotServerPOJO extends AbstractAppDataSnapshotServer<Object>
 {

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/converter/ByteArrayToStringConverterOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/converter/ByteArrayToStringConverterOperator.java b/library/src/main/java/com/datatorrent/lib/converter/ByteArrayToStringConverterOperator.java
index 84651c3..da29ce5 100644
--- a/library/src/main/java/com/datatorrent/lib/converter/ByteArrayToStringConverterOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/converter/ByteArrayToStringConverterOperator.java
@@ -23,6 +23,9 @@ import java.nio.charset.Charset;
 /**
  * This operator converts Byte Array to String. User gets the option of providing character Encoding.
  *
+ * @category Tuple Converters
+ * @tags byte, string
+ *
  * @since 2.1.0
  */
 public class ByteArrayToStringConverterOperator extends BaseOperator

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/converter/MapToKeyHashValuePairConverter.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/converter/MapToKeyHashValuePairConverter.java b/library/src/main/java/com/datatorrent/lib/converter/MapToKeyHashValuePairConverter.java
index bda4743..95b6016 100644
--- a/library/src/main/java/com/datatorrent/lib/converter/MapToKeyHashValuePairConverter.java
+++ b/library/src/main/java/com/datatorrent/lib/converter/MapToKeyHashValuePairConverter.java
@@ -13,24 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*  
-* Copyright (c) 2015 DataTorrent, Inc. ALL Rights Reserved.  
-*  
-* Licensed under the Apache License, Version 2.0 (the "License");  
-* you may not use this file except in compliance with the License.  
-* You may obtain a copy of the License at  
-*  
-*   http://www.apache.org/licenses/LICENSE-2.0  
-*  
-* Unless required by applicable law or agreed to in writing, software  
-* distributed under the License is distributed on an "AS IS" BASIS,  
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
-* See the License for the specific language governing permissions and  
-* limitations under the License.  
-*/  
 package com.datatorrent.lib.converter;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -38,15 +22,15 @@ import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.lib.util.KeyHashValPair;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
- * 
- * This operator outputs key value pair for each entry in input Map 
- * 
+ *
+ * This operator outputs key value pair for each entry in input Map
+ *
  * @displayName Map to key-value pair converter
- * @category Converter
- * 
+ * @category Tuple Converters
+ * @tags key value
+ *
  */
 public class MapToKeyHashValuePairConverter<K, V> extends BaseOperator {
 
@@ -57,11 +41,11 @@ public class MapToKeyHashValuePairConverter<K, V> extends BaseOperator {
   {
     @Override
     public void process(Map<K, V> tuple)
-    { 
+    {
       for(Entry<K, V> entry:tuple.entrySet())
       {
-        output.emit(new KeyHashValPair<K, V>(entry.getKey(), entry.getValue()));  
-      }      
+        output.emit(new KeyHashValPair<K, V>(entry.getKey(), entry.getValue()));
+      }
     }
   };
 

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/converter/MapToKeyValuePairConverter.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/converter/MapToKeyValuePairConverter.java b/library/src/main/java/com/datatorrent/lib/converter/MapToKeyValuePairConverter.java
index 034a706..94f5fbd 100644
--- a/library/src/main/java/com/datatorrent/lib/converter/MapToKeyValuePairConverter.java
+++ b/library/src/main/java/com/datatorrent/lib/converter/MapToKeyValuePairConverter.java
@@ -25,12 +25,13 @@ import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 
 /**
- * 
- * This operator outputs key value pair for each entry in input Map 
- * 
+ *
+ * This operator outputs key value pair for each entry in input Map
+ *
  * @displayName Map to key-value pair converter
- * @category Converter
- * 
+ * @category Tuple Converters
+ * @tags key value
+ *
  */
 public class MapToKeyValuePairConverter<K, V> extends BaseOperator {
 
@@ -41,11 +42,11 @@ public class MapToKeyValuePairConverter<K, V> extends BaseOperator {
   {
     @Override
     public void process(Map<K, V> tuple)
-    { 
+    {
       for(Entry<K, V> entry:tuple.entrySet())
       {
-        output.emit(new KeyValPair<K, V>(entry.getKey(), entry.getValue()));  
-      }      
+        output.emit(new KeyValPair<K, V>(entry.getKey(), entry.getValue()));
+      }
     }
   };
 

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/converter/StringValueToNumberConverterForMap.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/converter/StringValueToNumberConverterForMap.java b/library/src/main/java/com/datatorrent/lib/converter/StringValueToNumberConverterForMap.java
index 17a38bb..a5ca699 100644
--- a/library/src/main/java/com/datatorrent/lib/converter/StringValueToNumberConverterForMap.java
+++ b/library/src/main/java/com/datatorrent/lib/converter/StringValueToNumberConverterForMap.java
@@ -24,12 +24,13 @@ import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 
 /**
- * 
+ *
  * This operator converts Map<K, String> to Map<K, Number> for numeric string values
  *
  * @displayName String to Number value converter for Map
- * @category Converter
- * 
+ * @category Tuple Converters
+ * @tags string
+ *
  */
 public class StringValueToNumberConverterForMap<K> extends BaseOperator {
 

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/db/jdbc/AbstractJdbcInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/db/jdbc/AbstractJdbcInputOperator.java b/library/src/main/java/com/datatorrent/lib/db/jdbc/AbstractJdbcInputOperator.java
index e01d72e..1ab63d0 100644
--- a/library/src/main/java/com/datatorrent/lib/db/jdbc/AbstractJdbcInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/db/jdbc/AbstractJdbcInputOperator.java
@@ -36,8 +36,8 @@ import com.datatorrent.lib.db.AbstractStoreInputOperator;
  * This is an abstract class. Sub-classes need to implement {@link #queryToRetrieveData()} and {@link #getTuple(ResultSet)}.
  * </p>
  * @displayName Abstract JDBC Input
- * @category Database
- * @tags input operator
+ * @category Input
+ * @tags database, sql
  *
  * @param <T> The tuple type
  * @since 0.9.4
@@ -65,11 +65,6 @@ public abstract class AbstractJdbcInputOperator<T> extends AbstractStoreInputOpe
   public abstract String queryToRetrieveData();
 
   /**
-   * The output port that will emit tuples read from the database.
-   */
-  public final transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
-
-  /**
    * This executes the query to retrieve result from database.
    * It then converts each row into tuple and emit that into output port.
    */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/AbstractHttpInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/AbstractHttpInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/AbstractHttpInputOperator.java
index 08e8afa..619ce5f 100644
--- a/library/src/main/java/com/datatorrent/lib/io/AbstractHttpInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/AbstractHttpInputOperator.java
@@ -56,14 +56,27 @@ public abstract class AbstractHttpInputOperator<T> extends SimpleSinglePortInput
    * The URL of the web service resource for the POST request.
    */
   @NotNull
-  private URI resourceUrl;
+  private URI url;
   private Map<String, String> headers = new HashMap<String, String>();
   private transient Client wsClient;
   private transient WebResource resource;
 
+  /**
+   * The url to read from.
+   * @param u The url to read from.
+   */
   public void setUrl(URI u)
   {
-    resourceUrl = u;
+    url = u;
+  }
+
+  /**
+   * Sets the url to read from.
+   * @return The url to read from.
+   */
+  public URI getUrl()
+  {
+    return url;
   }
 
   public void setHeader(String key, String value)
@@ -77,8 +90,8 @@ public abstract class AbstractHttpInputOperator<T> extends SimpleSinglePortInput
     wsClient = Client.create();
     wsClient.setFollowRedirects(true);
     wsClient.setReadTimeout(readTimeoutMillis);
-    resource = wsClient.resource(resourceUrl.toString()); // side step "not absolute URL" after serialization
-    LOG.info("URL: {}", resourceUrl);
+    resource = wsClient.resource(url.toString()); // side step "not absolute URL" after serialization
+    LOG.info("URL: {}", url);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/HttpGetMapOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/HttpGetMapOperator.java b/library/src/main/java/com/datatorrent/lib/io/HttpGetMapOperator.java
index 253e58c..8c54ec0 100644
--- a/library/src/main/java/com/datatorrent/lib/io/HttpGetMapOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/HttpGetMapOperator.java
@@ -29,7 +29,7 @@ import com.sun.jersey.api.client.WebResource;
  * </p>
  * @displayName HTTP GET Map
  * @category Input
- * @tags http, input operator
+ * @tags http
  *
  * @param <K> Type of key in input map tuple
  * @param <V> Type of value in input map tuple

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/HttpJsonChunksInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/HttpJsonChunksInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/HttpJsonChunksInputOperator.java
index 1750811..bc6dc5c 100644
--- a/library/src/main/java/com/datatorrent/lib/io/HttpJsonChunksInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/HttpJsonChunksInputOperator.java
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
  * </p>
  * @displayName HTTP JSON Chunks Input
  * @category Input
- * @tags http, input operator
+ * @tags http
  *
  * @since 0.9.4
  */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/HttpLinesInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/HttpLinesInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/HttpLinesInputOperator.java
index 3997d22..6258c07 100644
--- a/library/src/main/java/com/datatorrent/lib/io/HttpLinesInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/HttpLinesInputOperator.java
@@ -26,7 +26,7 @@ import java.io.InputStreamReader;
  * <p></p>
  * @displayName HTTP Lines Input
  * @category Input
- * @tags http, input operator
+ * @tags http
  *
  * @since 0.9.4
  */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketInputOperator.java
index fffdcee..b7417dd 100644
--- a/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketInputOperator.java
@@ -32,7 +32,7 @@ import com.datatorrent.common.util.PubSubWebSocketClient;
  * <p></p>
  * @displayName Pub Sub Web Socket Input
  * @category Input
- * @tags http, input operator
+ * @tags http, websocket
  *
  * @since 0.3.2
  */
@@ -47,11 +47,19 @@ public class PubSubWebSocketInputOperator<T> extends WebSocketInputOperator<T>
     this.codec = new PubSubMessageCodec<Object>(mapper);
   }
 
+  /**
+   * The pub sub topic to subscribe to.
+   * @param topic The pub sub topic to subscribe to.
+   */
   public void setTopic(String topic)
   {
     this.topic = topic;
   }
 
+  /**
+   * Gets pub sub topic to subscribe to.
+   * @return The pub sub topic to subscribe to.
+   */
   @NotNull
   public String getTopic()
   {

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketOutputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketOutputOperator.java b/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketOutputOperator.java
index 47a4966..ef9a113 100644
--- a/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketOutputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/PubSubWebSocketOutputOperator.java
@@ -26,8 +26,8 @@ import com.datatorrent.common.util.PubSubWebSocketClient;
  * This operator writes maps as JSON objects to the given URL.
  * <p></p>
  * @displayName Pub Sub Web Socket Output
- * @category Input
- * @tags http, input operator
+ * @category Output
+ * @tags http
  *
  * @param <T>
  * @since 0.3.2
@@ -37,11 +37,19 @@ public class PubSubWebSocketOutputOperator<T> extends WebSocketOutputOperator<T>
   private String topic = null;
   private transient PubSubMessageCodec<Object> codec = new PubSubMessageCodec<Object>(mapper);
 
+  /**
+   * The pub sub topic to subscribe to.
+   * @param topic The pub sub topic to subscribe to.
+   */
   public void setTopic(String topic)
   {
     this.topic = topic;
   }
 
+  /**
+   * Gets the pub sub topic to subscribe to.
+   * @return The pub sub topic to subscribe to.
+   */
   @NotNull
   public String getTopic()
   {

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/SimpleSinglePortInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/SimpleSinglePortInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/SimpleSinglePortInputOperator.java
index 4e6d465..07bcaf5 100644
--- a/library/src/main/java/com/datatorrent/lib/io/SimpleSinglePortInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/SimpleSinglePortInputOperator.java
@@ -32,11 +32,10 @@ import com.datatorrent.common.util.BaseOperator;
  * </p>
  * @displayName Asynchronous Input Processing
  * @category Input
- * @tags input operator
  *
  * @since 0.3.2
  */
-public class SimpleSinglePortInputOperator<T> extends BaseOperator implements InputOperator, Operator.ActivationListener<OperatorContext>
+public abstract class SimpleSinglePortInputOperator<T> extends BaseOperator implements InputOperator, Operator.ActivationListener<OperatorContext>
 {
   private transient Thread ioThread;
   private transient boolean isActive = false;

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/WebSocketInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/WebSocketInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/WebSocketInputOperator.java
index cc3e874..dabcacb 100644
--- a/library/src/main/java/com/datatorrent/lib/io/WebSocketInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/WebSocketInputOperator.java
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
  * <p></p>
  * @displayName JSON Map Input
  * @category Input
- * @tags http, input operator
+ * @tags http, websocket
  *
  * @since 0.3.2
  */
@@ -93,7 +93,7 @@ public class WebSocketInputOperator<T> extends SimpleSinglePortInputOperator<T>
   }
 
   /**
-   * Sets the IO Thread multiplier for AsyncWebSocket connection
+   * The number of threads to use for the websocket connection.
    *
    * @param ioThreadMultiplier
    */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/WebSocketOutputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/WebSocketOutputOperator.java b/library/src/main/java/com/datatorrent/lib/io/WebSocketOutputOperator.java
index 1a23ebb..a92f8b3 100644
--- a/library/src/main/java/com/datatorrent/lib/io/WebSocketOutputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/WebSocketOutputOperator.java
@@ -40,8 +40,8 @@ import com.datatorrent.api.DefaultInputPort;
  * Reads via WebSocket from given URL as input stream.&nbsp;Incoming data is interpreted as JSONObject and converted to {@link java.util.Map}.
  * <p></p>
  * @displayName JSON Map Output
- * @category Input
- * @tags http, input operator
+ * @category Output
+ * @tags http, websocket
  *
  * @param <T> tuple type
  * @since 0.3.2
@@ -111,7 +111,7 @@ public class WebSocketOutputOperator<T> extends BaseOperator
   }
 
   /**
-   * Sets the IO Thread multiplier for AsyncWebSocket connection
+   * The number of threads to use for the websocket connection.
    *
    * @param ioThreadMultiplier
    */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/fs/FileSplitter.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/fs/FileSplitter.java b/library/src/main/java/com/datatorrent/lib/io/fs/FileSplitter.java
index 13b4bdf..58554c3 100644
--- a/library/src/main/java/com/datatorrent/lib/io/fs/FileSplitter.java
+++ b/library/src/main/java/com/datatorrent/lib/io/fs/FileSplitter.java
@@ -63,7 +63,7 @@ import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
  *
  * @displayName File Splitter
  * @category Input
- * @tags file, input operator
+ * @tags file
  * @since 2.0.0
  */
 @OperatorAnnotation(checkpointableWithinAppWindow = false)
@@ -835,6 +835,8 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
+     * Gets the regular expression for file names to split.
+     *
      * @return regular expression
      */
     public String getFilePatternRegularExp()
@@ -843,7 +845,7 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
-     * Sets the regular expression for files.
+     * Only files with names matching the given java regular expression are split.
      *
      * @param filePatternRegexp regular expression
      */
@@ -853,7 +855,8 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
-     * Sets the files to be scanned.
+     * A comma separated list of directories to scan. If the path is not fully qualified the default
+     * file system is used. A fully qualified path can be provided to scan directories in other filesystems.
      *
      * @param files files
      */
@@ -863,6 +866,8 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
+     * Gets the files to be scanned.
+     *
      * @return files to be scanned.
      */
     public String getFiles()
@@ -871,7 +876,7 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
-     * Sets whether scan will be recursive.
+     * True if recursive; false otherwise.
      *
      * @param recursive true if recursive; false otherwise.
      */
@@ -881,6 +886,8 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
+     * Sets whether scan will be recursive.
+     *
      * @return true if recursive; false otherwise.
      */
     public boolean isRecursive()
@@ -899,7 +906,7 @@ public class FileSplitter implements InputOperator, Operator.CheckpointListener
     }
 
     /**
-     * Returns the value of trigger.
+     * The trigger which will initiate scan.
      *
      * @return trigger
      */

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/io/fs/TailFsInputOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/io/fs/TailFsInputOperator.java b/library/src/main/java/com/datatorrent/lib/io/fs/TailFsInputOperator.java
index 721411b..4a0defa 100644
--- a/library/src/main/java/com/datatorrent/lib/io/fs/TailFsInputOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/io/fs/TailFsInputOperator.java
@@ -45,7 +45,7 @@ import com.datatorrent.api.Operator.ActivationListener;
  * </p>
  * @displayName Tail Input
  * @category Input
- * @tags local fs, file, input operator
+ * @tags local fs, file
  * @since 0.9.4
  */
 public class TailFsInputOperator implements InputOperator, ActivationListener<OperatorContext>
@@ -123,6 +123,7 @@ public class TailFsInputOperator implements InputOperator, ActivationListener<Op
   }
 
   /**
+   * Gets whether to tail from the end of the file.
    * @return the end
    */
   public boolean isEnd()
@@ -131,8 +132,8 @@ public class TailFsInputOperator implements InputOperator, ActivationListener<Op
   }
 
   /**
-   * @param end
-   *          the end to set
+   * Whether to tail from the end or start of file.
+   * @param end The end to set.
    */
   public void setEnd(boolean end)
   {

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/dd15161d/library/src/main/java/com/datatorrent/lib/script/JavaScriptOperator.java
----------------------------------------------------------------------
diff --git a/library/src/main/java/com/datatorrent/lib/script/JavaScriptOperator.java b/library/src/main/java/com/datatorrent/lib/script/JavaScriptOperator.java
index 8dca272..486ba60 100644
--- a/library/src/main/java/com/datatorrent/lib/script/JavaScriptOperator.java
+++ b/library/src/main/java/com/datatorrent/lib/script/JavaScriptOperator.java
@@ -69,7 +69,7 @@ import org.slf4j.LoggerFactory;
  *
  * @displayName Java Script
  * @category Scripting
- * @tags script operator, map, string
+ * @tags script, map, string
  * @since 0.3.2
  */
 public class JavaScriptOperator extends ScriptOperator