View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.deploy.graph;
20  
21  import java.util.List;
22  import java.util.concurrent.CopyOnWriteArrayList;
23  
24  public class Path
25  {
26      private final List<Edge> _edges = new CopyOnWriteArrayList<Edge>();
27      private final List<Node> _nodes = new CopyOnWriteArrayList<Node>();
28  
29      public Path()
30      {
31      }
32  
33      public void add(Edge edge)
34      {
35          _edges.add(edge);
36          if (_nodes.size() == 0)
37          {
38              _nodes.add(edge.getFrom());
39          }
40          else
41          {
42              assert _nodes.get(_nodes.size() - 1).equals(edge.getFrom());
43          }
44          _nodes.add(edge.getTo());
45      }
46  
47      public Path forkPath()
48      {
49          Path ep = new Path();
50          for (Edge edge : _edges)
51          {
52              ep.add(edge);
53          }
54          return ep;
55      }
56  
57      public List<Node> getNodes()
58      {
59          return _nodes;
60      }
61  
62      public List<Node> getEdges()
63      {
64          return _nodes;
65      }
66  
67      public Node getNode(int index)
68      {
69          return _nodes.get(index);
70      }
71  
72      public Node firstNode()
73      {
74          if (_nodes.size() == 0)
75          {
76              return null;
77          }
78          return _nodes.get(0);
79      }
80  
81      public Node lastNode()
82      {
83          if (_nodes.size() == 0)
84          {
85              return null;
86          }
87          return _nodes.get(_nodes.size() - 1);
88      }
89  
90      public int nodes()
91      {
92          return _nodes.size();
93      }
94  
95      public int edges()
96      {
97          return _edges.size();
98      }
99  
100     public boolean isEmpty()
101     {
102         return _edges.isEmpty();
103     }
104 
105     public Edge firstEdge()
106     {
107         if (_edges.size() == 0)
108         {
109             return null;
110         }
111         return _edges.get(0);
112     }
113 
114     public Edge lastEdge()
115     {
116         if (_edges.size() == 0)
117         {
118             return null;
119         }
120         return _edges.get(_edges.size() - 1);
121     }
122 
123     public Edge getEdge(int index)
124     {
125         return _edges.get(index);
126     }
127 
128     @Override
129     public String toString()
130     {
131         return super.toString() + _nodes.toString();
132     }
133 }