diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/AnalysisModuleScanner.java b/java/src/org/broadinstitute/sting/playground/utils/report/AnalysisModuleScanner.java
new file mode 100644
index 000000000..95f4a3746
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/AnalysisModuleScanner.java
@@ -0,0 +1,110 @@
+package org.broadinstitute.sting.playground.utils.report;
+
+import org.broadinstitute.sting.playground.utils.report.tags.Analysis;
+import org.broadinstitute.sting.playground.utils.report.tags.Datum;
+import org.broadinstitute.sting.playground.utils.report.tags.Param;
+import org.broadinstitute.sting.playground.utils.report.tags.Table;
+import org.broadinstitute.sting.utils.StingException;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @author aaron
+ *
+ * Class AnalysisModuleScanner
+ *
+ * Given an analysis, find the annotated fields and methods. Given this module and
+ * the object, a Mashalling object can serialize or deserialize a analysis module.
+ */
+public class AnalysisModuleScanner {
+
+ // what we extracted from the class
+ private Map parameters = new HashMap (); // the parameter annotations
+ private Map tables = new HashMap(); // the table annotations
+ private Map datums = new HashMap(); // the data we've discovered
+ private Analysis analysis; // the analysis annotation
+
+ // private storage of the class type
+ private final Class cls;
+
+ /**
+ * create a report scanner from the passed in class
+ * @param cls the target class, annotated with the @Analysis annotation
+ */
+ public AnalysisModuleScanner(Class cls) {
+ this.cls = cls;
+ scan(); // scan the passed in class
+ }
+
+ /**
+ * create a report scanner from the passed in class
+ * @param obj the target object, annotated with the @Analysis annotation
+ */
+ public AnalysisModuleScanner(Object obj) {
+ this.cls = obj.getClass();
+ scan(); // scan the passed in class
+ }
+
+ /** scan the class and find all appropriate fields and tables */
+ public void scan() {
+ if (cls == null || !cls.isAnnotationPresent(Analysis.class))
+ throw new StingException("The class passed in cannot be null, " + "" +
+ "and must contain the @Analysis annotation, class " + cls + " was the input");
+
+ // get the annotation off of the class
+ analysis = (Analysis) cls.getAnnotation(Analysis.class);
+ scanFields();
+ }
+
+ /**
+ * scan the fields of the class, extracting parameters and table annotations and their associated fields
+ */
+ private void scanFields() {
+ // get the fields from the class, and extract
+ for (Field f : cls.getDeclaredFields())
+ for (Annotation annotation : f.getAnnotations()) {
+ if (annotation.annotationType().equals(Param.class))
+ parameters.put((Param) annotation, f);
+ if (annotation.annotationType().equals(Table.class))
+ tables.put((Table) annotation, f);
+ if (annotation.annotationType().equals(Datum.class))
+ datums.put((Datum) annotation, f);
+ }
+ }
+
+ /**
+ *
+ * @return get the list of parameters we found
+ */
+ public Map getParameters() {
+ return parameters;
+ }
+
+ /**
+ *
+ * @return a list of table annotations found
+ */
+ public Map getTables() {
+ return tables;
+ }
+
+ /**
+ *
+ * @return a map of the datum annotations found
+ */
+ public Map getData() {
+ return datums;
+ }
+
+ /**
+ *
+ * @return the analysis annotation found
+ */
+ public Analysis getAnalysis() {
+ return analysis;
+ }
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/Marshaller.java b/java/src/org/broadinstitute/sting/playground/utils/report/Marshaller.java
new file mode 100644
index 000000000..4b82388e2
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/Marshaller.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010. The Broad Institute
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.broadinstitute.sting.playground.utils.report;
+
+import org.broadinstitute.sting.playground.utils.report.formats.OutputFormater;
+import org.broadinstitute.sting.playground.utils.report.tags.*;
+import org.broadinstitute.sting.utils.StingException;
+
+import java.util.Collection;
+
+/**
+ * @author aaron
+ *
+ * Class Marshaller
+ *
+ * Given an analysis scan, an object, and a formatter, this class emits
+ * a report to disk (or other source).
+ */
+public class Marshaller {
+ private String report;
+ private OutputFormater formatter;
+
+ /**
+ * create a report
+ * @param reportName the report name
+ * @param formater the formater to use
+ */
+ public void createReport(String reportName, OutputFormater formater) {
+ this.formatter = formater;
+ report = reportName;
+ formatter.startReport(report);
+ }
+
+ /**
+ * add an analysis module to the output source
+ * @param toMarshall the object to marshall
+ */
+ public void write(Object toMarshall) {
+ AnalysisModuleScanner moduleScanner = new AnalysisModuleScanner(toMarshall);
+ formatter.addAnalysis(moduleScanner.getAnalysis());
+ for (Param p : moduleScanner.getParameters().keySet())
+ try {
+ formatter.addParam(p, moduleScanner.getParameters().get(p).get(toMarshall).toString());
+ } catch (IllegalAccessException e) {
+ throw new StingException("Unable to access variable " + moduleScanner.getParameters().get(p), e);
+ }
+ for (Datum d : moduleScanner.getData().keySet())
+ try {
+ formatter.addDatum(d, moduleScanner.getData().get(d).get(toMarshall).toString());
+ } catch (IllegalAccessException e) {
+ throw new StingException("Unable to access variable " + moduleScanner.getParameters().get(d), e);
+ }
+ for (Table t : moduleScanner.getTables().keySet())
+ try {
+ formatter.addTable(t, new TableContainer((Collection) moduleScanner.getTables().get(t).get(toMarshall),t.columns()));
+ } catch (IllegalAccessException e) {
+ throw new StingException("Unable to access variable " + moduleScanner.getParameters().get(t), e);
+ }
+
+ }
+
+ public void endReport() {
+ formatter.endReport();
+ }
+
+
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/TableContainer.java b/java/src/org/broadinstitute/sting/playground/utils/report/TableContainer.java
new file mode 100644
index 000000000..2b2881125
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/TableContainer.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010. The Broad Institute
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.broadinstitute.sting.playground.utils.report;
+
+import java.util.*;
+
+
+/**
+ *
+ * @author aaron
+ *
+ * Class TableContainer
+ *
+ * represents a table of data, and formats according to column count. Do not use,
+ * needs improvement. This is a stand-in for something better.
+ */
+public class TableContainer {
+ private List tableEntries;
+ private int columns = 2; // default to two
+
+ public TableContainer(Collection tbl, int columns) {
+ tableEntries = new ArrayList();
+ if (tbl instanceof List || tbl instanceof Vector || tbl instanceof Set)
+ tableEntries.addAll(tbl);
+ if (tbl instanceof Map)
+ for (Object key : ((Map)tbl).keySet()) {
+ tableEntries.add(key);
+ tableEntries.add(((Map) tbl).get(key));
+ }
+ this.columns = columns;
+ }
+
+ public List> toRows() {
+ ArrayList> list = new ArrayList>();
+ List currentRow = new ArrayList();
+ for (Object obj : tableEntries) {
+ if (currentRow.size() >= columns) {
+ list.add(currentRow);
+ currentRow = new ArrayList();
+ }
+ currentRow.add(obj);
+ }
+ list.add(currentRow);
+ return list;
+ }
+
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/formats/OutputFormater.java b/java/src/org/broadinstitute/sting/playground/utils/report/formats/OutputFormater.java
new file mode 100644
index 000000000..e7117dce6
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/formats/OutputFormater.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010. The Broad Institute
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.broadinstitute.sting.playground.utils.report.formats;
+
+import org.broadinstitute.sting.playground.utils.report.TableContainer;
+import org.broadinstitute.sting.playground.utils.report.tags.*;
+
+
+/**
+ *
+ * @author aaron
+ *
+ * Class OutputFormater
+ *
+ * The formatter defines a perticular output format style. The formatter methods
+ * are required to be called in the following order:
+ *
+ * 1. startReport()
+ * 2. for each analysis module:
+ * addAnalysis()
+ * with many addParam(), addTable(), and addDatum() in no particular order promised
+ * 3. endReport()
+ */
+public interface OutputFormater {
+ /**
+ * start the report, given the report tag
+ * @param reportName the report name.
+ */
+ public void startReport(String reportName);
+
+ /**
+ * add an analysis to the report
+ * @param analysisTag the analysis tag
+ */
+ public void addAnalysis(Analysis analysisTag);
+
+ /**
+ * add a parameter value to the output location
+ * @param value
+ */
+ public void addParam(Param paramTag, String value);
+
+ /**
+ * add a parameter value to the output location
+ * @param value
+ */
+ public void addTable(Table tableTag, TableContainer value);
+
+ /**
+ * add a datum object to the output location
+ * @param value
+ */
+ public void addDatum(Datum datumTag, String value);
+
+ /**
+ * end the report
+ */
+ public void endReport();
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/formats/SimpleTextOutputer.java b/java/src/org/broadinstitute/sting/playground/utils/report/formats/SimpleTextOutputer.java
new file mode 100644
index 000000000..816b19ca8
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/formats/SimpleTextOutputer.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2010. The Broad Institute
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.broadinstitute.sting.playground.utils.report.formats;
+
+import org.broadinstitute.sting.playground.utils.report.TableContainer;
+import org.broadinstitute.sting.playground.utils.report.tags.*;
+import org.broadinstitute.sting.utils.StingException;
+
+import java.io.*;
+import java.util.List;
+
+
+/**
+ *
+ * @author aaron
+ *
+ * Class SimpleTextOutputer
+ *
+ * a very small demo of text output, just to use for testing and development
+ */
+public class SimpleTextOutputer implements OutputFormater {
+ protected PrintWriter out;
+ protected String terminator = "\n";
+ protected String spacer = "\t\t\t";
+ /**
+ * create a simple text output format given the output file
+ * @param outputFile
+ */
+ public SimpleTextOutputer(File outputFile) {
+ try {
+ FileOutputStream stream = new FileOutputStream(outputFile);
+ out = new PrintWriter(stream);
+ } catch (FileNotFoundException e) {
+ throw new StingException("Unable to find file ",e);
+ }
+ }
+
+ /**
+ * start the report, given the report tag
+ *
+ * @param reportTag the report tag, which describes the basics of the report
+ */
+ @Override
+ public void startReport(String reportTag) {
+ out.write("----------------" + reportTag + "----------------" + terminator);
+ }
+
+ /**
+ * add an analysis to the report
+ *
+ * @param analysisTag the analysis tag
+ */
+ @Override
+ public void addAnalysis(Analysis analysisTag) {
+ out.write("----------------" + analysisTag.name() + "----------------" + terminator);
+ out.write(String.format("Name%s%s%s",spacer,analysisTag.name(),terminator));
+ out.write(String.format("Description\t\t%s%s",analysisTag.description(),terminator));
+ out.write(String.format("Version%s%s%s",spacer,analysisTag.version(),terminator));
+ }
+
+ /**
+ * add a parameter value to the output location
+ *
+ * @param value
+ */
+ @Override
+ public void addParam(Param paramTag, String value) {
+ out.write(String.format("Param %s%s%s%s",paramTag.name(),spacer,value,terminator));
+ }
+
+ /**
+ * add a parameter value to the output location
+ *
+ * @param value
+ */
+ @Override
+ public void addTable(Table tableTag, TableContainer value) {
+ out.write(tableTag.name());
+ boolean first = false;
+ for (List row : value.toRows()) {
+ if (!first) first = true;
+ else out.write("\t");
+ out.write("\t\t");
+ for (Object obj: row) out.write(obj+",");
+ out.write(terminator);
+ }
+
+ }
+
+ /**
+ * add a datum object to the output location
+ *
+ * @param value
+ */
+ @Override
+ public void addDatum(Datum datumTag, String value) {
+ out.write("Datum "+datumTag.name()+spacer+value+terminator);
+ }
+
+ /**
+ * end the report
+ *
+ */
+ @Override
+ public void endReport() {
+ out.write("----------------" + "----------------" + terminator);
+ out.close();
+ }
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/tags/Analysis.java b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Analysis.java
new file mode 100644
index 000000000..0e2dea55b
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Analysis.java
@@ -0,0 +1,18 @@
+package org.broadinstitute.sting.playground.utils.report.tags;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author aaron
+ *
+ * Annotation Analysis
+ *
+ * the main annotation for analysis objects in the report system
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Analysis {
+ String name(); // the name of the analysis
+ String description(); // its description, required
+ String version() default "unversioned"; // the version, not always used
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/tags/Datum.java b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Datum.java
new file mode 100644
index 000000000..9ffcd1bb3
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Datum.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010. The Broad Institute
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.broadinstitute.sting.playground.utils.report.tags;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author aaron
+ *
+ * Annotation Datum
+ *
+ * The basic Datum annotation, for fields in an analysis that
+ * are to be output as data.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Datum {
+ String name(); // the name, required
+ String description(); // a description
+}
\ No newline at end of file
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/tags/Param.java b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Param.java
new file mode 100644
index 000000000..79530d215
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Param.java
@@ -0,0 +1,19 @@
+package org.broadinstitute.sting.playground.utils.report.tags;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author aaron
+ *
+ * Annotation Param
+ *
+ * a description annotation for a parameter; a variable used as input to the
+ * analysis, but not (nessasarally) an output. Some formats will store this
+ * information in comments, others will not include it.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Param {
+ String name() default ""; // the name, defaulted to the variable name
+ String description(); // the description of the parameter
+}
diff --git a/java/src/org/broadinstitute/sting/playground/utils/report/tags/Table.java b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Table.java
new file mode 100644
index 000000000..b2d1bf3de
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/playground/utils/report/tags/Table.java
@@ -0,0 +1,20 @@
+package org.broadinstitute.sting.playground.utils.report.tags;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author aaron
+ *
+ * Annotation Table
+ *
+ * tells the report system to make a table out of the annotated field. The field
+ * can be of type List<>, Map<>, Vector<>, Collection<> or primative array.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Table {
+ String name(); // the name
+ String header() default ""; // any text representing the table header
+ String description(); // a description of the table
+ int columns() default -1; // the number of columns to divide the data into
+}
diff --git a/java/test/org/broadinstitute/sting/playground/utils/report/AnalysisModuleScannerTest.java b/java/test/org/broadinstitute/sting/playground/utils/report/AnalysisModuleScannerTest.java
new file mode 100644
index 000000000..818c27e23
--- /dev/null
+++ b/java/test/org/broadinstitute/sting/playground/utils/report/AnalysisModuleScannerTest.java
@@ -0,0 +1,64 @@
+package org.broadinstitute.sting.playground.utils.report;
+
+import org.broadinstitute.sting.BaseTest;
+import org.broadinstitute.sting.playground.utils.report.tags.Analysis;
+import org.broadinstitute.sting.playground.utils.report.tags.Param;
+import org.broadinstitute.sting.playground.utils.report.tags.Table;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @author aaron
+ *
+ * Class AnalysisModuleScannerTest
+ *
+ * Test out the analysis scanner, which takes an analysis module and extracts out basic data
+ */
+public class AnalysisModuleScannerTest extends BaseTest {
+
+ @Test
+ public void testBasicScan() {
+ AnalysisModuleScanner scanner = new AnalysisModuleScanner(FakeAnalysis.class);
+
+ // check we found one param, and check its description
+ Assert.assertEquals(1, scanner.getParameters().size());
+ Assert.assertTrue("basic description".equals(scanner.getParameters().keySet().iterator().next().description()));
+
+ // check that we've found a table, and check its description
+ Assert.assertEquals(1, scanner.getTables().size());
+ Assert.assertTrue("Generate a table from this data".equals(scanner.getTables().keySet().iterator().next().description()));
+
+ // check that the analysis name and description were set
+ Assert.assertTrue("testAnalysis".equals(scanner.getAnalysis().name()));
+ Assert.assertTrue("The is just a simple description".equals(scanner.getAnalysis().description()));
+
+ }
+}
+
+// --------------------------------------------------------------------------------
+// my fake analysis class
+// --------------------------------------------------------------------------------
+@Analysis(name = "testAnalysis", description = "The is just a simple description")
+class FakeAnalysis {
+
+ @Param(description = "basic description")
+ public String text = "GRRR";
+
+ @Table(name="FakeTable", description = "Generate a table from this data",columns=3)
+ public List values = new ArrayList();
+
+ public FakeAnalysis() {
+ values.add(1);
+ values.add(2);
+ values.add(3);
+ values.add(4);
+ values.add(5);
+ values.add(6);
+
+ }
+
+}
diff --git a/java/test/org/broadinstitute/sting/playground/utils/report/MarshallerTest.java b/java/test/org/broadinstitute/sting/playground/utils/report/MarshallerTest.java
new file mode 100644
index 000000000..6475095fb
--- /dev/null
+++ b/java/test/org/broadinstitute/sting/playground/utils/report/MarshallerTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010. The Broad Institute
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.broadinstitute.sting.playground.utils.report;
+
+import org.broadinstitute.sting.BaseTest;
+import org.broadinstitute.sting.playground.utils.report.formats.SimpleTextOutputer;
+import org.junit.Test;
+
+import java.io.File;
+
+
+/**
+ *
+ * @author aaron
+ *
+ * Class MarshallerTest
+ *
+ * test out the marshaller
+ */
+public class MarshallerTest extends BaseTest {
+ @Test
+ public void testMarshalling() {
+ // output file
+ /*File fl = new File("testfile.txt");
+ fl.deleteOnExit();
+ Marshaller m = new Marshaller();
+ SimpleTextOutputer format = new SimpleTextOutputer(fl);
+ FakeAnalysis fa = new FakeAnalysis();
+
+ // start the marshall
+ m.createReport("Fake Report",format);
+ m.write(fa);
+ m.write(fa);
+ m.write(fa);
+ m.endReport();*/
+ }
+}