X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Floop%2FLoop.java;h=36f74221e3ef7cdc88d7d6cfedc40a9042a9f753;hb=9e25792898ae648234239403374db8bb923bc180;hp=2393f24986a18f59a6425fdaeebb6cb9b4680d18;hpb=70e4a3fc5be81abaae4d1b9bd17a2e8134e5862e;p=clamp.git diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index 2393f249..36f74221 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -25,7 +25,6 @@ package org.onap.clamp.loop; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; - import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; @@ -33,7 +32,6 @@ import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; - import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -44,26 +42,32 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; - import org.hibernate.annotations.SortNatural; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; +import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.components.external.DcaeComponent; import org.onap.clamp.loop.components.external.ExternalComponent; import org.onap.clamp.loop.components.external.PolicyComponent; +import org.onap.clamp.loop.deploy.DcaeDeployParameters; import org.onap.clamp.loop.log.LoopLog; +import org.onap.clamp.loop.service.Service; +import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.LoopTemplate; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; @Entity @Table(name = "loops") -@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) -public class Loop implements Serializable { +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) +public class Loop extends AuditEntity implements Serializable { /** * The serial version id. @@ -83,25 +87,15 @@ public class Loop implements Serializable { @Column(name = "dcae_deployment_status_url") private String dcaeDeploymentStatusUrl; - @Expose - @Column(name = "dcae_blueprint_id") - private String dcaeBlueprintId; - - @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation") - private String svgRepresentation; - @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "global_properties_json") private JsonObject globalPropertiesJson; @Expose - @Type(type = "json") - @Column(columnDefinition = "json", name = "model_properties_json") - private JsonObject modelPropertiesJson; - - @Column(columnDefinition = "MEDIUMTEXT", nullable = false, name = "blueprint_yaml") - private String blueprint; + @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) + @JoinColumn(name = "service_uuid") + private Service modelService; @Expose @Column(nullable = false, name = "last_computed_state") @@ -113,24 +107,33 @@ public class Loop implements Serializable { private final Map components = new HashMap<>(); @Expose - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop") + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop", orphanRemoval = true) private Set operationalPolicies = new HashSet<>(); @Expose - @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinTable(name = "loops_microservicepolicies", joinColumns = @JoinColumn(name = "loop_id"), inverseJoinColumns = @JoinColumn(name = "microservicepolicy_id")) + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER) + @JoinTable(name = "loops_to_microservicepolicies", joinColumns = @JoinColumn(name = "loop_name"), + inverseJoinColumns = @JoinColumn(name = "microservicepolicy_name")) private Set microServicePolicies = new HashSet<>(); @Expose - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop") + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop", orphanRemoval = true) @SortNatural private SortedSet loopLogs = new TreeSet<>(); + @Expose + @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER) + @JoinColumn(name = "loop_template_name", nullable = false) + private LoopTemplate loopTemplate; + private void initializeExternalComponents() { this.addComponent(new PolicyComponent()); this.addComponent(new DcaeComponent()); } + /** + * Public constructor. + */ public Loop() { initializeExternalComponents(); } @@ -138,15 +141,37 @@ public class Loop implements Serializable { /** * Constructor. */ - public Loop(String name, String blueprint, String svgRepresentation) { + public Loop(String name) { this.name = name; - this.svgRepresentation = svgRepresentation; - this.blueprint = blueprint; this.lastComputedState = LoopState.DESIGN; this.globalPropertiesJson = new JsonObject(); initializeExternalComponents(); } + /** + * This constructor creates a loop from a loop template. + * + * @param name The loop name + * @param loopTemplate The loop template from which a new loop instance must be created + */ + public Loop(String name, LoopTemplate loopTemplate, ToscaConverterWithDictionarySupport toscaConverter) { + this(name); + this.setLoopTemplate(loopTemplate); + this.setModelService(loopTemplate.getModelService()); + loopTemplate.getLoopElementModelsUsed().forEach(element -> { + if (LoopElementModel.MICRO_SERVICE_TYPE.equals(element.getLoopElementModel().getLoopElementType())) { + this.addMicroServicePolicy((MicroServicePolicy) element.getLoopElementModel() + .createPolicyInstance(this, toscaConverter)); + } + else if (LoopElementModel.OPERATIONAL_POLICY_TYPE + .equals(element.getLoopElementModel().getLoopElementType())) { + this.addOperationalPolicy((OperationalPolicy) element.getLoopElementModel() + .createPolicyInstance(this, toscaConverter)); + } + }); + this.setGlobalPropertiesJson(DcaeDeployParameters.getDcaeDeploymentParametersInJson(this)); + } + public String getName() { return name; } @@ -171,22 +196,6 @@ public class Loop implements Serializable { this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl; } - public String getSvgRepresentation() { - return svgRepresentation; - } - - void setSvgRepresentation(String svgRepresentation) { - this.svgRepresentation = svgRepresentation; - } - - public String getBlueprint() { - return blueprint; - } - - void setBlueprint(String blueprint) { - this.blueprint = blueprint; - } - public LoopState getLastComputedState() { return lastComputedState; } @@ -227,12 +236,31 @@ public class Loop implements Serializable { this.loopLogs = loopLogs; } - void addOperationalPolicy(OperationalPolicy opPolicy) { + /** + * This method adds an operational policy to the loop. + * + * @param opPolicy the operationalPolicy to add + */ + public void addOperationalPolicy(OperationalPolicy opPolicy) { operationalPolicies.add(opPolicy); opPolicy.setLoop(this); } - void addMicroServicePolicy(MicroServicePolicy microServicePolicy) { + /** + * This method removes an operational policy to the loop. + * + * @param opPolicy the operationalPolicy to add + */ + public void removeOperationalPolicy(OperationalPolicy opPolicy) { + operationalPolicies.remove(opPolicy); + } + + /** + * This method adds an micro service policy to the loop. + * + * @param microServicePolicy the micro service to add + */ + public void addMicroServicePolicy(MicroServicePolicy microServicePolicy) { microServicePolicies.add(microServicePolicy); microServicePolicy.getUsedByLoops().add(this); } @@ -242,27 +270,21 @@ public class Loop implements Serializable { this.loopLogs.add(log); } - public String getDcaeBlueprintId() { - return dcaeBlueprintId; - } - - void setDcaeBlueprintId(String dcaeBlueprintId) { - this.dcaeBlueprintId = dcaeBlueprintId; - } - - public JsonObject getModelPropertiesJson() { - return modelPropertiesJson; + public Service getModelService() { + return modelService; } - void setModelPropertiesJson(JsonObject modelPropertiesJson) { - this.modelPropertiesJson = modelPropertiesJson; + void setModelService(Service modelService) { + this.modelService = modelService; } public Map getComponents() { + refreshDcaeComponents(); return components; } public ExternalComponent getComponent(String componentName) { + refreshDcaeComponents(); return this.components.get(componentName); } @@ -270,23 +292,68 @@ public class Loop implements Serializable { this.components.put(component.getComponentName(), component); } + public LoopTemplate getLoopTemplate() { + return loopTemplate; + } + + public void setLoopTemplate(LoopTemplate loopTemplate) { + this.loopTemplate = loopTemplate; + } + + private void refreshDcaeComponents() { + if (!this.loopTemplate.getUniqueBlueprint()) { + this.components.remove("DCAE"); + for (MicroServicePolicy policy : this.microServicePolicies) { + if (!this.components.containsKey("DCAE_" + policy.getName())) { + this.addComponent(new DcaeComponent(policy.getName())); + } + } + } + } + + /** + * Return the operationalPolicy object with the opPolicyName. + * + * @param opPolicyName The operationalPolicy name + * @return The OperationalPolicy object found in loop object + */ + public OperationalPolicy getOperationalPolicy(String opPolicyName) { + for (OperationalPolicy operationalPolicy : this.getOperationalPolicies()) { + if (operationalPolicy.getName().equals(opPolicyName)) { + return operationalPolicy; + } + } + return null; + } + + /** + * Return the microServicePolicy object with the msPolicyName. + * + * @param msPolicyName The microServicePolicy name + * @return The MicroServicePolicy object found in loop object + */ + public MicroServicePolicy getMicroServicePolicy(String msPolicyName) { + for (MicroServicePolicy microServicePolicy : this.getMicroServicePolicies()) { + if (microServicePolicy.getName().equals(msPolicyName)) { + return microServicePolicy; + } + } + return null; + } + /** * Generate the loop name. * - * @param serviceName - * The service name - * @param serviceVersion - * The service version - * @param resourceName - * The resource name - * @param blueprintFileName - * The blueprint file name + * @param serviceName The service name + * @param serviceVersion The service version + * @param resourceName The resource name + * @param blueprintFileName The blueprint file name * @return The generated loop name */ - static String generateLoopName(String serviceName, String serviceVersion, String resourceName, - String blueprintFilename) { + public static String generateLoopName(String serviceName, String serviceVersion, String resourceName, + String blueprintFileName) { StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion) - .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", "")); + .append("_").append(resourceName).append("_").append(blueprintFileName.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } @@ -314,7 +381,8 @@ public class Loop implements Serializable { if (other.name != null) { return false; } - } else if (!name.equals(other.name)) { + } + else if (!name.equals(other.name)) { return false; } return true;