http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiMessage.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiMessage.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiMessage.java
index ddd28b2..74a8f6c 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiMessage.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiMessage.java
@@ -32,63 +32,64 @@ import ca.uhn.hl7v2.model.Segment;
 import ca.uhn.hl7v2.model.Structure;
 
 public class HapiMessage implements HL7Message {
-       private final Message message;
-       private final List<HL7Segment> allSegments;
-       private final Map<String, List<HL7Segment>> segmentMap;
-       
-       public HapiMessage(final Message message) throws HL7Exception {
-               this.message = message;
-               
-               allSegments = new ArrayList<>();
-               populateSegments(message, allSegments);
-               
-               segmentMap = new HashMap<>();
-               for ( final HL7Segment segment : allSegments ) {
-                       final String segmentName = segment.getName();
-                       List<HL7Segment> segmentList = 
segmentMap.get(segmentName);
-                       if ( segmentList == null ) {
-                               segmentList = new ArrayList<>();
-                               segmentMap.put(segmentName, segmentList);
-                       }
-                       
-                       segmentList.add(segment);
-               }
-       }
-       
-       private void populateSegments(final Group group, final List<HL7Segment> 
segments) throws HL7Exception {
-               for ( final String structureName : group.getNames() ) {
-                       final Structure[] structures = 
group.getAll(structureName);
-                       if ( group.isGroup(structureName) ) {
-                               for ( final Structure structure : structures ) {
-                                       populateSegments((Group) structure, 
segments);
-                               }
-                       } else {
-                               for ( final Structure structure : structures ) {
-                                       final Segment segment = (Segment) 
structure;
-                                       final HapiSegment hapiSegment = new 
HapiSegment(segment);
-                                       segments.add(hapiSegment);
-                               }
-                       }
-               }
-       }
-       
-       @Override
-       public List<HL7Segment> getSegments() {
-               return Collections.unmodifiableList(allSegments);
-       }
 
-       @Override
-       public List<HL7Segment> getSegments(final String segmentType) {
-               final List<HL7Segment> segments = segmentMap.get(segmentType);
-               if ( segments == null ) {
-                       return Collections.emptyList();
-               }
-               
-               return Collections.unmodifiableList(segments);
-       }
+    private final Message message;
+    private final List<HL7Segment> allSegments;
+    private final Map<String, List<HL7Segment>> segmentMap;
 
-       @Override
-       public String toString() {
-               return message.toString();
-       }
+    public HapiMessage(final Message message) throws HL7Exception {
+        this.message = message;
+
+        allSegments = new ArrayList<>();
+        populateSegments(message, allSegments);
+
+        segmentMap = new HashMap<>();
+        for (final HL7Segment segment : allSegments) {
+            final String segmentName = segment.getName();
+            List<HL7Segment> segmentList = segmentMap.get(segmentName);
+            if (segmentList == null) {
+                segmentList = new ArrayList<>();
+                segmentMap.put(segmentName, segmentList);
+            }
+
+            segmentList.add(segment);
+        }
+    }
+
+    private void populateSegments(final Group group, final List<HL7Segment> 
segments) throws HL7Exception {
+        for (final String structureName : group.getNames()) {
+            final Structure[] structures = group.getAll(structureName);
+            if (group.isGroup(structureName)) {
+                for (final Structure structure : structures) {
+                    populateSegments((Group) structure, segments);
+                }
+            } else {
+                for (final Structure structure : structures) {
+                    final Segment segment = (Segment) structure;
+                    final HapiSegment hapiSegment = new HapiSegment(segment);
+                    segments.add(hapiSegment);
+                }
+            }
+        }
+    }
+
+    @Override
+    public List<HL7Segment> getSegments() {
+        return Collections.unmodifiableList(allSegments);
+    }
+
+    @Override
+    public List<HL7Segment> getSegments(final String segmentType) {
+        final List<HL7Segment> segments = segmentMap.get(segmentType);
+        if (segments == null) {
+            return Collections.emptyList();
+        }
+
+        return Collections.unmodifiableList(segments);
+    }
+
+    @Override
+    public String toString() {
+        return message.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiSegment.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiSegment.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiSegment.java
index d50afdb..20e646c 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiSegment.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/HapiSegment.java
@@ -28,42 +28,42 @@ import ca.uhn.hl7v2.model.Segment;
 import ca.uhn.hl7v2.model.Type;
 
 public class HapiSegment implements HL7Segment {
-       private final Segment segment;
-       private final List<HL7Field> fields;
-       
-       public HapiSegment(final Segment segment) throws HL7Exception {
-               this.segment = segment;
-               
-               final List<HL7Field> fieldList = new ArrayList<>();
-               for (int i=1; i <= segment.numFields(); i++) {
-                       final Type[] types = segment.getField(i);
 
-                       if ( types == null || types.length == 0 ) {
-                               fieldList.add(new EmptyField());
-                               continue;
-                       }
-                       
-                       for ( final Type type : types ) {
-                               fieldList.add(new HapiField(type));
-                       }
-               }
-               
-               this.fields = Collections.unmodifiableList(fieldList);
-       }
-       
-       
-       @Override
-       public String getName() {
-               return segment.getName();
-       }
+    private final Segment segment;
+    private final List<HL7Field> fields;
 
-       @Override
-       public List<HL7Field> getFields() {
-               return fields;
-       }
+    public HapiSegment(final Segment segment) throws HL7Exception {
+        this.segment = segment;
 
-       @Override
-       public String toString() {
-               return segment.toString();
-       }
+        final List<HL7Field> fieldList = new ArrayList<>();
+        for (int i = 1; i <= segment.numFields(); i++) {
+            final Type[] types = segment.getField(i);
+
+            if (types == null || types.length == 0) {
+                fieldList.add(new EmptyField());
+                continue;
+            }
+
+            for (final Type type : types) {
+                fieldList.add(new HapiField(type));
+            }
+        }
+
+        this.fields = Collections.unmodifiableList(fieldList);
+    }
+
+    @Override
+    public String getName() {
+        return segment.getName();
+    }
+
+    @Override
+    public List<HL7Field> getFields() {
+        return fields;
+    }
+
+    @Override
+    public String toString() {
+        return segment.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/SingleValueField.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/SingleValueField.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/SingleValueField.java
index ed99077..b8a6351 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/SingleValueField.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/hapi/SingleValueField.java
@@ -23,20 +23,21 @@ import org.apache.nifi.hl7.model.HL7Component;
 import org.apache.nifi.hl7.model.HL7Field;
 
 public class SingleValueField implements HL7Field {
-       private final String value;
-       
-       public SingleValueField(final String value) {
-               this.value = value;
-       }
-       
-       @Override
-       public String getValue() {
-               return value;
-       }
-
-       @Override
-       public List<HL7Component> getComponents() {
-               return Collections.emptyList();
-       }
+
+    private final String value;
+
+    public SingleValueField(final String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public List<HL7Component> getComponents() {
+        return Collections.emptyList();
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/HL7Reader.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/HL7Reader.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/HL7Reader.java
index e7b31a4..4d2f276 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/HL7Reader.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/HL7Reader.java
@@ -22,6 +22,6 @@ import org.apache.nifi.hl7.model.HL7Message;
 
 public interface HL7Reader {
 
-       HL7Message nextMessage() throws IOException;
-       
+    HL7Message nextMessage() throws IOException;
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/exception/InvalidHL7Exception.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/exception/InvalidHL7Exception.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/exception/InvalidHL7Exception.java
index 669f40c..c0c74f9 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/exception/InvalidHL7Exception.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/io/exception/InvalidHL7Exception.java
@@ -19,22 +19,23 @@ package org.apache.nifi.hl7.io.exception;
 import java.io.IOException;
 
 public class InvalidHL7Exception extends IOException {
-       private static final long serialVersionUID = -5675416667224562441L;
 
-       public InvalidHL7Exception() {
-               super();
-       }
+    private static final long serialVersionUID = -5675416667224562441L;
 
-       public InvalidHL7Exception(String message, Throwable cause) {
-               super(message, cause);
-       }
+    public InvalidHL7Exception() {
+        super();
+    }
 
-       public InvalidHL7Exception(String message) {
-               super(message);
-       }
+    public InvalidHL7Exception(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public InvalidHL7Exception(String message) {
+        super(message);
+    }
+
+    public InvalidHL7Exception(Throwable cause) {
+        super(cause);
+    }
 
-       public InvalidHL7Exception(Throwable cause) {
-               super(cause);
-       }
-       
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Component.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Component.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Component.java
index cf35504..d8c1495 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Component.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Component.java
@@ -19,6 +19,8 @@ package org.apache.nifi.hl7.model;
 import java.util.List;
 
 public interface HL7Component {
-       String getValue();
-       List<HL7Component> getComponents();
+
+    String getValue();
+
+    List<HL7Component> getComponents();
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Field.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Field.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Field.java
index 4086e58..ff58d96 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Field.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Field.java
@@ -16,6 +16,5 @@
  */
 package org.apache.nifi.hl7.model;
 
-
 public interface HL7Field extends HL7Component {
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Message.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Message.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Message.java
index dd9c2a9..dc68c2b 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Message.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Message.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 public interface HL7Message {
 
-       List<HL7Segment> getSegments();
-       
-       List<HL7Segment> getSegments(String segmentType);
-       
+    List<HL7Segment> getSegments();
+
+    List<HL7Segment> getSegments(String segmentType);
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Segment.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Segment.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Segment.java
index de5aaa1..d5d67ae 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Segment.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/model/HL7Segment.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 public interface HL7Segment {
 
-       String getName();
-       
-       List<HL7Field> getFields();
-       
+    String getName();
+
+    List<HL7Field> getFields();
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Declaration.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Declaration.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Declaration.java
index 0903cc8..94998e7 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Declaration.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Declaration.java
@@ -20,10 +20,10 @@ import org.apache.nifi.hl7.model.HL7Message;
 
 public interface Declaration {
 
-       String getAlias();
-       
-       boolean isRequired();
-       
-       Object getDeclaredValue(HL7Message message);
-       
+    String getAlias();
+
+    boolean isRequired();
+
+    Object getDeclaredValue(HL7Message message);
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/HL7Query.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/HL7Query.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/HL7Query.java
index a036106..3734b4f 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/HL7Query.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/HL7Query.java
@@ -16,8 +16,6 @@
  */
 package org.apache.nifi.hl7.query;
 
-import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.*;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -58,196 +56,211 @@ import 
org.apache.nifi.hl7.query.result.StandardQueryResult;
 
 import org.apache.nifi.hl7.query.antlr.HL7QueryLexer;
 import org.apache.nifi.hl7.query.antlr.HL7QueryParser;
-
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.AND;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.DECLARE;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.DOT;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.EQUALS;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.GE;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.GT;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.IDENTIFIER;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.IS_NULL;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.LE;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.LT;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.MESSAGE;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.NOT;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.NOT_EQUALS;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.NOT_NULL;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.NUMBER;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.OR;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.REQUIRED;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.SEGMENT_NAME;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.SELECT;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.STRING_LITERAL;
+import static org.apache.nifi.hl7.query.antlr.HL7QueryParser.WHERE;
 
 public class HL7Query {
-       private final Tree tree;
-       private final String query;
-       private final Set<Declaration> declarations = new HashSet<>();
-       
-       private final List<Selection> selections;
-       private final BooleanEvaluator whereEvaluator;
-       
-       private HL7Query(final Tree tree, final String query) {
-               this.tree = tree;
-               this.query = query;
-
-               List<Selection> select = null;
-               BooleanEvaluator where = null;
-               for (int i=0; i < tree.getChildCount(); i++) {
-                       final Tree child = tree.getChild(i);
-                       
-                       switch (child.getType()) {
-                               case DECLARE:
-                                       processDeclare(child);
-                                       break;
-                               case SELECT:
-                                       select = processSelect(child);
-                                       break;
-                               case WHERE:
-                                       where = processWhere(child);
-                                       break;
-                               default:
-                                       throw new 
HL7QueryParsingException("Found unexpected clause at root level: " + 
tree.getText());
-                       }
-               }
-               
-               this.whereEvaluator = where;
-               this.selections = select;
-       }
-       
-       private void processDeclare(final Tree declare) {
-               for (int i=0; i < declare.getChildCount(); i++) {
-                       final Tree declarationTree = declare.getChild(i);
-                       
-                       final String identifier = 
declarationTree.getChild(0).getText();
-                       final Tree requiredOrOptionalTree = 
declarationTree.getChild(1);
-                       final boolean required = 
requiredOrOptionalTree.getType() == REQUIRED;
-                       
-                       final String segmentName = 
declarationTree.getChild(2).getText();
-                       
-                       final Declaration declaration = new Declaration() {
-                               @Override
-                               public String getAlias() {
-                                       return identifier;
-                               }
-
-                               @Override
-                               public boolean isRequired() {
-                                       return required;
-                               }
-
-                               @Override
-                               public Object getDeclaredValue(final HL7Message 
message) {
-                                       if ( message == null ) {
-                                               return null;
-                                       }
-                                       
-                                       return message.getSegments(segmentName);
-                               }
-                       };
-                       
-                       declarations.add(declaration);
-               }
-       }
-
-       private List<Selection> processSelect(final Tree select) {
-               final List<Selection> selections = new ArrayList<>();
-
-               for (int i=0; i < select.getChildCount(); i++) {
-                       final Tree selectable = select.getChild(i);
-                       
-                       final String alias = getSelectedName(selectable);
-                       final Evaluator<?> selectionEvaluator = 
buildReferenceEvaluator(selectable);
-                       final Selection selection = new 
Selection(selectionEvaluator, alias);
-                       selections.add(selection);
-               }
-               
-               return selections;
-       }
-       
-       
-       private String getSelectedName(final Tree selectable) {
-               if ( selectable.getChildCount() == 0 ) {
-                       return selectable.getText();
-               } else if (selectable.getType() == DOT ) {
-                       return getSelectedName(selectable.getChild(0)) + "." + 
getSelectedName(selectable.getChild(1));
-               } else {
-                       return selectable.getChild(selectable.getChildCount() - 
1).getText();
-               }
-       }
-       
-
-       private BooleanEvaluator processWhere(final Tree where) {
-               return buildBooleanEvaluator(where.getChild(0));
-       }
-       
-
-       private Evaluator<?> buildReferenceEvaluator(final Tree tree) {
-               switch (tree.getType()) {
-                       case MESSAGE:
-                               return new MessageEvaluator();
-                       case SEGMENT_NAME:
-                               return new SegmentEvaluator(new 
StringLiteralEvaluator(tree.getText()));
-                       case IDENTIFIER:
-                               return new DeclaredReferenceEvaluator(new 
StringLiteralEvaluator(tree.getText()));
-                       case DOT:
-                               final Tree firstChild = tree.getChild(0);
-                               final Tree secondChild = tree.getChild(1);
-                               return new 
DotEvaluator(buildReferenceEvaluator(firstChild), 
buildIntegerEvaluator(secondChild));
-                       case STRING_LITERAL:
-                               return new 
StringLiteralEvaluator(tree.getText());
-                       case NUMBER:
-                               return new 
IntegerLiteralEvaluator(Integer.parseInt(tree.getText()));
-                       default:
-                               throw new HL7QueryParsingException("Failed to 
build evaluator for " + tree.getText());
-               }
-       }
-       
-       
-       private IntegerEvaluator buildIntegerEvaluator(final Tree tree) {
-               switch (tree.getType()) {
-                       case NUMBER:
-                               return new 
IntegerLiteralEvaluator(Integer.parseInt(tree.getText()));
-                       default:
-                               throw new HL7QueryParsingException("Failed to 
build Integer Evaluator for " + tree.getText());
-               }
-       }
-       
-       
-       private BooleanEvaluator buildBooleanEvaluator(final Tree tree) {
-               // TODO: add Date comparisons
-               // LT/GT/GE/GE should allow for dates based on Field's Type
-               // BETWEEN
-               // DATE('2015/01/01')
-               // DATE('2015/01/01 12:00:00')
-               // DATE('24 HOURS AGO')
-               // DATE('YESTERDAY')
-               
-               switch (tree.getType()) {
-                       case EQUALS:
-                               return new 
EqualsEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
-                       case NOT_EQUALS:
-                               return new 
NotEqualsEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
-                       case GT:
-                               return new 
GreaterThanEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
-                       case LT:
-                               return new 
LessThanEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
-                       case GE:
-                               return new 
GreaterThanOrEqualEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
-                       case LE:
-                               return new 
LessThanOrEqualEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
-                       case NOT:
-                               return new 
NotEvaluator(buildBooleanEvaluator(tree.getChild(0)));
-                       case AND:
-                               return new 
AndEvaluator(buildBooleanEvaluator(tree.getChild(0)), 
buildBooleanEvaluator(tree.getChild(1)));
-                       case OR:
-                               return new 
OrEvaluator(buildBooleanEvaluator(tree.getChild(0)), 
buildBooleanEvaluator(tree.getChild(1)));
-                       case IS_NULL:
-                               return new 
IsNullEvaluator(buildReferenceEvaluator(tree.getChild(0)));
-                       case NOT_NULL:
-                               return new 
NotNullEvaluator(buildReferenceEvaluator(tree.getChild(0)));
-                       default:
-                               throw new HL7QueryParsingException("Cannot 
build boolean evaluator for '" + tree.getText() + "'");
-               }
-       }
-       
-       
-       Tree getTree() {
-               return tree;
-       }
-       
-       public String getQuery() {
-               return query;
-       }
-       
-       @Override
-       public String toString() {
-               return "HL7Query[" + query + "]";
-       }
-       
-       public static HL7Query compile(final String query) {
-               try {
+
+    private final Tree tree;
+    private final String query;
+    private final Set<Declaration> declarations = new HashSet<>();
+
+    private final List<Selection> selections;
+    private final BooleanEvaluator whereEvaluator;
+
+    private HL7Query(final Tree tree, final String query) {
+        this.tree = tree;
+        this.query = query;
+
+        List<Selection> select = null;
+        BooleanEvaluator where = null;
+        for (int i = 0; i < tree.getChildCount(); i++) {
+            final Tree child = tree.getChild(i);
+
+            switch (child.getType()) {
+                case DECLARE:
+                    processDeclare(child);
+                    break;
+                case SELECT:
+                    select = processSelect(child);
+                    break;
+                case WHERE:
+                    where = processWhere(child);
+                    break;
+                default:
+                    throw new HL7QueryParsingException("Found unexpected 
clause at root level: " + tree.getText());
+            }
+        }
+
+        this.whereEvaluator = where;
+        this.selections = select;
+    }
+
+    private void processDeclare(final Tree declare) {
+        for (int i = 0; i < declare.getChildCount(); i++) {
+            final Tree declarationTree = declare.getChild(i);
+
+            final String identifier = declarationTree.getChild(0).getText();
+            final Tree requiredOrOptionalTree = declarationTree.getChild(1);
+            final boolean required = requiredOrOptionalTree.getType() == 
REQUIRED;
+
+            final String segmentName = declarationTree.getChild(2).getText();
+
+            final Declaration declaration = new Declaration() {
+                @Override
+                public String getAlias() {
+                    return identifier;
+                }
+
+                @Override
+                public boolean isRequired() {
+                    return required;
+                }
+
+                @Override
+                public Object getDeclaredValue(final HL7Message message) {
+                    if (message == null) {
+                        return null;
+                    }
+
+                    return message.getSegments(segmentName);
+                }
+            };
+
+            declarations.add(declaration);
+        }
+    }
+
+    private List<Selection> processSelect(final Tree select) {
+        final List<Selection> selections = new ArrayList<>();
+
+        for (int i = 0; i < select.getChildCount(); i++) {
+            final Tree selectable = select.getChild(i);
+
+            final String alias = getSelectedName(selectable);
+            final Evaluator<?> selectionEvaluator = 
buildReferenceEvaluator(selectable);
+            final Selection selection = new Selection(selectionEvaluator, 
alias);
+            selections.add(selection);
+        }
+
+        return selections;
+    }
+
+    private String getSelectedName(final Tree selectable) {
+        if (selectable.getChildCount() == 0) {
+            return selectable.getText();
+        } else if (selectable.getType() == DOT) {
+            return getSelectedName(selectable.getChild(0)) + "." + 
getSelectedName(selectable.getChild(1));
+        } else {
+            return selectable.getChild(selectable.getChildCount() - 
1).getText();
+        }
+    }
+
+    private BooleanEvaluator processWhere(final Tree where) {
+        return buildBooleanEvaluator(where.getChild(0));
+    }
+
+    private Evaluator<?> buildReferenceEvaluator(final Tree tree) {
+        switch (tree.getType()) {
+            case MESSAGE:
+                return new MessageEvaluator();
+            case SEGMENT_NAME:
+                return new SegmentEvaluator(new 
StringLiteralEvaluator(tree.getText()));
+            case IDENTIFIER:
+                return new DeclaredReferenceEvaluator(new 
StringLiteralEvaluator(tree.getText()));
+            case DOT:
+                final Tree firstChild = tree.getChild(0);
+                final Tree secondChild = tree.getChild(1);
+                return new DotEvaluator(buildReferenceEvaluator(firstChild), 
buildIntegerEvaluator(secondChild));
+            case STRING_LITERAL:
+                return new StringLiteralEvaluator(tree.getText());
+            case NUMBER:
+                return new 
IntegerLiteralEvaluator(Integer.parseInt(tree.getText()));
+            default:
+                throw new HL7QueryParsingException("Failed to build evaluator 
for " + tree.getText());
+        }
+    }
+
+    private IntegerEvaluator buildIntegerEvaluator(final Tree tree) {
+        switch (tree.getType()) {
+            case NUMBER:
+                return new 
IntegerLiteralEvaluator(Integer.parseInt(tree.getText()));
+            default:
+                throw new HL7QueryParsingException("Failed to build Integer 
Evaluator for " + tree.getText());
+        }
+    }
+
+    private BooleanEvaluator buildBooleanEvaluator(final Tree tree) {
+        // TODO: add Date comparisons
+        // LT/GT/GE/GE should allow for dates based on Field's Type
+        // BETWEEN
+        // DATE('2015/01/01')
+        // DATE('2015/01/01 12:00:00')
+        // DATE('24 HOURS AGO')
+        // DATE('YESTERDAY')
+
+        switch (tree.getType()) {
+            case EQUALS:
+                return new 
EqualsEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
+            case NOT_EQUALS:
+                return new 
NotEqualsEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
+            case GT:
+                return new 
GreaterThanEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
+            case LT:
+                return new 
LessThanEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
+            case GE:
+                return new 
GreaterThanOrEqualEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
+            case LE:
+                return new 
LessThanOrEqualEvaluator(buildReferenceEvaluator(tree.getChild(0)), 
buildReferenceEvaluator(tree.getChild(1)));
+            case NOT:
+                return new 
NotEvaluator(buildBooleanEvaluator(tree.getChild(0)));
+            case AND:
+                return new 
AndEvaluator(buildBooleanEvaluator(tree.getChild(0)), 
buildBooleanEvaluator(tree.getChild(1)));
+            case OR:
+                return new 
OrEvaluator(buildBooleanEvaluator(tree.getChild(0)), 
buildBooleanEvaluator(tree.getChild(1)));
+            case IS_NULL:
+                return new 
IsNullEvaluator(buildReferenceEvaluator(tree.getChild(0)));
+            case NOT_NULL:
+                return new 
NotNullEvaluator(buildReferenceEvaluator(tree.getChild(0)));
+            default:
+                throw new HL7QueryParsingException("Cannot build boolean 
evaluator for '" + tree.getText() + "'");
+        }
+    }
+
+    Tree getTree() {
+        return tree;
+    }
+
+    public String getQuery() {
+        return query;
+    }
+
+    @Override
+    public String toString() {
+        return "HL7Query[" + query + "]";
+    }
+
+    public static HL7Query compile(final String query) {
+        try {
             final CommonTokenStream lexerTokenStream = 
createTokenStream(query);
             final HL7QueryParser parser = new HL7QueryParser(lexerTokenStream);
             final Tree tree = (Tree) parser.query().getTree();
@@ -258,155 +271,114 @@ public class HL7Query {
         } catch (final Exception e) {
             throw new HL7QueryParsingException(e);
         }
-       }
-       
-       private static CommonTokenStream createTokenStream(final String 
expression) throws HL7QueryParsingException {
+    }
+
+    private static CommonTokenStream createTokenStream(final String 
expression) throws HL7QueryParsingException {
         final CharStream input = new ANTLRStringStream(expression);
         final HL7QueryLexer lexer = new HL7QueryLexer(input);
         return new CommonTokenStream(lexer);
     }
-       
-       public List<Class<?>> getReturnTypes() {
-               final List<Class<?>> returnTypes = new ArrayList<>();
-               
-               for ( final Selection selection : selections ) {
-                       returnTypes.add( selection.getEvaluator().getType() );
-               }
-               
-               return returnTypes;
-       }
-       
-       @SuppressWarnings("unchecked")
-       public QueryResult evaluate(final HL7Message message) {
-               
-               int totalIterations = 1;
-               final LinkedHashMap<String, List<Object>> possibleValueMap = 
new LinkedHashMap<>();
-               for ( final Declaration declaration : declarations ) {
-                       final Object value = 
declaration.getDeclaredValue(message);
-                       if ( value == null && declaration.isRequired() ) {
-                               return new MissedResult(selections);
-                       }
-
-                       final List<Object> possibleValues;
-                       if ( value instanceof List ) {
-                               possibleValues = (List<Object>) value;
-                       } else if ( value instanceof Collection ) {
-                               possibleValues = new 
ArrayList<Object>((Collection<Object>) value);
-                       } else {
-                               possibleValues = new ArrayList<>(1);
-                               possibleValues.add(value);
-                       }
-                       
-                       if ( possibleValues.isEmpty() ) {
-                               return new MissedResult(selections);
-                       }
-                       
-                       possibleValueMap.put(declaration.getAlias(), 
possibleValues);
-                       totalIterations *= possibleValues.size();
-               }
-
-               final Set<Map<String, Object>> resultSet = new HashSet<>();
-               for (int i=0; i < totalIterations; i++) {
-                       final Map<String, Object> aliasValues = 
assignAliases(possibleValueMap, i);
-
-                       aliasValues.put(Evaluator.MESSAGE_KEY, message);
-                       if (whereEvaluator == null || 
Boolean.TRUE.equals(whereEvaluator.evaluate(aliasValues))) {
-                               final Map<String, Object> resultMap = new 
HashMap<>();
-
-                               for ( final Selection selection : selections ) {
-                                       final Object value = 
selection.getEvaluator().evaluate(aliasValues);
-                                       resultMap.put(selection.getName(), 
value);
-                               }
-                               
-                               resultSet.add(resultMap);
-                       }
-               }
-               
-//             for ( final Declaration declaration : declarations ) {
-//                     final Object value = 
declaration.getDeclaredValue(message);
-//                     if ( value == null && declaration.isRequired() ) {
-//                             return new MissedResult(selections);
-//                     }
-//                     objectMap.put(declaration.getAlias(), value);
-//             }
-//             
-//             if (whereEvaluator == null || 
Boolean.TRUE.equals(whereEvaluator.evaluate(objectMap))) {
-//                     for ( final Selection selection : selections ) {
-//                             final Object value = 
selection.getEvaluator().evaluate(objectMap);
-//                             resultMap.put(selection.getName(), value);
-//                     }
-//             } else {
-//                     return new MissedResult(selections);
-//             }
-               
-               return new StandardQueryResult(selections, resultSet);
-       }
-       
-       
-       // assigns one of the possible values to each alias, based on which 
iteration this is.
-       // require LinkedHashMap just to be very clear and explicit that the 
order of the Map MUST be guaranteed
-       // between multiple invocations of this method.
-       // package protected for testing visibility
-//     static Map<String, Object> assignAliases(final LinkedHashMap<String, 
List<Object>> possibleValues, final int iteration) {
-//             final Map<String, Object> aliasMap = new HashMap<>();
-//             
-//             int aliasIndex = possibleValues.size() - 1;
-//             for ( final Map.Entry<String, List<Object>> entry : 
possibleValues.entrySet() ) {
-//                     final String alias = entry.getKey();
-//                     final List<Object> validValues = entry.getValue();
-//
-//                     final int validValueIndex;
-//                     if (aliasIndex > 0) {
-//                             validValueIndex = iteration / aliasIndex;
-//                     } else {
-//                             validValueIndex = iteration;
-//                     }
-//                     
-//                     final Object obj = validValues.get(validValueIndex % 
validValues.size());
-//                     aliasMap.put(alias, obj);
-//                     
-//                     aliasIndex--;
-//             }
-//             
-//             return aliasMap;
-//     }
-//     
-       
-       static Map<String, Object> assignAliases(final LinkedHashMap<String, 
List<Object>> possibleValues, final int iteration) {
-               final Map<String, Object> aliasMap = new HashMap<>();
-               
-               int divisor = 1;
-               for ( final Map.Entry<String, List<Object>> entry : 
possibleValues.entrySet() ) {
-                       final String alias = entry.getKey();
-                       final List<Object> validValues = entry.getValue();
-
-                       final int idx = (iteration / divisor) % 
validValues.size();
-                       final Object obj = validValues.get(idx);
-                       aliasMap.put(alias, obj);
-                       
-                       divisor *= validValues.size();
-               }
-               
-               return aliasMap;
-       }
-       
-       public String toTreeString() {
-               final StringBuilder sb = new StringBuilder();
-               toTreeString(tree, sb, 0);
-               return sb.toString();
-       }
-       
-       private void toTreeString(final Tree tree, final StringBuilder sb, 
final int indentLevel) {
-               final String nodeName = tree.getText();
-               for (int i=0; i < indentLevel; i++) {
-                       sb.append(" ");
-               }
-               sb.append(nodeName);
-               sb.append("\n");
-               
-               for (int i=0; i < tree.getChildCount(); i++) {
-                       final Tree child = tree.getChild(i);
-                       toTreeString(child, sb, indentLevel + 2);
-               }
-       }
+
+    public List<Class<?>> getReturnTypes() {
+        final List<Class<?>> returnTypes = new ArrayList<>();
+
+        for (final Selection selection : selections) {
+            returnTypes.add(selection.getEvaluator().getType());
+        }
+
+        return returnTypes;
+    }
+
+    @SuppressWarnings("unchecked")
+    public QueryResult evaluate(final HL7Message message) {
+
+        int totalIterations = 1;
+        final LinkedHashMap<String, List<Object>> possibleValueMap = new 
LinkedHashMap<>();
+        for (final Declaration declaration : declarations) {
+            final Object value = declaration.getDeclaredValue(message);
+            if (value == null && declaration.isRequired()) {
+                return new MissedResult(selections);
+            }
+
+            final List<Object> possibleValues;
+            if (value instanceof List) {
+                possibleValues = (List<Object>) value;
+            } else if (value instanceof Collection) {
+                possibleValues = new ArrayList<Object>((Collection<Object>) 
value);
+            } else {
+                possibleValues = new ArrayList<>(1);
+                possibleValues.add(value);
+            }
+
+            if (possibleValues.isEmpty()) {
+                return new MissedResult(selections);
+            }
+
+            possibleValueMap.put(declaration.getAlias(), possibleValues);
+            totalIterations *= possibleValues.size();
+        }
+
+        final Set<Map<String, Object>> resultSet = new HashSet<>();
+        for (int i = 0; i < totalIterations; i++) {
+            final Map<String, Object> aliasValues = 
assignAliases(possibleValueMap, i);
+
+            aliasValues.put(Evaluator.MESSAGE_KEY, message);
+            if (whereEvaluator == null || 
Boolean.TRUE.equals(whereEvaluator.evaluate(aliasValues))) {
+                final Map<String, Object> resultMap = new HashMap<>();
+
+                for (final Selection selection : selections) {
+                    final Object value = 
selection.getEvaluator().evaluate(aliasValues);
+                    resultMap.put(selection.getName(), value);
+                }
+
+                resultSet.add(resultMap);
+            }
+        }
+
+        return new StandardQueryResult(selections, resultSet);
+    }
+
+    /**
+     * assigns one of the possible values to each alias, based on which 
iteration this is.
+     * require LinkedHashMap just to be very clear and explicit that the order 
of the Map MUST be guaranteed
+     * between multiple invocations of this method.
+     * package protected for testing visibility
+     */
+    static Map<String, Object> assignAliases(final LinkedHashMap<String, 
List<Object>> possibleValues, final int iteration) {
+        final Map<String, Object> aliasMap = new HashMap<>();
+
+        int divisor = 1;
+        for (final Map.Entry<String, List<Object>> entry : 
possibleValues.entrySet()) {
+            final String alias = entry.getKey();
+            final List<Object> validValues = entry.getValue();
+
+            final int idx = (iteration / divisor) % validValues.size();
+            final Object obj = validValues.get(idx);
+            aliasMap.put(alias, obj);
+
+            divisor *= validValues.size();
+        }
+
+        return aliasMap;
+    }
+
+    public String toTreeString() {
+        final StringBuilder sb = new StringBuilder();
+        toTreeString(tree, sb, 0);
+        return sb.toString();
+    }
+
+    private void toTreeString(final Tree tree, final StringBuilder sb, final 
int indentLevel) {
+        final String nodeName = tree.getText();
+        for (int i = 0; i < indentLevel; i++) {
+            sb.append(" ");
+        }
+        sb.append(nodeName);
+        sb.append("\n");
+
+        for (int i = 0; i < tree.getChildCount(); i++) {
+            final Tree child = tree.getChild(i);
+            toTreeString(child, sb, indentLevel + 2);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/QueryResult.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/QueryResult.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/QueryResult.java
index b198bc7..033ac0a 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/QueryResult.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/QueryResult.java
@@ -19,11 +19,12 @@ package org.apache.nifi.hl7.query;
 import java.util.List;
 
 public interface QueryResult {
-       boolean isMatch();
-       
-       List<String> getLabels();
-       
-       int getHitCount();
-       
-       ResultHit nextHit();
+
+    boolean isMatch();
+
+    List<String> getLabels();
+
+    int getHitCount();
+
+    ResultHit nextHit();
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/ResultHit.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/ResultHit.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/ResultHit.java
index ee97e5d..9eb1d8f 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/ResultHit.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/ResultHit.java
@@ -19,7 +19,8 @@ package org.apache.nifi.hl7.query;
 import java.util.Map;
 
 public interface ResultHit {
-       Object getValue(String label);
-       
-       Map<String, Object> getSelectedValues();
+
+    Object getValue(String label);
+
+    Map<String, Object> getSelectedValues();
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Selection.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Selection.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Selection.java
index 36a181f..7b5b7b3 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Selection.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/Selection.java
@@ -19,19 +19,20 @@ package org.apache.nifi.hl7.query;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class Selection {
-       private final Evaluator<?> evaluator;
-       private final String name;
-       
-       public Selection(final Evaluator<?> evaluator, final String name) {
-               this.evaluator = evaluator;
-               this.name = name;
-       }
-       
-       public String getName() {
-               return name;
-       }
-       
-       public Evaluator<?> getEvaluator() {
-               return evaluator;
-       }
+
+    private final Evaluator<?> evaluator;
+    private final String name;
+
+    public Selection(final Evaluator<?> evaluator, final String name) {
+        this.evaluator = evaluator;
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Evaluator<?> getEvaluator() {
+        return evaluator;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/BooleanEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/BooleanEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/BooleanEvaluator.java
index fdd807e..98b077e 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/BooleanEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/BooleanEvaluator.java
@@ -18,7 +18,7 @@ package org.apache.nifi.hl7.query.evaluator;
 
 public abstract class BooleanEvaluator implements Evaluator<Boolean> {
 
-       public Class<? extends Boolean> getType() {
-               return Boolean.class;
-       }
+    public Class<? extends Boolean> getType() {
+        return Boolean.class;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/Evaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/Evaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/Evaluator.java
index d86c30e..2d1ddc7 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/Evaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/Evaluator.java
@@ -19,9 +19,10 @@ package org.apache.nifi.hl7.query.evaluator;
 import java.util.Map;
 
 public interface Evaluator<T> {
-       public static final String MESSAGE_KEY = "message";
-       
-       T evaluate(Map<String, Object> objectMap);
-       
-       Class<? extends T> getType();
+
+    public static final String MESSAGE_KEY = "message";
+
+    T evaluate(Map<String, Object> objectMap);
+
+    Class<? extends T> getType();
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/IntegerEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/IntegerEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/IntegerEvaluator.java
index 6afa9ed..ed56d80 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/IntegerEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/IntegerEvaluator.java
@@ -16,11 +16,10 @@
  */
 package org.apache.nifi.hl7.query.evaluator;
 
-
 public abstract class IntegerEvaluator implements Evaluator<Integer> {
 
-       public Class<? extends Integer> getType() {
-               return Integer.class;
-       }
+    public Class<? extends Integer> getType() {
+        return Integer.class;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/StringEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/StringEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/StringEvaluator.java
index 5f73649..53ab004 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/StringEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/StringEvaluator.java
@@ -18,8 +18,8 @@ package org.apache.nifi.hl7.query.evaluator;
 
 public abstract class StringEvaluator implements Evaluator<String> {
 
-       public Class<? extends String> getType() {
-               return String.class;
-       }
-       
+    public Class<? extends String> getType() {
+        return String.class;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractComparisonEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractComparisonEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractComparisonEvaluator.java
index a7fa1b7..45edf64 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractComparisonEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractComparisonEvaluator.java
@@ -24,83 +24,88 @@ import org.apache.nifi.hl7.query.evaluator.BooleanEvaluator;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public abstract class AbstractComparisonEvaluator extends BooleanEvaluator {
-       private final Evaluator<?> lhs;
-       private final Evaluator<?> rhs;
-       
-       public AbstractComparisonEvaluator(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
-               this.lhs = lhs;
-               this.rhs = rhs;
-       }
-       
-       public final Boolean evaluate(final Map<String, Object> objectMap) {
-               final Object lhsValue = lhs.evaluate(objectMap);
-               if ( lhsValue == null ) {
-                       return false;
-               }
-               
-               final Object rhsValue = rhs.evaluate(objectMap);
-               if ( rhsValue == null ) {
-                       return false;
-               }
-               
-               return compareRaw(lhsValue, rhsValue);
-       }
-       
-       
-       private Boolean compareRaw(Object lhsValue, Object rhsValue) {
-               if ( lhsValue == null || rhsValue == null ) {
-                       return false;
-               }
-
-               if ( lhsValue instanceof HL7Field ) {
-                       lhsValue = ((HL7Field) lhsValue).getValue();
-               }
-               
-               if ( rhsValue instanceof HL7Field ) {
-                       rhsValue = ((HL7Field) rhsValue).getValue();
-               }
-
-               if ( lhsValue == null || rhsValue == null ) {
-                       return false;
-               }
-               
-               // both are collections, and compare(lhsValue, rhsValue) is 
false.
-               // this would be the case, for instance, if we compared field 1 
of one segment to 
-               // a field in another segment, and both fields had components.
-               if ( lhsValue instanceof Collection && rhsValue instanceof 
Collection ) {
-                       return false;
-               }
-               
-               // if one side is a collection but the other is not, check if 
any element in that
-               // collection compares to the other element in a way that 
satisfies the condition.
-               // this would happen, for instance, if we check Segment1.Field5 
= 'X' and field 5 repeats
-               // with a value "A~B~C~X~Y~Z"; in this case we do want to 
consider Field 5 = X as true.
-               if ( lhsValue instanceof Collection ) {
-                       for ( final Object lhsObject : (Collection<?>) lhsValue 
) {
-                               if ( compareRaw(lhsObject, rhsValue) ) {
-                                       return true;
-                               }
-                       }
-                       
-                       return false;
-               }
-               
-               if ( rhsValue instanceof Collection ) {
-                       for ( final Object rhsObject : (Collection<?>) rhsValue 
) {
-                               if ( compareRaw(rhsObject, lhsValue) ) {
-                                       return true;
-                               }
-                       }
-                       
-                       return false;
-               }
-               
-               if ( lhsValue != null && rhsValue != null && compare(lhsValue, 
rhsValue) ) {
-                       return true;
-               }
-               
-               return false;
-       }
-       
-       protected abstract boolean compare(Object lhs, Object rhs);
+
+    private final Evaluator<?> lhs;
+    private final Evaluator<?> rhs;
+
+    public AbstractComparisonEvaluator(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
+        this.lhs = lhs;
+        this.rhs = rhs;
+    }
+
+    @Override
+    public final Boolean evaluate(final Map<String, Object> objectMap) {
+        final Object lhsValue = lhs.evaluate(objectMap);
+        if (lhsValue == null) {
+            return false;
+        }
+
+        final Object rhsValue = rhs.evaluate(objectMap);
+        if (rhsValue == null) {
+            return false;
+        }
+
+        return compareRaw(lhsValue, rhsValue);
+    }
+
+    private Boolean compareRaw(Object lhsValue, Object rhsValue) {
+        if (lhsValue == null || rhsValue == null) {
+            return false;
+        }
+
+        if (lhsValue instanceof HL7Field) {
+            lhsValue = ((HL7Field) lhsValue).getValue();
+        }
+
+        if (rhsValue instanceof HL7Field) {
+            rhsValue = ((HL7Field) rhsValue).getValue();
+        }
+
+        if (lhsValue == null || rhsValue == null) {
+            return false;
+        }
+
+        /**
+         * both are collections, and compare(lhsValue, rhsValue) is false.
+         * this would be the case, for instance, if we compared field 1 of one 
segment to
+         * a field in another segment, and both fields had components.
+         */
+        if (lhsValue instanceof Collection && rhsValue instanceof Collection) {
+            return false;
+        }
+
+        /**
+         * if one side is a collection but the other is not, check if any 
element in that
+         * collection compares to the other element in a way that satisfies 
the condition.
+         * this would happen, for instance, if we check Segment1.Field5 = 'X' 
and field 5 repeats
+         * with a value "A~B~C~X~Y~Z"; in this case we do want to consider 
Field 5 = X as true.
+         */
+        if (lhsValue instanceof Collection) {
+            for (final Object lhsObject : (Collection<?>) lhsValue) {
+                if (compareRaw(lhsObject, rhsValue)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        if (rhsValue instanceof Collection) {
+            for (final Object rhsObject : (Collection<?>) rhsValue) {
+                if (compareRaw(rhsObject, lhsValue)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        if (lhsValue != null && rhsValue != null && compare(lhsValue, 
rhsValue)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    protected abstract boolean compare(Object lhs, Object rhs);
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractNumericComparison.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractNumericComparison.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractNumericComparison.java
index 2529c49..d74e9cf 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractNumericComparison.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/AbstractNumericComparison.java
@@ -21,47 +21,48 @@ import java.util.regex.Pattern;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public abstract class AbstractNumericComparison extends 
AbstractComparisonEvaluator {
-       private static final Pattern NUMERIC_PATTERN = 
Pattern.compile("\\d+(\\.\\d+)?");
-       
-       public AbstractNumericComparison(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
-               super(lhs, rhs);
-       }
-       
-       @Override
-       protected final boolean compare(final Object lhs, final Object rhs) {
-               final Double lhsDouble = toDouble(lhs);
-               if ( lhsDouble == null ) {
-                       return false;
-               }
-               
-               final Double rhsDouble = toDouble(rhs);
-               if ( rhsDouble == null ) {
-                       return false;
-               }
-               
-               return compareNumbers(lhsDouble, rhsDouble);
-       }
 
-       private Double toDouble(final Object value) {
-               if ( value == null ) {
-                       return null;
-               }
-               
-               if ( value instanceof Double ) {
-                       return (Double) value;
-               }
-               if ( value instanceof Number ) {
-                       return ((Number) value).doubleValue();
-               }
-               
-               if ( value instanceof String ) {
-                       if ( NUMERIC_PATTERN.matcher((String) value).matches() 
) {
-                               return Double.parseDouble((String) value);
-                       }
-               }
-               
-               return null;
-       }
-       
-       protected abstract boolean compareNumbers(final Double lhs, final 
Double rhs);
+    private static final Pattern NUMERIC_PATTERN = 
Pattern.compile("\\d+(\\.\\d+)?");
+
+    public AbstractNumericComparison(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
+        super(lhs, rhs);
+    }
+
+    @Override
+    protected final boolean compare(final Object lhs, final Object rhs) {
+        final Double lhsDouble = toDouble(lhs);
+        if (lhsDouble == null) {
+            return false;
+        }
+
+        final Double rhsDouble = toDouble(rhs);
+        if (rhsDouble == null) {
+            return false;
+        }
+
+        return compareNumbers(lhsDouble, rhsDouble);
+    }
+
+    private Double toDouble(final Object value) {
+        if (value == null) {
+            return null;
+        }
+
+        if (value instanceof Double) {
+            return (Double) value;
+        }
+        if (value instanceof Number) {
+            return ((Number) value).doubleValue();
+        }
+
+        if (value instanceof String) {
+            if (NUMERIC_PATTERN.matcher((String) value).matches()) {
+                return Double.parseDouble((String) value);
+            }
+        }
+
+        return null;
+    }
+
+    protected abstract boolean compareNumbers(final Double lhs, final Double 
rhs);
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/EqualsEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/EqualsEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/EqualsEvaluator.java
index 7ee2f87..fa6c57b 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/EqualsEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/EqualsEvaluator.java
@@ -20,13 +20,13 @@ import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class EqualsEvaluator extends AbstractComparisonEvaluator {
 
-       public EqualsEvaluator(final Evaluator<?> lhs, final Evaluator<?> rhs) {
-               super(lhs, rhs);
-       }
-       
-       @Override
-       protected boolean compare(final Object lhs, final Object rhs) {
-               return lhs != null && rhs != null && ((lhs == rhs) || 
(lhs.equals(rhs)) || lhs.toString().equals(rhs.toString()));
-       }
+    public EqualsEvaluator(final Evaluator<?> lhs, final Evaluator<?> rhs) {
+        super(lhs, rhs);
+    }
+
+    @Override
+    protected boolean compare(final Object lhs, final Object rhs) {
+        return lhs != null && rhs != null && ((lhs == rhs) || 
(lhs.equals(rhs)) || lhs.toString().equals(rhs.toString()));
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanEvaluator.java
index bf8596e..cfef7b5 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanEvaluator.java
@@ -18,17 +18,15 @@ package org.apache.nifi.hl7.query.evaluator.comparison;
 
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
-
 public class GreaterThanEvaluator extends AbstractNumericComparison {
 
-       public GreaterThanEvaluator(final Evaluator<?> lhs, final Evaluator<?> 
rhs) {
-               super(lhs, rhs);
-       }
+    public GreaterThanEvaluator(final Evaluator<?> lhs, final Evaluator<?> 
rhs) {
+        super(lhs, rhs);
+    }
 
-       @Override
-       protected boolean compareNumbers(final Double lhs, final Double rhs) {
-               return lhs > rhs;
-       }
+    @Override
+    protected boolean compareNumbers(final Double lhs, final Double rhs) {
+        return lhs > rhs;
+    }
 
-       
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanOrEqualEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanOrEqualEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanOrEqualEvaluator.java
index 69115a3..d9da6f7 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanOrEqualEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/GreaterThanOrEqualEvaluator.java
@@ -18,17 +18,15 @@ package org.apache.nifi.hl7.query.evaluator.comparison;
 
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
-
 public class GreaterThanOrEqualEvaluator extends AbstractNumericComparison {
 
-       public GreaterThanOrEqualEvaluator(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
-               super(lhs, rhs);
-       }
+    public GreaterThanOrEqualEvaluator(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
+        super(lhs, rhs);
+    }
 
-       @Override
-       protected boolean compareNumbers(final Double lhs, final Double rhs) {
-               return lhs >= rhs;
-       }
+    @Override
+    protected boolean compareNumbers(final Double lhs, final Double rhs) {
+        return lhs >= rhs;
+    }
 
-       
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/IsNullEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/IsNullEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/IsNullEvaluator.java
index 69d481e..0f16dd9 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/IsNullEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/IsNullEvaluator.java
@@ -24,46 +24,47 @@ import org.apache.nifi.hl7.query.evaluator.BooleanEvaluator;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class IsNullEvaluator extends BooleanEvaluator {
-       private final Evaluator<?> subjectEvaluator;
-       
-       public IsNullEvaluator(final Evaluator<?> subjectEvaluator) {
-               this.subjectEvaluator = subjectEvaluator;
-       }
-       
-       @Override
-       public Boolean evaluate(final Map<String, Object> objectMap) {
-               Object subjectValue = subjectEvaluator.evaluate(objectMap);
-               if ( subjectValue == null ) {
-                       return true;
-               }
-               
-               return isNull(subjectValue);
-       }
 
-       private boolean isNull(Object subjectValue) {
-               if ( subjectValue == null ) {
-                       return true;
-               }
-               
-               if ( subjectValue instanceof HL7Component ) {
-                       subjectValue = ((HL7Component) subjectValue).getValue();
-               }
-               
-               if ( subjectValue instanceof Collection ) {
-                       final Collection<?> collection = (Collection<?>) 
subjectValue;
-                       if ( collection.isEmpty() ) {
-                               return true;
-                       }
-                       
-                       for ( final Object obj : collection ) {
-                               if ( !isNull(obj) ) {
-                                       return false;
-                               }
-                       }
-                       
-                       return true;
-               }
-               
-               return subjectValue == null;
-       }
+    private final Evaluator<?> subjectEvaluator;
+
+    public IsNullEvaluator(final Evaluator<?> subjectEvaluator) {
+        this.subjectEvaluator = subjectEvaluator;
+    }
+
+    @Override
+    public Boolean evaluate(final Map<String, Object> objectMap) {
+        Object subjectValue = subjectEvaluator.evaluate(objectMap);
+        if (subjectValue == null) {
+            return true;
+        }
+
+        return isNull(subjectValue);
+    }
+
+    private boolean isNull(Object subjectValue) {
+        if (subjectValue == null) {
+            return true;
+        }
+
+        if (subjectValue instanceof HL7Component) {
+            subjectValue = ((HL7Component) subjectValue).getValue();
+        }
+
+        if (subjectValue instanceof Collection) {
+            final Collection<?> collection = (Collection<?>) subjectValue;
+            if (collection.isEmpty()) {
+                return true;
+            }
+
+            for (final Object obj : collection) {
+                if (!isNull(obj)) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        return subjectValue == null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanEvaluator.java
index 891d5e4..2805860 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanEvaluator.java
@@ -19,13 +19,14 @@ package org.apache.nifi.hl7.query.evaluator.comparison;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class LessThanEvaluator extends AbstractNumericComparison {
-       public LessThanEvaluator(final Evaluator<?> lhs, final Evaluator<?> 
rhs) {
-               super(lhs, rhs);
-       }
 
-       @Override
-       protected boolean compareNumbers(final Double lhs, final Double rhs) {
-               return lhs < rhs;
-       }
+    public LessThanEvaluator(final Evaluator<?> lhs, final Evaluator<?> rhs) {
+        super(lhs, rhs);
+    }
+
+    @Override
+    protected boolean compareNumbers(final Double lhs, final Double rhs) {
+        return lhs < rhs;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanOrEqualEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanOrEqualEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanOrEqualEvaluator.java
index c6fb097..e7eb156 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanOrEqualEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/LessThanOrEqualEvaluator.java
@@ -19,13 +19,14 @@ package org.apache.nifi.hl7.query.evaluator.comparison;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class LessThanOrEqualEvaluator extends AbstractNumericComparison {
-       public LessThanOrEqualEvaluator(final Evaluator<?> lhs, final 
Evaluator<?> rhs) {
-               super(lhs, rhs);
-       }
 
-       @Override
-       protected boolean compareNumbers(final Double lhs, final Double rhs) {
-               return lhs <= rhs;
-       }
+    public LessThanOrEqualEvaluator(final Evaluator<?> lhs, final Evaluator<?> 
rhs) {
+        super(lhs, rhs);
+    }
+
+    @Override
+    protected boolean compareNumbers(final Double lhs, final Double rhs) {
+        return lhs <= rhs;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEqualsEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEqualsEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEqualsEvaluator.java
index b7c1ce2..98715ff 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEqualsEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEqualsEvaluator.java
@@ -19,14 +19,14 @@ package org.apache.nifi.hl7.query.evaluator.comparison;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class NotEqualsEvaluator extends AbstractComparisonEvaluator {
-       
-       public NotEqualsEvaluator(final Evaluator<?> lhs, final Evaluator<?> 
rhs) {
-               super(lhs, rhs);
-       }
 
-       @Override
-       protected boolean compare(final Object lhs, final Object rhs) {
-               return lhs != null && rhs != null && lhs != rhs && 
!lhs.equals(rhs) && !lhs.toString().equals(rhs.toString());
-       }
+    public NotEqualsEvaluator(final Evaluator<?> lhs, final Evaluator<?> rhs) {
+        super(lhs, rhs);
+    }
+
+    @Override
+    protected boolean compare(final Object lhs, final Object rhs) {
+        return lhs != null && rhs != null && lhs != rhs && !lhs.equals(rhs) && 
!lhs.toString().equals(rhs.toString());
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEvaluator.java
index 58888d9..3343c1c 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEvaluator.java
@@ -21,16 +21,17 @@ import java.util.Map;
 import org.apache.nifi.hl7.query.evaluator.BooleanEvaluator;
 
 public class NotEvaluator extends BooleanEvaluator {
-       private final BooleanEvaluator subjectEvaluator;
-       
-       public NotEvaluator(final BooleanEvaluator subjectEvaluator) {
-               this.subjectEvaluator = subjectEvaluator;
-       }
-       
-       @Override
-       public Boolean evaluate(final Map<String, Object> objectMap) {
-               final Boolean subjectValue = 
subjectEvaluator.evaluate(objectMap);
-               return (subjectValue == null || 
Boolean.TRUE.equals(subjectValue));
-       }
+
+    private final BooleanEvaluator subjectEvaluator;
+
+    public NotEvaluator(final BooleanEvaluator subjectEvaluator) {
+        this.subjectEvaluator = subjectEvaluator;
+    }
+
+    @Override
+    public Boolean evaluate(final Map<String, Object> objectMap) {
+        final Boolean subjectValue = subjectEvaluator.evaluate(objectMap);
+        return (subjectValue == null || Boolean.TRUE.equals(subjectValue));
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotNullEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotNullEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotNullEvaluator.java
index a764fef..80d6c45 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotNullEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotNullEvaluator.java
@@ -24,42 +24,43 @@ import org.apache.nifi.hl7.query.evaluator.BooleanEvaluator;
 import org.apache.nifi.hl7.query.evaluator.Evaluator;
 
 public class NotNullEvaluator extends BooleanEvaluator {
-       private final Evaluator<?> subjectEvaluator;
-       
-       public NotNullEvaluator(final Evaluator<?> subjectEvaluator) {
-               this.subjectEvaluator = subjectEvaluator;
-       }
-       
-       @Override
-       public Boolean evaluate(final Map<String, Object> objectMap) {
-               Object subjectValue = subjectEvaluator.evaluate(objectMap);
-               if ( subjectValue == null ) {
-                       return false;
-               }
-               
-               return isNotNull(subjectValue);
-       }
 
-       private boolean isNotNull(Object subjectValue) {
-               if ( subjectValue instanceof HL7Component ) {
-                       subjectValue = ((HL7Component) subjectValue).getValue();
-               }
-               
-               if ( subjectValue instanceof Collection ) {
-                       final Collection<?> collection = (Collection<?>) 
subjectValue;
-                       if ( collection.isEmpty() ) {
-                               return false;
-                       }
-                       
-                       for ( final Object obj : collection ) {
-                               if ( isNotNull(obj) ) {
-                                       return true;
-                               }
-                       }
-                       
-                       return false;
-               }
-               
-               return subjectValue != null;
-       }
+    private final Evaluator<?> subjectEvaluator;
+
+    public NotNullEvaluator(final Evaluator<?> subjectEvaluator) {
+        this.subjectEvaluator = subjectEvaluator;
+    }
+
+    @Override
+    public Boolean evaluate(final Map<String, Object> objectMap) {
+        Object subjectValue = subjectEvaluator.evaluate(objectMap);
+        if (subjectValue == null) {
+            return false;
+        }
+
+        return isNotNull(subjectValue);
+    }
+
+    private boolean isNotNull(Object subjectValue) {
+        if (subjectValue instanceof HL7Component) {
+            subjectValue = ((HL7Component) subjectValue).getValue();
+        }
+
+        if (subjectValue instanceof Collection) {
+            final Collection<?> collection = (Collection<?>) subjectValue;
+            if (collection.isEmpty()) {
+                return false;
+            }
+
+            for (final Object obj : collection) {
+                if (isNotNull(obj)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        return subjectValue != null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/IntegerLiteralEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/IntegerLiteralEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/IntegerLiteralEvaluator.java
index c6ff6e4..dfceee4 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/IntegerLiteralEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/IntegerLiteralEvaluator.java
@@ -21,16 +21,16 @@ import java.util.Map;
 import org.apache.nifi.hl7.query.evaluator.IntegerEvaluator;
 
 public class IntegerLiteralEvaluator extends IntegerEvaluator {
-       private final Integer value;
-       
-       public IntegerLiteralEvaluator(final Integer value) {
-               this.value = value;
-       }
-       
-       
-       @Override
-       public Integer evaluate(final Map<String, Object> objectMap) {
-               return value;
-       }
+
+    private final Integer value;
+
+    public IntegerLiteralEvaluator(final Integer value) {
+        this.value = value;
+    }
+
+    @Override
+    public Integer evaluate(final Map<String, Object> objectMap) {
+        return value;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/StringLiteralEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/StringLiteralEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/StringLiteralEvaluator.java
index 3b29611..278ac1d 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/StringLiteralEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/StringLiteralEvaluator.java
@@ -21,15 +21,16 @@ import java.util.Map;
 import org.apache.nifi.hl7.query.evaluator.StringEvaluator;
 
 public class StringLiteralEvaluator extends StringEvaluator {
-       private final String value;
-       
-       public StringLiteralEvaluator(final String value) {
-               this.value = value;
-       }
-       
-       @Override
-       public String evaluate(final Map<String, Object> objectMap) {
-               return value;
-       }
+
+    private final String value;
+
+    public StringLiteralEvaluator(final String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String evaluate(final Map<String, Object> objectMap) {
+        return value;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/AndEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/AndEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/AndEvaluator.java
index 21f596e..989cee4 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/AndEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/AndEvaluator.java
@@ -21,23 +21,24 @@ import java.util.Map;
 import org.apache.nifi.hl7.query.evaluator.BooleanEvaluator;
 
 public class AndEvaluator extends BooleanEvaluator {
-       private final BooleanEvaluator lhs;
-       private final BooleanEvaluator rhs;
-       
-       public AndEvaluator(final BooleanEvaluator lhs, final BooleanEvaluator 
rhs) {
-               this.lhs = lhs;
-               this.rhs = rhs;
-       }
-       
-       @Override
-       public Boolean evaluate(final Map<String, Object> objectMap) {
-               final Boolean lhsValue = lhs.evaluate(objectMap);
-               if ( lhsValue == null || Boolean.FALSE.equals(lhsValue) ) {
-                       return false;
-               }
-               
-               final Boolean rhsValue = rhs.evaluate(objectMap);
-               return (rhsValue != null && Boolean.TRUE.equals(rhsValue));
-       }
+
+    private final BooleanEvaluator lhs;
+    private final BooleanEvaluator rhs;
+
+    public AndEvaluator(final BooleanEvaluator lhs, final BooleanEvaluator 
rhs) {
+        this.lhs = lhs;
+        this.rhs = rhs;
+    }
+
+    @Override
+    public Boolean evaluate(final Map<String, Object> objectMap) {
+        final Boolean lhsValue = lhs.evaluate(objectMap);
+        if (lhsValue == null || Boolean.FALSE.equals(lhsValue)) {
+            return false;
+        }
+
+        final Boolean rhsValue = rhs.evaluate(objectMap);
+        return (rhsValue != null && Boolean.TRUE.equals(rhsValue));
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/OrEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/OrEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/OrEvaluator.java
index d090946..e86daad 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/OrEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/OrEvaluator.java
@@ -21,23 +21,24 @@ import java.util.Map;
 import org.apache.nifi.hl7.query.evaluator.BooleanEvaluator;
 
 public class OrEvaluator extends BooleanEvaluator {
-       private final BooleanEvaluator lhs;
-       private final BooleanEvaluator rhs;
-       
-       public OrEvaluator(final BooleanEvaluator lhs, final BooleanEvaluator 
rhs) {
-               this.lhs = lhs;
-               this.rhs = rhs;
-       }
-       
-       @Override
-       public Boolean evaluate(final Map<String, Object> objectMap) {
-               final Boolean lhsValue = lhs.evaluate(objectMap);
-               if ( lhsValue != null && Boolean.TRUE.equals(lhsValue) ) {
-                       return true;
-               }
-               
-               final Boolean rhsValue = rhs.evaluate(objectMap);
-               return (rhsValue != null && Boolean.TRUE.equals(rhsValue));
-       }
+
+    private final BooleanEvaluator lhs;
+    private final BooleanEvaluator rhs;
+
+    public OrEvaluator(final BooleanEvaluator lhs, final BooleanEvaluator rhs) 
{
+        this.lhs = lhs;
+        this.rhs = rhs;
+    }
+
+    @Override
+    public Boolean evaluate(final Map<String, Object> objectMap) {
+        final Boolean lhsValue = lhs.evaluate(objectMap);
+        if (lhsValue != null && Boolean.TRUE.equals(lhsValue)) {
+            return true;
+        }
+
+        final Boolean rhsValue = rhs.evaluate(objectMap);
+        return (rhsValue != null && Boolean.TRUE.equals(rhsValue));
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DeclaredReferenceEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DeclaredReferenceEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DeclaredReferenceEvaluator.java
index 6afb8d7..bb3f203 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DeclaredReferenceEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DeclaredReferenceEvaluator.java
@@ -22,21 +22,22 @@ import org.apache.nifi.hl7.query.evaluator.Evaluator;
 import org.apache.nifi.hl7.query.evaluator.StringEvaluator;
 
 public class DeclaredReferenceEvaluator implements Evaluator<Object> {
-       private final StringEvaluator referenceNameEvaluator;
-       
-       public DeclaredReferenceEvaluator(final StringEvaluator 
referenceNameEvaluator) {
-               this.referenceNameEvaluator = referenceNameEvaluator;
-       }
-       
-       @Override
-       public Object evaluate(final Map<String, Object> objectMap) {
-               final String referenceName = 
referenceNameEvaluator.evaluate(objectMap);
-               return objectMap.get(referenceName);
-       }
-
-       @Override
-       public Class<? extends Object> getType() {
-               return Object.class;
-       }
+
+    private final StringEvaluator referenceNameEvaluator;
+
+    public DeclaredReferenceEvaluator(final StringEvaluator 
referenceNameEvaluator) {
+        this.referenceNameEvaluator = referenceNameEvaluator;
+    }
+
+    @Override
+    public Object evaluate(final Map<String, Object> objectMap) {
+        final String referenceName = 
referenceNameEvaluator.evaluate(objectMap);
+        return objectMap.get(referenceName);
+    }
+
+    @Override
+    public Class<? extends Object> getType() {
+        return Object.class;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9faaef8c/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DotEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DotEvaluator.java
 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DotEvaluator.java
index c5fbf41..238b540 100644
--- 
a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DotEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DotEvaluator.java
@@ -28,61 +28,62 @@ import org.apache.nifi.hl7.query.evaluator.Evaluator;
 import org.apache.nifi.hl7.query.evaluator.IntegerEvaluator;
 
 public class DotEvaluator implements Evaluator<Object> {
-       private final Evaluator<?> lhs;
-       private final IntegerEvaluator rhs;
-       
-       public DotEvaluator(final Evaluator<?> lhs, final IntegerEvaluator rhs) 
{
-               this.lhs = lhs;
-               this.rhs = rhs;
-       }
-       
-       @Override
-       public Object evaluate(final Map<String, Object> objectMap) {
-               final Object lhsValue = this.lhs.evaluate(objectMap);
-               final Integer rhsValue = this.rhs.evaluate(objectMap);
-               
-               if ( lhsValue == null || rhsValue == null ) {
-                       return null;
-               }
-               
-               final List<Object> results = new ArrayList<>();
-               if ( lhsValue instanceof Collection ) {
-                       final Collection<?> lhsCollection = (Collection<?>) 
lhsValue;
-                       for ( final Object obj : lhsCollection ) {
-                               final Object val = getValue(obj, rhsValue);
-                               results.add(val);
-                       }
-               } else {
-                       final Object val = getValue(lhsValue, rhsValue);
-                       return val;
-               }
-               
-               return results;
-       }
-       
-       private Object getValue(final Object lhsValue, final int rhsValue) {
-               final List<?> list;
-               if ( lhsValue instanceof HL7Message ) {
-                       list = ((HL7Message) lhsValue).getSegments();
-               } else if ( lhsValue instanceof HL7Segment ) {
-                       list = ((HL7Segment) lhsValue).getFields();
-               } else if ( lhsValue instanceof HL7Component ) {
-                       list = ((HL7Component) lhsValue).getComponents();
-               } else {
-                       return null;
-               }
-               
-               if ( rhsValue > list.size() ) {
-                       return null;
-               }
-               
-               // convert from 0-based to 1-based
-               return list.get(rhsValue - 1);
-       }
 
-       @Override
-       public Class<? extends Object> getType() {
-               return Object.class;
-       }
+    private final Evaluator<?> lhs;
+    private final IntegerEvaluator rhs;
+
+    public DotEvaluator(final Evaluator<?> lhs, final IntegerEvaluator rhs) {
+        this.lhs = lhs;
+        this.rhs = rhs;
+    }
+
+    @Override
+    public Object evaluate(final Map<String, Object> objectMap) {
+        final Object lhsValue = this.lhs.evaluate(objectMap);
+        final Integer rhsValue = this.rhs.evaluate(objectMap);
+
+        if (lhsValue == null || rhsValue == null) {
+            return null;
+        }
+
+        final List<Object> results = new ArrayList<>();
+        if (lhsValue instanceof Collection) {
+            final Collection<?> lhsCollection = (Collection<?>) lhsValue;
+            for (final Object obj : lhsCollection) {
+                final Object val = getValue(obj, rhsValue);
+                results.add(val);
+            }
+        } else {
+            final Object val = getValue(lhsValue, rhsValue);
+            return val;
+        }
+
+        return results;
+    }
+
+    private Object getValue(final Object lhsValue, final int rhsValue) {
+        final List<?> list;
+        if (lhsValue instanceof HL7Message) {
+            list = ((HL7Message) lhsValue).getSegments();
+        } else if (lhsValue instanceof HL7Segment) {
+            list = ((HL7Segment) lhsValue).getFields();
+        } else if (lhsValue instanceof HL7Component) {
+            list = ((HL7Component) lhsValue).getComponents();
+        } else {
+            return null;
+        }
+
+        if (rhsValue > list.size()) {
+            return null;
+        }
+
+        // convert from 0-based to 1-based
+        return list.get(rhsValue - 1);
+    }
+
+    @Override
+    public Class<? extends Object> getType() {
+        return Object.class;
+    }
 
 }

Reply via email to