Changeset 4776


Ignore:
Timestamp:
Feb 19, 2009, 12:51:49 PM (14 years ago)
Author:
Nicklas Nordborg
Message:

Merged patch release 2.9.3 to the trunk.

Location:
trunk
Files:
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/credits.txt

    r4720 r4776  
    2626USA.
    2727
    28 The current BASE team is (at BASE 2.9.2 release)
     28The current BASE team is (at BASE 2.9.3 release)
    2929
    3030Jari Häkkinen
  • trunk/src/clients/web/net/sf/basedb/clients/web/util/HTML.java

    r4673 r4776  
    8181    This pattern can be used to fins HTML tags. It will match both
    8282    start and end tags. The entire tag with attributes are put in the
    83     $1 group and the tag name in the $2 group.
    84   */
    85   public static final Pattern TAG_REGEXP = Pattern.compile("<(/?([a-zA-Z]+)[^>]*)>");
     83    $1 group, the tag name in the $2 group and the attributes in $3.
     84  */
     85  public static final Pattern TAG_REGEXP = Pattern.compile("<(/?([a-zA-Z]+)\\s*([^>]*))>");
    8686
    8787
     
    274274    Scans a string for HTML tags and replaces all &lt; and &gt; for tags
    275275    not found in the <code>safeTags</code> pattern with &amp;lt; and &amp;gt;
    276     respectively. Tags that are found in the <code>safeFags</code> pattern
     276    respectively. Tags that are found in the <code>safeTags</code> pattern
    277277    are not modified. Using this method is equivalent to
    278278    <code>encodeTags(in, Pattern.compile(safeTags));</code>
     
    313313      if (safeTags.matcher(m.group(2)).matches())
    314314      {
    315         m.appendReplacement(sb, "$0");
     315        if (m.group(1).startsWith("/"))
     316        {
     317          m.appendReplacement(sb, "</$2>");
     318        }
     319        else
     320        {
     321          m.appendReplacement(sb, "<$2>");
     322        }
    316323      }
    317324      else
  • trunk/src/plugins/core/net/sf/basedb/plugins/Base1PluginExecuter.java

    r4720 r4776  
    563563      File stdout = null;
    564564      Transformation trans = null;
    565      
    566565      Directory workingDirectory = null;
    567 
    568       //Export
     566      boolean leaveStdin = Boolean.TRUE.equals(configuration.getValue("leaveStdin"));
     567      boolean leaveStdout = Boolean.TRUE.equals(configuration.getValue("leaveStdout"));
     568
    569569      try
    570570      {
    571         dc = sc.newDbControl();
    572         String workingPath = (String) job.getValue("pluginDirectory") + "/" + job.getId();
    573         workingDirectory = getPluginDirectory(dc, workingPath);
    574         progress.display(0, "Exporting data to be used by plugin.");
    575         stdin = exportData(dc, workingDirectory);
    576         checkInterrupted();
    577         dc.commit();
    578       }
    579       catch(Exception e)
    580       {
    581         response.setError("Error during export: " + e.getMessage(), Arrays.asList(e));
    582         return;
     571        //Export
     572        try
     573        {
     574          dc = sc.newDbControl();
     575          String workingPath = (String) job.getValue("pluginDirectory") + "/" + job.getId();
     576          workingDirectory = getPluginDirectory(dc, workingPath);
     577          progress.display(0, "Exporting data to be used by plugin.");
     578          stdin = exportData(dc, workingDirectory);
     579          checkInterrupted();
     580          dc.commit();
     581        }
     582        catch(Exception e)
     583        {
     584          response.setError("Error during export: " + e.getMessage(), Arrays.asList(e));
     585          return;
     586        }
     587        finally
     588        {
     589          if (dc != null) dc.close();
     590        }
     591       
     592        //Execution
     593        Process externalProcess = null;
     594        try
     595        {
     596          checkInterrupted();
     597          copy(stdin, getExecDirectory());
     598          progress.display(10, "Running on remote computation server.");
     599          externalProcess = Runtime.getRuntime().exec(getExecLine(), null, getExecDirectory());
     600 
     601          ByteArrayOutputStream err = new ByteArrayOutputStream();
     602          StreamHandler errorStream = new StreamHandler(
     603              new BufferedInputStream(externalProcess.getErrorStream()),
     604              new BufferedOutputStream(err));
     605 
     606          FileOutputStream out =
     607            new FileOutputStream(new java.io.File(getExecDirectory(), "stdout.txt"));
     608          StreamHandler inputStream = new StreamHandler(
     609            new BufferedInputStream(externalProcess.getInputStream()),
     610            new BufferedOutputStream(out));
     611         
     612          FileInputStream in =
     613            new FileInputStream(new java.io.File(getExecDirectory(), "stdin.txt"));
     614          StreamHandler outputStream = new StreamHandler(
     615            new BufferedInputStream(in),
     616            new BufferedOutputStream(externalProcess.getOutputStream()));
     617         
     618          inputStream.start();
     619          errorStream.start();
     620          outputStream.start();
     621          int exitValue = 0;
     622          try
     623          {
     624            exitValue = externalProcess.waitFor();
     625          }
     626          catch (InterruptedException ex)
     627          {
     628            // Aborted by user
     629            externalProcess.destroy();
     630            throw new SignalException("Aborted by user", ex);
     631          }
     632 
     633          progress.display(50, "Reading from error stream.");
     634          for(int i = 0; errorStream.isAlive(); ++i)
     635          {
     636            Thread.sleep(1000);
     637            if (i > 300) throw new BaseException("Waited 5 minutes for the errormessage. I give up.");
     638          }
     639                   
     640          err.flush();
     641          msg = err.toString();
     642          out.flush();
     643         
     644          if (exitValue != 0)
     645          {
     646            response.setError(msg, null);
     647            return;
     648          }
     649        }
     650        catch (Exception e)
     651        {
     652          response.setError("Error during execution: " + e.getMessage(), Arrays.asList(e));
     653          return;
     654        }
     655       
     656        // Import analysis files created by the BASE1 plug-in
     657        try
     658        {
     659          //Copy files
     660          dc = sc.newDbControl();
     661          progress.display(60, "Copying files to server.");
     662          importTempFiles(dc, getExecDirectory().listFiles(), workingDirectory);
     663          dc.commit();
     664          if (!deleteDir(getExecDirectory()))
     665          {
     666            response.setError("Could not remove execution directory: "+getExecDirectory().getAbsolutePath(), null);
     667            return;
     668          }
     669        }
     670        finally
     671        {
     672          if (dc != null) dc.close();
     673        }
     674             
     675        //Import
     676        try
     677        {
     678          dc = sc.newDbControl();
     679          checkInterrupted();
     680          progress.display(70, "Importing data from plugin.");
     681          BioAssaySet parentBas = getSourceBioAssaySet(dc);
     682          trans = parentBas.newTransformation(Job.getById(dc, job.getId()));
     683          trans.setName(PluginConfiguration.getById(dc, configuration.getId()).getName());
     684          dc.saveItem(trans);
     685          stdout = File.getFile(dc, workingDirectory, "stdout.txt", true);
     686          associateFiles(dc, trans, workingDirectory);
     687          importData(dc, stdout, trans);
     688          dc.commit();
     689        }
     690        catch (Exception ex)
     691        {
     692          response.setError(ex.getMessage(), Arrays.asList(ex));
     693          return;
     694        }
     695        finally
     696        {
     697          if (dc != null) dc.close();
     698        }
    583699      }
    584700      finally
    585701      {
    586         if (dc != null) dc.close();
    587       }
    588      
    589       //Execution
    590       Process externalProcess = null;
    591       try
    592       {
    593         checkInterrupted();
    594         copy(stdin, getExecDirectory());
    595         progress.display(10, "Running on remote computation server.");
    596         externalProcess = Runtime.getRuntime().exec(getExecLine(), null, getExecDirectory());
    597 
    598         ByteArrayOutputStream err = new ByteArrayOutputStream();
    599         StreamHandler errorStream = new StreamHandler(
    600             new BufferedInputStream(externalProcess.getErrorStream()),
    601             new BufferedOutputStream(err));
    602 
    603         FileOutputStream out =
    604           new FileOutputStream(new java.io.File(getExecDirectory(), "stdout.txt"));
    605         StreamHandler inputStream = new StreamHandler(
    606           new BufferedInputStream(externalProcess.getInputStream()),
    607           new BufferedOutputStream(out));
    608        
    609         FileInputStream in =
    610           new FileInputStream(new java.io.File(getExecDirectory(), "stdin.txt"));
    611         StreamHandler outputStream = new StreamHandler(
    612           new BufferedInputStream(in),
    613           new BufferedOutputStream(externalProcess.getOutputStream()));
    614        
    615         inputStream.start();
    616         errorStream.start();
    617         outputStream.start();
    618         int exitValue = 0;
    619         try
    620         {
    621           exitValue = externalProcess.waitFor();
    622         }
    623         catch (InterruptedException ex)
    624         {
    625           // Aborted by user
    626           externalProcess.destroy();
    627           throw new SignalException("Aborted by user", ex);
    628         }
    629 
    630         progress.display(50, "Reading from error stream.");
    631         for(int i = 0; errorStream.isAlive(); ++i)
    632         {
    633           Thread.sleep(1000);
    634           if (i > 300) throw new BaseException("Waited 5 minutes for the errormessage. I give up.");
    635         }
    636                  
    637         err.flush();
    638         msg = err.toString();
    639         out.flush();
    640        
    641         if (exitValue != 0)
    642         {
    643           response.setError(msg, null);
    644           return;
    645         }
    646       }
    647       catch (Exception e)
    648       {
    649         response.setError("Error during execution: " + e.getMessage(), Arrays.asList(e));
    650         return;
    651       }
    652      
    653       // Import analysis files created by the BASE1 plug-in
    654       try
    655       {
    656         //Copy files
    657         dc = sc.newDbControl();
    658         progress.display(60, "Copying files to server.");
    659         importTempFiles(dc, getExecDirectory().listFiles(), workingDirectory);
    660         dc.commit();
    661         if (!deleteDir(getExecDirectory()))
    662         {
    663           response.setError("Could not remove execution directory: "+getExecDirectory().getAbsolutePath(), null);
    664         }       
    665       }
    666       finally
    667       {
    668         if (dc != null) dc.close();
    669       }
    670            
    671       //Import data and clean up
    672       try
    673       {
    674         dc = sc.newDbControl();
    675         checkInterrupted();
    676         progress.display(70, "Importing data from plugin.");
    677         BioAssaySet parentBas = getSourceBioAssaySet(dc);
    678         trans = parentBas.newTransformation(Job.getById(dc, job.getId()));
    679         trans.setName(PluginConfiguration.getById(dc, configuration.getId()).getName());
    680         dc.saveItem(trans);
    681         stdout = File.getFile(dc, workingDirectory, "stdout.txt", true);
    682         associateFiles(dc, trans, workingDirectory);
    683         importData(dc, stdout, trans);
    684        
    685         if (!Values.getBoolean(String.valueOf(configuration.getValue("leaveStdin"))))
    686         {
    687           if (stdin != null)
    688           {
    689             stdin = File.getById(dc, stdin.getId());
    690             if (trans != null)
     702        // Cleanup stdin and stdout
     703        if (workingDirectory != null)
     704        {
     705          try
     706          {
     707            dc = sc.newDbControl();
     708            if (!leaveStdin && File.exists(dc, workingDirectory, "stdin.txt"))
    691709            {
    692               trans = Transformation.getById(dc, trans.getId());
    693               AnyToAny ata = AnyToAny.getByName(dc, trans, stdin.getPath().toString());
    694               dc.deleteItem(ata);
     710              stdin = File.getFile(dc, workingDirectory, "stdin.txt", false);
     711              dc.deleteItem(stdin);
    695712            }
    696             dc.deleteItem(stdin);
    697           }
    698         }
    699         if (!Values.getBoolean(String.valueOf(configuration.getValue("leaveStdout"))))
    700         {
    701           if (stdout != null)
    702           {
    703             stdout = File.getById(dc, stdout.getId());
    704             if (trans != null)
     713            if (!leaveStdout && File.exists(dc, workingDirectory, "stdout.txt"))
    705714            {
    706               trans = Transformation.getById(dc, trans.getId());
    707               AnyToAny ata = AnyToAny.getByName(dc, trans, stdout.getPath().toString());
    708               dc.deleteItem(ata);
     715              stdout = File.getFile(dc, workingDirectory, "stdout.txt", false);
     716              dc.deleteItem(stdout);
    709717            }
    710             dc.deleteItem(stdout);
    711           }
    712         }
    713        
    714         dc.commit();
    715       }
    716       catch (Exception ex)
    717       {
    718         response.setError(ex.getMessage(), Arrays.asList(ex));
    719         return;
    720       }
    721       finally
    722       {
    723         if (dc != null) dc.close();
     718            dc.commit();
     719          }
     720          catch (Exception ex)
     721          {
     722            response.setError("Plug-in completed successfully, but stdin and/or stdout could not be removed: " +
     723                  ex.getMessage(), Arrays.asList(ex));
     724            return;
     725          }
     726          finally
     727          {
     728            if (dc != null) dc.close();
     729          }
     730        }
    724731      }
    725732      response.setDone(msg);
  • trunk/src/plugins/core/net/sf/basedb/plugins/PackedFileExporter.java

    r4513 r4776  
    126126  private int numFiles;
    127127  private long totalBytes;
     128  private List<Integer> selectedFiles;
     129  private List<Integer> selectedDirs;
    128130  private List<Nameable> selectedFilesAndDirs;
    129131 
     
    305307        storeValue(job, request, ri.getParameter("root"));
    306308        ParameterType<Integer> filesAndDirectories = new IntegerParameterType(null, null, null, true, 0, 0, 0, null);
    307         Set<Integer> selectedFiles = sc.getCurrentContext(Item.FILE).getSelected();
    308         if (selectedFiles.size() > 0)
    309         {
    310           job.setValues("files", filesAndDirectories, new ArrayList<Integer>(selectedFiles));
    311         }
    312         Set<Integer> selectedDirectories = sc.getCurrentContext(Item.DIRECTORY).getSelected();
    313         if (selectedDirectories.size() > 0)
    314         {
    315           job.setValues("directories", filesAndDirectories, new ArrayList<Integer>(selectedDirectories));
     309        if (selectedFiles != null && selectedFiles.size() > 0)
     310        {
     311          job.setValues("files", filesAndDirectories, selectedFiles);
     312        }
     313        if (selectedDirs != null && selectedDirs.size() > 0)
     314        {
     315          job.setValues("directories", filesAndDirectories, selectedDirs);
    316316        }
    317317       
     
    483483       
    484484        selectedFilesAndDirs = new LinkedList<Nameable>();
    485         loadFilesAndDirectories(dc, selectedFilesAndDirs, fileContext.getSelected(), dirContext.getSelected(), false);
     485        selectedFiles = new ArrayList<Integer>(fileContext.getSelected());
     486        selectedDirs = new ArrayList<Integer>(dirContext.getSelected());
     487        loadFilesAndDirectories(dc, selectedFilesAndDirs, selectedFiles, selectedDirs, false);
    486488       
    487489        // Save as and overwrite parameter
  • trunk/src/test/TestBase1PluginExecuter.java

    r4720 r4776  
    8080    int fileId2 = TestFile.test_create("data/test.base1plugin.base", false, false);
    8181    int fileIdMatrix = TestFile.test_create("data/test.nullplugin.matrix.base", false, false);
     82    int fileIdCleanStd = TestFile.test_create("data/test.nullplugin.cleanstd.base", false, false);
    8283    int directoryId = TestDirectory.test_create(true, "Base1PluginExecuter");
    8384   
     
    8889    int pluginConfigurationId2 = test_create_configuration(pluginDefinitionId, fileId2);
    8990    int pluginConfigurationIdMatrix = test_create_configuration(pluginDefinitionId, fileIdMatrix);
     91    int pluginConfigurationIdCleanStd = test_create_configuration(pluginDefinitionId, fileIdCleanStd);
    9092   
    9193    // Calculate extra value
     
    98100    ok &= TestJob.test_execute(jobId);
    99101   
     102    // Copy input to output - remove stdin and stdout
     103    int jobIdCleanStd = test_create_job(pluginConfigurationIdCleanStd, experimentId, rootBioAssaySetId, directoryId);
     104    ok &= TestJob.test_execute(jobIdCleanStd);
     105   
    100106    // Copy input to output - matrix format
    101107    int jobIdMatrix = test_create_job(pluginConfigurationIdMatrix, experimentId, rootBioAssaySetId, directoryId);
     
    145151    TestPluginConfiguration.test_delete(pluginConfigurationId2);
    146152    TestPluginConfiguration.test_delete(pluginConfigurationIdMatrix);
     153    TestPluginConfiguration.test_delete(pluginConfigurationIdCleanStd);
    147154    TestFormula.test_delete(formulaId);
    148155    TestFormula.test_delete(formulaChromosomeId);
     
    153160    TestFile.test_delete(fileId2);
    154161    TestFile.test_delete(fileIdMatrix);
     162    TestFile.test_delete(fileIdCleanStd);
    155163    TestDirectory.test_delete(directoryId, true);
    156164    TestReporter.test_delete();
  • trunk/www/my_base/index.jsp

    r4738 r4776  
    385385          <span class="date"><%=dateFormatter.format(n.getNewsDate())%></span>
    386386          <span class="headline"><%=HTML.encodeTags(n.getName())%></span><br>
    387           <span class="text"><%=Values.getString(n.getDescription())%></span>
     387          <span class="text"><%=HTML.niceFormat(n.getDescription())%></span>
    388388        </div>
    389389        <%
  • trunk/www/views/experiments/bioassays/list_bioassays.jsp

    r4560 r4776  
    538538                    {
    539539                      Annotation a = as.getAnnotation(at);
     540                      String suffix = a.getUnitSymbol(null);
     541                      if (suffix != null) suffix = "&nbsp;" + suffix;
    540542                      %>
    541543                      <tbl:cell
     
    543545                        ><tbl:cellvalue
    544546                          list="<%=a.getValues(null)%>"
    545                           suffix="<%="&nbsp;"+a.getUnitSymbol(null)%>"
     547                          suffix="<%=suffix%>"
    546548                      /></tbl:cell>
    547549                      <%
  • trunk/www/views/experiments/bioassaysets/analysis_tree.jsp

    r4560 r4776  
    941941                        {
    942942                          Annotation a = as.getAnnotation(at);
     943                          String suffix = a.getUnitSymbol(null);
     944                          if (suffix != null) suffix = "&nbsp;" + suffix;
    943945                          %>
    944946                          <tbl:cell
     
    946948                            ><tbl:cellvalue
    947949                              list="<%=a.getValues(null)%>"
    948                               suffix="<%="&nbsp;"+a.getUnitSymbol(null)%>"
     950                              suffix="<%=suffix%>"
    949951                          /></tbl:cell>
    950952                          <%
Note: See TracChangeset for help on using the changeset viewer.