Github user nickwallen commented on a diff in the pull request:
https://github.com/apache/metron/pull/884#discussion_r160029657
--- Diff:
metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/StellarResult.java
---
@@ -0,0 +1,185 @@
+/*
+ *
+ * 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.metron.stellar.common.shell;
+
+import java.util.Optional;
+
+/**
+ * The result of executing a Stellar expression within a
StellarShellExecutor.
+ */
+public class StellarResult {
+
+ /**
+ * Indicates that a Stellar expression resulted in either
+ * success or an error.
+ */
+ enum Status {
+ SUCCESS,
+ ERROR,
+ TERMINATE
+ }
+
+ /**
+ * Indicates either success or failure of executing the expression.
+ */
+ private Status status;
+
+ /**
+ * The result of executing the expression. Only valid when execution is
successful.
+ */
+ private Optional<Object> value;
+
+ /**
+ * The error that occurred when executing the expression. Only valid
when execution results in an error.
+ */
+ private Optional<Throwable> exception;
+
+ /**
+ * Indicates if the value is null;
+ *
+ * A null is a valid result, but cannot be unwrapped from an Optional.
Because of this
+ * a boolean is used to indicate if the result is a success and the
value is null.
+ */
+ private boolean isValueNull;
+
+ /**
+ * Private constructor to construct a result indicate success. Use the
static methods; success.
+ *
+ * @param status Indicates success or failure.
+ * @param value The value of executing the expression.
+ */
+ private StellarResult(Status status, Object value) {
+ this.status = status;
+ this.value = Optional.ofNullable(value);
+ this.exception = Optional.empty();
+ this.isValueNull = (value == null);
--- End diff --
There was no way for this to cause a problem because the constructors are
private. But I added unit tests and your suggested check just to be sure.
---