From 8cbad257df2d5f5c585ce37e61cfd16e402be738 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Thu, 10 Jun 2021 17:38:58 -0400 Subject: Fix sonars in policy-models Fixed: - too many parameters in method call Fixed it by introducing PfFilterParameters. However, classes having the Builder annotation are not easily subclassed, so introduced an interface, too. Issue-ID: POLICY-3094 Change-Id: Ida99522a542b1296b367c55b7e8f8e83783c2e4f Signed-off-by: Jim Hahn --- .../persistence/provider/PdpFilterParameters.java | 64 ++++++++++++++++++++++ .../pdp/persistence/provider/PdpProvider.java | 7 ++- .../provider/PdpStatisticsProvider.java | 39 ++++++++++--- .../provider/PdpFilterParametersTest.java | 53 ++++++++++++++++++ .../provider/PdpStatisticsProviderTest.java | 28 +++++++++- 5 files changed, 178 insertions(+), 13 deletions(-) create mode 100644 models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParameters.java create mode 100644 models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParametersTest.java (limited to 'models-pdp') diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParameters.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParameters.java new file mode 100644 index 000000000..6cede2c39 --- /dev/null +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParameters.java @@ -0,0 +1,64 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 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. + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.persistence.provider; + +import java.time.Instant; +import java.util.Map; +import lombok.Builder; +import lombok.Getter; +import org.onap.policy.models.dao.PfFilterParametersIntfc; + +@Getter +@Builder +public class PdpFilterParameters implements PfFilterParametersIntfc { + private String name; + private String version; + private Instant startTime; + private Instant endTime; + + private int recordNum; + @Builder.Default + private String sortOrder = "DESC"; + + private String group; + private String subGroup; + + // initialized lazily, if not set via the builder + private Map filterMap; + + @Override + public Map getFilterMap() { + if (filterMap != null) { + return filterMap; + + } else if (group == null) { + return null; + + } else if (subGroup == null) { + filterMap = Map.of("pdpGroupName", group); + return filterMap; + + } else { + filterMap = Map.of("pdpGroupName", group, "pdpSubGroupName", subGroup); + return filterMap; + } + } +} diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java index 4ffb1e40e..fec8ec572 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java @@ -36,6 +36,7 @@ import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.dao.PfDao; +import org.onap.policy.models.dao.PfFilterParameters; import org.onap.policy.models.pdp.concepts.Pdp; import org.onap.policy.models.pdp.concepts.PdpGroup; import org.onap.policy.models.pdp.concepts.PdpGroupFilter; @@ -300,10 +301,10 @@ public class PdpProvider { public List getGroupPolicyStatus(@NonNull final PfDao dao, @NonNull final String groupName) throws PfModelException { - Map filter = Map.of("pdpGroup", groupName); + PfFilterParameters params = PfFilterParameters.builder().filterMap(Map.of("pdpGroup", groupName)).build(); - return dao.getFiltered(JpaPdpPolicyStatus.class, null, null, null, null, filter, null, 0).stream() - .map(JpaPdpPolicyStatus::toAuthorative).collect(Collectors.toList()); + return dao.getFiltered(JpaPdpPolicyStatus.class, params) + .stream().map(JpaPdpPolicyStatus::toAuthorative).collect(Collectors.toList()); } /** diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java index 205761bf5..ea118f362 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java @@ -37,6 +37,7 @@ import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.dao.PfDao; +import org.onap.policy.models.dao.PfFilterParameters; import org.onap.policy.models.pdp.concepts.PdpStatistics; import org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics; @@ -47,8 +48,6 @@ import org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics; * @author Ning Xi (ning.xi@est.tech) */ public class PdpStatisticsProvider { - // Recurring string constants - private static final String DESC_ORDER = "DESC"; /** * Get PDP statistics. @@ -113,9 +112,32 @@ public class PdpStatisticsProvider { filterMap.put("pdpSubGroupName", pdpSubGroup); } - return asPdpStatisticsList(dao.getFiltered(JpaPdpStatistics.class, name, - PfKey.NULL_KEY_VERSION, startTimeStamp, - endTimeStamp, filterMap, sortOrder, getRecordNum)); + // @formatter:off + return asPdpStatisticsList( + dao.getFiltered(JpaPdpStatistics.class, + PdpFilterParameters.builder() + .name(name) + .startTime(startTimeStamp) + .endTime(endTimeStamp) + .group(pdpGroupName) + .subGroup(pdpSubGroup) + .sortOrder(sortOrder) + .recordNum(getRecordNum) + .build())); + // @formatter:on + } + + /** + * Get filtered PDP statistics. + * + * @param dao the DAO to use to access the database + * @param filterParams filter parameters + * @return the PDP statistics found + * @throws PfModelException on errors getting policies + */ + public List getFilteredPdpStatistics(@NonNull final PfDao dao, + PdpFilterParameters filterParams) { + return asPdpStatisticsList(dao.getFiltered(JpaPdpStatistics.class, filterParams)); } /** @@ -198,10 +220,9 @@ public class PdpStatisticsProvider { * @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, name, - PfKey.NULL_KEY_VERSION, timestamp, timestamp, null, DESC_ORDER, 0)); + 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()))); diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParametersTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParametersTest.java new file mode 100644 index 000000000..58ff7f171 --- /dev/null +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpFilterParametersTest.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 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. + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.persistence.provider; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Map; +import org.junit.Test; + +public class PdpFilterParametersTest { + + private static final String GROUP = "my-group"; + private static final String SUBGROUP = "my-subgroup"; + + @Test + public void testGetFilterMap() { + assertThat(PdpFilterParameters.builder().build().getFilterMap()).isNull(); + + assertThat(PdpFilterParameters.builder().subGroup(SUBGROUP).build().getFilterMap()).isNull(); + + PdpFilterParameters params = PdpFilterParameters.builder().group(GROUP).build(); + Map map = params.getFilterMap(); + assertThat(map).isEqualTo(Map.of("pdpGroupName", GROUP)); + + // should not re-create the map + assertThat(params.getFilterMap()).isSameAs(map); + + params = PdpFilterParameters.builder().group(GROUP).subGroup(SUBGROUP).build(); + map = params.getFilterMap(); + assertThat(map).isEqualTo(Map.of("pdpGroupName", GROUP, "pdpSubGroupName", SUBGROUP)); + + // should not re-create the map + assertThat(params.getFilterMap()).isSameAs(map); + } +} diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java index 8259dc0c6..91eb54e8b 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java @@ -181,7 +181,7 @@ public class PdpStatisticsProviderTest { } @Test - public void testGetFilteredPdpStatistics() throws Exception { + public void testGetFilteredPdpStatisticsOld() throws Exception { assertThatThrownBy(() -> { new PdpStatisticsProvider().getFilteredPdpStatistics(null, NAME, GROUP, SUBGROUP, TIMESTAMP1, TIMESTAMP2, ORDER, 1); @@ -210,6 +210,32 @@ public class PdpStatisticsProviderTest { assertThat(getPdpStatisticsList).hasSize(1); } + @Test + public void testGetFilteredPdpStatistics() throws Exception { + + assertThatThrownBy(() -> { + new PdpStatisticsProvider().getFilteredPdpStatistics(null, PdpFilterParameters.builder().build()); + }).hasMessageMatching(DAO_IS_NULL); + + + List createdPdpStatisticsList; + createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList); + createdListStr = createdPdpStatisticsList.toString(); + assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", "")); + + List getPdpStatisticsList; + getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters + .builder().name(NAME).group(GROUP).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); + assertThat(getPdpStatisticsList).hasSize(1); + getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters + .builder().name("name2").group(GROUP).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); + assertThat(getPdpStatisticsList).hasSize(1); + getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, + PdpFilterParameters.builder().name("name2").group(GROUP).subGroup(SUBGROUP) + .startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); + assertThat(getPdpStatisticsList).hasSize(1); + } + @Test public void testUpdatePdpStatistics() throws Exception { assertThatThrownBy(() -> { -- cgit 1.2.3-korg