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 90cf4e4..57a8ec9 100644 (file)
@@ -2,8 +2,9 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Model
  * ================================================================================
- * Copyright (C) 2019 Nordix Foundation.
- * Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * 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.
 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;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.builder.CompareToBuilder;
-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.PfConceptKey;
 import org.onap.policy.models.base.PfKey;
-import org.onap.policy.models.base.PfTimestampKey;
 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")
+@Table(
+    name = "PdpStatistics",
+    indexes = {
+        @Index(
+            name = "IDXTSIDX1",
+            columnList = "timeStamp,name,version",
+            unique = true
+            )
+    }
+)
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @AllArgsConstructor
 @EqualsAndHashCode(callSuper = false)
 public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStatistics>, Serializable {
     private static final long serialVersionUID = -7312974966820980659L;
-    private static final String NULL_NAME = "NULL";
 
-    @EmbeddedId
-    @VerifyKey
-    @NotNull
-    private PfTimestampKey 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)
+    private Date timeStamp;
 
     @Column(length = 120)
     private String pdpGroupName;
@@ -92,6 +128,15 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
     @Column
     private long policyExecutedFailCount;
 
+    @Column
+    private long policyUndeployCount;
+
+    @Column
+    private long policyUndeploySuccessCount;
+
+    @Column
+    private long policyUndeployFailCount;
+
     @ElementCollection
     private List<PdpEngineWorkerStatistics> engineStats;
 
@@ -99,19 +144,10 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
      * The Default Constructor creates a {@link JpaPdpStatistics} object with a null key.
      */
     public JpaPdpStatistics() {
-        this(new PfTimestampKey());
+        this.setName(PfKey.NULL_KEY_NAME);
+        this.setVersion(PfKey.NULL_KEY_VERSION);
     }
 
-    /**
-     * The Key Constructor creates a {@link JpaPdpStatistics} object with the given concept key.
-     *
-     * @param key the key
-     */
-    public JpaPdpStatistics(@NonNull final PfTimestampKey key) {
-        this(key, NULL_NAME, NULL_NAME, 0L, 0L, 0L, 0L, 0L, 0L, null);
-    }
-
-
     /**
      * Copy constructor.
      *
@@ -119,12 +155,18 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
      */
     public JpaPdpStatistics(@NonNull final JpaPdpStatistics copyConcept) {
         super(copyConcept);
-        this.key = new PfTimestampKey(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;
         this.policyDeployCount = copyConcept.policyDeployCount;
         this.policyDeploySuccessCount = copyConcept.policyDeploySuccessCount;
         this.policyDeployFailCount = copyConcept.policyDeployFailCount;
+        this.policyUndeployCount = copyConcept.policyUndeployCount;
+        this.policyUndeploySuccessCount = copyConcept.policyUndeploySuccessCount;
+        this.policyUndeployFailCount = copyConcept.policyUndeployFailCount;
         this.policyExecutedCount = copyConcept.policyExecutedCount;
         this.policyExecutedSuccessCount = copyConcept.policyExecutedSuccessCount;
         this.policyExecutedFailCount = copyConcept.policyExecutedFailCount;
@@ -153,26 +195,38 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
         }
 
         final JpaPdpStatistics other = (JpaPdpStatistics) otherConcept;
-        return new CompareToBuilder().append(this.key, other.key).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.policyExecutedCount, other.policyExecutedCount)
-                .append(this.policyExecutedFailCount, other.policyExecutedFailCount)
-                .append(this.policyExecutedSuccessCount, other.policyExecutedSuccessCount).toComparison();
+        return new CompareToBuilder()
+            .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() {
-        PdpStatistics pdpStatistics = new PdpStatistics();
-        pdpStatistics.setPdpInstanceId(key.getName());
-        pdpStatistics.setTimeStamp(new Date(key.getTimeStamp().getTime()));
+        var pdpStatistics = new PdpStatistics();
+        pdpStatistics.setPdpInstanceId(name);
+        pdpStatistics.setGeneratedId(generatedId);
+        pdpStatistics.setTimeStamp(timeStamp.toInstant());
         pdpStatistics.setPdpGroupName(pdpGroupName);
         pdpStatistics.setPdpSubGroupName(pdpSubGroupName);
         pdpStatistics.setPolicyDeployCount(policyDeployCount);
         pdpStatistics.setPolicyDeployFailCount(policyDeployFailCount);
         pdpStatistics.setPolicyDeploySuccessCount(policyDeploySuccessCount);
+        pdpStatistics.setPolicyUndeployCount(policyUndeployCount);
+        pdpStatistics.setPolicyUndeployFailCount(policyUndeployFailCount);
+        pdpStatistics.setPolicyUndeploySuccessCount(policyUndeploySuccessCount);
         pdpStatistics.setPolicyExecutedCount(policyExecutedCount);
         pdpStatistics.setPolicyExecutedFailCount(policyExecutedFailCount);
         pdpStatistics.setPolicyExecutedSuccessCount(policyExecutedSuccessCount);
@@ -183,30 +237,45 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat
 
     @Override
     public void fromAuthorative(@NonNull final PdpStatistics pdpStatistics) {
-        if (this.key == null || this.getKey().isNullKey()) {
-            this.setKey(new PfTimestampKey(pdpStatistics.getPdpInstanceId(), PfKey.NULL_KEY_VERSION,
-                    new Date(pdpStatistics.getTimeStamp() == null ? 0 : pdpStatistics.getTimeStamp().getTime())));
+        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 {
+            this.setTimeStamp(Date.from(pdpStatistics.getTimeStamp()));
         }
         this.setPdpGroupName(pdpStatistics.getPdpGroupName());
         this.setPdpSubGroupName(pdpStatistics.getPdpSubGroupName());
         this.setPolicyDeployCount(pdpStatistics.getPolicyDeployCount());
         this.setPolicyDeployFailCount(pdpStatistics.getPolicyDeployFailCount());
         this.setPolicyDeploySuccessCount(pdpStatistics.getPolicyDeploySuccessCount());
+        this.setPolicyUndeployCount(pdpStatistics.getPolicyUndeployCount());
+        this.setPolicyUndeployFailCount(pdpStatistics.getPolicyUndeployFailCount());
+        this.setPolicyUndeploySuccessCount(pdpStatistics.getPolicyUndeploySuccessCount());
         this.setPolicyExecutedCount(pdpStatistics.getPolicyExecutedCount());
         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) {
@@ -215,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;
+    }
 }