1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.eclipse.jetty.deploy.graph;
17
18 import java.util.List;
19 import java.util.concurrent.CopyOnWriteArrayList;
20
21 public class Path
22 {
23 private final List<Edge> _edges = new CopyOnWriteArrayList<Edge>();
24 private final List<Node> _nodes = new CopyOnWriteArrayList<Node>();
25
26 public Path()
27 {
28 }
29
30 public void add(Edge edge)
31 {
32 _edges.add(edge);
33 if (_nodes.size() == 0)
34 {
35 _nodes.add(edge.getFrom());
36 }
37 else
38 {
39 assert _nodes.get(_nodes.size() - 1).equals(edge.getFrom());
40 }
41 _nodes.add(edge.getTo());
42 }
43
44 public Path forkPath()
45 {
46 Path ep = new Path();
47 for (Edge edge : _edges)
48 {
49 ep.add(edge);
50 }
51 return ep;
52 }
53
54 public List<Node> getNodes()
55 {
56 return _nodes;
57 }
58
59 public List<Node> getEdges()
60 {
61 return _nodes;
62 }
63
64 public Node getNode(int index)
65 {
66 return _nodes.get(index);
67 }
68
69 public Node firstNode()
70 {
71 if (_nodes.size() == 0)
72 {
73 return null;
74 }
75 return _nodes.get(0);
76 }
77
78 public Node lastNode()
79 {
80 if (_nodes.size() == 0)
81 {
82 return null;
83 }
84 return _nodes.get(_nodes.size() - 1);
85 }
86
87 public int nodes()
88 {
89 return _nodes.size();
90 }
91
92 public int edges()
93 {
94 return _edges.size();
95 }
96
97 public boolean isEmpty()
98 {
99 return _edges.isEmpty();
100 }
101
102 public Edge firstEdge()
103 {
104 if (_edges.size() == 0)
105 {
106 return null;
107 }
108 return _edges.get(0);
109 }
110
111 public Edge lastEdge()
112 {
113 if (_edges.size() == 0)
114 {
115 return null;
116 }
117 return _edges.get(_edges.size() - 1);
118 }
119
120 public Edge getEdge(int index)
121 {
122 return _edges.get(index);
123 }
124
125 @Override
126 public String toString()
127 {
128 return super.toString() + _nodes.toString();
129 }
130 }