Set all cross references of policy/models
[policy/models.git] / models-pdp / src / main / java / org / onap / policy / models / pdp / persistence / concepts / JpaPdpStatistics.java
index 0ff60b9..57a8ec9 100644 (file)
@@ -2,8 +2,9 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Model
  * ================================================================================
- * Copyright (C) 2019-2021 Nordix Foundation.
+ * Copyright (C) 2019-2021,2023 Nordix Foundation.
  * Modifications Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2022 Bell Canada. 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.
@@ -25,15 +26,20 @@ package org.onap.policy.models.pdp.persistence.concepts;
 
 import java.io.Serializable;
 import java.time.Instant;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import javax.persistence.Column;
 import javax.persistence.ElementCollection;
-import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Index;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.Table;
+import javax.persistence.TableGenerator;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import lombok.AllArgsConstructor;
@@ -41,25 +47,33 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.eclipse.persistence.annotations.Index;
-import org.onap.policy.common.parameters.annotations.NotNull;
+import org.onap.policy.common.parameters.BeanValidationResult;
+import org.onap.policy.common.parameters.ValidationStatus;
+import org.onap.policy.common.parameters.annotations.Pattern;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
-import org.onap.policy.models.base.PfGeneratedIdKey;
+import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfKey;
 import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.base.validation.annotations.VerifyKey;
+import org.onap.policy.models.base.Validated;
 import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics;
 import org.onap.policy.models.pdp.concepts.PdpStatistics;
 
-
 /**
  * Class to represent a PDP statistics in the database.
  *
  */
 @Entity
-@Table(name = "PdpStatistics")
-@Index(name = "IDX_TSIDX1", columnNames = {"timeStamp", "name", "version"})
+@Table(
+    name = "PdpStatistics",
+    indexes = {
+        @Index(
+            name = "IDXTSIDX1",
+            columnList = "timeStamp,name,version",
+            unique = true
+            )
+    }
+)
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @AllArgsConstructor
@@ -67,10 +81,24 @@ import org.onap.policy.models.pdp.concepts.PdpStatistics;
 public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStatistics>, Serializable {
     private static final long serialVersionUID = -7312974966820980659L;
 
-    @EmbeddedId
-    @VerifyKey
-    @NotNull
-    private PfGeneratedIdKey key;
+    @Id
+    @Column(name = "ID")
+    @GeneratedValue(strategy = GenerationType.TABLE, generator = "statisticsIdGen")
+    @TableGenerator(
+        name = "statisticsIdGen",
+        table = "statistics_sequence",
+        pkColumnName = "SEQ_NAME",
+        valueColumnName = "SEQ_COUNT",
+        pkColumnValue = "SEQ_GEN")
+    private Long generatedId;
+
+    @Column(name = "name", length = 120)
+    @Pattern(regexp = PfKey.NAME_REGEXP)
+    private String name;
+
+    @Column(name = "version", length = 20)
+    @Pattern(regexp = PfKey.VERSION_REGEXP)
+    private String version;
 
     @Column(precision = 3)
     @Temporal(TemporalType.TIMESTAMP)
@@ -116,16 +144,8 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
      * The Default Constructor creates a {@link JpaPdpStatistics} object with a null key.
      */
     public JpaPdpStatistics() {
-        this(new PfGeneratedIdKey());
-    }
-
-    /**
-     * The Key Constructor creates a {@link JpaPdpStatistics} object with the given concept key.
-     *
-     * @param key the key
-     */
-    public JpaPdpStatistics(@NonNull final PfGeneratedIdKey key) {
-        this.key = new PfGeneratedIdKey(key);
+        this.setName(PfKey.NULL_KEY_NAME);
+        this.setVersion(PfKey.NULL_KEY_VERSION);
     }
 
     /**
@@ -135,7 +155,9 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
      */
     public JpaPdpStatistics(@NonNull final JpaPdpStatistics copyConcept) {
         super(copyConcept);
-        this.key = new PfGeneratedIdKey(copyConcept.key);
+        this.name = copyConcept.name;
+        this.version = copyConcept.version;
+        this.generatedId = copyConcept.generatedId;
         this.timeStamp = copyConcept.timeStamp;
         this.pdpGroupName = copyConcept.pdpGroupName;
         this.pdpSubGroupName = copyConcept.pdpSubGroupName;
@@ -174,26 +196,28 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
 
         final JpaPdpStatistics other = (JpaPdpStatistics) otherConcept;
         return new CompareToBuilder()
-                .append(this.key, other.key)
-                .append(this.timeStamp, other.timeStamp)
-                .append(this.pdpGroupName, other.pdpGroupName)
-                .append(this.pdpSubGroupName, other.pdpSubGroupName)
-                .append(this.policyDeployCount, other.policyDeployCount)
-                .append(this.policyDeployFailCount, other.policyDeployFailCount)
-                .append(this.policyDeploySuccessCount, other.policyDeploySuccessCount)
-                .append(this.policyUndeployCount, other.policyUndeployCount)
-                .append(this.policyUndeployFailCount, other.policyUndeployFailCount)
-                .append(this.policyUndeploySuccessCount, other.policyUndeploySuccessCount)
-                .append(this.policyExecutedCount, other.policyExecutedCount)
-                .append(this.policyExecutedFailCount, other.policyExecutedFailCount)
-                .append(this.policyExecutedSuccessCount, other.policyExecutedSuccessCount).toComparison();
+            .append(this.name, other.name)
+            .append(this.version, other.version)
+            .append(this.generatedId, other.generatedId)
+            .append(this.timeStamp, other.timeStamp)
+            .append(this.pdpGroupName, other.pdpGroupName)
+            .append(this.pdpSubGroupName, other.pdpSubGroupName)
+            .append(this.policyDeployCount, other.policyDeployCount)
+            .append(this.policyDeployFailCount, other.policyDeployFailCount)
+            .append(this.policyDeploySuccessCount, other.policyDeploySuccessCount)
+            .append(this.policyUndeployCount, other.policyUndeployCount)
+            .append(this.policyUndeployFailCount, other.policyUndeployFailCount)
+            .append(this.policyUndeploySuccessCount, other.policyUndeploySuccessCount)
+            .append(this.policyExecutedCount, other.policyExecutedCount)
+            .append(this.policyExecutedFailCount, other.policyExecutedFailCount)
+            .append(this.policyExecutedSuccessCount, other.policyExecutedSuccessCount).toComparison();
     }
 
     @Override
     public PdpStatistics toAuthorative() {
         var pdpStatistics = new PdpStatistics();
-        pdpStatistics.setPdpInstanceId(key.getName());
-        pdpStatistics.setGeneratedId(key.getGeneratedId());
+        pdpStatistics.setPdpInstanceId(name);
+        pdpStatistics.setGeneratedId(generatedId);
         pdpStatistics.setTimeStamp(timeStamp.toInstant());
         pdpStatistics.setPdpGroupName(pdpGroupName);
         pdpStatistics.setPdpSubGroupName(pdpSubGroupName);
@@ -213,12 +237,11 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
 
     @Override
     public void fromAuthorative(@NonNull final PdpStatistics pdpStatistics) {
-        if (pdpStatistics.getGeneratedId() == null) {
-            this.setKey(new PfGeneratedIdKey(pdpStatistics.getPdpInstanceId(), PfKey.NULL_KEY_VERSION));
-        } else {
-            this.setKey(new PfGeneratedIdKey(pdpStatistics.getPdpInstanceId(),
-                        PfKey.NULL_KEY_VERSION, pdpStatistics.getGeneratedId()));
+        if (pdpStatistics.getGeneratedId() != null) {
+            this.setGeneratedId(pdpStatistics.getGeneratedId());
         }
+        this.setName(pdpStatistics.getPdpInstanceId());
+        this.setVersion(PfKey.NULL_KEY_VERSION);
         if (pdpStatistics.getTimeStamp() == null) {
             this.setTimeStamp(Date.from(Instant.EPOCH));
         } else {
@@ -236,17 +259,23 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
         this.setPolicyExecutedFailCount(pdpStatistics.getPolicyExecutedFailCount());
         this.setPolicyExecutedSuccessCount(pdpStatistics.getPolicyExecutedSuccessCount());
         this.setEngineStats(
-                PfUtils.mapList(pdpStatistics.getEngineStats(), PdpEngineWorkerStatistics::new, null));
+            PfUtils.mapList(pdpStatistics.getEngineStats(), PdpEngineWorkerStatistics::new, null));
     }
 
     @Override
     public List<PfKey> getKeys() {
-        return getKey().getKeys();
+        final List<PfKey> keyList = new ArrayList<>();
+        keyList.add(getKey());
+        return keyList;
+    }
+
+    @Override
+    public PfKey getKey() {
+        return new PfConceptKey(name, version);
     }
 
     @Override
     public void clean() {
-        key.clean();
         pdpGroupName = pdpGroupName.trim();
         pdpSubGroupName = pdpSubGroupName.trim();
         if (engineStats != null) {
@@ -255,4 +284,13 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
             }
         }
     }
+
+    @Override
+    public BeanValidationResult validate(@NonNull String fieldName) {
+        BeanValidationResult result = super.validate(fieldName);
+        if (PfKey.NULL_KEY_NAME.equals(name)) {
+            result.addResult("name", name, ValidationStatus.INVALID, Validated.IS_NULL);
+        }
+        return result;
+    }
 }