Changes to allow the primary key of a table to be hidden. Formatting changes to account for when that column is hidden.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4947 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
fdc514ded3
commit
307c41c128
|
|
@ -1,8 +1,13 @@
|
||||||
package org.broadinstitute.sting.gatk.report;
|
package org.broadinstitute.sting.gatk.report;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||||
|
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A data structure that allows data to be collected over the course of a walker's computation, then have that data
|
* A data structure that allows data to be collected over the course of a walker's computation, then have that data
|
||||||
|
|
@ -92,8 +97,22 @@ public class GATKReportTable {
|
||||||
|
|
||||||
private String primaryKeyName;
|
private String primaryKeyName;
|
||||||
private TreeSet<Object> primaryKeyColumn;
|
private TreeSet<Object> primaryKeyColumn;
|
||||||
|
private boolean primaryKeyDisplay;
|
||||||
|
|
||||||
private HashMap<String, GATKReportColumn> columns;
|
private LinkedHashMap<String, GATKReportColumn> columns;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies that a table or column name has only alphanumeric characters - no spaces or special characters allowed
|
||||||
|
*
|
||||||
|
* @param name the name of the table or column
|
||||||
|
* @return true if the name is valid, false if otherwise
|
||||||
|
*/
|
||||||
|
private boolean isValidName(String name) {
|
||||||
|
Pattern p = Pattern.compile("[^a-zA-Z0-9_]");
|
||||||
|
Matcher m = p.matcher(name);
|
||||||
|
|
||||||
|
return !m.find();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new GATK report table with the specified name and description
|
* Construct a new GATK report table with the specified name and description
|
||||||
|
|
@ -102,10 +121,14 @@ public class GATKReportTable {
|
||||||
* @param tableDescription the description of the table
|
* @param tableDescription the description of the table
|
||||||
*/
|
*/
|
||||||
public GATKReportTable(String tableName, String tableDescription) {
|
public GATKReportTable(String tableName, String tableDescription) {
|
||||||
|
if (!isValidName(tableName)) {
|
||||||
|
throw new ReviewedStingException("Attempted to set a GATKReportTable name of '" + tableName + "'. GATKReportTable names must be purely alphanumeric - no spaces or special characters are allowed.");
|
||||||
|
}
|
||||||
|
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
this.tableDescription = tableDescription;
|
this.tableDescription = tableDescription;
|
||||||
|
|
||||||
columns = new HashMap<String, GATKReportColumn>();
|
columns = new LinkedHashMap<String, GATKReportColumn>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -114,9 +137,30 @@ public class GATKReportTable {
|
||||||
* @param primaryKeyName the name of the primary key column
|
* @param primaryKeyName the name of the primary key column
|
||||||
*/
|
*/
|
||||||
public void addPrimaryKey(String primaryKeyName) {
|
public void addPrimaryKey(String primaryKeyName) {
|
||||||
|
if (!isValidName(primaryKeyName)) {
|
||||||
|
throw new ReviewedStingException("Attempted to set a GATKReportTable primary key name of '" + primaryKeyName + "'. GATKReportTable primary key names must be purely alphanumeric - no spaces or special characters are allowed.");
|
||||||
|
}
|
||||||
|
|
||||||
this.primaryKeyName = primaryKeyName;
|
this.primaryKeyName = primaryKeyName;
|
||||||
|
|
||||||
primaryKeyColumn = new TreeSet<Object>();
|
primaryKeyColumn = new TreeSet<Object>();
|
||||||
|
primaryKeyDisplay = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an optionally visible primary key column. This becomes the unique identifier for every column in the table, and will always be printed as the first column.
|
||||||
|
*
|
||||||
|
* @param primaryKeyName the name of the primary key column
|
||||||
|
*/
|
||||||
|
public void addPrimaryKey(String primaryKeyName, boolean display) {
|
||||||
|
if (!isValidName(primaryKeyName)) {
|
||||||
|
throw new ReviewedStingException("Attempted to set a GATKReportTable primary key name of '" + primaryKeyName + "'. GATKReportTable primary key names must be purely alphanumeric - no spaces or special characters are allowed.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.primaryKeyName = primaryKeyName;
|
||||||
|
|
||||||
|
primaryKeyColumn = new TreeSet<Object>();
|
||||||
|
primaryKeyDisplay = display;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -126,6 +170,10 @@ public class GATKReportTable {
|
||||||
* @param defaultValue the default value for the column
|
* @param defaultValue the default value for the column
|
||||||
*/
|
*/
|
||||||
public void addColumn(String columnName, Object defaultValue) {
|
public void addColumn(String columnName, Object defaultValue) {
|
||||||
|
if (!isValidName(columnName)) {
|
||||||
|
throw new ReviewedStingException("Attempted to set a GATKReportTable column name of '" + columnName + "'. GATKReportTable column names must be purely alphanumeric - no spaces or special characters are allowed.");
|
||||||
|
}
|
||||||
|
|
||||||
addColumn(columnName, defaultValue, true);
|
addColumn(columnName, defaultValue, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -467,12 +515,19 @@ public class GATKReportTable {
|
||||||
// Emit the table definition
|
// Emit the table definition
|
||||||
out.printf("##:GATKReport.v0.1 %s : %s%n", tableName, tableDescription);
|
out.printf("##:GATKReport.v0.1 %s : %s%n", tableName, tableDescription);
|
||||||
|
|
||||||
// Emit the table header
|
// Emit the table header, taking into account the padding requirement if the primary key is a hidden column
|
||||||
|
boolean needsPadding = false;
|
||||||
|
if (primaryKeyDisplay) {
|
||||||
out.printf(primaryKeyFormat, primaryKeyName);
|
out.printf(primaryKeyFormat, primaryKeyName);
|
||||||
|
needsPadding = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (String columnName : columns.keySet()) {
|
for (String columnName : columns.keySet()) {
|
||||||
if (columns.get(columnName).isDisplayable()) {
|
if (columns.get(columnName).isDisplayable()) {
|
||||||
out.printf(" " + columnWidths.get(columnName), columnName);
|
if (needsPadding) { out.printf(" "); }
|
||||||
|
out.printf(columnWidths.get(columnName), columnName);
|
||||||
|
|
||||||
|
needsPadding = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -480,12 +535,20 @@ public class GATKReportTable {
|
||||||
|
|
||||||
// Emit the table body
|
// Emit the table body
|
||||||
for (Object primaryKey : primaryKeyColumn) {
|
for (Object primaryKey : primaryKeyColumn) {
|
||||||
|
needsPadding = false;
|
||||||
|
if (primaryKeyDisplay) {
|
||||||
out.printf(primaryKeyFormat, primaryKey);
|
out.printf(primaryKeyFormat, primaryKey);
|
||||||
|
needsPadding = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (String columnName : columns.keySet()) {
|
for (String columnName : columns.keySet()) {
|
||||||
if (columns.get(columnName).isDisplayable()) {
|
if (columns.get(columnName).isDisplayable()) {
|
||||||
Object obj = columns.get(columnName).getWithoutSideEffects(primaryKey);
|
Object obj = columns.get(columnName).getWithoutSideEffects(primaryKey);
|
||||||
out.printf(" " + columnWidths.get(columnName), obj.toString());
|
|
||||||
|
if (needsPadding) { out.printf(" "); }
|
||||||
|
out.printf(columnWidths.get(columnName), obj.toString());
|
||||||
|
|
||||||
|
needsPadding = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue