Changeset 4931


Ignore:
Timestamp:
May 14, 2009, 1:16:12 PM (12 years ago)
Author:
Nicklas Nordborg
Message:

References #742: Refactor BioAssaySetExporter?

This fixes the web services by depracating the on-the-fly export and adding new methods for downloading pre-generated BASE files.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/test/TestBioAsssaySetExporter.java

    r4925 r4931  
    2626import net.sf.basedb.core.BioAssaySet;
    2727import net.sf.basedb.core.Config;
     28import net.sf.basedb.core.DataFileType;
    2829import net.sf.basedb.core.DbControl;
    29 import net.sf.basedb.core.Directory;
    3030import net.sf.basedb.core.Experiment;
    3131import net.sf.basedb.core.File;
     32import net.sf.basedb.core.FileStoreUtil;
    3233import net.sf.basedb.core.Formula;
    3334import net.sf.basedb.core.Item;
     
    3940import net.sf.basedb.core.Reporter;
    4041import net.sf.basedb.core.ReporterBatcher;
    41 import net.sf.basedb.core.SystemItems;
    4242import net.sf.basedb.core.Type;
    4343import net.sf.basedb.core.VirtualColumn;
     
    102102
    103103    int experiment = 0;
    104     int fileSerialNoMerge = test_createFile("serial.nomerge.txt");
    105     int fileSerialMerge = test_createFile("serial.merge.txt");
    106     int fileMatrixNoMerge = test_createFile("matrix.nomerge.txt");
    107     int fileMatrixMerge = test_createFile("matrix.merge.txt");
     104    int fileSerialNoMerge = TestFile.test_create("serial.nomerge.txt", false, false);
     105    int fileSerialMerge = TestFile.test_create("serial.merge.txt", false, false);
     106    int fileMatrixNoMerge = TestFile.test_create("matrix.nomerge.txt", false, false);
     107    int fileMatrixMerge = TestFile.test_create("matrix.merge.txt", false, false);
    108108    int bas = 0;
    109109    if (ok)
     
    115115      bas = TestExperiment.test_create_root_bioassayset_using_calculator(experiment, "medianfg", new int[] {rba1, rba2});
    116116     
    117       test_exportBaseFile(bas, fileSerialNoMerge, false, false);
    118       test_exportBaseFile(bas, fileSerialMerge, false, true);
    119       test_exportBaseFile(bas, fileMatrixNoMerge, true, false);
    120       test_exportBaseFile(bas, fileMatrixMerge, true, true);
     117      test_exportBaseFile(bas, fileSerialNoMerge, false, false, true);
     118      test_exportBaseFile(bas, fileSerialMerge, false, true, true);
     119      test_exportBaseFile(bas, fileMatrixNoMerge, true, false, true);
     120      test_exportBaseFile(bas, fileMatrixMerge, true, true, true);
    121121    }
    122122   
     
    247247  }
    248248 
    249   private static int test_createFile(String name)
    250   {
    251     DbControl dc = null;
    252     int id = 0;
    253     try
    254     {
    255       dc = TestUtil.getDbControl();
    256       File file = File.getNew(dc, Directory.getById(dc, SystemItems.getId(Directory.ROOT)));
    257       file.setName(name);
    258       dc.saveItem(file);
    259       dc.commit();
    260       id = file.getId();
    261     }
    262     catch (Throwable ex)
    263     {
    264       write("--Create file FAILED");
    265       ex.printStackTrace();
    266       ok = false;
    267     }
    268     finally
    269     {
    270       if (dc != null) dc.close();
    271     }
    272     return id;
    273   }
    274  
    275249  private static int test_createRawBioAssay(String name, int annotationTypeId, String annotationValue)
    276250  {
     
    367341    The BioAssaySet thats beeing tested must be the one created by this class.
    368342   */
    369   private static void test_exportBaseFile(int bioAssaySetId, int fileId, boolean matrix, boolean mergeReporters)
     343  static void test_exportBaseFile(int bioAssaySetId, int fileId,
     344      boolean matrix, boolean mergeReporters, boolean verify)
    370345  {
    371346    DbControl dc = null;
     
    416391      bfe.addSpotFields(spotFields);
    417392     
    418       //Spots section
    419393      bfe.doExport();
     394      FileStoreUtil.setDataFile(dc, bas,
     395          matrix ? DataFileType.BASEFILE_MATRIX : DataFileType.BASEFILE_SERIAL,
     396          file);
    420397      if (!TestUtil.getSilent()) write("");
    421398      dc.commit();
    422399     
    423400      // Now it is time to test if the result is what we expected
    424       dc = TestUtil.getDbControl();
    425       ffp = new FlatFileParser();
    426       ffp.setSectionRegexp(Pattern.compile("section[\\t](.*)"));
    427       ffp.setHeaderRegexp(Pattern.compile("(.*?)\\t(.*)"));
    428       ffp.setDataHeaderRegexp(Pattern.compile("%"));
    429       ffp.setDataFooterRegexp(Pattern.compile("^$"));
    430       ffp.setDataSplitterRegexp(Pattern.compile("\\t"));
    431       ffp.setInputStream(file.getDownloadStream(0), Config.getCharset());
    432       ffp.setUseNullIfEmpty(false);
    433 
    434       List<Pattern[]> rowPatterns;
    435      
    436       // Test BASEfile marker
    437       ffp.parseHeaders();
    438       TestFlatFileParser.testLine(ffp.getLine(0), "BASEfile");
    439 
    440       // Test settings section
    441       TestFlatFileParser.testSection(ffp.nextSection(), "settings");
    442       ffp.parseHeaders();
    443       TestFlatFileParser.testHeaderLine(ffp.getLine(0), "b", "some parameter");
    444       TestFlatFileParser.testHeaderLine(ffp.getLine(1), "a", "some other parameter");
    445 
    446       // Test assays section
    447       Line section = ffp.nextSection();
    448       TestFlatFileParser.testSection(section, "assays");
    449       ffp.parseHeaders();
    450       TestFlatFileParser.testHeaderLine(ffp.getLine(0), "columns", "\\t", "id", "name", "testExportAnnotation");
    451       TestFlatFileParser.testHeaderLine(ffp.getLine(1), "annotationColumns", "\\t", "testExportAnnotation");
    452       TestFlatFileParser.testHeaderLine(ffp.getLine(2), "count", "2");
    453       rowPatterns = new ArrayList<Pattern[]>(2);
    454       rowPatterns.add(null);
    455       rowPatterns.add(null);
    456       TestFlatFileParser.testDataSection(ffp, rowPatterns, section);
    457      
    458       // Test spot section(s)
    459       int numOfSections = matrix ? 1 : (int) bas.getBioAssays().count(dc);
    460       String spotsCount;
    461       if (matrix)
     401      if (verify)
    462402      {
    463         spotsCount = mergeReporters ? "2" : "6";
    464       }
    465       else
    466       {
    467         spotsCount = mergeReporters ? "2" : "5";
    468       }
    469      
    470       rowPatterns.clear();
    471       if (mergeReporters)
    472       {
    473         Pattern[] p = new Pattern[matrix ? 11 : 7];
    474         p[0] = Pattern.compile("\\d+"); // Reporter id
    475         p[1] = Pattern.compile("exportreporter\\d"); // Reporter name
    476         p[2] = Pattern.compile("[123456]"); // Position
    477         p[3] = Pattern.compile("[14](\\.0)?"); // spot intensity
    478         p[4] = Pattern.compile(""); // row
    479         p[5] = p[4];            // flags
    480         p[6] = Pattern.compile("0\\.5"); // Ratio
     403        dc = TestUtil.getDbControl();
     404        ffp = new FlatFileParser();
     405        ffp.setSectionRegexp(Pattern.compile("section[\\t](.*)"));
     406        ffp.setHeaderRegexp(Pattern.compile("(.*?)\\t(.*)"));
     407        ffp.setDataHeaderRegexp(Pattern.compile("%"));
     408        ffp.setDataFooterRegexp(Pattern.compile("^$"));
     409        ffp.setDataSplitterRegexp(Pattern.compile("\\t"));
     410        ffp.setInputStream(file.getDownloadStream(0), Config.getCharset());
     411        ffp.setUseNullIfEmpty(false);
     412 
     413        List<Pattern[]> rowPatterns;
     414       
     415        // Test BASEfile marker
     416        ffp.parseHeaders();
     417        TestFlatFileParser.testLine(ffp.getLine(0), "BASEfile");
     418 
     419        // Test settings section
     420        TestFlatFileParser.testSection(ffp.nextSection(), "settings");
     421        ffp.parseHeaders();
     422        TestFlatFileParser.testHeaderLine(ffp.getLine(0), "b", "some parameter");
     423        TestFlatFileParser.testHeaderLine(ffp.getLine(1), "a", "some other parameter");
     424 
     425        // Test assays section
     426        Line section = ffp.nextSection();
     427        TestFlatFileParser.testSection(section, "assays");
     428        ffp.parseHeaders();
     429        TestFlatFileParser.testHeaderLine(ffp.getLine(0), "columns", "\\t", "id", "name", "testExportAnnotation");
     430        TestFlatFileParser.testHeaderLine(ffp.getLine(1), "annotationColumns", "\\t", "testExportAnnotation");
     431        TestFlatFileParser.testHeaderLine(ffp.getLine(2), "count", "2");
     432        rowPatterns = new ArrayList<Pattern[]>(2);
     433        rowPatterns.add(null);
     434        rowPatterns.add(null);
     435        TestFlatFileParser.testDataSection(ffp, rowPatterns, section);
     436       
     437        // Test spot section(s)
     438        int numOfSections = matrix ? 1 : (int) bas.getBioAssays().count(dc);
     439        String spotsCount;
    481440        if (matrix)
    482441        {
    483           for (int i = 7; i < 11; ++i) // Repeat for second assay
    484           {
    485             p[i] = p[i-4];
    486           }
    487         }
    488         rowPatterns.add(p);
    489         rowPatterns.add(p);
    490       }
    491       else
    492       {
    493         if (matrix)
    494         {
    495           Pattern[] p1 = new Pattern[11];
    496           p1[0] = Pattern.compile("\\d+"); // Reporter id
    497           p1[1] = Pattern.compile("exportreporter\\d"); // Reporter name
    498           p1[2] = Pattern.compile("[1234]");  // Position
    499           p1[3] = Pattern.compile("1?(\\.0)?");  // Spot intensity
    500           p1[4] = Pattern.compile("[01]");  // Row
    501           p1[5] = Pattern.compile("0"); // Flags
    502           p1[6] = Pattern.compile("0\\.5");  // Ratio
    503          
    504           Pattern[] p2 = new Pattern[11];
    505           p2[0] = p1[0];
    506           p2[1] = p1[1];
    507           p2[2] = Pattern.compile("[56]");  // Position
    508           p2[3] = Pattern.compile("(10(\\.0)?)|");  // Spot intensity
    509           p2[4] = Pattern.compile("2|");  // Row
    510           p2[5] = Pattern.compile("-50|");  // Flags
    511           p2[6] = Pattern.compile("0\\.5|"); //Ratio
    512           for (int i = 7; i < 11; ++i)
    513           {
    514             p1[i] = p1[i-4];
    515             p2[i] = p2[i-4];
    516           }
    517           rowPatterns.add(p1);
    518           rowPatterns.add(p1);
    519           rowPatterns.add(p1);
    520           rowPatterns.add(p1);
    521           rowPatterns.add(p2);
    522           rowPatterns.add(p2);
     442          spotsCount = mergeReporters ? "2" : "6";
    523443        }
    524444        else
    525445        {
    526           Pattern[] p = new Pattern[7];
     446          spotsCount = mergeReporters ? "2" : "5";
     447        }
     448       
     449        rowPatterns.clear();
     450        if (mergeReporters)
     451        {
     452          Pattern[] p = new Pattern[matrix ? 11 : 7];
    527453          p[0] = Pattern.compile("\\d+"); // Reporter id
    528454          p[1] = Pattern.compile("exportreporter\\d"); // Reporter name
    529455          p[2] = Pattern.compile("[123456]"); // Position
    530           p[3] = Pattern.compile("10?(\\.0)?");  // Spot intensity
    531           p[4] = Pattern.compile("[012]");  // Row
    532           p[5] = Pattern.compile("(0)|(-50)");  // Flags
    533           p[6] = Pattern.compile("0\\.5");  // Ratio
    534           rowPatterns.add(p);
    535           rowPatterns.add(p);
    536           rowPatterns.add(p);
     456          p[3] = Pattern.compile("[14](\\.0)?"); // spot intensity
     457          p[4] = Pattern.compile(""); // row
     458          p[5] = p[4];            // flags
     459          p[6] = Pattern.compile("0\\.5"); // Ratio
     460          if (matrix)
     461          {
     462            for (int i = 7; i < 11; ++i) // Repeat for second assay
     463            {
     464              p[i] = p[i-4];
     465            }
     466          }
    537467          rowPatterns.add(p);
    538468          rowPatterns.add(p);
    539469        }
    540       }
    541 
    542       section = ffp.nextSection();
    543       int sectionIndex = 0;
    544       while (section != null)
    545       {
    546         TestFlatFileParser.testSection(section, "spots");
    547         ffp.parseHeaders();
    548         List<String> expectedAssays = new ArrayList<String>();
    549         if (matrix)
     470        else
    550471        {
    551           for (BioAssay ba : assays)
     472          if (matrix)
    552473          {
    553             expectedAssays.add(Integer.toString(ba.getId()));
     474            Pattern[] p1 = new Pattern[11];
     475            p1[0] = Pattern.compile("\\d+"); // Reporter id
     476            p1[1] = Pattern.compile("exportreporter\\d"); // Reporter name
     477            p1[2] = Pattern.compile("[1234]");  // Position
     478            p1[3] = Pattern.compile("1?(\\.0)?");  // Spot intensity
     479            p1[4] = Pattern.compile("[01]");  // Row
     480            p1[5] = Pattern.compile("0"); // Flags
     481            p1[6] = Pattern.compile("0\\.5");  // Ratio
     482           
     483            Pattern[] p2 = new Pattern[11];
     484            p2[0] = p1[0];
     485            p2[1] = p1[1];
     486            p2[2] = Pattern.compile("[56]");  // Position
     487            p2[3] = Pattern.compile("(10(\\.0)?)|");  // Spot intensity
     488            p2[4] = Pattern.compile("2|");  // Row
     489            p2[5] = Pattern.compile("-50|");  // Flags
     490            p2[6] = Pattern.compile("0\\.5|"); //Ratio
     491            for (int i = 7; i < 11; ++i)
     492            {
     493              p1[i] = p1[i-4];
     494              p2[i] = p2[i-4];
     495            }
     496            rowPatterns.add(p1);
     497            rowPatterns.add(p1);
     498            rowPatterns.add(p1);
     499            rowPatterns.add(p1);
     500            rowPatterns.add(p2);
     501            rowPatterns.add(p2);
     502          }
     503          else
     504          {
     505            Pattern[] p = new Pattern[7];
     506            p[0] = Pattern.compile("\\d+"); // Reporter id
     507            p[1] = Pattern.compile("exportreporter\\d"); // Reporter name
     508            p[2] = Pattern.compile("[123456]"); // Position
     509            p[3] = Pattern.compile("10?(\\.0)?");  // Spot intensity
     510            p[4] = Pattern.compile("[012]");  // Row
     511            p[5] = Pattern.compile("(0)|(-50)");  // Flags
     512            p[6] = Pattern.compile("0\\.5");  // Ratio
     513            rowPatterns.add(p);
     514            rowPatterns.add(p);
     515            rowPatterns.add(p);
     516            rowPatterns.add(p);
     517            rowPatterns.add(p);
    554518          }
    555519        }
    556         else
     520 
     521        section = ffp.nextSection();
     522        int sectionIndex = 0;
     523        while (section != null)
    557524        {
    558           expectedAssays.add(Integer.toString(assays.get(sectionIndex).getId()));
     525          TestFlatFileParser.testSection(section, "spots");
     526          ffp.parseHeaders();
     527          List<String> expectedAssays = new ArrayList<String>();
     528          if (matrix)
     529          {
     530            for (BioAssay ba : assays)
     531            {
     532              expectedAssays.add(Integer.toString(ba.getId()));
     533            }
     534          }
     535          else
     536          {
     537            expectedAssays.add(Integer.toString(assays.get(sectionIndex).getId()));
     538          }
     539          TestFlatFileParser.testHeaderLine(ffp.getLine(0), "channels", "2");
     540          TestFlatFileParser.testHeaderLine(ffp.getLine(1), "assays", "\\t", expectedAssays);
     541          TestFlatFileParser.testHeaderLine(ffp.getLine(2), "columns", "\\t", "id", "name", "position", "assayData");
     542          TestFlatFileParser.testHeaderLine(ffp.getLine(3), "assayFields", "\\t", "intensity1", "row", "flags", "Ratio, ch1 / ch2");
     543          TestFlatFileParser.testHeaderLine(ffp.getLine(4), "count", spotsCount);
     544          TestFlatFileParser.testDataSection(ffp, rowPatterns, section);
     545         
     546          section = ffp.nextSection();
     547          sectionIndex++;
    559548        }
    560         TestFlatFileParser.testHeaderLine(ffp.getLine(0), "channels", "2");
    561         TestFlatFileParser.testHeaderLine(ffp.getLine(1), "assays", "\\t", expectedAssays);
    562         TestFlatFileParser.testHeaderLine(ffp.getLine(2), "columns", "\\t", "id", "name", "position", "assayData");
    563         TestFlatFileParser.testHeaderLine(ffp.getLine(3), "assayFields", "\\t", "intensity1", "row", "flags", "Ratio, ch1 / ch2");
    564         TestFlatFileParser.testHeaderLine(ffp.getLine(4), "count", spotsCount);
    565         TestFlatFileParser.testDataSection(ffp, rowPatterns, section);
    566        
    567         section = ffp.nextSection();
    568         sectionIndex++;
    569549      }
    570550      write("--Exporting basefile [matrix:"+matrix+", mergeReporters:"+mergeReporters+"] SUCCEEDED");
  • trunk/src/test/TestWebservices.java

    r4917 r4931  
    2020  along with BASE. If not, see <http://www.gnu.org/licenses/>.
    2121*/
    22 import net.sf.basedb.core.BioAssaySet;
     22
    2323import net.sf.basedb.core.Config;
    2424import net.sf.basedb.core.DataFileType;
    2525import net.sf.basedb.core.DbControl;
    26 import net.sf.basedb.core.Formula;
    2726import net.sf.basedb.core.Item;
    28 import net.sf.basedb.core.ItemQuery;
    2927import net.sf.basedb.core.Platform;
    3028import net.sf.basedb.core.Type;
    31 import net.sf.basedb.core.query.Expressions;
    32 import net.sf.basedb.core.query.Hql;
    33 import net.sf.basedb.core.query.Restrictions;
    3429import net.sf.basedb.info.AnnotationInfo;
    3530import net.sf.basedb.info.AnnotationTypeInfo;
     
    5954import java.io.InputStream;
    6055import java.io.OutputStream;
    61 import java.util.ArrayList;
    6256import java.util.Arrays;
    6357
     
    112106    TestExperiment.test_add_rawbioassay(experimentId1, rawBioAssayId2);
    113107    int rootBioAssaySetId1 = TestExperiment.test_create_root_bioassayset_using_calculator(experimentId1, "mean", rawBioAssayId1, rawBioAssayId2);
     108   
     109    // Export BASEfile:s
     110    int serialId = TestFile.test_create("serial.txt", false, false);
     111    int matrixId = TestFile.test_create("matrix.txt", false, false);
     112    TestBioAsssaySetExporter.test_exportBaseFile(rootBioAssaySetId1, serialId, false, false, false);
     113    TestBioAsssaySetExporter.test_exportBaseFile(rootBioAssaySetId1, matrixId, true, false, false);
    114114   
    115115    //Experiment with rawdata and array design stored in files.
     
    172172    TestFile.test_delete(cdfId);
    173173    TestFile.test_delete(celId);
     174    TestFile.test_delete(serialId);
     175    TestFile.test_delete(matrixId);
    174176   
    175177    TestAnnotationType.test_delete(factorId1);
     
    191193    <ul>
    192194      <li>Get bioassaysets in an experiment
    193       <li>Get available export formats
    194       <li>Download BioAssaySet in each available format.
     195      <li>Get available data files
     196      <li>Download each available data file
    195197    </ul>
    196198      @param client A logged in client.
     
    221223    try
    222224    {
    223       String[] exportFormats = basClient.getExportFormats();
    224       if (exportFormats == null)
    225       {
    226         write ("--BioAssaySetClient: Getting availble export formats FAILED");
    227         ok = false;
     225      DataFileTypeInfo[] dataFiles = basClient.getDataFileTypes(bioAssaySetId, null);
     226      if (dataFiles == null)
     227      {
     228        throw new Exception("Cant find formula any data files on bioassay set with id = " + bioAssaySetId);
    228229      }
    229230      else
     
    231232     
    232233        dc = TestUtil.getDbControl();
     234        /*
    233235        BioAssaySet bas = BioAssaySet.getById(dc, bioAssaySetId);
    234236       
     
    255257        String[] spotFields = new String[spot.size()];
    256258        boolean mergeReporters = false;
    257        
    258         for (String format : exportFormats)
    259         {
    260           File receivedFile = new File(format);
     259        */
     260        for (DataFileTypeInfo info : dataFiles)
     261        {
     262          File receivedFile = new File(info.getExternalId());
    261263          OutputStream out = new FileOutputStream(receivedFile);
    262           System.out.print("--Download BioAssaySet in file format " + format + "...");
    263           InputStream in = basClient.downloadBioAssaySet(
    264               bioAssaySetId, format, rep.toArray(reporterFields), spot.toArray(spotFields), mergeReporters);
     264          System.out.print("--Downloading BioAssaySet in file format: " + info.getExternalId() + "...");
     265          InputStream in = basClient.downloadDataFile(bioAssaySetId, info.getExternalId());
    265266          if (in == null)
    266267          {
     
    570571    {
    571572      write("--Create/login session FAILED");
    572       write("--Skipping webservices test.");
    573573      t.printStackTrace();
    574574      return null;
     
    594594    {
    595595      client.logout();
    596           write("--Logout OK");
     596        write("--Logout OK");
    597597    }
    598598    catch (Throwable t)
  • trunk/src/webservices/client/java/net/sf/basedb/ws/client/BioAssaySetClient.java

    r4513 r4931  
    2424import java.io.IOException;
    2525import java.io.InputStream;
     26
     27import net.sf.basedb.info.DataFileTypeInfo;
     28import net.sf.basedb.info.QueryOptions;
    2629
    2730import org.apache.axis2.AxisFault;
     
    5659      @return An array with the formats.
    5760      @throws AxisFault If communication with the service fails.
    58    */
     61      @deprecated In 2.12. Use {@link #getDataFileTypes(int, QueryOptions)} instead.
     62  */
    5963  public String[] getExportFormats()
    6064    throws AxisFault
     
    7579      @throws AxisFault If communication with services fails.
    7680      @throws IOException If accessing the file files.
    77    */
     81      @deprecated In 2.12.
     82        See {@link net.sf.basedb.ws.server.BioAssaySetService#downloadBioAssaySet(String, int, String, String[], String[], Boolean)}
     83        for more information. Use {@link #downloadDataFile(int, String)} instead.
     84  */
    7885  public InputStream downloadBioAssaySet(int bioAssaySetId, String format,
    7986      String[] reporterFields, String[] spotFields, boolean mergeReporters)
     
    95102      );     
    96103  }
     104 
     105  /**
     106    Returns if a bioassay set has spot data in the form of files that
     107    can be downloaded or not.
     108      @param bioAssaySetId Id of the bioassay set it concerns.
     109      @return TRUE if there are data to be downloaded, FALSE otherwise.
     110      @throws AxisFault If the communication with the webservice fails.
     111      @since 2.12
     112   */
     113  public Boolean hasDownloadableData(int bioAssaySetId)
     114    throws AxisFault
     115  {
     116    return invokeBlocking
     117      (
     118        "hasDownloadableData",
     119        Boolean.class,
     120        session.getId(),
     121        bioAssaySetId
     122      );
     123  }
     124
     125  /**
     126    Returns information about data file types that are used storing
     127    spot data for a bioassay set.
     128      @param bioAssaySetId Id of the bioassay set to get the information about.
     129      @param qOpt Restrictions and includes to put on the query when getting the information.
     130      @return An array of DataFileTypeInfo, one for each data file type used in the raw bioassay.
     131      @throws AxisFault If communication with webservice fails.
     132      @since 2.12
     133  */
     134  public DataFileTypeInfo[] getDataFileTypes(int bioAssaySetId, QueryOptions qOpt)
     135    throws AxisFault
     136  {
     137    return invokeBlocking
     138      (
     139        "getDataFileTypes",
     140        DataFileTypeInfo[].class,
     141        session.getId(),
     142        bioAssaySetId,
     143        qOpt
     144      );
     145  }
     146
     147  /**
     148    Gets spot data as a file for a bioassay set if it is stored in a file
     149    in BASE.
     150      @param bioAssaySetId Id of bioassay set to get the file from
     151      @param dataFileType The external ID of the data file type to download
     152      @return An InputStream to read the file data from, or null
     153        if no file of the specified type exists
     154      @throws AxisFault If communication with webservices fails.
     155      @throws IOException If writing to the target file fails.
     156      @since 2.12
     157  */
     158  public InputStream downloadDataFile(int bioAssaySetId, String dataFileType)
     159    throws AxisFault, IOException
     160  {
     161    RPCServiceClient service = getService();
     162    Options options = service.getOptions();   
     163    options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
     164    service.setOptions(options);
     165    return invokeFileBlocking
     166      (
     167        "downloadDataFile",
     168        session.getId(),
     169        bioAssaySetId,
     170        dataFileType
     171      );
     172  }
     173
     174 
    97175}
  • trunk/src/webservices/server/net/sf/basedb/ws/server/BioAssaySetService.java

    r4802 r4931  
    2424import net.sf.basedb.core.BaseException;
    2525import net.sf.basedb.core.BioAssaySet;
     26import net.sf.basedb.core.DataFileType;
    2627import net.sf.basedb.core.DbControl;
     28import net.sf.basedb.core.FileSet;
     29import net.sf.basedb.core.FileSetMember;
     30import net.sf.basedb.core.ItemQuery;
    2731import net.sf.basedb.core.SessionControl;
    2832import net.sf.basedb.info.AnnotationInfo;
    29 import net.sf.basedb.plugins.BioAssaySetExporter;
     33import net.sf.basedb.info.DataFileTypeInfo;
     34import net.sf.basedb.info.QueryOptions;
    3035
    3136import java.io.File;
     
    6570      @return A string-array with the available formats or
    6671        null if there is no active session.
    67    */
     72      @deprecated In 2.12. Use {@link #getDataFileTypes(String, int, QueryOptions)}
     73        instead
     74  */
    6875  public String[] getExportFormats(String ID)
    6976  {
     
    8289        Available formats are:
    8390        <ul>
    84           <li>{@value #MEV}
     91          <li>{@value #MEV} (deprecated in BASE 2.12). MeV support has been
     92            completely moved to the MeV extension (http://baseplugins.thep.lu.se/wiki/net.sf.basedb.mev)
     93            This web service will continue to
    8594          <li>{@value #SERIAL_BASEFILE}
    8695          <li>{@value #MATRIX_BASEFILE}
     
    92101      @return An OMElement containing the exported file or
    93102        NULL if there an exception is thrown.
    94    * @throws Exception If the data could not be exported to the file.
    95    */
     103    @throws Exception If the data could not be exported to the file.
     104    @deprecated In 2.12. Spot data should not be exported dynamically. Instead,
     105      plug-ins should be used and attach the result to the bioassay set and
     106      the files can then be downloaded when needed. Use
     107      {@link #downloadDataFile(String, int, String)} instead.
     108  */
    96109  @SuppressWarnings("unchecked")
    97110  public OMElement downloadBioAssaySet(String ID, int bioAssaySetId, String format, String[] reporterFieldArray,
     
    120133      fos = new FileOutputStream(exportFile);
    121134     
    122       BioAssaySetExporter exporter = new BioAssaySetExporter();
     135      net.sf.basedb.plugins.BioAssaySetExporter exporter =
     136        new net.sf.basedb.plugins.BioAssaySetExporter();
    123137      //Export to MeV-file format     
    124138      if (format.equals(MEV))
     
    151165    return elementWithAttachment;
    152166  }
     167 
     168  /**
     169    Returns a data file of a certain type attached to an OMElement.
     170      @param ID Used to identify an active session with.
     171      @param bioAssaySetId Id of the bioassay set the file belongs to.
     172      @param dataFileType The external ID of the file type.
     173      @return OMElement with the file attached, or NULL if no file was found.
     174      @see DataFileType
     175      @since 2.12
     176  */
     177  public OMElement downloadDataFile(String ID, int bioAssaySetId, String dataFileType)
     178  {
     179    SessionControl sc = getSessionControl(ID);
     180    DbControl dc = sc.newDbControl();
     181    OMElement toDownload = null;
     182    try
     183    {
     184      BioAssaySet bas = BioAssaySet.getById(dc, bioAssaySetId);
     185      if (bas.hasFileSet())
     186      {
     187        FileSet fileSet = bas.getFileSet();
     188        DataFileType type = DataFileType.getByExternalId(dc, dataFileType);
     189        if (fileSet.hasMember(type))
     190        {
     191          FileSetMember member = fileSet.getMember(type);
     192          BaseFileDataSource source = new BaseFileDataSource(member.getFile());
     193          toDownload = attachFile(source, "downloadFile");
     194        }
     195      }
     196    }
     197    finally
     198    {
     199      if (dc != null) dc.close();
     200    }   
     201    return toDownload;
     202   
     203  }
     204 
     205  /**
     206    Checks if the files has been attached to bioassay set.
     207      @param ID Used to identify an active session with
     208      @param bioAssaySetId Id of the bioassay set it concerns
     209      @return TRUE if there are files to download, FALSE otherwise.
     210      @since 2.12
     211  */
     212  public Boolean hasDownloadableData(String ID, int bioAssaySetId)
     213  {
     214    SessionControl sc = getSessionControl(ID);
     215    DbControl dc = sc.newDbControl();
     216    BioAssaySet bas = null;
     217    try
     218    {
     219      bas = BioAssaySet.getById(dc, bioAssaySetId);
     220    }
     221    finally
     222    {
     223      if (dc != null) dc.close();
     224    }
     225    return bas != null ? bas.hasFileSet() : false;
     226  }
     227
     228  /**
     229    Returns information objects for each DataFileType represented in the FileSet
     230    of a BioAssaySet.
     231      @param ID Id of the active session.
     232      @param bioAssaySetId Id of the bioassay set it concerns
     233    @param qOpt Restrictions and includes to put on the query
     234      @return An array with DataFileTypeInfo:s.
     235      @since 2.12
     236  */
     237  public DataFileTypeInfo[] getDataFileTypes(String ID, int bioAssaySetId, QueryOptions qOpt)
     238  {
     239    SessionControl sc = getSessionControl(ID);
     240    DbControl dc = sc.newDbControl();
     241    try
     242    {
     243      BioAssaySet bas = BioAssaySet.getById(dc, bioAssaySetId);
     244      if (bas.hasFileSet())
     245      {     
     246        ItemQuery<DataFileType> query = bas.getFileSet().getMemberTypes();
     247        query = util.getConfiguredItemQuery(query, qOpt);
     248        return util.listToInfo(query.list(dc), DataFileTypeInfo.class);
     249      }
     250    }
     251    finally
     252    {
     253      if (dc != null) dc.close();
     254    }
     255    return new DataFileTypeInfo[0];
     256  }
     257
    153258 
    154259  /**
Note: See TracChangeset for help on using the changeset viewer.