Java 17 Upgrade
[policy/models.git] / models-base / src / main / java / org / onap / policy / models / base / PfModelException.java
index 3d1bb17..9ffac08 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019, 2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.policy.models.base;
 
+import jakarta.ws.rs.core.Response;
+import java.io.Serial;
+import lombok.Getter;
+import lombok.ToString;
+import org.onap.policy.models.errors.concepts.ErrorResponse;
+import org.onap.policy.models.errors.concepts.ErrorResponseInfo;
+import org.onap.policy.models.errors.concepts.ErrorResponseUtils;
+
 /**
- * This class is a base exception from which all model exceptions are sub classes.
+ * This class is a base exception from which all model exceptions are subclasses.
  */
-public class PfModelException extends Exception {
+@Getter
+@ToString
+public class PfModelException extends Exception implements ErrorResponseInfo {
+    @Serial
     private static final long serialVersionUID = -8507246953751956974L;
 
+    // The error response of the exception
+    private final ErrorResponse errorResponse = new ErrorResponse();
+
     // The object on which the exception was thrown
     private final transient Object object;
 
     /**
      * Instantiates a new model exception.
      *
-     * @param message the message on the exception
+     * @param statusCode the return code for the exception
+     * @param message    the message on the exception
      */
-    public PfModelException(final String message) {
-        this(message, null);
+    public PfModelException(final Response.Status statusCode, final String message) {
+        this(statusCode, message, null);
     }
 
     /**
      * Instantiates a new model exception.
      *
-     * @param message the message on the exception
-     * @param object the object that the exception was thrown on
+     * @param statusCode the return code for the exception
+     * @param message    the message on the exception
+     * @param object     the object that the exception was thrown on
      */
-    public PfModelException(final String message, final Object object) {
+    public PfModelException(final Response.Status statusCode, final String message, final Object object) {
         super(message);
+        errorResponse.setResponseCode(statusCode);
+        ErrorResponseUtils.getExceptionMessages(errorResponse, this);
         this.object = object;
     }
 
     /**
      * Instantiates a new model exception.
      *
-     * @param message the message on the exception
-     * @param exception the exception that caused this exception
+     * @param statusCode the return code for the exception
+     * @param message    the message on the exception
+     * @param exception  the exception that caused this exception
      */
-    public PfModelException(final String message, final Exception exception) {
-        this(message, exception, null);
+    public PfModelException(final Response.Status statusCode, final String message, final Exception exception) {
+        this(statusCode, message, exception, null);
     }
 
     /**
      * Instantiates a new exception.
      *
-     * @param message the message on the exception
-     * @param exception the exception that caused this exception
-     * @param object the object that the exception was thrown on
+     * @param statusCode the return code for the exception
+     * @param message    the message on the exception
+     * @param exception  the exception that caused this exception
+     * @param object     the object that the exception was thrown on
      */
-    public PfModelException(final String message, final Exception exception, final Object object) {
+    public PfModelException(final Response.Status statusCode, final String message, final Exception exception,
+                            final Object object) {
         super(message, exception);
+        errorResponse.setResponseCode(statusCode);
+        ErrorResponseUtils.getExceptionMessages(errorResponse, this);
         this.object = object;
     }
-
-    /**
-     * Get the message from this exception and its causes.
-     *
-     * @return the cascaded messages from this exception and the exceptions that caused it
-     */
-    public String getCascadedMessage() {
-        return buildCascadedMessage(this);
-    }
-
-    /**
-     * Build a cascaded message from an exception and all its nested exceptions.
-     *
-     * @param throwable the top level exception
-     * @return cascaded message string
-     */
-    public static String buildCascadedMessage(Throwable throwable) {
-        final StringBuilder builder = new StringBuilder();
-        builder.append(throwable.getMessage());
-
-        for (Throwable t = throwable; t != null; t = t.getCause()) {
-            builder.append("\ncaused by: ");
-            builder.append(t.getMessage());
-        }
-
-        return builder.toString();
-    }
-
-    /**
-     * Get the object on which the exception was thrown.
-     *
-     * @return The object on which the exception was thrown
-     */
-    public Object getObject() {
-        return object;
-    }
 }