Line | Hits | Source |
---|---|---|
1 | /* | |
2 | * Copyright (c) 2003, the JUNG Project and the Regents of the University | |
3 | * of California | |
4 | * All rights reserved. | |
5 | * | |
6 | * This software is open-source under the BSD license; see either | |
7 | * "license.txt" or | |
8 | * http://jung.sourceforge.net/license.txt for a description. | |
9 | */ | |
10 | package edu.uci.ics.jung.graph.filters; | |
11 | ||
12 | import edu.uci.ics.jung.graph.Graph; | |
13 | ||
14 | /** | |
15 | * Contains an audit trail of a graph filtering step. Maintains the name | |
16 | * of the filters used, a history of previous filters, and links to | |
17 | * the original graph that was used to generate the graph. | |
18 | * | |
19 | * @author danyelf | |
20 | */ | |
21 | public class GraphAssemblyRecord { | |
22 | ||
23 | /** | |
24 | * The key that identifes this <tt>GraphAssemblyRecord</tt> in the | |
25 | * {@link edu.uci.ics.jung.utils.UserData UserData}. | |
26 | */ | |
27 | 2 | public static final Object FILTER_GRAPH_KEY = "edu.uci.ics.jung.filter.UnassembledGraph_FilterData"; |
28 | ||
29 | private String name; | |
30 | private Graph originalGraph; | |
31 | ||
32 | /** | |
33 | * Creates a <tt>GraphAssemblyRecord<tt>, recording the original | |
34 | * <tt>Graph</tt> and the name of the filter that produced it. | |
35 | * <p> | |
36 | * This should be done automatically during the <tt>assemble()</tt> | |
37 | * call to the <tt>UnassembledGraph</tt>. | |
38 | * @param graph | |
39 | */ | |
40 | 5 | GraphAssemblyRecord(UnassembledGraph graph) { |
41 | 5 | this.originalGraph = graph.getOriginalGraph(); |
42 | 5 | this.name = graph.getFilterName(); |
43 | 5 | } |
44 | ||
45 | /** | |
46 | * Returns the original graph that created this subset. Warning: | |
47 | * because this stays around, the original Graph will NOT be | |
48 | * garbage collected! Be sure to delete this user data if you | |
49 | * want to allow the original graph's memory to be reallocated. | |
50 | * @return a pointer to the original Graph. | |
51 | */ | |
52 | public Graph getOriginalGraph() { | |
53 | 0 | return originalGraph; |
54 | } | |
55 | ||
56 | /** | |
57 | * Returns the name of the filter that generated this Graph. If a series | |
58 | * of filters were used (as in the second example at | |
59 | * <tt>{@link EfficientFilter EfficientFilter}</tt>, | |
60 | * then they are all returned, collated together. | |
61 | * @return the name of the filter | |
62 | */ | |
63 | public String getName() { | |
64 | 0 | return name; |
65 | } | |
66 | ||
67 | /** | |
68 | * Returns the GraphAssemblyRecord, if it exists, of the original | |
69 | * graph. If the original graph was generated by a different filter | |
70 | * (as in the first example at | |
71 | * <tt>{@link EfficientFilter EfficientFilter}</tt>, | |
72 | * then there is a "previous" graph--and thus a previous <tt>GraphAssemblyRecord</tt>. | |
73 | */ | |
74 | public GraphAssemblyRecord getPreviousAssemblyRecord() { | |
75 | 0 | GraphAssemblyRecord gar = (GraphAssemblyRecord) originalGraph.getUserDatum( FILTER_GRAPH_KEY ); |
76 | 0 | return gar; |
77 | } | |
78 | ||
79 | ||
80 | /** | |
81 | * Returns the collated name of the sequence of filters. Names are | |
82 | * returned in reverse order, separated by ":::". | |
83 | * If the original graph was generated by a different filter (as in the | |
84 | * first example at | |
85 | * <tt>{@link EfficientFilter EfficientFilter}</tt>, | |
86 | * then there is a "previous" graph--and thus a previous <tt>GraphAssemblyRecord</tt>. | |
87 | * This follows the chain back and returns the collated set of names. | |
88 | */ | |
89 | public String getNameExtended() { | |
90 | 0 | if (getPreviousAssemblyRecord() != null) { |
91 | 0 | return (name + ":::" + getPreviousAssemblyRecord().getNameExtended() ); |
92 | } else { | |
93 | 0 | return name; |
94 | } | |
95 | } | |
96 | ||
97 | /** | |
98 | * Returns the first original graph | |
99 | * If the original graph was generated by a different filter (as in the | |
100 | * first example at | |
101 | * <tt>{@link EfficientFilter EfficientFilter}</tt>, | |
102 | * then there is a "previous" graph--and thus a previous <tt>GraphAssemblyRecord</tt>. | |
103 | * This follows the chain back and returns the first Graph. | |
104 | */ | |
105 | public Graph getOriginalExtended() { | |
106 | 0 | if (getPreviousAssemblyRecord() != null) { |
107 | 0 | return (getPreviousAssemblyRecord().getOriginalExtended() ); |
108 | } else { | |
109 | 0 | return originalGraph; |
110 | } | |
111 | } | |
112 | ||
113 | /** | |
114 | * Returns the <tt>GraphAssemblyRecord</tt> for a particular graph. Expects the | |
115 | * data to be stored in the user data. | |
116 | * @param g A <tt>Graph</tt> that may be a filtered version of some other graph. | |
117 | * @return The <tt>GraphAssemblyRecord</tt> associated with the graph, or | |
118 | * <tt>null</tt>, if there isn't one. | |
119 | * | |
120 | * @see #FILTER_GRAPH_KEY | |
121 | * @see Graph#getUserDatum | |
122 | */ | |
123 | public static GraphAssemblyRecord getAssemblyRecord( Graph g) { | |
124 | 4 | GraphAssemblyRecord gar = (GraphAssemblyRecord) g.getUserDatum( FILTER_GRAPH_KEY ); |
125 | 4 | return gar; |
126 | } | |
127 | ||
128 | } |
this report was generated by version 1.0.5 of jcoverage. |
copyright © 2003, jcoverage ltd. all rights reserved. |