Add interface to get info from exceptions 12/82912/1
authorliamfallon <liam.fallon@est.tech>
Thu, 21 Mar 2019 11:06:07 +0000 (11:06 +0000)
committerliamfallon <liam.fallon@est.tech>
Thu, 21 Mar 2019 11:06:07 +0000 (11:06 +0000)
Interface allows uniform geting of information from checked
and runtime model exceptions

Issue-ID: POLICY-1195
Change-Id: I913b98a4d4b705ed256714392cafc72d6a71877f
Signed-off-by: liamfallon <liam.fallon@est.tech>
models-base/src/main/java/org/onap/policy/models/base/PfModelException.java
models-base/src/main/java/org/onap/policy/models/base/PfModelExceptionInfo.java [new file with mode: 0644]
models-base/src/main/java/org/onap/policy/models/base/PfModelRuntimeException.java
models-base/src/test/java/org/onap/policy/models/base/PfModelExceptionInfoTest.java [new file with mode: 0644]

index 97ea7de..ce44e51 100644 (file)
@@ -25,12 +25,14 @@ import javax.ws.rs.core.Response;
 import lombok.Getter;
 import lombok.ToString;
 
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
 /**
  * This class is a base exception from which all model exceptions are sub classes.
  */
 @Getter
 @ToString
-public class PfModelException extends Exception {
+public class PfModelException extends Exception implements PfModelExceptionInfo {
     private static final long serialVersionUID = -8507246953751956974L;
 
     // The status code on the exception
@@ -93,6 +95,7 @@ public class PfModelException extends Exception {
      *
      * @return the cascaded messages from this exception and the exceptions that caused it
      */
+    @Override
     public String getCascadedMessage() {
         return buildCascadedMessage(this);
     }
@@ -114,4 +117,14 @@ public class PfModelException extends Exception {
 
         return builder.toString();
     }
+
+    /**
+     * Get the stack trace of the exception as a string.
+     *
+     * @return the stack trace of this message as a string
+     */
+    @Override
+    public String getStackTraceAsString() {
+        return ExceptionUtils.getStackTrace(this);
+    }
 }
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfModelExceptionInfo.java b/models-base/src/main/java/org/onap/policy/models/base/PfModelExceptionInfo.java
new file mode 100644 (file)
index 0000000..2fe244c
--- /dev/null
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * Interface implemented bu Policy framework model exceptions to allow uniform reading of status codes and cascaded
+ * messages.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public interface PfModelExceptionInfo {
+
+    /**
+     * Get the status code associated with an exception.
+     * @return the status code
+     */
+    public Response.Status getStatusCode();
+
+    /**
+     * Get the messages for all the cascaded exceptions in an exception.
+     *
+     * @return the cascaded message
+     */
+    public String getCascadedMessage();
+
+    /**
+     * Get the object associated with an exception.
+     *
+     * @return the object associated with an exception
+     */
+    public Object getObject();
+
+    /**
+     * Get the stack trace of the exception as a string.
+     *
+     * @return the stack trace of this message as a string
+     */
+    public String getStackTraceAsString();
+}
index c4684bc..32855c2 100644 (file)
@@ -25,13 +25,14 @@ import javax.ws.rs.core.Response;
 import lombok.Getter;
 import lombok.ToString;
 
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
 /**
- * This class is a base model run time exception from which all model run time exceptions are sub
- * classes.
+ * This class is a base model run time exception from which all model run time exceptions are sub classes.
  */
 @Getter
 @ToString
-public class PfModelRuntimeException extends RuntimeException {
+public class PfModelRuntimeException extends RuntimeException implements PfModelExceptionInfo {
     private static final long serialVersionUID = -8507246953751956974L;
 
     // The return code on the exception
@@ -94,7 +95,18 @@ public class PfModelRuntimeException extends RuntimeException {
      *
      * @return the message of this exception and all the exceptions that caused this exception
      */
+    @Override
     public String getCascadedMessage() {
         return PfModelException.buildCascadedMessage(this);
     }
+
+    /**
+     * Get the stack trace of the exception as a string.
+     *
+     * @return the stack trace of this message as a string
+     */
+    @Override
+    public String getStackTraceAsString() {
+        return ExceptionUtils.getStackTrace(this);
+    }
 }
diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfModelExceptionInfoTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfModelExceptionInfoTest.java
new file mode 100644 (file)
index 0000000..1257975
--- /dev/null
@@ -0,0 +1,64 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base;
+
+import static org.junit.Assert.assertEquals;
+
+import javax.ws.rs.core.Response;
+
+import org.junit.Test;
+
+/**
+ * Test PfModelExceptionInfo interface.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class PfModelExceptionInfoTest {
+    @Test
+    public void exceptionInfoTest() {
+        try {
+            throw new PfModelException(Response.Status.ACCEPTED, "HELLO");
+        } catch (PfModelException  pfme) {
+            String errorMessage = getErrorMessage(pfme);
+            assertEquals("Server returned: Accepted", errorMessage.substring(0, 25));
+        }
+
+        try {
+            throw new PfModelRuntimeException(Response.Status.ACCEPTED, "HELLO");
+        } catch (PfModelRuntimeException pfme) {
+            String errorMessage = getErrorMessage(pfme);
+            assertEquals("Server returned: Accepted", errorMessage.substring(0, 25));
+        }
+    }
+
+    private String getErrorMessage(final PfModelExceptionInfo pfme) {
+        StringBuilder stringBuilder = new StringBuilder();
+
+        stringBuilder.append("Server returned: ");
+        stringBuilder.append(pfme.getStatusCode().toString());
+        stringBuilder.append("\nDetailed Message:\n");
+        stringBuilder.append(pfme.getCascadedMessage());
+        stringBuilder.append("\nStack Trace:\n");
+        stringBuilder.append(pfme.getStackTraceAsString());
+
+        return stringBuilder.toString();
+    }
+}