Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
MockObjectMap |
|
| 0.0;0 |
1 | /* | |
2 | * Copyright (c) 2003-2008, by Henrik Arro and Contributors | |
3 | * | |
4 | * This file is part of JSeq, a tool to automatically create | |
5 | * sequence diagrams by tracing program execution. | |
6 | * | |
7 | * See <http://jseq.sourceforge.net> for more information. | |
8 | * | |
9 | * JSeq is free software: you can redistribute it and/or modify | |
10 | * it under the terms of the GNU Lesser General Public License as | |
11 | * published by the Free Software Foundation, either version 3 of | |
12 | * the License, or (at your option) any later version. | |
13 | * | |
14 | * JSeq is distributed in the hope that it will be useful, | |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | * GNU Lesser General Public License for more details. | |
18 | * | |
19 | * You should have received a copy of the GNU Lesser General Public License | |
20 | * along with JSeq. If not, see <http://www.gnu.org/licenses/>. | |
21 | */ | |
22 | ||
23 | package th.co.edge.jseq; | |
24 | ||
25 | import java.util.Collections; | |
26 | import java.util.HashMap; | |
27 | import java.util.LinkedList; | |
28 | import java.util.List; | |
29 | import java.util.Map; | |
30 | ||
31 | /** | |
32 | * A <code>MockObjectMap</code> is a mapping from names to | |
33 | * <code>MockObject</code>s, with utility methods to make it easy to | |
34 | * translate from <code>Activation</code>s to <code>MockObject</code>s, | |
35 | * with automatic handling of column numbers. | |
36 | */ | |
37 | 1 | public class MockObjectMap { |
38 | 1 | private Map<String, MockObject> objectMap = new HashMap<String, MockObject>(); |
39 | 1 | private int nextColumn = 0; |
40 | ||
41 | /** | |
42 | * Ensures that all <code>MockObject</code>s in another | |
43 | * <code>MockObjectMap</code> is also in this map. | |
44 | * | |
45 | * @param otherObjectMap | |
46 | * the <code>MockObjectMap</code> whose <code>MockObject</code>s | |
47 | * to add to this map if necessary | |
48 | */ | |
49 | public void add(MockObjectMap otherObjectMap) { | |
50 | 0 | for (MockObject object : otherObjectMap.listView()) { |
51 | 0 | getInstance(object.getName()); |
52 | } | |
53 | 0 | } |
54 | ||
55 | /** | |
56 | * Returns a new <code>MockObjectMap</code> where the method calls | |
57 | * represented by the given <code>Activation</code> and its nested | |
58 | * activations have been added as <code>MockObject</code>s to this map, | |
59 | * with the activation method call first, and the nested method calls in the | |
60 | * order they were added to the activation. | |
61 | * | |
62 | * @param activation | |
63 | * the <code>Activation</code> whose method call and nested | |
64 | * method calls to add to this map | |
65 | * | |
66 | * @return a new <code>MockObjectMap</code> containing all method calls | |
67 | * from <code>activation</code> | |
68 | */ | |
69 | public static MockObjectMap addAll(Activation activation) { | |
70 | 1 | MockObjectMap objectMap = new MockObjectMap(); |
71 | 1 | addAll(activation, objectMap); |
72 | 1 | return objectMap; |
73 | } | |
74 | ||
75 | private static void addAll(Activation activation, MockObjectMap objectMap) { | |
76 | 10 | objectMap.getInstance(activation.getClassName()); |
77 | 10 | for (Activation nestedActivation : activation.getNestedActivations()) { |
78 | 9 | addAll(nestedActivation, objectMap); |
79 | } | |
80 | 10 | } |
81 | ||
82 | /** | |
83 | * Returns the <code>MockObject</code> associated with the given name. If | |
84 | * there is none, a new <code>MockObject</code> is created, using the | |
85 | * given name and the next available column number, and this object is added | |
86 | * to the map. | |
87 | * | |
88 | * @param name | |
89 | * the name of the <code>MockObject</code> to look up | |
90 | * | |
91 | * @return the <code>MockObject</code> associated with <code>name</code>, | |
92 | * or a newly created <code>MockObject</code> (this method never | |
93 | * returns <code>null</code> | |
94 | */ | |
95 | private MockObject getInstance(String name) { | |
96 | 10 | MockObject object = objectMap.get(name); |
97 | 10 | if (object == null) { |
98 | 3 | object = new MockObject(name, nextColumn++); |
99 | 3 | objectMap.put(name, object); |
100 | } | |
101 | 10 | return object; |
102 | } | |
103 | ||
104 | /** | |
105 | * Returns the <code>MockObject</code> associated with the given name, or | |
106 | * <code>null</code> if there is none. | |
107 | * | |
108 | * @param name | |
109 | * the name of the <code>MockObject</code> to look up | |
110 | * | |
111 | * @return the <code>MockObject</code> associated with <code>name</code>, | |
112 | * or <code>null</code> if there is none | |
113 | */ | |
114 | public MockObject get(String name) { | |
115 | 3 | return objectMap.get(name); |
116 | } | |
117 | ||
118 | /** | |
119 | * Returns a list of all <code>MockObject</code>s in this map, ordered by | |
120 | * column number (and name if the same column number occurs several times, | |
121 | * which it normally should not do). | |
122 | * | |
123 | * @return a list of all <code>MockObject</code>s in this map | |
124 | */ | |
125 | public List<MockObject> listView() { | |
126 | 0 | List<MockObject> values = new LinkedList<MockObject>(objectMap.values()); |
127 | 0 | Collections.sort(values); |
128 | 0 | return values; |
129 | } | |
130 | ||
131 | /** | |
132 | * Returns a string representation of this <code>MockObjectMap</code>, | |
133 | * mainly useful for logging. | |
134 | * | |
135 | * @return a string representation of this <code>MockObjectMap</code> | |
136 | */ | |
137 | @Override | |
138 | public String toString() { | |
139 | 0 | return listView().toString(); |
140 | } | |
141 | } |