From 676194789a8b880e2416f9d3bf2484a9fc6be1bc Mon Sep 17 00:00:00 2001 From: "a.sreekumar" Date: Tue, 15 Feb 2022 12:16:30 +0000 Subject: Fix issue with GeneratedValue in PfGeneratedIdKey PfGeneratedIdKey class (which is used as a composite key in JpaPolicyAudit and JpaPdpStatistics) uses GeneratedValue in a wrong way and not according to the specification. This review fixes it. PfGeneratedIdKey class is removed, and the generatedId is directly specified in the JpaPolicyAudit and JpaPdpStatistics classes. Note: These classes are only used by PAP, so the related methods for db interaction is removed as PAP directly talks to DB using spring repository layer. Also the only end result this change brings is that the 'generatedId' alone will be used as the primary key instead of 'generatedId, name and version' together. Corresponding changes in DB Migrator: https://gerrit.onap.org/r/c/policy/docker/+/127139 PAP: https://gerrit.onap.org/r/c/policy/pap/+/127130 Change-Id: Ib4ea8b60ffe5c2480746569c0354bf474a6b7006 Issue-ID: POLICY-3897 Signed-off-by: a.sreekumar --- .../pdp/persistence/concepts/JpaPdpStatistics.java | 89 +++++++---- .../provider/PdpStatisticsProvider.java | 172 --------------------- 2 files changed, 60 insertions(+), 201 deletions(-) delete mode 100644 models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java (limited to 'models-pdp/src/main/java') diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java index 0ff60b90f..45e63e404 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java @@ -4,6 +4,7 @@ * ================================================================================ * Copyright (C) 2019-2021 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,19 @@ 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.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; +import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import lombok.AllArgsConstructor; @@ -42,13 +47,15 @@ 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; @@ -67,10 +74,24 @@ import org.onap.policy.models.pdp.concepts.PdpStatistics; public class JpaPdpStatistics extends PfConcept implements PfAuthorative, 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 = "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 +137,8 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative getKeys() { - return getKey().getKeys(); + final List 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 +277,13 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative getFilteredPdpStatistics(@NonNull final PfDao dao, - PdpFilterParameters filterParams) { - - if (filterParams.getRecordNum() <= 0) { - filterParams.setRecordNum(DEFAULT_RECORD_COUNT); - - } else if (filterParams.getRecordNum() > MAX_RECORD_COUNT) { - filterParams.setRecordNum(MAX_RECORD_COUNT); - } - - return asPdpStatisticsList(dao.getFiltered(JpaPdpStatistics.class, filterParams)); - } - - /** - * Creates PDP statistics. - * - * @param dao the DAO to use to access the database - * @param pdpStatisticsList a specification of the PDP statistics to create - * @return the PDP statistics created - * @throws PfModelException on errors creating PDP statistics - */ - public List createPdpStatistics(@NonNull final PfDao dao, - @NonNull final List pdpStatisticsList) throws PfModelException { - for (PdpStatistics pdpStatistics : pdpStatisticsList) { - var jpaPdpStatistics = new JpaPdpStatistics(); - jpaPdpStatistics.fromAuthorative(pdpStatistics); - BeanValidationResult validationResult = jpaPdpStatistics.validate("pdp statistics"); - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - dao.create(jpaPdpStatistics); - pdpStatistics.setGeneratedId(jpaPdpStatistics.getKey().getGeneratedId()); - } - - // Return the created PDP statistics - List pdpStatistics = new ArrayList<>(pdpStatisticsList.size()); - - for (PdpStatistics pdpStatisticsItem : pdpStatisticsList) { - var jpaPdpStatistics = - dao.get(JpaPdpStatistics.class, new PfGeneratedIdKey(pdpStatisticsItem.getPdpInstanceId(), - PfKey.NULL_KEY_VERSION, pdpStatisticsItem.getGeneratedId())); - pdpStatistics.add(jpaPdpStatistics.toAuthorative()); - } - return pdpStatistics; - } - - /** - * Updates PDP statistics. - * - * @param dao the DAO to use to access the database - * @param pdpStatisticsList a specification of the PDP statistics to update - * @return the PDP statistics updated - * @throws PfModelException on errors updating PDP statistics - */ - public List updatePdpStatistics(@NonNull final PfDao dao, - @NonNull final List pdpStatisticsList) throws PfModelException { - - for (PdpStatistics pdpStatistics : pdpStatisticsList) { - var jpaPdpStatistics = new JpaPdpStatistics(); - jpaPdpStatistics.fromAuthorative(pdpStatistics); - - BeanValidationResult validationResult = jpaPdpStatistics.validate("pdp statistics"); - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - dao.update(jpaPdpStatistics); - } - - // Return the created PDP statistics - List pdpStatistics = new ArrayList<>(pdpStatisticsList.size()); - - for (PdpStatistics pdpStatisticsItem : pdpStatisticsList) { - var jpaPdpStatistics = - dao.get(JpaPdpStatistics.class, new PfGeneratedIdKey(pdpStatisticsItem.getPdpInstanceId(), - PfKey.NULL_KEY_VERSION, pdpStatisticsItem.getGeneratedId())); - pdpStatistics.add(jpaPdpStatistics.toAuthorative()); - } - - return pdpStatistics; - } - - /** - * Delete a PDP statistics. - * - * @param dao the DAO to use to access the database - * @param name the name of the policy to get, null to get all PDP statistics - * @param timestamp the timeStamp of statistics to delete, null to delete all statistics record of given PDP - * @return the PDP statistics list deleted - * @throws PfModelException on errors deleting PDP statistics - */ - public List deletePdpStatistics(@NonNull final PfDao dao, @NonNull final String name, - final Instant timestamp) { - List pdpStatisticsListToDel = asPdpStatisticsList(dao.getFiltered(JpaPdpStatistics.class, - PfFilterParameters.builder().name(name).startTime(timestamp).endTime(timestamp).build())); - - pdpStatisticsListToDel.stream().forEach(s -> dao.delete(JpaPdpStatistics.class, - new PfGeneratedIdKey(s.getPdpInstanceId(), PfKey.NULL_KEY_VERSION, s.getGeneratedId()))); - - return pdpStatisticsListToDel; - } - - /** - * Convert JPA PDP statistics list to an PDP statistics list. - * - * @param jpaPdpStatisticsList the list to convert - * @return the PDP statistics list - */ - private List asPdpStatisticsList(List jpaPdpStatisticsList) { - return jpaPdpStatisticsList.stream().map(JpaPdpStatistics::toAuthorative).collect(Collectors.toList()); - } -} -- cgit 1.2.3-korg