Replace copyTo methods with copy constructors
[policy/models.git] / models-base / src / main / java / org / onap / policy / models / base / PfConceptKey.java
index efcbe39..f5baae7 100644 (file)
@@ -1,6 +1,7 @@
-/*-
+/*
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
+ *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,8 +27,10 @@ import java.util.List;
 import javax.persistence.Column;
 import javax.persistence.Embeddable;
 
-import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.ToString;
 
 import org.onap.policy.common.utils.validation.Assertions;
 import org.onap.policy.models.base.PfValidationResult.ValidationResult;
@@ -41,7 +44,8 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult;
  * regular expressions respectively.
  */
 @Embeddable
-@Data
+@Getter
+@ToString
 @EqualsAndHashCode(callSuper = false)
 public class PfConceptKey extends PfKey {
     private static final long serialVersionUID = 8932717618579392561L;
@@ -49,10 +53,10 @@ public class PfConceptKey extends PfKey {
     private static final String NAME_TOKEN = "name";
     private static final String VERSION_TOKEN = "version";
 
-    @Column(name = NAME_TOKEN)
+    @Column(name = NAME_TOKEN, length = 120)
     private String name;
 
-    @Column(name = VERSION_TOKEN)
+    @Column(name = VERSION_TOKEN, length = 20)
     private String version;
 
     /**
@@ -67,8 +71,10 @@ public class PfConceptKey extends PfKey {
      *
      * @param copyConcept the concept to copy from
      */
-    public PfConceptKey(final PfConceptKey copyConcept) {
+    public PfConceptKey(@NonNull final PfConceptKey copyConcept) {
         super(copyConcept);
+        this.name = copyConcept.name;
+        this.version = copyConcept.version;
     }
 
     /**
@@ -77,7 +83,7 @@ public class PfConceptKey extends PfKey {
      * @param name the key name
      * @param version the key version
      */
-    public PfConceptKey(final String name, final String version) {
+    public PfConceptKey(@NonNull final String name, @NonNull final String version) {
         super();
         this.name = Assertions.validateStringParameter(NAME_TOKEN, name, NAME_REGEXP);
         this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, VERSION_REGEXP);
@@ -88,9 +94,7 @@ public class PfConceptKey extends PfKey {
      *
      * @param id the key ID in a format that respects the KEY_ID_REGEXP
      */
-    public PfConceptKey(final String id) {
-        Assertions.argumentNotNull(id, "id may not be null");
-
+    public PfConceptKey(@NonNull final String id) {
         // Check the incoming ID is valid
         Assertions.validateStringParameter("id", id, KEY_ID_REGEXP);
 
@@ -118,6 +122,14 @@ public class PfConceptKey extends PfKey {
         return this;
     }
 
+    public void setName(@NonNull final String name) {
+        this.name = Assertions.validateStringParameter(NAME_TOKEN, name, NAME_REGEXP);
+    }
+
+    public void setVersion(@NonNull final String version) {
+        this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, VERSION_REGEXP);
+    }
+
     @Override
     public List<PfKey> getKeys() {
         final List<PfKey> keyList = new ArrayList<>();
@@ -131,7 +143,21 @@ public class PfConceptKey extends PfKey {
     }
 
     @Override
-    public PfKey.Compatibility getCompatibility(final PfKey otherKey) {
+    public boolean isNullKey() {
+        return this.equals(PfConceptKey.getNullKey());
+    }
+
+    /**
+     * Determines if the version is "null".
+     *
+     * @return {@code true} if the version is null, {@code false} otherwise
+     */
+    public boolean isNullVersion() {
+        return PfKey.NULL_KEY_VERSION.equals(getVersion());
+    }
+
+    @Override
+    public PfKey.Compatibility getCompatibility(@NonNull final PfKey otherKey) {
         if (!(otherKey instanceof PfConceptKey)) {
             return Compatibility.DIFFERENT;
         }
@@ -161,7 +187,7 @@ public class PfConceptKey extends PfKey {
     }
 
     @Override
-    public boolean isCompatible(final PfKey otherKey) {
+    public boolean isCompatible(@NonNull final PfKey otherKey) {
         if (!(otherKey instanceof PfConceptKey)) {
             return false;
         }
@@ -172,6 +198,73 @@ public class PfConceptKey extends PfKey {
         return !(compatibility == Compatibility.DIFFERENT || compatibility == Compatibility.MAJOR);
     }
 
+    @Override
+    public boolean isNewerThan(@NonNull final PfKey otherKey) {
+        Assertions.instanceOf(otherKey, PfConceptKey.class);
+
+        final PfConceptKey otherConceptKey = (PfConceptKey) otherKey;
+
+        if (this.equals(otherConceptKey)) {
+            return false;
+        }
+
+        if (!this.getName().equals(otherConceptKey.getName())) {
+            return this.getName().compareTo(otherConceptKey.getName()) > 0;
+        }
+
+        final String[] thisVersionArray = getVersion().split("\\.");
+        final String[] otherVersionArray = otherConceptKey.getVersion().split("\\.");
+
+        // There must always be at least one element in each version
+        if (!thisVersionArray[0].equals(otherVersionArray[0])) {
+            return Integer.valueOf(thisVersionArray[0]) > Integer.valueOf(otherVersionArray[0]);
+        }
+
+        if (thisVersionArray.length >= 2 && otherVersionArray.length >= 2
+                        && !thisVersionArray[1].equals(otherVersionArray[1])) {
+            return Integer.valueOf(thisVersionArray[1]) > Integer.valueOf(otherVersionArray[1]);
+        }
+
+        if (thisVersionArray.length >= 3 && otherVersionArray.length >= 3
+                        && !thisVersionArray[2].equals(otherVersionArray[2])) {
+            return Integer.valueOf(thisVersionArray[2]) > Integer.valueOf(otherVersionArray[2]);
+        }
+
+        return false;
+    }
+
+    @Override
+    public int getMajorVersion() {
+        final String[] versionArray = getVersion().split("\\.");
+
+        // There must always be at least one element in each version
+        return Integer.parseInt(versionArray[0]);
+    }
+
+    @Override
+    public int getMinorVersion() {
+        final String[] versionArray = getVersion().split("\\.");
+
+        if (versionArray.length >= 2) {
+            return Integer.parseInt(versionArray[1]);
+        }
+        else {
+            return 0;
+        }
+    }
+
+    @Override
+    public int getPatchVersion() {
+        final String[] versionArray = getVersion().split("\\.");
+
+        if (versionArray.length >= 3) {
+            return Integer.parseInt(versionArray[2]);
+        }
+        else {
+            return 0;
+        }
+    }
+
     @Override
     public PfValidationResult validate(final PfValidationResult result) {
         final String nameValidationErrorMessage = Assertions.getStringParameterValidationMessage(NAME_TOKEN, name,
@@ -198,28 +291,14 @@ public class PfConceptKey extends PfKey {
     }
 
     @Override
-    public PfConcept copyTo(final PfConcept target) {
-        Assertions.argumentNotNull(target, "target may not be null");
-
-        final PfConcept copyObject = target;
-        Assertions.instanceOf(copyObject, PfConceptKey.class);
-
-        final PfConceptKey copy = ((PfConceptKey) copyObject);
-        copy.setName(name);
-        copy.setVersion(version);
-
-        return copyObject;
-    }
-
-    @Override
-    public int compareTo(final PfConcept otherObj) {
+    public int compareTo(@NonNull final PfConcept otherObj) {
         Assertions.argumentNotNull(otherObj, "comparison object may not be null");
 
         if (this == otherObj) {
             return 0;
         }
         if (getClass() != otherObj.getClass()) {
-            return this.hashCode() - otherObj.hashCode();
+            return getClass().getName().compareTo(otherObj.getClass().getName());
         }
 
         final PfConceptKey other = (PfConceptKey) otherObj;