Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 07ddb8fc58181caab6601103fe22d184932cb350 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.team.tests.ccvs.ui.logformatter;


public class PrintCSVDiffVisitor extends PrintDiffVisitor {
	private static final String GROUP_DELIMITER = " / ";
	private DelimitedValuesWriter writer;
	private String caseName;
	private String groupName;

	/**
	 * Creates a diff visitor that generates CSV output.
	 * 
	 * @param writer the delimited values writer
	 * @see PrintDiffVisitor
	 */
	public PrintCSVDiffVisitor(DelimitedValuesWriter writer, RootEntry olderRoot, int threshold, boolean ignoreNegligible) {
		super(olderRoot, threshold, ignoreNegligible);
		this.writer = writer;
	}
	
	protected void visitRootEntry(RootEntry entry, RootEntry olderEntry) {
		entry.acceptChildren(this);
	}
	
	protected void visitCaseEntry(CaseEntry entry, CaseEntry olderEntry) {
		caseName = entry.getName();
		groupName = null;
		entry.acceptChildren(this);
	}
	
	protected void visitGroupEntry(GroupEntry entry, GroupEntry olderEntry) {
		String oldGroupName = groupName;
		if (groupName == null) {
			groupName = entry.getName();
		} else {
			groupName += GROUP_DELIMITER + entry.getName();
		}
		entry.acceptChildren(this);
		groupName = oldGroupName;
	}
	
	protected void visitTaskEntry(TaskEntry entry, TaskEntry olderEntry) {
		writer.printFields(new String[] {
			caseName, // case
			groupName, // group
			entry.getName() // task
		});
		printTaskEntry(entry);
		printTaskEntry(olderEntry);
		if (entry.getTotalRuns() != 0 && olderEntry.getTotalRuns() != 0) {
			int olderMean = olderEntry.getAverageMillis();
			int diff = entry.getAverageMillis() - olderMean;
			if (isDifferenceUncertain(entry, olderEntry)) {
				writer.printField("UNCERTAIN");
			} else if (isDifferenceNegligible(entry, olderEntry)) {
				writer.printField("NEGLIGIBLE");
			} else {
				writer.printField(diff > 0 ? "SLOWER" : "FASTER"); // change type
			}
			writer.printField(Integer.toString(Math.abs(diff))); // change
			if (olderMean != 0) {
				writer.printField(Util.formatPercentageRatio(Math.abs(diff), olderMean)); // % change
			} else {
				writer.printField("");
			}
		} else {
			writer.printFields(new String[] { "", "", "" });
		}
		writer.endRecord();
	}
	
	protected void printTaskEntry(TaskEntry entry) {
		if (entry.getTotalRuns() != 0) {
			int mean = entry.getAverageMillis();
			writer.printFields(new String[] {
				Integer.toString(entry.getTotalRuns()), // runs
				Integer.toString(mean) // average
			});
			if (entry.getTotalRuns() > 1 && mean != 0) {
				int confidence = entry.getConfidenceInterval();
				writer.printFields(new String[] {
					Integer.toString(confidence), // 95% confidence interval
					Util.formatPercentageRatio(confidence, mean) // 95% c.i. as a percentage
				});
			} else {
				writer.printFields(new String[] { "", "" });
			}
		} else {
			writer.printFields(new String[] { "0", "", "", "" });
		}
	}
}

Back to the top