Create SVG in UI
[clamp.git] / src / main / java / org / onap / clamp / clds / util / drawing / ImageBuilder.java
index 4d76581..72df90f 100644 (file)
@@ -29,6 +29,7 @@ import java.awt.Shape;
 import java.awt.Stroke;
 import java.awt.geom.Ellipse2D;
 import java.util.UUID;
+
 import org.apache.batik.svggen.SVGGraphics2D;
 
 public class ImageBuilder {
@@ -36,6 +37,7 @@ public class ImageBuilder {
     public static final int POLICY_LINE_RATIO = 2;
     public static final int COLLECTOR_LINE_RATIO = 6;
     public static final float MS_LINE_TO_HEIGHT_RATIO = 0.75f;
+    public static final float ARROW_TO_BASELINE_RATIO = 0.75f;
 
     private Point currentPoint;
     private final int baseLength;
@@ -46,8 +48,8 @@ public class ImageBuilder {
     private static final int LINE_THICKNESS = 2;
     private static final int CIRCLE_RADIUS = 17;
 
-    ImageBuilder(SVGGraphics2D svgGraphics2D, DocumentBuilder documentBuilder,
-            Point startingPoint, int baseLength, int rectHeight) {
+    ImageBuilder(SVGGraphics2D svgGraphics2D, DocumentBuilder documentBuilder, Point startingPoint, int baseLength,
+                 int rectHeight) {
         this.g2d = svgGraphics2D;
         this.documentBuilder = documentBuilder;
         this.currentPoint = new Point(startingPoint);
@@ -55,20 +57,20 @@ public class ImageBuilder {
         this.rectHeight = rectHeight;
     }
 
-    ImageBuilder rectangle(String dataElementId, RectTypes rectType, String text) {
+    ImageBuilder rectangle(String dataElementId, RectTypes rectType, String boxText, String groupingId, String uiData) {
         Point next = new Point(currentPoint.x + baseLength, currentPoint.y);
-        Point p = coordinatesForRectangle(currentPoint, next);
+        Point point = coordinatesForRectangle(currentPoint, next);
 
-        handleBasedOnRectType(rectType, text, p, baseLength, rectHeight);
+        handleBasedOnRectType(rectType, boxText, point, baseLength, rectHeight);
 
-        documentBuilder.pushChangestoDocument(g2d, dataElementId);
+        documentBuilder.pushChangestoDocument(g2d, dataElementId, groupingId, uiData);
         currentPoint = next;
         return this;
     }
 
     ImageBuilder arrow() {
         String dataElementId = "Arrow-" + UUID.randomUUID().toString();
-        Point to = new Point(currentPoint.x + baseLength, currentPoint.y);
+        Point to = new Point(currentPoint.x + (int) (baseLength * ARROW_TO_BASELINE_RATIO), currentPoint.y);
         AwtUtils.drawArrow(g2d, currentPoint, to, LINE_THICKNESS);
         documentBuilder.pushChangestoDocument(g2d, dataElementId);
         currentPoint = to;
@@ -76,16 +78,15 @@ public class ImageBuilder {
     }
 
     ImageBuilder circle(String dataElementId, int lineThickness) {
-        Point to = new Point(currentPoint.x + 2 * CIRCLE_RADIUS, currentPoint.y);
-        Shape circleStart =
-            new Ellipse2D.Double(currentPoint.x, currentPoint.y - CIRCLE_RADIUS,
-                2 * CIRCLE_RADIUS, 2 * CIRCLE_RADIUS);
+        Shape circleStart = new Ellipse2D.Double(currentPoint.x, ((double) currentPoint.y) - CIRCLE_RADIUS,
+                2.0 * CIRCLE_RADIUS, 2.0 * CIRCLE_RADIUS);
 
         Stroke oldStroke = g2d.getStroke();
         g2d.setStroke(new BasicStroke(lineThickness));
         g2d.draw(circleStart);
         g2d.setStroke(oldStroke);
         documentBuilder.pushChangestoDocument(g2d, dataElementId);
+        Point to = new Point(currentPoint.x + 2 * CIRCLE_RADIUS, currentPoint.y);
         currentPoint = to;
         return this;
     }
@@ -94,42 +95,44 @@ public class ImageBuilder {
         return documentBuilder;
     }
 
-    private void handleBasedOnRectType(RectTypes rectType, String text, Point p, int w, int h) {
-        AwtUtils.rectWithText(g2d, text, p, w, h);
+    private void handleBasedOnRectType(RectTypes rectType, String text, Point point, int width, int height) {
+        AwtUtils.rectWithText(g2d, text, point, width, height);
         switch (rectType) {
             case COLECTOR:
-                drawVerticalLineForCollector(p, w, h);
+                drawVerticalLineForCollector(point, width, height);
                 break;
             case MICROSERVICE:
-                drawHorizontalLineForMicroService(p, w, h);
+                drawHorizontalLineForMicroService(point, width, height);
                 break;
             case POLICY:
-                drawDiagonalLineForPolicy(p, w, h);
+                drawDiagonalLineForPolicy(point, width, height);
                 break;
+            default:
         }
     }
 
-    private void drawVerticalLineForCollector(Point p, int w, int h) {
-        g2d.drawLine(p.x + w / COLLECTOR_LINE_RATIO, p.y, p.x + w / COLLECTOR_LINE_RATIO, p.y + h);
+    private void drawVerticalLineForCollector(Point point, int width, int height) {
+        g2d.drawLine(point.x + width / COLLECTOR_LINE_RATIO, point.y, point.x + width / COLLECTOR_LINE_RATIO,
+                point.y + height);
     }
 
-    private void drawHorizontalLineForMicroService(Point p, int w, int h) {
-        int y = calculateMsHorizontalLineYCoordinate(p,h);
-        g2d.drawLine(p.x, y, p.x + w, y);
+    private void drawHorizontalLineForMicroService(Point point, int width, int height) {
+        int pointY = calculateMsHorizontalLineYCoordinate(point, height);
+        g2d.drawLine(point.x, pointY, point.x + width, pointY);
     }
 
-    private void drawDiagonalLineForPolicy(Point p, int w, int h) {
-        g2d.drawLine(p.x, p.y + h / POLICY_LINE_RATIO, p.x + w / POLICY_LINE_RATIO, p.y);
+    private void drawDiagonalLineForPolicy(Point point, int width, int height) {
+        g2d.drawLine(point.x, point.y + height / POLICY_LINE_RATIO, point.x + width / POLICY_LINE_RATIO, point.y);
     }
 
-    private int calculateMsHorizontalLineYCoordinate(Point p, int h) {
-        return (int)(p.y * h * MS_LINE_TO_HEIGHT_RATIO);
+    private int calculateMsHorizontalLineYCoordinate(Point point, int height) {
+        return (int) (point.y * height * MS_LINE_TO_HEIGHT_RATIO);
     }
 
     private Point coordinatesForRectangle(Point from, Point next) {
-        int x = from.x;
-        int y = from.y - next.y + LINE_THICKNESS / 2;
-        return new Point(x,y);
+        int pointX = from.x;
+        int pointY = from.y - next.y + LINE_THICKNESS / 2;
+        return new Point(pointX, pointY);
     }
 
 }