-
Notifications
You must be signed in to change notification settings - Fork 4
Traversal Context
A TraversalContext is used wherever only a part of the graph should be considered. It defines which vertices and edges are within the context and which are not. If a TraversalContext
is set for a graph, most graph traversing methods return only vertices and edges that are within the context.
The TraversalContext
interface contains two methods: public boolean containsVertex(Vertex v);
and public boolean containsEdge(Edge e);
. The snippet below shows an example for a TraversalContext
implementation. The FilterVertexTraversalContext
contains all vertices, that have a member of the validVertexClasses
list as VertexClass. Edges are in the context, if their alpha
and omega
vertices are in the context.
class FilterVertexClassesTraversalContext implements TraversalContext{
List<VertexClass> validVertexClasses;
public FilterVertexClassesTraversalContext(List<VertexClass> v){
this.validVertexClasses = v;
}
@Override
public boolean containsVertex(Vertex v) {
return validVertexClasses.contains(v.getAttributedElementClass());
}
@Override
public boolean containsEdge(Edge e) {
return this.containsVertex(e.getAlpha()) &&
this.containsVertex(e.getOmega());
}
}
We use the example graph from the previous section again. It is displayed below:
The following snippet shows how a TraversalContext
is set. It should contain only vertices of type JavaType and JavaMember.
Graph g = ...
Vertex v1 = g.getVertex(1);
Vertex v4 = g.getVertex(4);
GraphClass gc = g.getGraphClass();
ArrayList<VertexClass> vcList = new ArrayList<VertexClass>();
vcList.add(gc.getVertexClass("JavaType"));
vcList.add(gc.getVertexClass("JavaMember"));
TraversalContext tc = new FilterVertexClassesTraversalContext(vcList);
g.setTraversalContext(tc);
This traversal context reduces the graph to the subset displayed in the picture below.
After setting the traversal context, the graph traversing methods may return other values than before. The following table shows, how the results differ.
Method call | Without Traversal Context set | With Traversal Context set |
---|---|---|
g.getVertex(1) |
v1: JavaPackage | v1: JavaPackage |
g.getFirstVertex() |
v1: JavaPackage | v4: JavaType |
g.getLastVertex() |
v9: JavaMember | v9: JavaMember |
g.getFirstEdge() |
+e1: ContainsPackage | +e3: Declares |
g.getLastEdge() |
+e8: Imports | +e6: Declares |
v4.getPrevVertex() |
v3: SourceFile | null |
g.getVCount() |
9 | 6 |
g.getECount() |
8 | 4 |
v4.getFirstIncidence() |
-e2: ContainsType | +e3: Declares |
v4.getDegree() |
6 | 4 |
g.containsVertex(v1) |
true | false |
The vertex, edge and incidence iterators also reduce their results to the vertices and edges contained in the set traversal context.
System.out.println("Vertices in the graph: ");
for(Vertex vertex : g.vertices()){
System.out.println(vertex);
}
Console output:
v4: JavaType
v5: JavaType
v6: JavaMember
v7: JavaMember
v8: JavaMember
v9: JavaMember