some refactoring for the variant eval output system
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3576 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
db1383d0b2
commit
3d049204ed
|
|
@ -0,0 +1,180 @@
|
||||||
|
package org.broadinstitute.sting.playground.utils.report.templates;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this class handles generating text table output
|
||||||
|
*/
|
||||||
|
class TextTable {
|
||||||
|
// make a table of the number of rows
|
||||||
|
ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
|
||||||
|
|
||||||
|
// keep a complementary array of the sizes of each column
|
||||||
|
ArrayList<Integer> minimumSizes = new ArrayList<Integer>();
|
||||||
|
List<String> header = new ArrayList<String>();
|
||||||
|
|
||||||
|
// our default width
|
||||||
|
private static final int defaultMinimumSize = 15;
|
||||||
|
|
||||||
|
// our seperator
|
||||||
|
private String seperator = "";
|
||||||
|
|
||||||
|
// our default cell entry
|
||||||
|
private static final String defaultCell = "";
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a text table, with the:
|
||||||
|
* @param name name of the table
|
||||||
|
* @param description what the table represents
|
||||||
|
* @param header the header fields
|
||||||
|
*/
|
||||||
|
TextTable(String name, String description, List<String> header) {
|
||||||
|
this.name = name;
|
||||||
|
this.description = description;
|
||||||
|
for (int index = 0; index < header.size(); index++)
|
||||||
|
determineMinimumColumnWidth(header.get(index).length(),index);
|
||||||
|
this.header.addAll(header);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a text table
|
||||||
|
*/
|
||||||
|
TextTable() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set a cell of the table
|
||||||
|
* @param row, zero based
|
||||||
|
* @param column zero based
|
||||||
|
* @param entry cell to set
|
||||||
|
*/
|
||||||
|
public void setCell(int row, int column, String entry) {
|
||||||
|
if (rows.size() <= row)
|
||||||
|
createRow(row,column);
|
||||||
|
ArrayList<String> rowData = rows.get(row);
|
||||||
|
if (rowData.size() <= column)
|
||||||
|
for (int x = rowData.size(); x <= column; x++)
|
||||||
|
rowData.add("");
|
||||||
|
rows.get(row).set(column,entry);
|
||||||
|
determineMinimumColumnWidth(entry.length(),column);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createRow(int row, int column) {
|
||||||
|
for (int x = rows.size(); x <= row; x++) {
|
||||||
|
ArrayList<String> blank = new ArrayList<String>();
|
||||||
|
for (int col = 0; col <= column; col++)
|
||||||
|
blank.add(defaultCell);
|
||||||
|
rows.add(blank);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* write the table to the writer
|
||||||
|
* @param writer the writer
|
||||||
|
*/
|
||||||
|
public void toPrintWriter(Writer writer) {
|
||||||
|
int index = 0;
|
||||||
|
for (String col : header)
|
||||||
|
writeToDisk(writer, col, index++, (index == header.size() -1));
|
||||||
|
appendEndLine(writer,"\n");
|
||||||
|
index = 0;
|
||||||
|
for (String col : header)
|
||||||
|
writeToDisk(writer, col, index++, (index == header.size() -1));
|
||||||
|
appendEndLine(writer,"\n");
|
||||||
|
for (ArrayList<String> row : rows) {
|
||||||
|
if (row.size() > header.size())
|
||||||
|
throw new IllegalStateException("More row-cells in table " + name + " then header columns");
|
||||||
|
for (int y = 0; y < header.size(); y++)
|
||||||
|
if (row.size() >= y)
|
||||||
|
writeToDisk(writer, "", y, (y == header.size() - 1));
|
||||||
|
else
|
||||||
|
writeToDisk(writer, row.get(y), y, (y == header.size() - 1));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
writer.append("\n");
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new StingException("Unable to write to the Writer");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendEndLine(Writer writer, String str) {
|
||||||
|
try {
|
||||||
|
writer.append(str);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* write to disk a single string
|
||||||
|
* @param writer the writer to use
|
||||||
|
* @param str the string to write
|
||||||
|
* @param y an index of the string, for column width look-up
|
||||||
|
* @param lastVal are we the last value
|
||||||
|
*/
|
||||||
|
void writeToDisk(Writer writer, String str, int y, boolean lastVal) {
|
||||||
|
try {
|
||||||
|
writer.append(String.format("%1$-" + (getMinimumSizes(y) + 3) + "s", str));
|
||||||
|
if (y != rows.size() - 1)
|
||||||
|
writer.append(seperator);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new StingException("Unable to write to the Writer");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the minimum size for a column
|
||||||
|
* @param column the column index
|
||||||
|
* @return the width
|
||||||
|
*/
|
||||||
|
public int getMinimumSizes(int column) {
|
||||||
|
if (column >= minimumSizes.size())
|
||||||
|
return defaultMinimumSize;
|
||||||
|
return minimumSizes.get(column);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* determine the minimum column width
|
||||||
|
* @param size the size of this string
|
||||||
|
* @param position the position (column)
|
||||||
|
*/
|
||||||
|
void determineMinimumColumnWidth(int size, int position) {
|
||||||
|
if (minimumSizes.size() <= position)
|
||||||
|
for (int x = minimumSizes.size(); x <= position; x++)
|
||||||
|
minimumSizes.add(x,0);
|
||||||
|
minimumSizes.set(position,(minimumSizes.get(position) > size) ? minimumSizes.get(position) : size);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getHeader() {
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeader(List<String> header) {
|
||||||
|
this.header = header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
package org.broadinstitute.sting.playground.utils.report.templates;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.playground.utils.report.templates.TextTable;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test out the text table
|
||||||
|
*/
|
||||||
|
public class TextTableUnitTest {
|
||||||
|
@Test
|
||||||
|
public void testBasicSetCell() {
|
||||||
|
TextTable table = new TextTable("name","description",new ArrayList<String>());
|
||||||
|
table.setCell(1,5,"entry");
|
||||||
|
int entriesSeen = 0;
|
||||||
|
ArrayList<ArrayList<String>> rows = table.rows;
|
||||||
|
for (int x = 0; x <= 1; x++)
|
||||||
|
for (int y = 0; y <= 5; y++)
|
||||||
|
if (x == 1 && y == 5) {
|
||||||
|
Assert.assertTrue(rows.get(x).get(y).equals("entry"));
|
||||||
|
entriesSeen++;
|
||||||
|
} else
|
||||||
|
Assert.assertTrue(rows.get(x).get(y).equals(""));
|
||||||
|
Assert.assertEquals("Incorrect number of entries seen",1,entriesSeen);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBasicSetTwoCells() {
|
||||||
|
TextTable table = new TextTable("name","description",new ArrayList<String>());
|
||||||
|
table.setCell(1,5,"entry");
|
||||||
|
table.setCell(1,1,"entry");
|
||||||
|
int entriesSeen = 0;
|
||||||
|
ArrayList<ArrayList<String>> rows = table.rows;
|
||||||
|
for (int x = 0; x <= 1; x++)
|
||||||
|
for (int y = 0; y <= 5; y++)
|
||||||
|
if ((x == 1 && y == 5) || (x == 1 && y == 1)) {
|
||||||
|
Assert.assertTrue(rows.get(x).get(y).equals("entry"));
|
||||||
|
entriesSeen++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Assert.assertTrue(rows.get(x).get(y).equals(""));
|
||||||
|
Assert.assertEquals("Incorrect number of entries seen",2,entriesSeen);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue