From 7f89803244315af8dd605380d4a6d6586c3d870b Mon Sep 17 00:00:00 2001 From: liamfallon Date: Thu, 10 Jun 2021 11:45:02 +0100 Subject: Eliminate two fromAuthorative() calls in providers The current implementation of the providers makes two calls to the expensive fromAuthorative() method. This change changes the implementation to make a single call. Issue-ID: POLICY-3319 Change-Id: I6b7e016e91b07f567973d9e2af68514de0affddd Signed-off-by: liamfallon --- .../models/controlloop/concepts/ControlLoop.java | 1 - .../provider/ClElementStatisticsProvider.java | 40 +++++----------- .../persistence/provider/ControlLoopProvider.java | 51 +++++--------------- .../persistence/provider/ParticipantProvider.java | 53 +++++--------------- .../provider/ParticipantStatisticsProvider.java | 33 +++---------- .../persistence/provider/ProviderUtils.java | 56 ++++++++++++++++++++++ 6 files changed, 95 insertions(+), 139 deletions(-) create mode 100644 models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ProviderUtils.java (limited to 'models/src') diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoop.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoop.java index d0d79274c..f2397602b 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoop.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoop.java @@ -20,7 +20,6 @@ package org.onap.policy.clamp.controlloop.models.controlloop.concepts; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java index 8a06cbf1e..dacde8e79 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java @@ -25,13 +25,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import javax.ws.rs.core.Response; import lombok.NonNull; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics; -import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfReferenceTimestampKey; import org.onap.policy.models.provider.PolicyModelsProviderParameters; import org.onap.policy.models.provider.impl.AbstractModelsProvider; @@ -64,33 +61,19 @@ public class ClElementStatisticsProvider extends AbstractModelsProvider { public List createClElementStatistics( @NonNull final List clElementStatisticsList) throws PfModelException { - BeanValidationResult validationResult = - new BeanValidationResult("control loop element statistics list", clElementStatisticsList); - for (ClElementStatistics clElementStatistics : clElementStatisticsList) { - JpaClElementStatistics jpaClElementStatistics = new JpaClElementStatistics(); - jpaClElementStatistics.fromAuthorative(clElementStatistics); + List jpaClElementStatisticsList = ProviderUtils.getJpaAndValidate( + clElementStatisticsList, JpaClElementStatistics::new, "control loop element statistics"); - validationResult.addResult(jpaClElementStatistics.validate("control loop element statistics")); - } - - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - for (ClElementStatistics clElementStatistics : clElementStatisticsList) { - JpaClElementStatistics jpaClElementStatistics = new JpaClElementStatistics(); - jpaClElementStatistics.fromAuthorative(clElementStatistics); - getPfDao().create(jpaClElementStatistics); - } + jpaClElementStatisticsList.forEach(jpaClElementStatistics -> getPfDao().create(jpaClElementStatistics)); // Return the created control loop element statistics List elementStatistics = new ArrayList<>(clElementStatisticsList.size()); for (ClElementStatistics clElementStat : clElementStatisticsList) { - JpaClElementStatistics jpaClElementStatistics = getPfDao().get(JpaClElementStatistics.class, - new PfReferenceTimestampKey(clElementStat.getParticipantId().getName(), - clElementStat.getParticipantId().getVersion(), clElementStat.getId().toString(), - clElementStat.getTimeStamp())); + var jpaClElementStatistics = getPfDao().get(JpaClElementStatistics.class, + new PfReferenceTimestampKey(clElementStat.getParticipantId().getName(), + clElementStat.getParticipantId().getVersion(), clElementStat.getId().toString(), + clElementStat.getTimeStamp())); elementStatistics.add(jpaClElementStatistics.toAuthorative()); } @@ -122,16 +105,15 @@ public class ClElementStatisticsProvider extends AbstractModelsProvider { List clElementStatistics = new ArrayList<>(1); if (name != null && version != null && timestamp != null && id != null) { clElementStatistics.add(getPfDao() - .get(JpaClElementStatistics.class, new PfReferenceTimestampKey(name, version, id, timestamp)) - .toAuthorative()); + .get(JpaClElementStatistics.class, new PfReferenceTimestampKey(name, version, id, timestamp)) + .toAuthorative()); return clElementStatistics; } else if (name != null) { - clElementStatistics.addAll(getFilteredClElementStatistics(name, version, null, null, null, - "DESC", 0)); + clElementStatistics.addAll(getFilteredClElementStatistics(name, version, null, null, null, "DESC", 0)); } else { clElementStatistics.addAll(asClElementStatisticsList(getPfDao().getAll(JpaClElementStatistics.class))); } - return clElementStatistics; + return clElementStatistics; } /** diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java index 520e9b864..5317bb31d 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java @@ -28,7 +28,6 @@ import javax.ws.rs.core.Response; import lombok.NonNull; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop; -import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; @@ -66,7 +65,7 @@ public class ControlLoopProvider extends AbstractModelsProvider { * @throws PfModelException on errors getting the control loop */ public ControlLoop getControlLoop(final ToscaConceptIdentifier controlLoopId) throws PfModelException { - JpaControlLoop jpaControlLoop = getPfDao().get(JpaControlLoop.class, controlLoopId.asConceptKey()); + var jpaControlLoop = getPfDao().get(JpaControlLoop.class, controlLoopId.asConceptKey()); return jpaControlLoop == null ? null : jpaControlLoop.toAuthorative(); } @@ -117,31 +116,16 @@ public class ControlLoopProvider extends AbstractModelsProvider { */ public List createControlLoops(@NonNull final List controlLoops) throws PfModelException { - BeanValidationResult validationResult = new BeanValidationResult("control loops", controlLoops); + List jpaControlLoopList = + ProviderUtils.getJpaAndValidate(controlLoops, JpaControlLoop::new, "control loop"); - for (ControlLoop controlLoop : controlLoops) { - JpaControlLoop jpaControlLoop = new JpaControlLoop(); - jpaControlLoop.fromAuthorative(controlLoop); - - validationResult.addResult(jpaControlLoop.validate("control loop")); - } - - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - for (ControlLoop controlLoop : controlLoops) { - JpaControlLoop jpaControlLoop = new JpaControlLoop(); - jpaControlLoop.fromAuthorative(controlLoop); - - getPfDao().create(jpaControlLoop); - } + jpaControlLoopList.forEach(jpaControlLoop -> getPfDao().create(jpaControlLoop)); // Return the created control loops List returnControlLoops = new ArrayList<>(controlLoops.size()); for (ControlLoop controlLoop : controlLoops) { - JpaControlLoop jpaControlLoop = getPfDao().get(JpaControlLoop.class, + var jpaControlLoop = getPfDao().get(JpaControlLoop.class, new PfConceptKey(controlLoop.getName(), controlLoop.getVersion())); returnControlLoops.add(jpaControlLoop.toAuthorative()); } @@ -158,29 +142,16 @@ public class ControlLoopProvider extends AbstractModelsProvider { */ public List updateControlLoops(@NonNull final List controlLoops) throws PfModelException { - BeanValidationResult validationResult = new BeanValidationResult("control loops", controlLoops); - - for (ControlLoop controlLoop : controlLoops) { - JpaControlLoop jpaControlLoop = new JpaControlLoop(); - jpaControlLoop.fromAuthorative(controlLoop); - - validationResult.addResult(jpaControlLoop.validate("control loop")); - } - - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } + List jpaControlLoopList = + ProviderUtils.getJpaAndValidate(controlLoops, JpaControlLoop::new, "control loop"); // Return the created control loops List returnControlLoops = new ArrayList<>(controlLoops.size()); - for (ControlLoop controlLoop : controlLoops) { - JpaControlLoop jpaControlLoop = new JpaControlLoop(); - jpaControlLoop.fromAuthorative(controlLoop); - - JpaControlLoop returnJpaControlLoop = getPfDao().update(jpaControlLoop); + jpaControlLoopList.forEach(jpaControlLoop -> { + var returnJpaControlLoop = getPfDao().update(jpaControlLoop); returnControlLoops.add(returnJpaControlLoop.toAuthorative()); - } + }); return returnControlLoops; } @@ -195,7 +166,7 @@ public class ControlLoopProvider extends AbstractModelsProvider { */ public ControlLoop deleteControlLoop(@NonNull final String name, @NonNull final String version) { - PfConceptKey controlLoopKey = new PfConceptKey(name, version); + var controlLoopKey = new PfConceptKey(name, version); JpaControlLoop jpaDeleteControlLoop = getPfDao().get(JpaControlLoop.class, controlLoopKey); diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantProvider.java index e82956f93..c569cadd8 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantProvider.java @@ -27,7 +27,6 @@ import javax.ws.rs.core.Response; import lombok.NonNull; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant; -import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; @@ -72,8 +71,8 @@ public class ParticipantProvider extends AbstractModelsProvider { */ public List getFilteredParticipants(@NonNull final ToscaTypedEntityFilter filter) { - return filter.filter(asParticipantList( - getPfDao().getFiltered(JpaParticipant.class, filter.getName(), filter.getVersion()))); + return filter.filter( + asParticipantList(getPfDao().getFiltered(JpaParticipant.class, filter.getName(), filter.getVersion()))); } /** @@ -85,31 +84,16 @@ public class ParticipantProvider extends AbstractModelsProvider { */ public List createParticipants(@NonNull final List participants) throws PfModelException { - BeanValidationResult validationResult = new BeanValidationResult("participants", participants); + List jpaParticipantList = + ProviderUtils.getJpaAndValidate(participants, JpaParticipant::new, "participant"); - for (Participant participant : participants) { - JpaParticipant jpaParticipant = new JpaParticipant(); - jpaParticipant.fromAuthorative(participant); - - validationResult.addResult(jpaParticipant.validate("participant")); - } - - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - for (Participant participant : participants) { - JpaParticipant jpaParticipant = new JpaParticipant(); - jpaParticipant.fromAuthorative(participant); - - getPfDao().create(jpaParticipant); - } + jpaParticipantList.forEach(jpaParticipant -> getPfDao().create(jpaParticipant)); // Return the created participants List returnParticipants = new ArrayList<>(participants.size()); for (Participant participant : participants) { - JpaParticipant jpaParticipant = getPfDao().get(JpaParticipant.class, + var jpaParticipant = getPfDao().get(JpaParticipant.class, new PfConceptKey(participant.getName(), participant.getVersion())); returnParticipants.add(jpaParticipant.toAuthorative()); } @@ -126,31 +110,16 @@ public class ParticipantProvider extends AbstractModelsProvider { */ public List updateParticipants(@NonNull final List participants) throws PfModelException { - BeanValidationResult validationResult = new BeanValidationResult("participants", participants); + List jpaParticipantList = + ProviderUtils.getJpaAndValidate(participants, JpaParticipant::new, "participant"); - for (Participant participant : participants) { - JpaParticipant jpaParticipant = new JpaParticipant(); - jpaParticipant.fromAuthorative(participant); - - validationResult.addResult(jpaParticipant.validate("participant")); - } - - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - for (Participant participant : participants) { - JpaParticipant jpaParticipant = new JpaParticipant(); - jpaParticipant.fromAuthorative(participant); - - getPfDao().update(jpaParticipant); - } + jpaParticipantList.forEach(jpaParticipant -> getPfDao().update(jpaParticipant)); // Return the created participants List returnParticipants = new ArrayList<>(participants.size()); for (Participant participant : participants) { - JpaParticipant jpaParticipant = getPfDao().get(JpaParticipant.class, + var jpaParticipant = getPfDao().get(JpaParticipant.class, new PfConceptKey(participant.getName(), participant.getVersion())); returnParticipants.add(jpaParticipant.toAuthorative()); } @@ -168,7 +137,7 @@ public class ParticipantProvider extends AbstractModelsProvider { */ public Participant deleteParticipant(@NonNull final String name, @NonNull final String version) { - PfConceptKey participantKey = new PfConceptKey(name, version); + var participantKey = new PfConceptKey(name, version); JpaParticipant jpaDeleteParticipant = getPfDao().get(JpaParticipant.class, participantKey); diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java index 6b075278c..4ea76ff4b 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java @@ -25,21 +25,16 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import javax.ws.rs.core.Response; import lombok.NonNull; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics; -import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfTimestampKey; import org.onap.policy.models.provider.PolicyModelsProviderParameters; import org.onap.policy.models.provider.impl.AbstractModelsProvider; /** * This class provides the provision of information on participant statistics in the database to callers. - * - * @author Ramesh Murugan Iyer (ramesh.murugan.iyer@est.tech) */ public class ParticipantStatisticsProvider extends AbstractModelsProvider { @@ -70,8 +65,7 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { .get(JpaParticipantStatistics.class, new PfTimestampKey(name, version, timestamp)).toAuthorative()); return participantStatistics; } else if (name != null) { - return getFilteredParticipantStatistics(name, version, timestamp, null, null, - "DESC", 0); + return getFilteredParticipantStatistics(name, version, timestamp, null, null, "DESC", 0); } else { return asParticipantStatisticsList(getPfDao().getAll(JpaParticipantStatistics.class)); } @@ -108,32 +102,16 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { public List createParticipantStatistics( @NonNull final List participantStatisticsList) throws PfModelException { - BeanValidationResult validationResult = - new BeanValidationResult("participant statistics List", participantStatisticsList); - - for (ParticipantStatistics participantStatistics : participantStatisticsList) { - JpaParticipantStatistics jpaParticipantStatistics = new JpaParticipantStatistics(); - jpaParticipantStatistics.fromAuthorative(participantStatistics); + List jpaParticipantStatisticsList = ProviderUtils + .getJpaAndValidate(participantStatisticsList, JpaParticipantStatistics::new, "Participant Statistics"); - validationResult.addResult(jpaParticipantStatistics.validate("participant statistics")); - } - - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - for (ParticipantStatistics participantStatistics : participantStatisticsList) { - JpaParticipantStatistics jpaParticipantStatistics = new JpaParticipantStatistics(); - jpaParticipantStatistics.fromAuthorative(participantStatistics); - - getPfDao().create(jpaParticipantStatistics); - } + jpaParticipantStatisticsList.forEach(jpaParticipantStatistics -> getPfDao().update(jpaParticipantStatistics)); // Return the created participant statistics List participantStatistics = new ArrayList<>(participantStatisticsList.size()); for (ParticipantStatistics participantStatisticsItem : participantStatisticsList) { - JpaParticipantStatistics jpaParticipantStatistics = getPfDao().get(JpaParticipantStatistics.class, + var jpaParticipantStatistics = getPfDao().get(JpaParticipantStatistics.class, new PfTimestampKey(participantStatisticsItem.getParticipantId().getName(), participantStatisticsItem.getParticipantId().getVersion(), participantStatisticsItem.getTimeStamp())); @@ -144,6 +122,7 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { } + /** * Convert JPA participant statistics list to participant statistics list. * diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ProviderUtils.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ProviderUtils.java new file mode 100644 index 000000000..ff5b132ab --- /dev/null +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ProviderUtils.java @@ -0,0 +1,56 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.clamp.controlloop.models.controlloop.persistence.provider; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; +import javax.ws.rs.core.Response; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.models.base.PfAuthorative; +import org.onap.policy.models.base.PfConcept; +import org.onap.policy.models.base.PfModelRuntimeException; + +public final class ProviderUtils { + private ProviderUtils() { + // Utility class has no instances + } + + protected static > List getJpaAndValidate( + List authorativeConceptList, Supplier jpaSupplier, String conceptDescription) { + var validationResult = new BeanValidationResult(conceptDescription + " List", authorativeConceptList); + + List jpaConceptList = new ArrayList<>(authorativeConceptList.size()); + + for (A authorativeConcept : authorativeConceptList) { + var jpaConcept = jpaSupplier.get(); + jpaConcept.fromAuthorative(authorativeConcept); + jpaConceptList.add(jpaConcept); + + validationResult.addResult(jpaConcept.validate(conceptDescription)); + } + + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); + } + return jpaConceptList; + } +} -- cgit 1.2.3-korg