Create SVG in UI
[clamp.git] / src / main / java / org / onap / clamp / clds / util / drawing / ClampGraphBuilder.java
index ef4c4e4..6cf342f 100755 (executable)
 
 package org.onap.clamp.clds.util.drawing;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import org.onap.clamp.clds.sdc.controller.installer.MicroService;
+import java.util.HashSet;
+import java.util.Set;
+import org.onap.clamp.loop.template.LoopElementModel;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
 
 public class ClampGraphBuilder {
-    private String policy;
+    private Set<OperationalPolicy> policies = new HashSet<>();
     private String collector;
-    private List<MicroService> microServices = new ArrayList<>();
+    private Set<MicroServicePolicy> microServices = new HashSet<>();
+    private Set<LoopElementModel> loopElementModels = new HashSet<>();
     private final Painter painter;
 
     public ClampGraphBuilder(Painter painter) {
         this.painter = painter;
     }
 
-    public ClampGraphBuilder collector(String c) {
-        collector = c;
+    public ClampGraphBuilder collector(String collector) {
+        this.collector = collector;
+        return this;
+    }
+
+    public ClampGraphBuilder addPolicy(OperationalPolicy policy) {
+        this.policies.add(policy);
         return this;
     }
 
-    public ClampGraphBuilder policy(String p) {
-        policy = p;
+    public ClampGraphBuilder addAllPolicies(Set<OperationalPolicy> policies) {
+        this.policies.addAll(policies);
         return this;
     }
 
-    public ClampGraphBuilder addMicroService(MicroService ms) {
+    public ClampGraphBuilder addMicroService(MicroServicePolicy ms) {
         microServices.add(ms);
         return this;
     }
 
-    public ClampGraphBuilder addAllMicroServices(List<MicroService> msList) {
+    public ClampGraphBuilder addAllMicroServices(Set<MicroServicePolicy> msList) {
         microServices.addAll(msList);
         return this;
     }
 
-    public ClampGraph build() {
-        if (microServices.isEmpty()) {
-            throw new InvalidStateException("At least one microservice is required");
+    /**
+     * This method adds all loop element specified in input to the current structure.
+     *
+     * @param loopElementModels A set of LoopElementModels
+     * @return Return the current ClampGraphBuilder
+     */
+    public ClampGraphBuilder addAllLoopElementModels(Set<LoopElementModel> loopElementModels) {
+        for (LoopElementModel elem : loopElementModels) {
+            this.addLoopElementModel(elem);
         }
-        if (Objects.isNull(policy) || policy.trim().isEmpty()) {
-            throw new InvalidStateException("Policy element must be present");
+        return this;
+    }
+
+    /**
+     * This method adds one loop element specified in input to the current structure.
+     *
+     * @param loopElementModel A LoopElementModels
+     * @return Return the current ClampGraphBuilder
+     */
+    public ClampGraphBuilder addLoopElementModel(LoopElementModel loopElementModel) {
+        if (LoopElementModel.MICRO_SERVICE_TYPE.equals(loopElementModel.getLoopElementType())) {
+            microServices.add(new MicroServicePolicy(loopElementModel.getName(),
+                    loopElementModel.getPolicyModels().first(), false,null,loopElementModel,null,null));
+        } else if (LoopElementModel.OPERATIONAL_POLICY_TYPE.equals(loopElementModel.getLoopElementType())) {
+            policies.add(new OperationalPolicy(loopElementModel.getName(), null, null,
+                    loopElementModel.getPolicyModels().first(), loopElementModel, null, null));
         }
-        return new ClampGraph(painter.doPaint(collector, microServices, policy));
+        return this;
+    }
+
+    /**
+     * Build the SVG.
+     *
+     * @return Clamp graph (SVG)
+     */
+    public ClampGraph build() {
+        return new ClampGraph(painter.doPaint(collector, microServices, policies));
     }
 }