blob: 9cd22c4f5bf8eafa62b049908d2a5cd1a5e0aac3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.test.internal.performance.db;
import java.io.PrintStream;
import java.util.HashMap;
public class Report {
private static final String LEFT = "l"; //$NON-NLS-1$
private static final String RIGHT = "r"; //$NON-NLS-1$
private int fGap;
private int fColumn;
private int fRow;
private int fRows;
private HashMap<String, String> fContent = new HashMap<>();
private HashMap<String, Integer> fWidths = new HashMap<>();
private HashMap<String, String> fAlignment = new HashMap<>();
public Report(int gap) {
fGap = gap;
}
public void addCell(String value) {
setCell(fColumn, fRow, value, LEFT);
fColumn++;
}
public void addCellRight(String value) {
setCell(fColumn, fRow, value, RIGHT);
fColumn++;
}
public void nextRow() {
fRow++;
fColumn = 0;
}
private void setCell(int x, int y, String value, String align) {
fContent.put(String.valueOf(x + "/" + y), value); //$NON-NLS-1$
fAlignment.put(String.valueOf(x + "/" + y), align); //$NON-NLS-1$
Integer w = fWidths.get(Integer.toString(x));
if (w == null)
w = Integer.valueOf(value.length());
else
w = Integer.valueOf(Math.max(w.intValue(), value.length()));
fWidths.put(Integer.toString(x), w);
fRows = Math.max(fRows, y + 1);
}
private String getCell(int x, int y) {
return fContent.get(x + "/" + y); //$NON-NLS-1$
}
public void print(PrintStream ps) {
int n = fWidths.size();
for (int y = 0; y < fRows; y++) {
for (int x = 0; x < n; x++) {
Integer w = fWidths.get(Integer.toString(x));
int ww = w.intValue();
String s = getCell(x, y);
if (s == null)
s = ""; //$NON-NLS-1$
if (x > 0)
for (int g = 0; g < fGap; g++)
ps.print(' ');
int www = ww - s.length();
String align = fAlignment.get(x + "/" + y); //$NON-NLS-1$
if (LEFT.equalsIgnoreCase(align))
ps.print(s);
for (int l = 0; l < www; l++)
ps.print(' ');
if (RIGHT.equalsIgnoreCase(align))
ps.print(s);
}
ps.println();
}
}
}