X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Floop%2FLoopService.java;h=953a59471c74dc7eb2c22dc5058eb8c60f84a8a7;hb=fb4b25f6827accf6f975f9ca9a7aaee08d335c2f;hp=7b79c112e9a6a9929d82fd96c87033a7816430f1;hpb=2d01f5210b6b5c8f0b6cdd99728d8b7b9f2fa886;p=clamp.git diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java index 7b79c112..953a5947 100644 --- a/src/main/java/org/onap/clamp/loop/LoopService.java +++ b/src/main/java/org/onap/clamp/loop/LoopService.java @@ -23,31 +23,41 @@ package org.onap.clamp.loop; +import com.google.gson.JsonObject; import java.util.List; import java.util.Set; import javax.persistence.EntityNotFoundException; -import org.onap.clamp.policy.microservice.MicroservicePolicyService; -import org.onap.clamp.policy.operational.OperationalPolicyService; +import org.apache.commons.lang3.RandomStringUtils; +import org.onap.clamp.loop.template.LoopTemplatesService; +import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelsService; +import org.onap.clamp.policy.Policy; import org.onap.clamp.policy.microservice.MicroServicePolicy; +import org.onap.clamp.policy.microservice.MicroServicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; +import org.onap.clamp.policy.operational.OperationalPolicyService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class LoopService { - private final LoopsRepository loopsRepository; - private final MicroservicePolicyService microservicePolicyService; - private final OperationalPolicyService operationalPolicyService; + @Autowired + private LoopsRepository loopsRepository; - public LoopService(LoopsRepository loopsRepository, - MicroservicePolicyService microservicePolicyService, - OperationalPolicyService operationalPolicyService) { - this.loopsRepository = loopsRepository; - this.microservicePolicyService = microservicePolicyService; - this.operationalPolicyService = operationalPolicyService; - } + @Autowired + private MicroServicePolicyService microservicePolicyService; + + @Autowired + private OperationalPolicyService operationalPolicyService; - Loop addNewLoop(Loop loop) { + @Autowired + private PolicyModelsService policyModelsService; + + @Autowired + private LoopTemplatesService loopTemplateService; + + Loop saveOrUpdateLoop(Loop loop) { return loopsRepository.save(loop); } @@ -55,37 +65,131 @@ public class LoopService { return loopsRepository.getAllLoopNames(); } - Loop getLoop(String loopName){ - return loopsRepository - .findById(loopName) - .orElse(null); + public Loop getLoop(String loopName) { + return loopsRepository.findById(loopName).orElse(null); } - String getClosedLoopModelSVG(String loopName) { - Loop closedLoopByName = findClosedLoopByName(loopName); - return closedLoopByName.getSvgRepresentation(); + public void deleteLoop(String loopName) { + loopsRepository.deleteById(loopName); } - Loop updateOperationalPolicies(String loopName, List newOperationalPolicies) { - Loop loop = findClosedLoopByName(loopName); - Set newPolicies = operationalPolicyService - .updatePolicies(loop, newOperationalPolicies); + /** + * Creates a Loop Instance from Loop Template Name. + * + * @param loopName Name of the Loop to be created + * @param templateName Loop Template to used for Loop + * @return Loop Instance + */ + public Loop createLoopFromTemplate(String loopName, String templateName) { + return loopsRepository.save(new Loop(loopName,loopTemplateService.getLoopTemplate(templateName))); + } + /** + * This method is used to refresh the DCAE deployment status fields. + * + * @param loop The loop instance to be modified + * @param deploymentId The deployment ID as returned by DCAE + * @param deploymentUrl The Deployment URL as returned by DCAE + */ + public void updateDcaeDeploymentFields(Loop loop, String deploymentId, String deploymentUrl) { + loop.setDcaeDeploymentId(deploymentId); + loop.setDcaeDeploymentStatusUrl(deploymentUrl); + loopsRepository.save(loop); + } + + public void updateLoopState(Loop loop, String newState) { + loop.setLastComputedState(LoopState.valueOf(newState)); + loopsRepository.save(loop); + } + + /** + * This method add an operational policy to a loop instance. + * + * @param loopName The loop name + * @param policyType The policy model type + * @param policyVersion The policy model version + * @return The loop modified + */ + Loop addOperationalPolicy(String loopName, String policyType, String policyVersion) { + Loop loop = getLoop(loopName); + PolicyModel policyModel = policyModelsService.getPolicyModel(policyType, policyVersion); + if (policyModel == null) { + return null; + } + loop.addOperationalPolicy( + new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL", loop.getModelService().getName(), + loop.getModelService().getVersion(), RandomStringUtils.randomAlphanumeric(3), + RandomStringUtils.randomAlphanumeric(4)), loop, null, policyModel, null, null, null)); + return loopsRepository.saveAndFlush(loop); + } + + /** + * This method remove an operational policy to a loop instance. + * + * @param loopName The loop name + * @param policyType The policy model type + * @param policyVersion The policy model version + * @return The loop modified + */ + Loop removeOperationalPolicy(String loopName, String policyType, String policyVersion) { + Loop loop = getLoop(loopName); + PolicyModel policyModel = policyModelsService.getPolicyModel(policyType, policyVersion); + if (policyModel == null) { + return null; + } + for (OperationalPolicy opPolicy : loop.getOperationalPolicies()) { + if (opPolicy.getPolicyModel().getPolicyModelType().equals(policyType) && + opPolicy.getPolicyModel().getVersion().equals(policyVersion)) { + loop.removeOperationalPolicy(opPolicy); + break; + } + } + return loopsRepository.saveAndFlush(loop); + } + + Loop updateAndSaveOperationalPolicies(String loopName, List newOperationalPolicies) { + Loop loop = findClosedLoopByName(loopName); + Set newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies); loop.setOperationalPolicies(newPolicies); return loopsRepository.save(loop); } - Loop updateMicroservicePolicies(String loopName, List newMicroservicePolicies) { + Loop updateAndSaveMicroservicePolicies(String loopName, List newMicroservicePolicies) { Loop loop = findClosedLoopByName(loopName); - Set newPolicies = microservicePolicyService - .updatePolicies(loop, newMicroservicePolicies); - + Set newPolicies = microservicePolicyService.updatePolicies(loop, newMicroservicePolicies); loop.setMicroServicePolicies(newPolicies); return loopsRepository.save(loop); } + Loop updateAndSaveGlobalPropertiesJson(String loopName, JsonObject newGlobalPropertiesJson) { + Loop loop = findClosedLoopByName(loopName); + loop.setGlobalPropertiesJson(newGlobalPropertiesJson); + return loopsRepository.save(loop); + } + + MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) { + Loop loop = findClosedLoopByName(loopName); + return microservicePolicyService.getAndUpdateMicroServicePolicy(loop, newMicroservicePolicy); + } + private Loop findClosedLoopByName(String loopName) { return loopsRepository.findById(loopName) - .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName)); + .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName)); + } + + /** + * Api to refresh the Operational Policy UI window. + * + * @param loopName The loop Name + * @return The refreshed loop object + */ + public Loop refreshOpPolicyJsonRepresentation(String loopName) { + Loop loop = findClosedLoopByName(loopName); + Set policyList = loop.getOperationalPolicies(); + for (OperationalPolicy policy : policyList) { + policy.updateJsonRepresentation(); + } + loop.setOperationalPolicies(policyList); + return loopsRepository.save(loop); } }