View Javadoc

1   // ========================================================================
2   // Copyright (c) Webtide LLC
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   //
8   // The Eclipse Public License is available at 
9   // http://www.eclipse.org/legal/epl-v10.html
10  //
11  // The Apache License v2.0 is available at
12  // http://www.apache.org/licenses/LICENSE-2.0.txt
13  //
14  // You may elect to redistribute this code under either of these licenses. 
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 }