1 package org.kite9.diagram.position;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6
7 /***
8 * This is used to hold the route of an edge, or container border.
9 *
10 * @author robmoffat
11 *
12 */
13 public class RouteRenderingInformation implements RenderingInformation {
14
15 public RouteRenderingInformation() {
16 }
17
18 private static final long serialVersionUID = 1958606211421399887L;
19
20 public List<Dimension2D> positions = new ArrayList<Dimension2D>();
21
22 public Dimension2D getWaypoint(int pos) {
23 return positions.get(pos);
24 }
25
26 public int size() {
27 return positions.size();
28 }
29
30 public void add(Dimension2D d) {
31 positions.add(d);
32 }
33
34 public void set(int point, Dimension2D d) {
35 while (point>=positions.size()) {
36 positions.add(null);
37 }
38 positions.set(point, d);
39 }
40
41 private boolean endHop = false, startHop= false;
42
43 @Override
44 public String toString() {
45 StringBuffer sb= new StringBuffer();
46 for (int i = 0; i < size(); i++) {
47 sb.append("("+getWaypoint(i).x()+", "+getWaypoint(i).y()+")");
48 }
49 return sb.toString();
50 }
51
52 public boolean isEndHop() {
53 return endHop;
54 }
55
56 public void setEndHop(boolean endHop) {
57 this.endHop = endHop;
58 }
59
60 public boolean isStartHop() {
61 return startHop;
62 }
63
64 public void setStartHop(boolean startHop) {
65 this.startHop = startHop;
66 }
67
68 public Dimension2D getBoundingSize() {
69 Dimension2D pos = getBoundingPosition();
70 double x =0, y= 0;
71 for (Dimension2D p : positions) {
72 x = Math.max(p.x(),x);
73 y = Math.max(p.y(),y);
74 }
75
76 return new Dimension2D(x-pos.x(), y-pos.y());
77 }
78
79 public Dimension2D getBoundingPosition() {
80 double x =Double.MAX_VALUE, y= Double.MAX_VALUE;
81 for (Dimension2D p : positions) {
82 x = Math.min(p.x(),x);
83 y = Math.min(p.y(),y);
84 }
85
86 return new Dimension2D(x,y);
87 }
88 }