1 /*******************************************************************************
2 * Copyright (c) 2000, 2009 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.test.internal.performance.results.db;
12
13 import java.io.PrintStream;
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
17
18 import org.eclipse.test.internal.performance.results.utils.Util;
19
20
21 /**
22 * Abstract class to store performance results.
23 *
24 * Each results gives access to specific children depending on model.
25 */
26 public abstract class AbstractResults implements Comparable {
27
28 public static final double[] INVALID_RESULTS = new double[] {2};
29 public static final double[] NO_BUILD_RESULTS = new double[0];
30 public static final int BUILD_VALUE_INDEX = 0;
31 public static final int BASELINE_VALUE_INDEX = 1;
32 public static final int DELTA_VALUE_INDEX = 2;
33 public static final int DELTA_ERROR_INDEX = 3;
34 public static final int BUILD_ERROR_INDEX = 4;
35 public static final int BASELINE_ERROR_INDEX = 5;
36 public static final int NUMBERS_LENGTH = 6;
37
38 AbstractResults parent;
39 int id = -1;
40 String name;
41 List children;
42 private static boolean NEW_LINE = true;
43 PrintStream printStream = null;
44
AbstractResults(AbstractResults parent, String name)45 AbstractResults(AbstractResults parent, String name) {
46 this.parent = parent;
47 this.children = new ArrayList();
48 this.name = name;
49 }
50
AbstractResults(AbstractResults parent, int id)51 AbstractResults(AbstractResults parent, int id) {
52 this.parent = parent;
53 this.children = new ArrayList();
54 this.id = id;
55 }
56
57 /*
58 * Add a child to current results, using specific sort
59 * order if specified.
60 */
addChild(Comparable child, boolean sort)61 void addChild(Comparable child, boolean sort) {
62 if (sort) {
63 int size = this.children.size();
64 for (int i=0; i<size; i++) {
65 Object results = this.children.get(i);
66 if (child.compareTo(results) < 0) {
67 this.children.add(i, child);
68 return;
69 }
70 }
71 }
72 this.children.add(child);
73 }
74
75 /**
76 * Compare the results to the given one using the name.
77 *
78 * @see java.lang.Comparable#compareTo(java.lang.Object)
79 */
compareTo(Object obj)80 public int compareTo(Object obj) {
81 if (obj instanceof AbstractResults) {
82 AbstractResults res = (AbstractResults) obj;
83 return getName().compareTo(res.getName());
84 }
85 return -1;
86 }
87
88 /**
89 * Returns whether two results are equals using the name
90 * to compare them.
91 *
92 * @param obj The results to compare with
93 * @return <code>true</code> if the name are equals,
94 * <code>false</code> otherwise
95 * @see java.lang.Comparable#compareTo(java.lang.Object)
96 */
equals(Object obj)97 public boolean equals(Object obj) {
98 if (obj instanceof AbstractResults) {
99 return this.name.equals(((AbstractResults)obj).getName());
100 }
101 return super.equals(obj);
102 }
103
104 /**
105 * Return an array built on the current results children list.
106 *
107 * @return An array of the children list
108 */
getChildren()109 public AbstractResults[] getChildren() {
110 AbstractResults[] elements = new AbstractResults[size()];
111 this.children.toArray(elements);
112 return elements;
113 }
114
getComponentResults()115 ComponentResults getComponentResults() {
116 if (this.parent != null) {
117 return this.parent.getComponentResults();
118 }
119 return null;
120 }
121
getId()122 int getId() {
123 return this.id;
124 }
125
126 /**
127 * Returns the name of the results object.
128 *
129 * @return The name of the results
130 */
getName()131 public String getName() {
132 return this.name;
133 }
134
135 /**
136 * Returns the parent
137 *
138 * @return The parent
139 */
getParent()140 public AbstractResults getParent() {
141 return this.parent;
142 }
143
getPerformance()144 PerformanceResults getPerformance() {
145 if (this.parent != null) {
146 return this.parent.getPerformance();
147 }
148 return null;
149 }
150
getPath()151 String getPath() {
152 String path = this.parent==null || this.parent.parent==null ? "" : this.parent.getPath() + ">"; //$NON-NLS-1$ //$NON-NLS-2$
153 return path+this.name;
154 }
155
156 /**
157 * Return the children list of the current results.
158 *
159 * @return An iterator on the children list
160 */
getResults()161 public Iterator getResults() {
162 return this.children.iterator();
163 }
164
getResults(String resultName)165 AbstractResults getResults(String resultName) {
166 int size = this.children.size();
167 for (int i=0; i<size; i++) {
168 AbstractResults searchedResults = (AbstractResults) this.children.get(i);
169 if (searchedResults.getName().equals(resultName)) {
170 return searchedResults;
171 }
172 }
173 return null;
174 }
175
getResults(int searchedId)176 AbstractResults getResults(int searchedId) {
177 int size = this.children.size();
178 for (int i=0; i<size; i++) {
179 AbstractResults searchedResults = (AbstractResults) this.children.get(i);
180 if (searchedResults.id == searchedId) {
181 return searchedResults;
182 }
183 }
184 return null;
185 }
186
hashCode()187 public int hashCode() {
188 return this.name.hashCode();
189 }
190
printTab()191 void printTab() {
192 if (this.parent != null) {
193 if (this.printStream != null) this.printStream.print("\t"); //$NON-NLS-1$
194 this.parent.printTab();
195 }
196 }
print(String text)197 void print(String text) {
198 if (this.printStream != null) {
199 if (NEW_LINE) printTab();
200 this.printStream.print(text);
201 NEW_LINE = false;
202 }
203 }
204
printGlobalTime(long start)205 void printGlobalTime(long start) {
206 printGlobalTime(start, null);
207 }
208
printGlobalTime(long start, String end)209 void printGlobalTime(long start, String end) {
210 long time = System.currentTimeMillis();
211 String resultsName = getName();
212 StringBuffer buffer;
213 if (resultsName == null) {
214 buffer = new StringBuffer(" => time spent was "); //$NON-NLS-1$
215 } else {
216 buffer = new StringBuffer(" => time spent in '"); //$NON-NLS-1$
217 buffer.append(resultsName);
218 buffer.append("' was "); //$NON-NLS-1$
219 }
220 buffer.append(Util.timeString(time-start));
221 if (end != null) {
222 buffer.append(". "); //$NON-NLS-1$
223 buffer.append(end.trim());
224 }
225 println(buffer);
226 }
227
println()228 void println() {
229 if (this.printStream != null) {
230 this.printStream.println();
231 NEW_LINE = true;
232 }
233 }
234
println(String text)235 void println(String text) {
236 if (this.printStream != null) {
237 if (NEW_LINE) printTab();
238 this.printStream.println(text);
239 NEW_LINE = true;
240 }
241 }
242
println(StringBuffer buffer)243 void println(StringBuffer buffer) {
244 println(buffer.toString());
245 }
246
size()247 public int size() {
248 return this.children == null ? 0 : this.children.size();
249 }
250
toString()251 public String toString() {
252 return getPath();
253 }
254
255 }
256