| /******************************************************************************* |
| * 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.old; |
| |
| |
| 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", "", "", "" }); |
| } |
| } |
| } |