You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2015/04/10 23:21:41 UTC

[06/20] incubator-nifi git commit: NIFI-506: Initial import of HL7 work

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..b7c1ce2
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEqualsEvaluator.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package 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());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..58888d9
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotEvaluator.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.comparison;
+
+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));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..a764fef
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/comparison/NotNullEvaluator.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.comparison;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.apache.nifi.hl7.model.HL7Component;
+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;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..c6ff6e4
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/IntegerLiteralEvaluator.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.literal;
+
+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;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..3b29611
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/literal/StringLiteralEvaluator.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.literal;
+
+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;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..21f596e
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/AndEvaluator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.logic;
+
+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));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..d090946
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/logic/OrEvaluator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.logic;
+
+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));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..6afb8d7
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DeclaredReferenceEvaluator.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.message;
+
+import java.util.Map;
+
+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;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/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
new file mode 100644
index 0000000..c5fbf41
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/DotEvaluator.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.message;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.nifi.hl7.model.HL7Component;
+import org.apache.nifi.hl7.model.HL7Message;
+import org.apache.nifi.hl7.model.HL7Segment;
+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;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/FieldEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/FieldEvaluator.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/FieldEvaluator.java
new file mode 100644
index 0000000..869c2d0
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/FieldEvaluator.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.message;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.nifi.hl7.model.HL7Field;
+import org.apache.nifi.hl7.model.HL7Segment;
+import org.apache.nifi.hl7.query.evaluator.Evaluator;
+import org.apache.nifi.hl7.query.evaluator.IntegerEvaluator;
+
+@SuppressWarnings("rawtypes")
+public class FieldEvaluator implements Evaluator<List> {
+	private final SegmentEvaluator segmentEvaluator;
+	private final IntegerEvaluator indexEvaluator;
+	
+	public FieldEvaluator(final SegmentEvaluator segmentEvaluator, final IntegerEvaluator indexEvaluator) {
+		this.segmentEvaluator = segmentEvaluator;
+		this.indexEvaluator = indexEvaluator;
+	}
+	
+	public List<HL7Field> evaluate(final Map<String, Object> objectMap) {
+		final List<HL7Segment> segments = segmentEvaluator.evaluate(objectMap);
+		if ( segments == null ) {
+			return Collections.emptyList();
+		}
+		
+		final Integer index = indexEvaluator.evaluate(objectMap);
+		if ( index == null ) {
+			return Collections.emptyList();
+		}
+		
+		final List<HL7Field> fields = new ArrayList<>();
+		for ( final HL7Segment segment : segments ) {
+			final List<HL7Field> segmentFields = segment.getFields();
+			if ( segmentFields.size() <= index ) {
+				continue;
+			}
+			
+			fields.add(segmentFields.get(index));
+		}
+		
+		return fields;
+	}
+
+	public Class<? extends List> getType() {
+		return List.class;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/MessageEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/MessageEvaluator.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/MessageEvaluator.java
new file mode 100644
index 0000000..5e08961
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/MessageEvaluator.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.message;
+
+import java.util.Map;
+
+import org.apache.nifi.hl7.model.HL7Message;
+import org.apache.nifi.hl7.query.evaluator.Evaluator;
+
+public class MessageEvaluator implements Evaluator<HL7Message> {
+
+	public HL7Message evaluate(final Map<String, Object> objectMap) {
+		return (HL7Message) objectMap.get(Evaluator.MESSAGE_KEY);
+	}
+
+	public Class<? extends HL7Message> getType() {
+		return HL7Message.class;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/SegmentEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/SegmentEvaluator.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/SegmentEvaluator.java
new file mode 100644
index 0000000..1b9782d
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/evaluator/message/SegmentEvaluator.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.evaluator.message;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.nifi.hl7.model.HL7Message;
+import org.apache.nifi.hl7.model.HL7Segment;
+import org.apache.nifi.hl7.query.evaluator.Evaluator;
+import org.apache.nifi.hl7.query.evaluator.StringEvaluator;
+
+@SuppressWarnings("rawtypes")
+public class SegmentEvaluator implements Evaluator<List> {
+	private final StringEvaluator segmentTypeEvaluator;
+	
+	public SegmentEvaluator(final StringEvaluator segmentTypeEvaluator) {
+		this.segmentTypeEvaluator = segmentTypeEvaluator;
+	}
+	
+	public List<HL7Segment> evaluate(final Map<String, Object> objectMap) {
+		final String segmentType = segmentTypeEvaluator.evaluate(objectMap);
+		if ( segmentType == null ) {
+			return Collections.emptyList();
+		}
+		
+		final HL7Message message = (HL7Message) objectMap.get(Evaluator.MESSAGE_KEY);
+		final List<HL7Segment> segments = message.getSegments(segmentType);
+		return (segments == null) ? Collections.<HL7Segment>emptyList() : segments;
+	}
+
+	public Class<? extends List> getType() {
+		return List.class;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/exception/HL7QueryParsingException.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/exception/HL7QueryParsingException.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/exception/HL7QueryParsingException.java
new file mode 100644
index 0000000..998f3bc
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/exception/HL7QueryParsingException.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.exception;
+
+public class HL7QueryParsingException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+
+	public HL7QueryParsingException() {
+		super();
+	}
+	
+	public HL7QueryParsingException(final Throwable cause) {
+		super(cause);
+	}
+	
+	public HL7QueryParsingException(final String message) {
+		super(message);
+	}
+	
+	public HL7QueryParsingException(final String message, final Throwable cause) {
+		super(message, cause);
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/MissedResult.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/MissedResult.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/MissedResult.java
new file mode 100644
index 0000000..a6b36c8
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/MissedResult.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.result;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.nifi.hl7.query.QueryResult;
+import org.apache.nifi.hl7.query.ResultHit;
+import org.apache.nifi.hl7.query.Selection;
+
+public class MissedResult implements QueryResult {
+	private final List<Selection> selections;
+	
+	public MissedResult(final List<Selection> selections) {
+		this.selections = selections;
+	}
+	
+	@Override
+	public List<String> getLabels() {
+		final List<String> labels = new ArrayList<>();
+		for ( final Selection selection : selections ) {
+			labels.add(selection.getName());
+		}
+		return labels;
+	}
+
+	@Override
+	public boolean isMatch() {
+		return false;
+	}
+
+	@Override
+	public ResultHit nextHit() {
+		return null;
+	}
+	
+	@Override
+	public int getHitCount() {
+		return 0;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardQueryResult.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardQueryResult.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardQueryResult.java
new file mode 100644
index 0000000..fbc16ca
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardQueryResult.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.result;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.nifi.hl7.query.QueryResult;
+import org.apache.nifi.hl7.query.ResultHit;
+import org.apache.nifi.hl7.query.Selection;
+
+public class StandardQueryResult implements QueryResult {
+	private final List<Selection> selections;
+	private final Set<Map<String, Object>> hits;
+	private final Iterator<Map<String, Object>> hitIterator;
+	
+	public StandardQueryResult(final List<Selection> selections, final Set<Map<String, Object>> hits) {
+		this.selections = selections;
+		this.hits = hits;
+		
+		hitIterator = hits.iterator();
+	}
+	
+	@Override
+	public boolean isMatch() {
+		return !hits.isEmpty();
+	}
+
+	@Override
+	public List<String> getLabels() {
+		final List<String> labels = new ArrayList<>();
+		for ( final Selection selection : selections ) {
+			labels.add(selection.getName());
+		}
+		return labels;
+	}
+
+	@Override
+	public int getHitCount() {
+		return hits.size();
+	}
+	
+	@Override
+	public ResultHit nextHit() {
+		if ( hitIterator.hasNext() ) {
+			return new StandardResultHit(hitIterator.next());
+		} else {
+			return null;
+		}
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardResultHit.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardResultHit.java b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardResultHit.java
new file mode 100644
index 0000000..944e998
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/main/java/org/apache/nifi/hl7/query/result/StandardResultHit.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query.result;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.nifi.hl7.query.ResultHit;
+
+public class StandardResultHit implements ResultHit {
+	private final Map<String, Object> values;
+	
+	public StandardResultHit(final Map<String, Object> values) {
+		this.values = values;
+	}
+	
+	@Override
+	public Object getValue(final String label) {
+		return values.get(label);
+	}
+
+	@Override
+	public Map<String, Object> getSelectedValues() {
+		return Collections.unmodifiableMap(values);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/java/org/apache/nifi/hl7/query/TestHL7Query.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/java/org/apache/nifi/hl7/query/TestHL7Query.java b/nifi/nifi-commons/nifi-hl7-query-language/src/test/java/org/apache/nifi/hl7/query/TestHL7Query.java
new file mode 100644
index 0000000..fbe4a8d
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/java/org/apache/nifi/hl7/query/TestHL7Query.java
@@ -0,0 +1,352 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.hl7.query;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.nifi.hl7.hapi.HapiMessage;
+import org.apache.nifi.hl7.model.HL7Field;
+import org.apache.nifi.hl7.model.HL7Message;
+import org.apache.nifi.hl7.query.HL7Query;
+import org.apache.nifi.hl7.query.QueryResult;
+import org.junit.Test;
+
+import ca.uhn.hl7v2.DefaultHapiContext;
+import ca.uhn.hl7v2.HL7Exception;
+import ca.uhn.hl7v2.HapiContext;
+import ca.uhn.hl7v2.model.Message;
+import ca.uhn.hl7v2.parser.PipeParser;
+import ca.uhn.hl7v2.validation.impl.ValidationContextFactory;
+
+@SuppressWarnings("resource")
+public class TestHL7Query {
+
+	@Test
+	public void testAssignAliases() {
+		final LinkedHashMap<String, List<Object>> possibleValueMap = new LinkedHashMap<>();
+		
+		final List<Object> valuesA = new ArrayList<>();
+		valuesA.add("a");
+		valuesA.add("b");
+		valuesA.add("c");
+		
+		final List<Object> valuesB = new ArrayList<>();
+		valuesB.add("d");
+		
+		final List<Object> valuesC = new ArrayList<>();
+		valuesC.add("e");
+		valuesC.add("f");
+		
+		final List<Object> valuesD = new ArrayList<>();
+		valuesD.add("g");
+		valuesD.add("h");
+		
+		possibleValueMap.put("A", valuesA);
+		possibleValueMap.put("B", valuesB);
+		possibleValueMap.put("C", valuesC);
+		possibleValueMap.put("D", valuesD);
+		
+		for (int i=0; i < valuesA.size() * valuesB.size() * valuesC.size() * valuesD.size(); i++) {
+			System.out.println(i + " : " + HL7Query.assignAliases(possibleValueMap, i));
+		}
+		
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 0), "a", "d", "e", "g");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 1), "b", "d", "e", "g");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 2), "c", "d", "e", "g");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 3), "a", "d", "f", "g");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 4), "b", "d", "f", "g");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 5), "c", "d", "f", "g");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 6), "a", "d", "e", "h");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 7), "b", "d", "e", "h");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 8), "c", "d", "e", "h");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 9), "a", "d", "f", "h");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 10), "b", "d", "f", "h");
+		verifyAssignments(HL7Query.assignAliases(possibleValueMap, 11), "c", "d", "f", "h");
+	}
+	
+	private void verifyAssignments(final Map<String, Object> map, final String a, final String b, final String c, final String d) {
+		assertEquals(a, map.get("A"));
+		assertEquals(b, map.get("B"));
+		assertEquals(c, map.get("C"));
+		assertEquals(d, map.get("D"));
+	}
+	
+	@Test
+	public void testSelectMessage() throws HL7Exception, IOException {
+		final HL7Query query = HL7Query.compile("SELECT MESSAGE");
+		final HL7Message msg = createMessage(new File("src/test/resources/vaers-message-long"));
+		final QueryResult result = query.evaluate(msg);
+		assertTrue(result.isMatch());
+		final List<String> labels = result.getLabels();
+		assertEquals(1, labels.size());
+		assertEquals("MESSAGE", labels.get(0));
+		
+		assertEquals(1, result.getHitCount());
+		assertEquals(msg, result.nextHit().getValue("MESSAGE"));
+	}
+	
+	@Test
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	public void testSelectField() throws HL7Exception, IOException {
+		final HL7Query query = HL7Query.compile("SELECT PID.5");
+		final HL7Message msg = createMessage(new File("src/test/resources/unsolicited-vaccine-update-short"));
+		final QueryResult result = query.evaluate(msg);
+		assertTrue(result.isMatch());
+		final List<String> labels = result.getLabels();
+		assertEquals(1, labels.size());
+		assertEquals(1, result.getHitCount());
+		
+		final Object names = result.nextHit().getValue("PID.5");
+		assertTrue(names instanceof List);
+		final List<Object> nameList = (List) names;
+		assertEquals(1, nameList.size());
+		final HL7Field nameField = (HL7Field) nameList.get(0);
+		assertEquals("KENNEDY^JOHN^FITZGERALD^JR", nameField.getValue());
+	}
+	
+	@Test
+	public void testSelectAbnormalTestResult() throws HL7Exception, IOException {
+		final String query = "DECLARE result AS REQUIRED OBX SELECT result WHERE result.7 != 'N' AND result.1 = 1";
+		
+		final HL7Query hl7Query = HL7Query.compile(query);
+		final QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/vaers-message-long")));
+		assertFalse( result.isMatch() );
+	}
+	
+	
+	@Test
+	public void testFieldEqualsString() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.7 = 'L'");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.7 = 'H'");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+	}
+	
+	@Test
+	public void testLessThan() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 < 600");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 < 59");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+	}
+	
+	@Test
+	public void testCompareTwoFields() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 < result.6.2");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE NOT(result.4 > result.6.3)");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+	}
+	
+	@Test
+	public void testLessThanOrEqual() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 <= 59");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 <= 600");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 <= 58");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+	}
+	
+	@Test
+	public void testGreaterThanOrEqual() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 >= 59");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 >= 6");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 >= 580");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+	}
+	
+	@Test
+	public void testGreaterThan() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 > 58");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 > 6");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.4 > 580");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+	}
+
+	
+	@Test
+	public void testDistinctValuesReturned() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result1 AS REQUIRED OBX, result2 AS REQUIRED OBX SELECT MESSAGE WHERE result1.7 = 'L' OR result2.7 != 'H'");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		assertEquals(1, result.getHitCount());
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT result WHERE result.1 = 1");
+		HL7Message msg = createMessage(new File("src/test/resources/vaers-message-long"));
+		result = hl7Query.evaluate(msg);
+		assertTrue( result.isMatch() );
+		assertEquals(9, result.getHitCount());
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT result WHERE result.1 = 1 AND result.3.1.1 = '30961-7'");
+		result = hl7Query.evaluate(msg);
+		assertTrue( result.isMatch() );
+		assertEquals(1, result.getHitCount());
+
+	}
+	
+	@Test
+	public void testAndWithParens() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.7 = 'L' AND result.3.1 = 'GLU'");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.7 = 'L' AND result.3.1 = 'GLU'");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hyperglycemia")));
+		assertFalse( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.7 = 'H' AND result.3.1 = 'GLU'");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.7 = 'H' AND result.3.1 = 'GLU'");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hyperglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE (result.7 = 'H') AND (result.3.1 = 'GLU')");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hyperglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE ((result.7 = 'H') AND (result.3.1 = 'GLU'))");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hyperglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE (( ((result.7 = 'H')) AND ( ((result.3.1 = 'GLU')) )))");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hyperglycemia")));
+		assertTrue( result.isMatch() );
+
+	}
+	
+	
+	@Test
+	public void testIsNull() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.999 IS NULL");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.1 IS NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE ZZZ IS NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE OBX IS NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE NK1.1 = '1' AND NK1.8 IS NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/unsolicited-vaccine-update-long")));
+		assertTrue( result.isMatch() );
+	}
+	
+	
+	@Test
+	public void testNotNull() throws HL7Exception, IOException {
+		HL7Query hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.999 NOT NULL");
+		QueryResult result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("DECLARE result AS REQUIRED OBX SELECT MESSAGE WHERE result.1 NOT NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE ZZZ NOT NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertFalse( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE OBX NOT NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/hypoglycemia")));
+		assertTrue( result.isMatch() );
+
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE NK1.1 = '1' AND NK1.33 NOT NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/unsolicited-vaccine-update-long")));
+		assertTrue( result.isMatch() );
+		
+		hl7Query = HL7Query.compile("SELECT MESSAGE WHERE NK1.1 = 1 AND NK1.33 NOT NULL");
+		result = hl7Query.evaluate(createMessage(new File("src/test/resources/unsolicited-vaccine-update-long")));
+		assertTrue( result.isMatch() );
+	}
+	
+	private HL7Message createMessage(final File file) throws HL7Exception, IOException {
+		final byte[] bytes = Files.readAllBytes(file.toPath());
+		final String msgText = new String(bytes, "UTF-8");
+		
+		final HapiContext hapiContext = new DefaultHapiContext();
+		hapiContext.setValidationContext(ValidationContextFactory.noValidation());
+		
+		final PipeParser parser = hapiContext.getPipeParser();
+		final Message message = parser.parse(msgText);
+		return new HapiMessage(message);
+	}
+	
+	@Test
+	@SuppressWarnings("unused")
+	public void createMessage() throws IOException, HL7Exception {
+		final byte[] bytes = Files.readAllBytes(Paths.get("src/test/resources/vaers-message-long"));
+		final String msgText = new String(bytes, "UTF-8");
+		
+		final HapiContext hapiContext = new DefaultHapiContext();
+		hapiContext.setValidationContext(ValidationContextFactory.noValidation());
+		
+		final PipeParser parser = hapiContext.getPipeParser();
+		final Message message = parser.parse(msgText);
+		
+		final HL7Message hl7Msg = new HapiMessage(message);
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hyperglycemia
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hyperglycemia b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hyperglycemia
new file mode 100644
index 0000000..dc44b89
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hyperglycemia
@@ -0,0 +1,5 @@
+MSH|^~\&|CERNER||PriorityHealth||||ORU^R01|Q479004375T431430612|P|2.3|
+PID|||001677980||SMITH^CURTIS||19680219|M||||||||||929645156318|123456789|
+PD1||||1234567890^LAST^FIRST^M^^^^^NPI|
+OBR|1|341856649^HNAM_ORDERID|000002006326002362|648088^Basic Metabolic Panel|||20061122151600|||||||||1620^Hooker^Robert^L||||||20061122154733|||F|||||||||||20061122140000|
+OBX|1|NM|GLU^Glucose Lvl|159|mg/dL|65-99^65^99|H|||F|||20061122154733|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hypoglycemia
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hypoglycemia b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hypoglycemia
new file mode 100644
index 0000000..02e8967
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/hypoglycemia
@@ -0,0 +1,5 @@
+MSH|^~\&|CERNER||PriorityHealth||||ORU^R01|Q479004375T431430612|P|2.3|
+PID|||001677980||SMITH^CURTIS||19680219|M||||||||||929645156318|123456789|
+PD1||||1234567890^LAST^FIRST^M^^^^^NPI|
+OBR|1|341856649^HNAM_ORDERID|000002006326002362|648088^Basic Metabolic Panel|||20061122151600|||||||||1620^Hooker^Robert^L||||||20061122154733|||F|||||||||||20061122140000|
+OBX|1|NM|GLU^Glucose Lvl|59|mg/dL|65-99^65^99|L|||F|||20061122154733|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/metabolic-panel
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/metabolic-panel b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/metabolic-panel
new file mode 100644
index 0000000..c62fc45
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/metabolic-panel
@@ -0,0 +1,23 @@
+MSH|^~\&|Lab1^1234^CLIA|^1234^CLIA|ELR^2.16.840.1.113883.19.3.2^ISO|SPH^2.16.840.1.113883.19.3.2^ISO|20110410140502-0500||ORU^R01^ORU_R01|1234567890|P^T|2.5.1|||NE|NE|USA||||USELR1.0^^2.16.840.1.114222.4.10.3^ISO 
+SFT|1|Level Seven Healthcare Software, Inc.^L^^^^&2.16.840.1.113883.19.4.6^ISO^XX^^^1234|1.2|An Lab System|56734||20080817 
+PID|1||36363636^^^MPI&2.16.840.1.113883.19.3.2.1&ISO^MR^A&2.16.840.1.113883.19.3.2.1&ISO~444333333^^^&2.16.840.1.113883.4.1^IS O^SS||Everyman^Adam^A^^^^L^^^^^^^BS|Mum^Martha^M^^^^M|19800602|M||2106-3^White^CDCREC^^^^04/24/2007|2222 Home Street^^Ann Arbor^MI^99999^USA^H||^PRN^PH^^1^555^5552004|^WPN^PH^^1^955^5551009|eng^English^ISO6392^^^^3/29/2007|M^Married^HL70002^^^^2.5.1||||||N^Not Hispanic or Latino^HL70189^^^^2.5.1||||||||N|||200808151000-0700| Reliable^2.16.840.1.113883.19.3.1^ISO 
+ORC|RE|23456^EHR^2.16.840.1.113883.19.3.2.3^ISO|9700123^Lab^2.16.840.1.113883.19.3.1.6^ISO|||||||||1234^Admit^Alan^A^III^Dr^^^&2.16.840.1.113883.19.4.6^ISO^L^^^EI^&2.16.840.1.113883.19.4.6^ISO^^^^^^^^MD||^WPN^PH^^1^555^5551005|||||||Level Seven Healthcare, Inc.^L^^^^&2.16.840.1.113883.19.4.6^ISO^XX^^^1234|1005 Healthcare Drive^^Ann Arbor^MI^99999^USA^B|^WPN^PH^^1^555^5553001|4444 Healthcare Drive^Suite 123^Ann Arbor^MI^99999^USA^B 
+OBR|1|23456^EHR^2.16.840.1.113883.19.3.2.3^ISO|9700123^Lab^2.16.840.1.113883.19.3.1.6^ISO|24323-8^Comprehensive metabolic 2000 panel in Serum or Plasma^LN^3436442^Metaboloic Panel 2000, Comprehensive^99USI|||201104101130-0500||||||angina|||1234^Admit^Alan^A^III^Dr^^^&2.16.840.1.113883.19.4.6^ISO^L^^^EI^&2.16.840.1.113883.19.4.6^ISO^^^^^^^^MD|^WPN^PH^^1^555^5551005|||||201104101405-0500|||F||||||413^Angina pectoris^I9CDX^^^^07/09/2008|1235&Slide&Stan&S&&Dr&MD&&DOC&2.16.840.1.113883.19.4.6&ISO 
+OBX|1|NM|17861-6^Calcium [Mass/volume] in Serum or Plasma^LN||27.3|mg/dL^milligrams per deciliter^UCUM|8.7-10.7|HH|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|2|NM|3094-0^Urea nitrogen [Mass/volume] in Serum of Plasma^LN||15|mg/dL^milligrams per deciliter^UCUM|6 to 23|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|3|NM|2160-0^Creatinine [Mass/volume] in Serum or Plasma^LN||1.8|mg/dL^milligrams per deciliter^UCUM|0.7 to 1.2|H|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|4|NM|3097-3^Urea nitrogen/Creatinine [Mass ratio] in Serum or Plasma^LN||15||6 to 25|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI
+OBX|5|NM|2885-2^Protein [Mass/volume] in Serum or Plasma^LN||8.9|gm/dL^grams per deciliter^UCUM|6.3 to 8.2|H|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|6|NM|1751-7^Albumin [Mass/volume] in Serum or Plasma^LN||5.7|gm/dL^grams per deciliter^UCUM|3.5 to 5.0|H|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|7|NM|2336-6^Globulin [Mass/volume] in Serum or Plasma^LN||4.7|gm/dL^grams per deciliter^UCUM|2.2 to 4.2|H|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|8|NM|1759-0^Albumin/Globulin [Mass ratio] in Serum or Plasma^LN||1.7||0.8 to 2.0|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI
+OBX|9|NM|1975-2^Bilirubin.total [Mass/volume] in Serum or Plasma^LN||0.7|mg/dL^milligrams per deciliter^UCUM|0.3 to 1.9|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|10|NM|2345-7^Glucose [Mass/volume] in Serum or Plasma^LN||55|mg/dL^milligrams per deciliter^UCUM|60 to 109|L|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|11|NM|6768-6^Alkaline phosphatase [Enzymatic activity/volume] in Serum or Plasma^LN||64|U/L^units per liter^UCUM|32 to 110|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|12|NM|1920-8^Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma^LN||6|U/L^units per liter^UCUM|6 to 18|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|13|NM|1742-6^Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma^LN||10|U/L^units per liter^UCUM|5 to 35|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|14|NM|2951-2^Sodium [Moles/volume] in Serum or Plasma^LN||140|mmol/L^millimoles per liter^UCUM|137 to 147|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|15|NM|2823-3^Potassium [Moles/volume] in Serum or Plasma^LN||4.5|mmol/L^millimoles per liter^UCUM|3.4 to 5.3|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|16|NM|2075-0^Chloride [Moles/volume] in Serum or Plasma^LN||99|mmol/L^millimoles per liter^UCUM|99 to 108|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+OBX|17|NM|2028-9^Carbon dioxide, total [Moles/volume] in Serum or Plasma^LN||27|mmol/L^millimoles per liter^UCUM|22 to 29|N|||F|||201104101130-0500|||||201104101325-0500||||GHH Lab^L^^^^CLIA&2.16.840.1.113883.19.4.6&ISO^XX^^^1236|3434 Industrial Loop^^Ann Arbor^MI^99999^USA^B|9876543^Slide^Stan^S^^^^^NPPES&2.16.840.1.113883.19.4.6&ISO^L^^^NPI 
+SPM|1|23456&EHR&2.16.840.1.113883.19.3.2.3&ISO^9700122&Lab&2.16.840.1.113883.19.3.1.6&ISO||119364003^Serum specimen^SCT^^^^20080131|||||||||||||201104101130-0500|201104101130-0500

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-long
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-long b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-long
new file mode 100644
index 0000000..8edd3fd
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-long
@@ -0,0 +1,16 @@
+MSH|^~\&||MA0000||GA0000|19970901||VXU^V04|19970522MA53|T|2.3.1|||AL
+PID|||1234^^^^SR^~1234-12^^^^LR^~3872^^^^MR~221345671^^^^SS^~430078856^^^^MA^ ||KENNEDY^JOHN^FITZGERALD^JR^^^L|BOUVIER^^^^^^M|19900607|M|KENNEDY^BABY BOY^^^^^^ B|W^WHITE^NY8 RACE CODES^W^WHITE^HL70005|123 MAIN ST^APT 3B^LEXINGTON^MA^00210^ ^M^MSA CODE^MA034~345 ELM ST^^BOSTON^MA^00314^^BLD~^^^^^^BR^^MA002| |(617) 555-1212 ^PRN^PH^^^617^5551212^^||EN^ENGLISH^HL70296^^^|||||||WN^NOT HISPANIC^LOCAL CODE SET^NH^NOT OF HISPANIC ORIGIN^HL70189|CHILDREN=S HOSPITAL
+PD1|||CHILDREN=S HOSPITAL^^1234^^^^XX~LEXINGTON CLINIC^^1234A^^^^FI|12345^CARE^ PRIMARY^^^DR^MD^^^L^^^DN|||||||03^REMINDER/RECALL - NO CALLS^HL70215|Y
+NK1|1|KENNEDY^JACQUELINE^LEE|32^MOTHER^HL70063||||||||||||||||||||||||||||||898666725^^^^SS
+NK1|2|KENNEDY^JOHN^FITZGERALD|33^FATHER^HL70063||||||||||||||||||||||||||||||822546618^^^^SS
+PV1||R|||||||||||||||A|||V02^19900607~H02^19900607
+RXA|0|1|19900607|19900607|08^HEPB-PEDIATRIC/ADOLESCENT^CVX^90744^HEPB-PEDATRIC/ADOLESCENT^CPT|.5|ML^^ISO+||03^HISTORICAL INFORMATION - FROM PARENT=S WRITTEN RECORD^NIP0001|^JONES^LISA|^^^CHILDREN=S HOSPITAL||5|MCG^^ISO+|MRK12345| 199206|MSD^MERCK^MVX
+RXA|0|4|19910907|19910907|50^DTAP-HIB^CVX^90721^DTAP-HIB^CPT|.5|ML^^ISO+||00^NEW IMMUNIZATION RECORD^NIP0001|1234567890^SMITH^SALLY^S^^^^^^^^^VEI~1234567891 ^O=BRIAN^ROBERT^A^^DR^MD^^^^^^OEI|^^^CHILD HEALTHCARE CLINIC^^^^^101 MAIN STREET^^ BOSTON^MA||||W46932777|199208|PMC^PASTEUR MERIEUX CONNAUGHT^MVX|||CP|A| 19910907120030
+RXR|IM^INTRAMUSCULAR^HL70162|LA^LEFT ARM^HL70163
+RXA|0|1|19910907|19910907|03^MMR^CVX|.5|ML^^ISO+|||1234567890^SMITH^SALLY^S^^^^^^^^^VEI~1234567891^O=BRIAN^ROBERT^A^^DR^MD^^^^^^OEI|^^^CHILD HEALTHCARE CLINIC^^^^^101 MAIN STREET^^BOSTON^MA||||W2348796456|19920731|MSD^MERCK^MVX
+RXR|SC^SUBCUTANEOUS^HL70162|LA^LEFT ARM^HL70163
+RXA|0|5|19950520|19950520|20^DTAP^CVX|.5|ML^^ISO+|||1234567891^O=BRIAN^ROBERT^A^^DR|^^^CHILD HEALTHCARE CLINIC^^^^^101 MAIN STREET^^BOSTON^MA||||W22532806|19950705|PMC^ PASTEUR MERIEUX CONNAUGHT^MVX
+RXR|IM^INTRAMUSCULAR^HL70162|LA^LEFT ARM^HL70163
+NTE|PATIENT DEVELOPED HIGH FEVER APPROX 3 HRS AFTER VACCINE INJECTION
+RXA|0|2|19950520|19950520|03^MMR^CVX|.5|ML^^ISO+|||1234567891^O=BRIAN^ROBERT^A^^DR|^^^CHILD HEALTHCARE CLINIC^^^^^101 MAIN STREET^^BOSTON^MA||||W2341234567|19950630| MSD^MERCK^MVX
+RXR|SC^SUBCUTANEOUS^HL70162|LA^LEFT ARM^HL70163

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-short
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-short b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-short
new file mode 100644
index 0000000..c3e7cf0
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/unsolicited-vaccine-update-short
@@ -0,0 +1,4 @@
+MSH|^~\&|||||||VXU^V04|19970522MA53|P|2.3.1
+PID|||221345671^^^^SS||KENNEDY^JOHN^FITZGERALD^JR|BOUVIER^^^^^^M|19900607|M|||^^^^MA^^^BLD
+NK1|1|KENNEDY^JACQUELINE^LEE|32^MOTHER^HL70063
+RXA|0|1|19900607|19900607|08^HEPB-PEDIATRIC/ADOLESCENT^CVX|.5|ML^^ISO+||||||||MRK12345||MSD^MERCK^MVX

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaccine-query
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaccine-query b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaccine-query
new file mode 100644
index 0000000..1bd47b2
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaccine-query
@@ -0,0 +1,3 @@
+MSH|^~\&||GA0000||MA0000|199705221605||VXQ^V01|19970522GA40|T|2.3.1|||AL
+QRD|199705221605|R|I|19970522GA05|||25^RD|^KENNEDY^JOHN^FITZGERALD^JR|VXI^VACCINE INFORMATION^HL70048|^SIIS
+QRF|MA0000||||256946789~19900607~MA~MA99999999~88888888~KENNEDY^JACQUELINE^LEE~BOUVIER~898666725~KENNEDY^JOHN^FITZGERALD~822546618

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaers-message-long
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaers-message-long b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaers-message-long
new file mode 100644
index 0000000..888b04c
--- /dev/null
+++ b/nifi/nifi-commons/nifi-hl7-query-language/src/test/resources/vaers-message-long
@@ -0,0 +1,60 @@
+MSH|^~\&||GA0000||VAERS PROCESSOR|20010331605||ORU^R01|20010422GA03|T|2.3.1|||AL|
+PID|||1234^^^^SR~1234-12^^^^LR~00725^^^^MR||Doe^John^Fitzgerald^JR^^^L||20001007|M||2106-3^White^HL70005|123 Peachtree St^APT 3B^Atlanta^GA^30210^^M^^GA067||(678) 555-1212^^PRN|
+NK1|1|Jones^Jane^Lee^^RN|VAB^Vaccine administered by (Name)^HL70063|
+NK1|2|Jones^Jane^Lee^^RN|FVP^Form completed by (Name)-Vaccine provider^HL70063|101 Main Street^^Atlanta^GA^38765^^O^^GA121||(404) 554-9097^^WPN|
+ORC|CN|||||||||||1234567^Welby^Marcus^J^Jr^Dr.^MD^L|||||||||Peachtree Clinic|101 Main Street^^Atlanta^GA^38765^^O^^GA121|(404) 554-9097^^WPN|101 Main Street^^Atlanta^GA^38765^^O^^GA121|
+OBR|1|||^CDC VAERS-1 (FDA) Report|||20010316|
+OBX|1|NM|21612-7^Reported Patient Age^LN||05|mo^month^ANSI|
+OBX|1|TS|30947-6^Date form completed^LN||20010316|
+OBX|2|FT|30948-4^Vaccination adverse events and treatment, if any^LN|1|fever of 106F, with vomiting, seizures, persistent crying lasting over 3 hours, loss of appetite|
+OBX|3|CE|30949-2^Vaccination adverse event outcome^LN|1|E^required emergency room/doctor visit^NIP005|
+OBX|4|CE|30949-2^Vaccination adverse event outcome^LN|1|H^required hospitalization^NIP005|
+OBX|5|NM|30950-0^Number of days hospitalized due to vaccination adverse event^LN|1|02|d^day^ANSI|
+OBX|6|CE|30951-8^Patient recovered^LN||Y^Yes^ HL70239|
+OBX|7|TS|30952-6^Date of vaccination^LN||20010216|
+OBX|8|TS|30953-4^Adverse event onset date and time^LN||200102180900|
+OBX|9|FT|30954-2^Relevant diagnostic tests/lab data^LN||Electrolytes, CBC, Blood culture|
+OBR|2|||30955-9^All vaccines given on date listed in #10^LN|
+OBX|1|CE30955-9&30956-7^Vaccine type^LN|1|08^HepB-Adolescent/pediatric^CVX|
+OBX|2|CE|30955-9&30957-5^Manufacturer^LN|1|MSD^Merck^MVX|
+OBX|3|ST|30955-9&30959-1^Lot number^LN|1|MRK12345|
+OBX|4|CE|30955-9&30958-3^ Route^LN|1|IM^Intramuscular ^HL70162|
+OBX|5|CE|30955-9&31034-2^Site^LN|1|LA^Left arm^ HL70163|
+OBX|6|NM|30955-9&30960-9^Number of previous doses^LN|1|01I
+OBX|7|CE|CE|30955-9&30956-7^Vaccine type^LN|2|50^DTaP-Hib^CVX|
+OBX|8|CE|30955-9&30957-5^ Manufacturer^LN|2|WAL^Wyeth_Ayerst^MVX|
+OBX|9|ST|30955-9&30959-1^Lot number^LN|2|W46932777|
+OBX|10|CE|30955-9&30958-3^ Route^LN|2|IM^Intramuscular^HL70162|
+OBX|11|CE|30955-9&31034-2^Site^LN|2|LA^Left arm^HL70163|
+OBX|12|NM|30955-9&30960-9^Number of previous doses^LN|2|01|
+OBR|3|||30961-7^Any other vaccinations within 4 weeks prior to the date listed in #10|
+OBX|1|CE|30961-7&30956-7^Vaccine type^LN|1|10^IPV^CVX|
+OBX|2|CE|30961-7&30957-5^Manufacturer^LN|1|PMC^Aventis Pasteur ^MVX|
+OBX|3|ST|30961-7&30959-1^Lot number^LN|1|PMC123456|
+OBX|4|CE|30961-7&30958-3^Route^LN|1|SC^Subcutaneaous^HL70162|
+OBX|5|CE|30961-7&31034-2^Site^LN|1|LA^Left arm^HL70163|
+OBX|6|NM|30961-7&30960-9^Number of previous doses^LN|1|01|
+OBX|7|TS|30961-7&31035-9^date given^LN|1|20001216|
+OBX|8|CE|30962-^Vaccinated at^LN||PVT^Private doctor�s office/hospital^NIP009|
+OBX|9|CE|30963-3^Vaccine purchased with^LN||PBF^Public funds^NIP008|
+OBX|10|FT|30964-1^Other medications^LN||None|
+OBX|11|FT|30965-8^Illness at time of vaccination (specify)^LN||None|
+OBX|12|FT|30966-6^Pre-existing physician diagnosed allergies, birth defects, medical conditions^LN||Past conditions convulsions|
+OBX|13|CE|30967-4^Was adverse event reported previously^LN||N^no^NIP009|
+OBR|4||30968-2^Adverse event following prior vaccination in patient^LN|
+OBX|1|TX|30968-2&30971-6^Adverse event^LN||None|
+OBR|5||30969-0^Adverse event following prior vaccination in brother^LN|
+OBX|1|TX||30969-0&30971-6^Adverse event^LN||vomiting, fever, otitis media|
+OBX|2|NM||30969-0&30972-4^Onset age^LN||04|mo^month^ANSI|
+OBX|3|CE||30969-0&30956-7^Vaccine Type ^LN||10^IPV^CVX|
+OBX|4|NM||30969-0&30973-2^Dose number in series^LN||02|
+OBR|6|||30970-8^Adverse event following prior vaccination in sister^LN|
+OBX|1|TX|30970-8&30971-6^Adverse event^LN||None|
+OBR|7||^For children 5 and under|
+OBX|1|NM|8339-4^Body weight at birth^LN||82|oz^ounces^ANSI|
+OBX|2|NM|30974-0^Number of brothers and sisters^LN||2|
+OBR|8|||^Only for reports submitted by manufacturer/immunization project|
+OBX|1|ST|30975-7^Mfr./Imm. Proj. report no.^LN||12345678|
+OBX|2|TS|30976-5^Date received by manufacturer/immunization project^LN||12345678|
+OBX|3|CE|30977-3^15 day report^LN||N^No^HL70136|
+OBX|4|CE|30978-1^Report type^LN||IN^Initial^NIP010|

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/pom.xml b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/pom.xml
new file mode 100644
index 0000000..391206e
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements. See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License. You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.nifi</groupId>
+        <artifactId>nifi-hl7-bundle</artifactId>
+        <version>0.1.0-incubating-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>nifi-hl7-nar</artifactId>
+    <packaging>nar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-hl7-processors</artifactId>
+            <version>0.1.0-incubating-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/.gitignore
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/.gitignore b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/.gitignore
@@ -0,0 +1 @@
+/target/

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/45416dc6/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/pom.xml b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/pom.xml
new file mode 100644
index 0000000..2a0c909
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-processors/pom.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements. See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License. You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.nifi</groupId>
+        <artifactId>nifi-hl7-bundle</artifactId>
+        <version>0.1.0-incubating-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>nifi-hl7-processors</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-processor-utils</artifactId>
+        </dependency>
+        
+        <dependency>
+        	<groupId>org.apache.nifi</groupId>
+        	<artifactId>nifi-hl7-query-language</artifactId>
+        	<version>0.1.0-incubating-SNAPSHOT</version>
+        </dependency>
+        
+		<dependency>
+			<groupId>ca.uhn.hapi</groupId>
+			<artifactId>hapi-base</artifactId>
+			<version>2.2</version>
+		</dependency>       
+        <dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v21</artifactId>
+		  <version>2.2</version>
+		</dependency>
+		<dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v22</artifactId>
+		  <version>2.2</version>
+		</dependency>
+        <dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v23</artifactId>
+		  <version>2.2</version>
+		</dependency>
+		<dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v231</artifactId>
+		  <version>2.2</version>
+		</dependency>
+        <dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v24</artifactId>
+		  <version>2.2</version>
+		</dependency>
+		<dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v25</artifactId>
+		  <version>2.2</version>
+		</dependency>
+		<dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v251</artifactId>
+		  <version>2.2</version>
+		</dependency>
+        <dependency>
+		  <groupId>ca.uhn.hapi</groupId>
+		  <artifactId>hapi-structures-v26</artifactId>
+		  <version>2.2</version>
+		</dependency>
+        
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-mock</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>