Changeset 5199


Ignore:
Timestamp:
Dec 15, 2009, 1:58:52 PM (13 years ago)
Author:
Nicklas Nordborg
Message:

References #1448: Implement BFS exporter for spot data

The exporter implementation should now be usable and it should be possible to start implementating the plug-in that will use this export.

Location:
trunk/src
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/util/export/spotdata/AbstractBioAssaySetExporter.java

    r5130 r5199  
    272272  {
    273273    RuntimeException e = null;
     274    validate();
    274275    try
    275276    {
     
    296297
    297298  /*
    298     Export methods to be implemented by subclasses
    299     ----------------------------------------------
    300   */
     299    Export methods that may be implemented by subclasses
     300    ----------------------------------------------------
     301  */
     302  /**
     303    Validate that all required options has been set and that other
     304    options have sensible values. Subclasses that override this method
     305    should call super.validate(). The default implementation will at least
     306    validate that a DbControl and a source bioassay set has been set.
     307    @since 2.15
     308  */
     309  protected void validate()
     310  {
     311    if (getDbControl() == null) throw new NullPointerException("getDbControl()");
     312    if (getSource() == null) throw new NullPointerException("getSource()");
     313  }
     314 
    301315  /**
    302316    Make preparations for the export. Subclasses that need to initialise
  • trunk/src/core/net/sf/basedb/util/export/spotdata/ExportableFieldFactory.java

    r4928 r5199  
    2626import net.sf.basedb.core.ExtraValueType;
    2727import net.sf.basedb.core.Formula;
     28import net.sf.basedb.core.Metadata;
    2829import net.sf.basedb.core.RawDataProperty;
    2930import net.sf.basedb.core.VirtualColumn;
     
    5253    AnnotationAssayField field = new AnnotationAssayField();
    5354    field.setAnnotationType(at);
     55    field.setFormatter(formatter);
     56    return field;
     57  }
     58 
     59  /**
     60    Create a property assay field. This field is used to export, for
     61    example, name and description, from the bioassay.
     62    @param property The property to export, see
     63      {@link Metadata#getPropertyValue(net.sf.basedb.core.DbControl, Object, String)}
     64      for more information about the syntax of this parameter.
     65    @param title The column title
     66    @param formatter A formatter or null
     67    @return An {@link AssayPropertyField} object
     68    @since 2.15
     69  */
     70  public static AssayPropertyField assayProperty(String property, String title,
     71    Formatter<?> formatter)
     72  {
     73    AssayPropertyField field = new AssayPropertyField();
     74    field.setProperty(property);
     75    field.setTitle(title);
    5476    field.setFormatter(formatter);
    5577    return field;
  • trunk/src/test/TestBioAsssaySetExporter.java

    r5060 r5199  
    2828import net.sf.basedb.core.DataFileType;
    2929import net.sf.basedb.core.DbControl;
     30import net.sf.basedb.core.Directory;
    3031import net.sf.basedb.core.Experiment;
    3132import net.sf.basedb.core.File;
     
    5152import net.sf.basedb.util.ConsoleProgressReporter;
    5253import net.sf.basedb.util.basefile.BaseFileWriter;
     54import net.sf.basedb.util.bfs.AnnotationWriter;
     55import net.sf.basedb.util.bfs.GenericBaseDataWriterFactory;
     56import net.sf.basedb.util.bfs.MetadataWriter;
     57import net.sf.basedb.util.export.spotdata.AssayField;
    5358import net.sf.basedb.util.export.spotdata.BaseFileExporter;
     59import net.sf.basedb.util.export.spotdata.BfsExporter;
    5460import net.sf.basedb.util.export.spotdata.DynamicField;
    5561import net.sf.basedb.util.export.spotdata.ExportableFieldFactory;
    5662import net.sf.basedb.util.export.spotdata.MatrixBaseFileExporter;
     63import net.sf.basedb.util.export.spotdata.MatrixBfsExporter;
    5764import net.sf.basedb.util.export.spotdata.SerialBaseFileExporter;
     65import net.sf.basedb.util.export.spotdata.SerialBfsExporter;
    5866import net.sf.basedb.util.parser.FlatFileParser;
    5967import net.sf.basedb.util.parser.FlatFileParser.Line;
     
    106114    int fileMatrixNoMerge = TestFile.test_create("matrix.nomerge.txt", false, false);
    107115    int fileMatrixMerge = TestFile.test_create("matrix.merge.txt", false, false);
     116    int bfsSerialDir = TestDirectory.test_create(true, "bfs-serial");
     117    int bfsMatrixDir = TestDirectory.test_create(true, "bfs-matrix");
    108118    int bas = 0;
    109119    if (ok)
     
    119129      test_exportBaseFile(bas, fileMatrixNoMerge, true, false, true);
    120130      test_exportBaseFile(bas, fileMatrixMerge, true, true, true);
     131     
     132      test_bfs_export(bas, bfsSerialDir, annotationType, false);
     133      test_bfs_export(bas, bfsMatrixDir, annotationType, true);
    121134    }
    122135   
     
    126139    TestRawBioAssay.test_delete(rba1);
    127140    TestRawBioAssay.test_delete(rba2);
     141    TestDirectory.test_delete(bfsSerialDir, true);
     142    TestDirectory.test_delete(bfsMatrixDir, true);
    128143    TestFile.test_delete(fileSerialNoMerge);
    129144    TestFile.test_delete(fileSerialMerge);
     
    548563        }
    549564      }
    550       write("--Exporting basefile [matrix:"+matrix+", mergeReporters:"+mergeReporters+"] SUCCEEDED");
     565      write("--Exporting basefile [matrix:"+matrix+", mergeReporters:"+mergeReporters+"] OK");
    551566    }
    552567    catch (Throwable ex)
     
    562577  }
    563578 
     579  static void test_bfs_export(int bioAssaySetId, int directoryId,
     580      int annotationTypeId, boolean matrix)
     581  {
     582    DbControl dc = null;
     583    FlatFileParser ffp = null;
     584    try
     585    {
     586      dc = TestUtil.getDbControl();
     587      BioAssaySet bas = BioAssaySet.getById(dc, bioAssaySetId);
     588      Directory dir = Directory.getById(dc, directoryId);
     589     
     590      // Create exporter
     591      BfsExporter bfs = matrix ? new MatrixBfsExporter() : new SerialBfsExporter();
     592      bfs.setDbControl(dc);
     593      bfs.setSource(bas);
     594      if (!TestUtil.getSilent()) bfs.setProgressReporter(new ConsoleProgressReporter());
     595
     596      // Create files and file factory
     597      File metadata = createFile(dc, dir, "metadata.txt");
     598      File reporter = createFile(dc, dir, "rdata.txt");
     599      File assay = createFile(dc, dir, "pdata.txt");
     600      bfs.setMetadataWriter(MetadataWriter.create(
     601          metadata.getUploadStream(false), metadata.getName()));
     602      bfs.setReporterAnnotationsWriter(AnnotationWriter.create(
     603          reporter.getUploadStream(false), reporter.getName()));
     604      bfs.setAssayAnnotationsWriter(AnnotationWriter.create(
     605          assay.getUploadStream(false), assay.getName()));
     606      bfs.setDataWriterFactory(new GenericBaseDataWriterFactory(dc, dir));
     607     
     608      // Parameters that go in the 'settings' section
     609      bfs.setParameter("b", "some parameter");
     610      bfs.setParameter("a", "some other parameter");
     611     
     612      // Configure the spot fields to export
     613      ItemQuery<Formula> ratio = Formula.getQuery(Formula.Type.COLUMN_EXPRESSION,
     614          bas.getRawDataType(), bas.getIntensityTransform());
     615      ratio.restrict(Restrictions.eq(Hql.property("name"), Expressions.string("Ratio, ch1 / ch2")));
     616      if (ratio.count(dc) < 1)
     617      {
     618        throw new Exception("Cant find formula 'Ratio, ch1 / ch2'");
     619      }
     620      List<DynamicField> spotFields = new ArrayList<DynamicField>();
     621      spotFields.add(ExportableFieldFactory.channel(1, "intensity1", null));
     622      spotFields.add(ExportableFieldFactory.rawData("row", null, Formula.AverageMethod.NONE, null));
     623      spotFields.add(ExportableFieldFactory.rawData("flags", null, Formula.AverageMethod.NONE, null));
     624      spotFields.add(ExportableFieldFactory.formula(ratio.list(dc).get(0), null, null));
     625      for (DynamicField field : spotFields)
     626      {
     627        bfs.addSpotField(field, Type.FLOAT);
     628      }
     629     
     630      // Configure the reporter fields to export
     631      List<DynamicField> reporterFields = new ArrayList<DynamicField>();
     632      reporterFields.add(ExportableFieldFactory.reporter("externalId", null, Formula.AverageMethod.NONE, null));
     633      reporterFields.add(ExportableFieldFactory.reporter("name", null, Formula.AverageMethod.NONE, null));
     634      reporterFields.add(ExportableFieldFactory.simple(Dynamic.column(VirtualColumn.POSITION), "position", Formula.AverageMethod.NONE, null));
     635      bfs.addReporterFields(reporterFields);
     636
     637      // Configure assay fields to export
     638      List<AssayField> assayFields = new ArrayList<AssayField>();
     639      assayFields.add(ExportableFieldFactory.assayProperty("name", "Name", null));
     640      if (annotationTypeId != 0)
     641      {
     642        AnnotationType at = AnnotationType.getById(dc, annotationTypeId);
     643        assayFields.add(ExportableFieldFactory.annotation(at, null));
     644      }
     645      bfs.addAssayFields(assayFields);
     646     
     647      bfs.doExport();
     648      if (!TestUtil.getSilent()) write("");
     649      dc.commit();
     650      write("--Exporting bfs [" + (matrix ? "matrix" : "serial") + "] OK");
     651    }
     652    catch (Throwable ex)
     653    {
     654      write("--Exporting bfs [" + (matrix ? "matrix" : "serial") + "] FAILED");
     655      ex.printStackTrace();
     656      ok = false;
     657    }
     658    finally
     659    {
     660      if (dc != null) dc.close();
     661    }
     662
     663  }
     664 
    564665  static void write(String message)
    565666  {
     
    567668  }
    568669 
     670  static File createFile(DbControl dc, Directory dir, String name)
     671  {
     672    File f = File.getNew(dc, dir);
     673    f.setName(name);
     674    f.setCharacterSet("UTF-8");
     675    f.setMimeType("text/plain");
     676    dc.saveItem(f);
     677    return f;
     678  }
     679 
    569680}
Note: See TracChangeset for help on using the changeset viewer.