Removing SONAR issues from apex-pdp basic model 41/54941/1
authorliamfallon <liam.fallon@ericsson.com>
Fri, 15 Jun 2018 07:56:44 +0000 (08:56 +0100)
committerliamfallon <liam.fallon@ericsson.com>
Fri, 15 Jun 2018 07:56:58 +0000 (08:56 +0100)
Removed some code duplication in exceptions

Reduced the number of unlogged exception SONAR messages
to one.

Issue-ID: POLICY-856
Change-Id: I19e60664270b86f77333979eaa412b2e85cb13fa
Signed-off-by: liamfallon <liam.fallon@ericsson.com>
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/concepts/ApexException.java
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/concepts/ApexRuntimeException.java
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/concepts/AxArtifactKey.java
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/concepts/AxReferenceKey.java
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/handling/ApexModelCreator.java
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/handling/ApexModelWriter.java
model/basic-model/src/main/java/org/onap/policy/apex/model/basicmodel/service/AbstractParameters.java
model/utilities/src/main/java/org/onap/policy/apex/model/utilities/Assertions.java

index 896f72a..9139243 100644 (file)
@@ -37,8 +37,7 @@ public class ApexException extends Exception {
      * @param message the message on the exception
      */
     public ApexException(final String message) {
-        super(message);
-        this.object = null;
+        this(message, null);
     }
 
     /**
@@ -59,8 +58,7 @@ public class ApexException extends Exception {
      * @param e the exception that caused this Apex exception
      */
     public ApexException(final String message, final Exception e) {
-        super(message, e);
-        this.object = null;
+        this(message, e, null);
     }
 
     /**
@@ -81,10 +79,18 @@ public class ApexException extends Exception {
      * @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
+     */
+    public static String buildCascadedMessage(Throwable throwable) {
         final StringBuilder builder = new StringBuilder();
-        builder.append(this.getMessage());
+        builder.append(throwable.getMessage());
 
-        for (Throwable t = this; t != null; t = t.getCause()) {
+        for (Throwable t = throwable; t != null; t = t.getCause()) {
             builder.append("\ncaused by: ");
             builder.append(t.getMessage());
         }
index c3ecd2f..5724b48 100644 (file)
@@ -37,8 +37,7 @@ public class ApexRuntimeException extends RuntimeException {
      * @param message the message on the exception
      */
     public ApexRuntimeException(final String message) {
-        super(message);
-        this.object = null;
+        this(message, null);
     }
 
     /**
@@ -59,8 +58,7 @@ public class ApexRuntimeException extends RuntimeException {
      * @param e the exception that caused this Apex exception
      */
     public ApexRuntimeException(final String message, final Exception e) {
-        super(message, e);
-        this.object = null;
+        this(message, e, null);
     }
 
     /**
@@ -81,15 +79,7 @@ public class ApexRuntimeException extends RuntimeException {
      * @return the message of this exception and all the exceptions that caused this exception
      */
     public String getCascadedMessage() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append(this.getMessage());
-
-        for (Throwable t = this; t != null; t = t.getCause()) {
-            builder.append("\ncaused by: ");
-            builder.append(t.getMessage());
-        }
-
-        return builder.toString();
+        return ApexException.buildCascadedMessage(this);
     }
 
     /**
index 382d502..e08c3c6 100644 (file)
@@ -72,7 +72,8 @@ public class AxArtifactKey extends AxKey {
     /**
      * Copy constructor
      *
-     * @param copyConcept the concept to copy from
+     * @param copyConcept
+     *        the concept to copy from
      */
     public AxArtifactKey(final AxArtifactKey copyConcept) {
         super(copyConcept);
@@ -81,8 +82,10 @@ public class AxArtifactKey extends AxKey {
     /**
      * Constructor to create a key with the specified name and version.
      *
-     * @param name the key name
-     * @param version the key version
+     * @param name
+     *        the key name
+     * @param version
+     *        the key version
      */
     public AxArtifactKey(final String name, final String version) {
         super();
@@ -93,7 +96,8 @@ public class AxArtifactKey extends AxKey {
     /**
      * Constructor to create a key using the key and version from the specified key ID.
      *
-     * @param id the key ID in a format that respects the {@link KEY_ID_REGEXP}
+     * @param id
+     *        the key ID in a format that respects the {@link KEY_ID_REGEXP}
      */
     public AxArtifactKey(final String id) {
         Assertions.argumentNotNull(id, "id may not be null");
@@ -164,7 +168,8 @@ public class AxArtifactKey extends AxKey {
     /**
      * Sets the key name.
      *
-     * @param name the key name
+     * @param name
+     *        the key name
      */
     public void setName(final String name) {
         this.name = Assertions.validateStringParameter(NAME_TOKEN, name, NAME_REGEXP);
@@ -182,7 +187,8 @@ public class AxArtifactKey extends AxKey {
     /**
      * Sets the key version.
      *
-     * @param version the key version
+     * @param version
+     *        the key version
      */
     public void setVersion(final String version) {
         this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, VERSION_REGEXP);
@@ -217,7 +223,7 @@ public class AxArtifactKey extends AxKey {
         }
 
         if (thisVersionArray.length >= 2 && otherVersionArray.length >= 2
-                && !thisVersionArray[1].equals(otherVersionArray[1])) {
+                        && !thisVersionArray[1].equals(otherVersionArray[1])) {
             return Compatibility.MINOR;
         }
 
@@ -252,18 +258,18 @@ public class AxArtifactKey extends AxKey {
      */
     @Override
     public AxValidationResult validate(final AxValidationResult result) {
-        try {
-            Assertions.validateStringParameter(NAME_TOKEN, name, NAME_REGEXP);
-        } catch (final IllegalArgumentException e) {
+        final String nameValidationErrorMessage = Assertions.getStringParameterValidationMessage(NAME_TOKEN, name,
+                        NAME_REGEXP);
+        if (nameValidationErrorMessage != null) {
             result.addValidationMessage(new AxValidationMessage(this, this.getClass(), ValidationResult.INVALID,
-                    "name invalid-" + e.getMessage()));
+                            "name invalid-" + nameValidationErrorMessage));
         }
 
-        try {
-            Assertions.validateStringParameter(VERSION_TOKEN, version, VERSION_REGEXP);
-        } catch (final IllegalArgumentException e) {
+        final String versionValidationErrorMessage = Assertions.getStringParameterValidationMessage(VERSION_TOKEN, version,
+                        VERSION_REGEXP);
+        if (versionValidationErrorMessage != null) {
             result.addValidationMessage(new AxValidationMessage(this, this.getClass(), ValidationResult.INVALID,
-                    "version invalid-" + e.getMessage()));
+                            "version invalid-" + versionValidationErrorMessage));
         }
 
         return result;
index 5965dd0..7cb4dd8 100644 (file)
@@ -54,8 +54,8 @@ import org.onap.policy.apex.model.utilities.Assertions;
 @Embeddable
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlRootElement(name = "apexReferenceKey", namespace = "http://www.onap.org/policy/apex-pdp")
-@XmlType(name = "AxReferenceKey", namespace = "http://www.onap.org/policy/apex-pdp",
-        propOrder = { "parentKeyName", "parentKeyVersion", "parentLocalName", "localName" })
+@XmlType(name = "AxReferenceKey", namespace = "http://www.onap.org/policy/apex-pdp", propOrder = { "parentKeyName",
+                "parentKeyVersion", "parentLocalName", "localName" })
 
 public class AxReferenceKey extends AxKey {
     private static final String PARENT_KEY_NAME = "parentKeyName";
@@ -69,8 +69,7 @@ public class AxReferenceKey extends AxKey {
     public static final String LOCAL_NAME_REGEXP = "[A-Za-z0-9\\-_\\.]+|^$";
 
     /** Regular expression to specify the structure of IDs in reference keys. */
-    public static final String REFERENCE_KEY_ID_REGEXP =
-            "[A-Za-z0-9\\-_]+:[0-9].[0-9].[0-9]:[A-Za-z0-9\\-_]+:[A-Za-z0-9\\-_]+";
+    public static final String REFERENCE_KEY_ID_REGEXP = "[A-Za-z0-9\\-_]+:[0-9].[0-9].[0-9]:[A-Za-z0-9\\-_]+:[A-Za-z0-9\\-_]+";
 
     private static final int PARENT_NAME_FIELD = 0;
     private static final int PARENT_VERSION_FIELD = 1;
@@ -103,17 +102,19 @@ public class AxReferenceKey extends AxKey {
     /**
      * The Copy Constructor creates a key by copying another key.
      *
-     * @param referenceKey the reference key to copy from
+     * @param referenceKey
+     *        the reference key to copy from
      */
     public AxReferenceKey(final AxReferenceKey referenceKey) {
         this(referenceKey.getParentKeyName(), referenceKey.getParentKeyVersion(), referenceKey.getParentLocalName(),
-                referenceKey.getLocalName());
+                        referenceKey.getLocalName());
     }
 
     /**
      * Constructor to create a null reference key for the specified parent artifact key.
      *
-     * @param axArtifactKey the parent artifact key of this reference key
+     * @param axArtifactKey
+     *        the parent artifact key of this reference key
      */
     public AxReferenceKey(final AxArtifactKey axArtifactKey) {
         this(axArtifactKey.getName(), axArtifactKey.getVersion(), NULL_KEY_NAME, NULL_KEY_NAME);
@@ -122,8 +123,10 @@ public class AxReferenceKey extends AxKey {
     /**
      * Constructor to create a reference key for the given parent artifact key with the given local name.
      *
-     * @param axArtifactKey the parent artifact key of this reference key
-     * @param localName the local name of this reference key
+     * @param axArtifactKey
+     *        the parent artifact key of this reference key
+     * @param localName
+     *        the local name of this reference key
      */
     public AxReferenceKey(final AxArtifactKey axArtifactKey, final String localName) {
         this(axArtifactKey, NULL_KEY_NAME, localName);
@@ -132,8 +135,10 @@ public class AxReferenceKey extends AxKey {
     /**
      * Constructor to create a reference key for the given parent reference key with the given local name.
      *
-     * @param parentReferenceKey the parent reference key of this reference key
-     * @param localName the local name of this reference key
+     * @param parentReferenceKey
+     *        the parent reference key of this reference key
+     * @param localName
+     *        the local name of this reference key
      */
     public AxReferenceKey(final AxReferenceKey parentReferenceKey, final String localName) {
         this(parentReferenceKey.getParentArtifactKey(), parentReferenceKey.getLocalName(), localName);
@@ -143,9 +148,12 @@ public class AxReferenceKey extends AxKey {
      * Constructor to create a reference key for the given parent reference key (specified by the parent reference key's
      * artifact key and local name) with the given local name.
      *
-     * @param axArtifactKey the artifact key of the parent reference key of this reference key
-     * @param parentLocalName the local name of the parent reference key of this reference key
-     * @param localName the local name of this reference key
+     * @param axArtifactKey
+     *        the artifact key of the parent reference key of this reference key
+     * @param parentLocalName
+     *        the local name of the parent reference key of this reference key
+     * @param localName
+     *        the local name of this reference key
      */
     public AxReferenceKey(final AxArtifactKey axArtifactKey, final String parentLocalName, final String localName) {
         this(axArtifactKey.getName(), axArtifactKey.getVersion(), parentLocalName, localName);
@@ -155,9 +163,12 @@ public class AxReferenceKey extends AxKey {
      * Constructor to create a reference key for the given parent artifact key (specified by the parent artifact key's
      * name and version) with the given local name.
      *
-     * @param parentKeyName the name of the parent artifact key of this reference key
-     * @param parentKeyVersion the version of the parent artifact key of this reference key
-     * @param localName the local name of this reference key
+     * @param parentKeyName
+     *        the name of the parent artifact key of this reference key
+     * @param parentKeyVersion
+     *        the version of the parent artifact key of this reference key
+     * @param localName
+     *        the local name of this reference key
      */
     public AxReferenceKey(final String parentKeyName, final String parentKeyVersion, final String localName) {
         this(parentKeyName, parentKeyVersion, NULL_KEY_NAME, localName);
@@ -167,26 +178,31 @@ public class AxReferenceKey extends AxKey {
      * Constructor to create a reference key for the given parent key (specified by the parent key's name, version nad
      * local name) with the given local name.
      *
-     * @param parentKeyName the parent key name of this reference key
-     * @param parentKeyVersion the parent key version of this reference key
-     * @param parentLocalName the parent local name of this reference key
-     * @param localName the local name of this reference key
+     * @param parentKeyName
+     *        the parent key name of this reference key
+     * @param parentKeyVersion
+     *        the parent key version of this reference key
+     * @param parentLocalName
+     *        the parent local name of this reference key
+     * @param localName
+     *        the local name of this reference key
      */
     public AxReferenceKey(final String parentKeyName, final String parentKeyVersion, final String parentLocalName,
-            final String localName) {
+                    final String localName) {
         super();
         this.parentKeyName = Assertions.validateStringParameter(PARENT_KEY_NAME, parentKeyName, NAME_REGEXP);
-        this.parentKeyVersion =
-                Assertions.validateStringParameter(PARENT_KEY_VERSION, parentKeyVersion, VERSION_REGEXP);
-        this.parentLocalName =
-                Assertions.validateStringParameter(PARENT_LOCAL_NAME, parentLocalName, LOCAL_NAME_REGEXP);
+        this.parentKeyVersion = Assertions.validateStringParameter(PARENT_KEY_VERSION, parentKeyVersion,
+                        VERSION_REGEXP);
+        this.parentLocalName = Assertions.validateStringParameter(PARENT_LOCAL_NAME, parentLocalName,
+                        LOCAL_NAME_REGEXP);
         this.localName = Assertions.validateStringParameter(LOCAL_NAME, localName, LOCAL_NAME_REGEXP);
     }
 
     /**
      * Constructor to create a key from the specified key ID.
      *
-     * @param id the key ID in a format that respects the {@link KEY_ID_REGEXP}
+     * @param id
+     *        the key ID in a format that respects the {@link KEY_ID_REGEXP}
      */
     public AxReferenceKey(final String id) {
         final String conditionedId = Assertions.validateStringParameter("id", id, REFERENCE_KEY_ID_REGEXP);
@@ -199,13 +215,13 @@ public class AxReferenceKey extends AxKey {
 
         // Initiate the new key
         parentKeyName = Assertions.validateStringParameter(PARENT_KEY_NAME, nameVersionNameArray[PARENT_NAME_FIELD],
-                NAME_REGEXP);
+                        NAME_REGEXP);
         parentKeyVersion = Assertions.validateStringParameter(PARENT_KEY_VERSION,
-                nameVersionNameArray[PARENT_VERSION_FIELD], VERSION_REGEXP);
+                        nameVersionNameArray[PARENT_VERSION_FIELD], VERSION_REGEXP);
         parentLocalName = Assertions.validateStringParameter(PARENT_LOCAL_NAME,
-                nameVersionNameArray[PARENT_LOCAL_NAME_FIELD], LOCAL_NAME_REGEXP);
+                        nameVersionNameArray[PARENT_LOCAL_NAME_FIELD], LOCAL_NAME_REGEXP);
         localName = Assertions.validateStringParameter(LOCAL_NAME, nameVersionNameArray[LOCAL_NAME_FIELD],
-                LOCAL_NAME_REGEXP);
+                        LOCAL_NAME_REGEXP);
     }
 
     /**
@@ -215,7 +231,7 @@ public class AxReferenceKey extends AxKey {
      */
     public static AxReferenceKey getNullKey() {
         return new AxReferenceKey(AxKey.NULL_KEY_NAME, AxKey.NULL_KEY_VERSION, AxKey.NULL_KEY_NAME,
-                AxKey.NULL_KEY_NAME);
+                        AxKey.NULL_KEY_NAME);
     }
 
     /*
@@ -271,7 +287,8 @@ public class AxReferenceKey extends AxKey {
     /**
      * Sets the parent artifact key of this reference key.
      *
-     * @param parentKey the parent artifact key of this reference key
+     * @param parentKey
+     *        the parent artifact key of this reference key
      */
     public void setParentArtifactKey(final AxArtifactKey parentKey) {
         Assertions.argumentNotNull(parentKey, "parentKey may not be null");
@@ -284,7 +301,8 @@ public class AxReferenceKey extends AxKey {
     /**
      * Sets the parent reference key of this reference key.
      *
-     * @param parentKey the parent reference key of this reference key
+     * @param parentKey
+     *        the parent reference key of this reference key
      */
     public void setParentReferenceKey(final AxReferenceKey parentKey) {
         Assertions.argumentNotNull(parentKey, "parentKey may not be null");
@@ -306,7 +324,8 @@ public class AxReferenceKey extends AxKey {
     /**
      * Sets the parent key name of this reference key.
      *
-     * @param parentKeyName the parent key name of this reference key
+     * @param parentKeyName
+     *        the parent key name of this reference key
      */
     public void setParentKeyName(final String parentKeyName) {
         this.parentKeyName = Assertions.validateStringParameter(PARENT_KEY_NAME, parentKeyName, NAME_REGEXP);
@@ -324,11 +343,12 @@ public class AxReferenceKey extends AxKey {
     /**
      * Sets the parent key version of this reference key.
      *
-     * @param parentKeyVersion the parent key version of this reference key
+     * @param parentKeyVersion
+     *        the parent key version of this reference key
      */
     public void setParentKeyVersion(final String parentKeyVersion) {
-        this.parentKeyVersion =
-                Assertions.validateStringParameter(PARENT_KEY_VERSION, parentKeyVersion, VERSION_REGEXP);
+        this.parentKeyVersion = Assertions.validateStringParameter(PARENT_KEY_VERSION, parentKeyVersion,
+                        VERSION_REGEXP);
     }
 
     /**
@@ -343,11 +363,12 @@ public class AxReferenceKey extends AxKey {
     /**
      * Sets the parent local name of this reference key.
      *
-     * @param parentLocalName the parent local name of this reference key
+     * @param parentLocalName
+     *        the parent local name of this reference key
      */
     public void setParentLocalName(final String parentLocalName) {
-        this.parentLocalName =
-                Assertions.validateStringParameter(PARENT_LOCAL_NAME, parentLocalName, LOCAL_NAME_REGEXP);
+        this.parentLocalName = Assertions.validateStringParameter(PARENT_LOCAL_NAME, parentLocalName,
+                        LOCAL_NAME_REGEXP);
     }
 
     /**
@@ -362,7 +383,8 @@ public class AxReferenceKey extends AxKey {
     /**
      * Sets the local name of this reference key.
      *
-     * @param localName the local name of this reference key
+     * @param localName
+     *        the local name of this reference key
      */
     public void setLocalName(final String localName) {
         this.localName = Assertions.validateStringParameter(LOCAL_NAME, localName, LOCAL_NAME_REGEXP);
@@ -410,32 +432,32 @@ public class AxReferenceKey extends AxKey {
      */
     @Override
     public AxValidationResult validate(final AxValidationResult result) {
-        try {
-            Assertions.validateStringParameter(PARENT_KEY_NAME, parentKeyName, NAME_REGEXP);
-        } catch (final IllegalArgumentException e) {
+        final String parentNameValidationErrorMessage = Assertions.getStringParameterValidationMessage(PARENT_KEY_NAME,
+                        parentKeyName, NAME_REGEXP);
+        if (parentNameValidationErrorMessage != null) {
             result.addValidationMessage(new AxValidationMessage(this, this.getClass(), ValidationResult.INVALID,
-                    "parentKeyName invalid-" + e.getMessage()));
+                            "parentKeyName invalid-" + parentNameValidationErrorMessage));
         }
 
-        try {
-            Assertions.validateStringParameter(PARENT_KEY_VERSION, parentKeyVersion, VERSION_REGEXP);
-        } catch (final IllegalArgumentException e) {
+        final String parentKeyVersionValidationErrorMessage = Assertions
+                        .getStringParameterValidationMessage(PARENT_KEY_VERSION, parentKeyVersion, VERSION_REGEXP);
+        if (parentKeyVersionValidationErrorMessage != null) {
             result.addValidationMessage(new AxValidationMessage(this, this.getClass(), ValidationResult.INVALID,
-                    "parentKeyVersion invalid-" + e.getMessage()));
+                            "parentKeyVersion invalid-" + parentKeyVersionValidationErrorMessage));
         }
 
-        try {
-            Assertions.validateStringParameter(PARENT_LOCAL_NAME, parentLocalName, LOCAL_NAME_REGEXP);
-        } catch (final IllegalArgumentException e) {
+        final String parentLocalNameValidationErrorMessage = Assertions
+                        .getStringParameterValidationMessage(PARENT_LOCAL_NAME, parentLocalName, LOCAL_NAME_REGEXP);
+        if (parentLocalNameValidationErrorMessage != null) {
             result.addValidationMessage(new AxValidationMessage(this, this.getClass(), ValidationResult.INVALID,
-                    "parentLocalName invalid-" + e.getMessage()));
+                            "parentLocalName invalid-" + parentLocalNameValidationErrorMessage));
         }
 
-        try {
-            Assertions.validateStringParameter(LOCAL_NAME, localName, LOCAL_NAME_REGEXP);
-        } catch (final IllegalArgumentException e) {
+        final String localNameValidationErrorMessage = Assertions.getStringParameterValidationMessage(LOCAL_NAME,
+                        localName, LOCAL_NAME_REGEXP);
+        if (localNameValidationErrorMessage != null) {
             result.addValidationMessage(new AxValidationMessage(this, this.getClass(), ValidationResult.INVALID,
-                    "localName invalid-" + e.getMessage()));
+                            "localName invalid-" + localNameValidationErrorMessage));
         }
 
         return result;
index 7b6d830..82a808c 100644 (file)
@@ -28,6 +28,7 @@ import org.onap.policy.apex.model.basicmodel.concepts.AxModel;
  * @author Liam Fallon (liam.fallon@ericsson.com)
  * @param <M> the type of Apex model to create, must be a sub class of {@link AxModel}
  */
+@FunctionalInterface
 public interface ApexModelCreator<M extends AxModel> {
 
     /**
index 7e56b18..2bea92c 100644 (file)
@@ -233,7 +233,7 @@ public class ApexModelWriter<C extends AxConcept> {
             // May fail if not using XALAN XSLT engine. But not in any way vital
             domTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
         } catch (final Exception ignore) {
-            LOGGER.trace("Unable to set indent property...");
+            LOGGER.trace("Unable to set indent property", ignore);
         }
         return domTransformer;
     }
index 95bc853..c7ec2d6 100644 (file)
@@ -60,7 +60,7 @@ public abstract class AbstractParameters {
             return (Class<? extends AbstractParameters>) Class.forName(parameterClassName);
         }
         catch (final ClassNotFoundException e) {
-            throw new ApexRuntimeException("class not found for parameter class name \"" + parameterClassName + "\"");
+            throw new ApexRuntimeException("class not found for parameter class name \"" + parameterClassName + "\"", e);
         }
     }
 
index c215f3f..80a71f8 100644 (file)
@@ -33,6 +33,26 @@ public final class Assertions {
     private Assertions() {
     }
 
+    /**
+     * Gets the validation message for a string parameter.
+     *
+     * @param parameterName the string parameter name
+     * @param parameterValue the string parameter value
+     * @param pattern The regular expression
+     * @return null if the parameter is valid, the validation message otherwise
+     */
+    public static String getStringParameterValidationMessage(final String parameterName, final String parameterValue, final String pattern) {
+        try {
+            validateStringParameter(parameterName, parameterValue, pattern);
+        }
+        catch (IllegalArgumentException e) {
+            // This will cause a SONAR error but eliminates all SONAR messages in callers
+            return e.getMessage();
+        }
+        
+        return null;
+    }
+    
     /**
      * Checks if a string parameter matches a regular expression.
      *