import com.google.gson.annotations.Expose;
import java.io.Serializable;
+import java.util.HashMap;
import java.util.HashSet;
+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.ManyToMany;
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.dao.model.jsontype.StringJsonUserType;
+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.log.LoopLog;
import org.onap.clamp.policy.microservice.MicroServicePolicy;
import org.onap.clamp.policy.operational.OperationalPolicy;
@Enumerated(EnumType.STRING)
private LoopState lastComputedState;
+ @Expose
+ @Transient
+ private final Map<String, ExternalComponent> components = new HashMap<>();
+
@Expose
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop")
private Set<OperationalPolicy> 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"))
+ @JoinTable(name = "loops_microservicepolicies", joinColumns = @JoinColumn(name = "loop_id"), inverseJoinColumns = @JoinColumn(name = "microservicepolicy_id"))
private Set<MicroServicePolicy> microServicePolicies = new HashSet<>();
@Expose
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop")
- private Set<LoopLog> loopLogs = new HashSet<>();
+ @SortNatural
+ private SortedSet<LoopLog> loopLogs = new TreeSet<>();
+
+ private void initializeExternalComponents() {
+ this.addComponent(new PolicyComponent());
+ this.addComponent(new DcaeComponent());
+ }
public Loop() {
+ initializeExternalComponents();
}
/**
this.blueprint = blueprint;
this.lastComputedState = LoopState.DESIGN;
this.globalPropertiesJson = new JsonObject();
+ initializeExternalComponents();
}
public String getName() {
this.blueprint = blueprint;
}
- LoopState getLastComputedState() {
+ public LoopState getLastComputedState() {
return lastComputedState;
}
this.lastComputedState = lastComputedState;
}
- Set<OperationalPolicy> getOperationalPolicies() {
+ public Set<OperationalPolicy> getOperationalPolicies() {
return operationalPolicies;
}
this.operationalPolicies = operationalPolicies;
}
- Set<MicroServicePolicy> getMicroServicePolicies() {
+ public Set<MicroServicePolicy> getMicroServicePolicies() {
return microServicePolicies;
}
this.microServicePolicies = microServicePolicies;
}
- JsonObject getGlobalPropertiesJson() {
+ public JsonObject getGlobalPropertiesJson() {
return globalPropertiesJson;
}
this.globalPropertiesJson = globalPropertiesJson;
}
- Set<LoopLog> getLoopLogs() {
+ public Set<LoopLog> getLoopLogs() {
return loopLogs;
}
- void setLoopLogs(Set<LoopLog> loopLogs) {
+ void setLoopLogs(SortedSet<LoopLog> loopLogs) {
this.loopLogs = loopLogs;
}
microServicePolicy.getUsedByLoops().add(this);
}
- void addLog(LoopLog log) {
- loopLogs.add(log);
+ public void addLog(LoopLog log) {
log.setLoop(this);
+ this.loopLogs.add(log);
}
- String getDcaeBlueprintId() {
+ public String getDcaeBlueprintId() {
return dcaeBlueprintId;
}
this.dcaeBlueprintId = dcaeBlueprintId;
}
- JsonObject getModelPropertiesJson() {
+ public JsonObject getModelPropertiesJson() {
return modelPropertiesJson;
}
this.modelPropertiesJson = modelPropertiesJson;
}
+ public Map<String, ExternalComponent> getComponents() {
+ return components;
+ }
+
+ public ExternalComponent getComponent(String componentName) {
+ return this.components.get(componentName);
+ }
+
+ public void addComponent(ExternalComponent component) {
+ this.components.put(component.getComponentName(), component);
+ }
+
/**
* 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
*/
- public static String generateLoopName(String serviceName, String serviceVersion, String resourceName,
+ 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", ""));