diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java index 7e2ff2d5fa403b0cfb41bfe9ca5252f445aeb508..4dc748e572b7abda9673ffae6cb28034cf09bdbb 100644 --- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java +++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java @@ -17,12 +17,19 @@ package ch.ethz.bsse.cisd.dsu.dss.plugins; import java.io.File; +import java.io.FileFilter; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Properties; +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractDatastorePlugin; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IReportingPluginTask; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.SimpleTableModelBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; @@ -36,6 +43,8 @@ public class IlluminaSummaryReportingPlugin extends AbstractDatastorePlugin impl { private static final long serialVersionUID = 1L; + private static final String SUMMARY_FILE_NAME = "Summary.xml"; + public IlluminaSummaryReportingPlugin(Properties properties, File storeRoot) { super(properties, storeRoot); @@ -44,8 +53,56 @@ public class IlluminaSummaryReportingPlugin extends AbstractDatastorePlugin impl public TableModel createReport(List<DatasetDescription> datasets) { SimpleTableModelBuilder builder = new SimpleTableModelBuilder(); - builder.addHeader("Test"); + builder.addHeader("Clusters"); + builder.addHeader("Clusters (PF)"); + builder.addHeader("Yield (kbases)"); + for (DatasetDescription dataset : datasets) + { + File originalData = getDataSubDir(dataset); + describe(builder, dataset, originalData); + } return builder.getTableModel(); } + private static void describe(SimpleTableModelBuilder builder, DatasetDescription dataset, + File originalData) + { + List<File> files = new ArrayList<File>(); + FileUtilities.findFiles(originalData, files, createIlluminaSummaryFileFilter()); + int size = files.size(); + if (size == 1) + { + File file = files.get(0); + IlluminaSummary summary = new IlluminaSummaryXMLLoader(false).readSummaryXML(file); + describeSummary(builder, summary); + } else + { + throw new EnvironmentFailureException(String.format( + "%s file was found for the dataset %s (%s).", (size == 0) ? "No summary" + : " More than one", dataset.getDatasetCode(), dataset.getSampleCode())); + } + } + + private static void describeSummary(SimpleTableModelBuilder builder, IlluminaSummary summary) + { + ChipResultsSummary chipResultSummary = summary.getChipResultsSummary(); + List<ISerializableComparable> row = + Arrays.<ISerializableComparable> asList( + new StringTableCell(chipResultSummary.getClusterCountPF()), + new StringTableCell(chipResultSummary.getClusterCountRaw()), + new StringTableCell(chipResultSummary.getYield())); + builder.addRow(row); + } + + private static FileFilter createIlluminaSummaryFileFilter() + { + return new FileFilter() + { + public boolean accept(File file) + { + return file.isFile() && file.getName().equals(SUMMARY_FILE_NAME); + } + }; + } + }