diff options
Diffstat (limited to 'models-pap/src/main/java')
2 files changed, 63 insertions, 166 deletions
diff --git a/models-pap/src/main/java/org/onap/policy/models/pap/persistence/concepts/JpaPolicyAudit.java b/models-pap/src/main/java/org/onap/policy/models/pap/persistence/concepts/JpaPolicyAudit.java index e151441da..35e385637 100644 --- a/models-pap/src/main/java/org/onap/policy/models/pap/persistence/concepts/JpaPolicyAudit.java +++ b/models-pap/src/main/java/org/onap/policy/models/pap/persistence/concepts/JpaPolicyAudit.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation. - * Modifications Copyright (C) 2021 Bell Canada. All rights reserved. + * Modifications Copyright (C) 2021-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. @@ -22,28 +22,36 @@ package org.onap.policy.models.pap.persistence.concepts; import java.time.Instant; +import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.Column; -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 javax.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NonNull; import org.apache.commons.lang3.builder.CompareToBuilder; +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.common.utils.validation.Assertions; 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.PfReferenceKey; -import org.onap.policy.models.base.validation.annotations.VerifyKey; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.pap.concepts.PolicyAudit; import org.onap.policy.models.pap.concepts.PolicyAudit.AuditAction; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; @@ -62,11 +70,24 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAudit> { private static final long serialVersionUID = -2935734300607322191L; - @EmbeddedId - @Column - @NotNull - @VerifyKey(versionNotNull = true) - private PfGeneratedIdKey key; + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.TABLE, generator = "auditIdGen") + @TableGenerator( + name = "auditIdGen", + 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 private String pdpGroup; @@ -90,7 +111,8 @@ public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAud * Default constructor. */ public JpaPolicyAudit() { - key = new PfGeneratedIdKey(); + this.setName(PfKey.NULL_KEY_NAME); + this.setVersion(PfKey.NULL_KEY_VERSION); } /** @@ -108,7 +130,9 @@ public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAud * @param copyConcept original entity to be copied */ public JpaPolicyAudit(JpaPolicyAudit copyConcept) { - this.key = new PfGeneratedIdKey(copyConcept.getKey()); + this.name = copyConcept.name; + this.version = copyConcept.version; + this.generatedId = copyConcept.generatedId; this.pdpGroup = copyConcept.getPdpGroup(); this.pdpType = copyConcept.getPdpType(); this.action = copyConcept.getAction(); @@ -132,7 +156,9 @@ public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAud // @formatter:off return new CompareToBuilder() - .append(key, other.key) + .append(name, other.name) + .append(version, other.version) + .append(generatedId, other.generatedId) .append(pdpGroup, other.pdpGroup) .append(pdpType, other.pdpType) .append(action, other.action) @@ -144,11 +170,11 @@ public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAud @Override public PolicyAudit toAuthorative() { - var policyIdent = new ToscaConceptIdentifier(key.getName(), key.getVersion()); + var policyIdent = new ToscaConceptIdentifier(name, version); // @formatter:off return PolicyAudit.builder() - .auditId(key.getGeneratedId()) + .auditId(generatedId) .pdpGroup(pdpGroup) .pdpType(pdpType) .policy(policyIdent) @@ -163,11 +189,13 @@ public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAud public void fromAuthorative(PolicyAudit authorativeConcept) { if (authorativeConcept.getPolicy() != null) { final ToscaConceptIdentifier policy = authorativeConcept.getPolicy(); - key = new PfGeneratedIdKey(policy.getName(), policy.getVersion(), authorativeConcept.getAuditId()); + this.setName(policy.getName()); + this.setVersion(policy.getVersion()); } else { - key = new PfGeneratedIdKey(); + this.setName(PfKey.NULL_KEY_NAME); + this.setVersion(PfKey.NULL_KEY_VERSION); } - + this.setGeneratedId(authorativeConcept.getAuditId()); pdpGroup = authorativeConcept.getPdpGroup(); pdpType = authorativeConcept.getPdpType(); action = authorativeConcept.getAction(); @@ -176,17 +204,32 @@ public class JpaPolicyAudit extends PfConcept implements PfAuthorative<PolicyAud user = authorativeConcept.getUser(); } + @Override public List<PfKey> getKeys() { - return getKey().getKeys(); + final List<PfKey> keyList = new ArrayList<>(); + keyList.add(getKey()); + return keyList; } @Override - public void clean() { - key.clean(); + public PfKey getKey() { + return new PfConceptKey(name, version); + } + @Override + public void clean() { pdpGroup = Assertions.validateStringParameter("pdpGroup", pdpGroup, PfReferenceKey.LOCAL_NAME_REGEXP); pdpType = Assertions.validateStringParameter("pdpType", pdpType, PfReferenceKey.LOCAL_NAME_REGEXP); user = Assertions.validateStringParameter("user", user, PfReferenceKey.LOCAL_NAME_REGEXP); } + + @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; + } } diff --git a/models-pap/src/main/java/org/onap/policy/models/pap/persistence/provider/PolicyAuditProvider.java b/models-pap/src/main/java/org/onap/policy/models/pap/persistence/provider/PolicyAuditProvider.java deleted file mode 100644 index ec759d34d..000000000 --- a/models-pap/src/main/java/org/onap/policy/models/pap/persistence/provider/PolicyAuditProvider.java +++ /dev/null @@ -1,146 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation. - * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2021 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.pap.persistence.provider; - -import java.time.Instant; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import javax.ws.rs.core.Response; -import lombok.Builder; -import lombok.Data; -import lombok.NonNull; -import org.apache.commons.lang3.StringUtils; -import org.onap.policy.common.parameters.BeanValidationResult; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.dao.PfDao; -import org.onap.policy.models.dao.PfFilterParametersIntfc; -import org.onap.policy.models.pap.concepts.PolicyAudit; -import org.onap.policy.models.pap.concepts.PolicyAudit.AuditAction; -import org.onap.policy.models.pap.persistence.concepts.JpaPolicyAudit; - -/** - * Provider for Policy Audit. - * - * @author Adheli Tavares (adheli.tavares@est.tech) - * - */ -public class PolicyAuditProvider { - - private static final Integer DEFAULT_MAX_RECORDS = 100; - private static final Integer DEFAULT_MIN_RECORDS = 10; - - /** - * Create audit records. - * - * @param audits list of policy audit - */ - public void createAuditRecords(@NonNull PfDao dao, @NonNull final List<PolicyAudit> audits) { - List<JpaPolicyAudit> jpaAudits = audits.stream().map(JpaPolicyAudit::new).collect(Collectors.toList()); - - var result = new BeanValidationResult("createAuditRecords", jpaAudits); - - var count = 0; - for (JpaPolicyAudit jpaAudit : jpaAudits) { - result.addResult(jpaAudit.validate(String.valueOf(count++))); - } - - if (!result.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, result.getResult()); - } - - dao.createCollection(jpaAudits); - } - - /** - * Collect audit records based on filters at {@link AuditFilter}. - * - * @param auditFilter {@link AuditFilter} object with filters for search - * @return list of {@link PolicyAudit} records - */ - public List<PolicyAudit> getAuditRecords(@NonNull PfDao dao, @NonNull AuditFilter auditFilter) { - if (auditFilter.getRecordNum() < 1) { - auditFilter.setRecordNum(DEFAULT_MIN_RECORDS); - } else if (auditFilter.getRecordNum() > DEFAULT_MAX_RECORDS) { - auditFilter.setRecordNum(DEFAULT_MAX_RECORDS); - } - - return dao.getFiltered(JpaPolicyAudit.class, auditFilter).stream().map(JpaPolicyAudit::toAuthorative) - .collect(Collectors.toList()); - } - - /** - * Create a filter for looking for audit records. - * name - policy name - * version - policy version - * pdpGroup - PDP group that policy might be related - * action - type of action/operation realized on policy - * fromDate - start of period in case of time interval search - */ - @Data - @Builder - public static class AuditFilter implements PfFilterParametersIntfc { - private String name; - private String version; - private AuditAction action; - private String pdpGroup; - private Instant fromDate; - private Instant toDate; - private int recordNum; - @Builder.Default - private String sortOrder = "DESC"; - - // initialized lazily, if not set via the builder - private Map<String, Object> filterMap; - - @Override - public Instant getStartTime() { - return fromDate; - } - - @Override - public Instant getEndTime() { - return toDate; - } - - @Override - public Map<String, Object> getFilterMap() { - if (filterMap != null) { - return filterMap; - } - - filterMap = new HashMap<>(); - - if (StringUtils.isNotBlank(pdpGroup)) { - filterMap.put("pdpGroup", pdpGroup); - } - - if (action != null) { - filterMap.put("action", action); - } - - return filterMap; - } - } -} |