Skip to content
Snippets Groups Projects
RunMenu.java 10.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • tjc's avatar
    tjc committed
    /* RunMenu.java
     *
     * created: Fri Jan 22 1999
     *
     * This file is part of Artemis
     *
     * Copyright(C) 1998,1999,2000  Genome Research Limited
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * as published by the Free Software Foundation; either version 2
     * of the License, or(at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
     *
    
    tjc's avatar
    tjc committed
     * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/RunMenu.java,v 1.8 2005-08-11 16:12:43 tjc Exp $
    
    tjc's avatar
    tjc committed
     **/
    
    package uk.ac.sanger.artemis.components;
    
    import uk.ac.sanger.artemis.*;
    import uk.ac.sanger.artemis.util.ReadOnlyException;
    import uk.ac.sanger.artemis.util.StringVector;
    import uk.ac.sanger.artemis.io.EntryInformationException;
    import uk.ac.sanger.artemis.io.Qualifier;
    import uk.ac.sanger.artemis.io.InvalidKeyException;
    import uk.ac.sanger.artemis.io.InvalidRelationException;
    
    import java.io.IOException;
    import java.awt.event.*;
    import java.util.Vector;
    
    import javax.swing.*;
    
    /**
     *  A JMenu of external commands/functions.
     *
     *  @author Kim Rutherford
    
    tjc's avatar
    tjc committed
     *  @version $Id: RunMenu.java,v 1.8 2005-08-11 16:12:43 tjc Exp $
    
    tjc's avatar
    tjc committed
     **/
    
    public class RunMenu extends SelectionMenu 
    {
    
    tjc's avatar
    tjc committed
     
      private JMenu fastaMenu = null;
      private JMenu fastaMenuOptions = null;
      private JMenu blastpMenu = null;
      private JMenu blastpMenuOptions = null;
    
    
    tjc's avatar
    tjc committed
      /**
       *  Create a new RunMenu object.
       *  @param frame The JFrame that owns this JMenu.
       *  @param selection The Selection that the commands in the menu will
       *    operate on.
       *  @param menu_name The name of the new menu.
       **/
      public RunMenu(final JFrame frame, final Selection selection,
                     final String menu_name) 
      {
        super(frame, menu_name, selection);
    
        final ExternalProgramVector external_programs =
    
    tjc's avatar
    tjc committed
                Options.getOptions().getExternalPrograms();
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
        boolean sanger_options = 
                Options.getOptions().getPropertyTruthValue("sanger_options");
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
        final int external_programs_size = external_programs.size();
        for(int i = 0; i < external_programs_size; ++i) 
          makeMenuItem(external_programs.elementAt(i), sanger_options);
    
    tjc's avatar
    tjc committed
    
        addSeparator();
    
    
    tjc's avatar
    tjc committed
        for(int i = 0; i < external_programs_size; ++i) 
    
    tjc's avatar
    tjc committed
          makeOptionsMenuItem(external_programs.elementAt(i));
    
    
    tjc's avatar
    tjc committed
    //  if(Options.getOptions().getProperty("jcon_min_jobs") != null) 
    //  {
    //    addSeparator();
    //    final JMenuItem jcon_status = new JMenuItem("Show Job Status ...");
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //    jcon_status.addActionListener(new ActionListener() 
    //    {
    //      public void actionPerformed(ActionEvent event) 
    //      {
    //        try 
    //        {
    //          final int ids[] = getIds();
    //          TaskViewerFrame tvf = new TaskViewerFrame(ids);
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //          tvf.setSize(400, 600);
    //          tvf.setVisible(true);
    //        }
    //        catch(Exception e) 
    //        {
    //          e.printStackTrace();
    //          new MessageDialog(frame, "unable to view job status: " + e);
    //        }
    //      }
    //    });
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //    add(jcon_status);
    //  }
    
    tjc's avatar
    tjc committed
      }
    
      /**
       *  Create a new RunMenu object.
       *  @param frame The JFrame that owns this JMenu.
       *  @param selection The Selection that the commands in the menu will
       *    operate on.
       **/
      public RunMenu(final JFrame frame,
                     final Selection selection) 
      {
        this(frame, selection, "Run");
      }
    
    
    tjc's avatar
    tjc committed
      /**
       *  Make a new menu item for running the given ExternalProgram object.
       *  @param program Create two menu items for this program.
       **/
    
    tjc's avatar
    tjc committed
      private void makeMenuItem(final ExternalProgram program,
                                final boolean sanger_options) 
    
    tjc's avatar
    tjc committed
      {
        final JMenuItem new_menu;
    
    tjc's avatar
    tjc committed
        final String program_name = program.getName();  
    
    tjc's avatar
    tjc committed
        
    
    tjc's avatar
    tjc committed
        if(program.getType() == ExternalProgram.AA_PROGRAM ||
           program.getType() == ExternalProgram.DNA_PROGRAM &&
    
    tjc's avatar
    tjc committed
           sanger_options) 
    
    tjc's avatar
    tjc committed
        {
          final String options_string = program.getProgramOptions();
    
          if(options_string.length() > 0) 
    
    tjc's avatar
    tjc committed
          {
    
    tjc's avatar
    tjc committed
            if(program_name.startsWith("fasta") ||
               program_name.startsWith("blastp"))
    
    tjc's avatar
    tjc committed
              new_menu = new JMenuItem(options_string);
            else 
    
    tjc's avatar
    tjc committed
              new_menu = new JMenuItem("Run " + program_name + " (" +
    
    tjc's avatar
    tjc committed
                            options_string + ") on selected features");
    
    tjc's avatar
    tjc committed
          }
    
    tjc's avatar
    tjc committed
          else 
            new_menu =
    
    tjc's avatar
    tjc committed
              new JMenuItem("Run " + program_name + " on selected features");
    
    tjc's avatar
    tjc committed
        } 
        else 
          new_menu =
    
    tjc's avatar
    tjc committed
            new JMenuItem("Run " + program_name + " on selected features");
    
    tjc's avatar
    tjc committed
    
        new_menu.addActionListener(new ActionListener() 
        {
          public void actionPerformed(ActionEvent event) 
          {
            if(!checkForSelectionFeatures()) 
              return;
    
            final FeatureVector selection_features =
              getSelection().getAllFeatures();
    
            try
            {
              final ExternalProgramMonitor monitor =
                            program.run(selection_features, Splash.getLogger());
    
    
    tjc's avatar
    tjc committed
              if(monitor == null)
                return;
    
    
    tjc's avatar
    tjc committed
              monitor.addExternalProgramListener(new ExternalProgramListener() 
              {
                public void statusChanged(final ExternalProgramEvent e) 
                {
                  if(e.getType() == ExternalProgramEvent.FINISHED) 
                    new MessageFrame(e.getMessage()).setVisible(true);
                }
              });
              new Thread(monitor).start();
            } 
            catch(InvalidKeyException e) 
            {
              new MessageDialog(getParentFrame(),
                                 "execution failed: " + e.getMessage());
            }
            catch(EntryInformationException e)
            {
              new MessageDialog(getParentFrame(),
    
    tjc's avatar
    tjc committed
                                 "execution of " + program_name +
    
    tjc's avatar
    tjc committed
                                 " failed because: " + e.getMessage());
            }
            catch(ReadOnlyException e)
            {
              new MessageDialog(getParentFrame(),
    
    tjc's avatar
    tjc committed
                                 "execution of " + program_name +
    
    tjc's avatar
    tjc committed
                                 " failed because one of the features is " +
                                 "read only");
            }
            catch(IOException e)
            {
              new MessageDialog(getParentFrame(),
    
    tjc's avatar
    tjc committed
                                 "execution of " + program_name +
    
    tjc's avatar
    tjc committed
                                 " failed because of an I/O error: " +
                                 e);
            }
            catch(ExternalProgramException e) 
            {
              new MessageDialog(getParentFrame(),
    
    tjc's avatar
    tjc committed
                                "execution of " + program_name +
    
    tjc's avatar
    tjc committed
                                " failed: " + e.getMessage());
            }
          }
        });
    
    
    tjc's avatar
    tjc committed
        if(program_name.startsWith("fasta"))
    
    tjc's avatar
    tjc committed
        {
          if(fastaMenu == null)
          {
            fastaMenu = new JMenu("Run fasta on selected features against");
            add(fastaMenu);
          }
          fastaMenu.add(new_menu);
        }
        else if(program.getName().startsWith("blastp"))
        {
          if(blastpMenu == null)
          {
    
    axk's avatar
    axk committed
            blastpMenu = new JMenu("Run blastp on selected features against");
    
    tjc's avatar
    tjc committed
            add(blastpMenu);
          }
          blastpMenu.add(new_menu);
        }
        else
          add(new_menu);
    
    tjc's avatar
    tjc committed
      }
    
      /**
       *  Make a new options menu item for the given ExternalProgram object.
       *  @param program Create two menu items for this program.
       **/
      private void makeOptionsMenuItem(final ExternalProgram program)
      {
        if(!(program.getType() == ExternalProgram.AA_PROGRAM ||
             program.getType() == ExternalProgram.DNA_PROGRAM)) 
          return;
    
    
    tjc's avatar
    tjc committed
        final JMenuItem new_options_menu;
        final String program_name = program.getName();
    
        if(program_name.startsWith("fasta"))
    
    tjc's avatar
    tjc committed
        {
          if(fastaMenuOptions == null)
          {
    
    tjc's avatar
    tjc committed
            fastaMenuOptions = new JMenu("Set " + program_name + " options");
    
    tjc's avatar
    tjc committed
            add(fastaMenuOptions);
          }
          new_options_menu = new JMenuItem(program.getProgramOptions());
          fastaMenuOptions.add(new_options_menu);
        }  
    
    tjc's avatar
    tjc committed
        else if(program_name.startsWith("blastp"))
    
    tjc's avatar
    tjc committed
        {
          if(blastpMenuOptions == null)
          {
    
    tjc's avatar
    tjc committed
            blastpMenuOptions = new JMenu("Set " + program_name + " options");
    
    tjc's avatar
    tjc committed
            add(blastpMenuOptions);
          }
          new_options_menu = new JMenuItem(program.getProgramOptions());
          blastpMenuOptions.add(new_options_menu);
        }
        else
        {
    
    tjc's avatar
    tjc committed
          new_options_menu = new JMenuItem("Set " + program_name + " options");
    
    tjc's avatar
    tjc committed
          add(new_options_menu);
        }
    
    tjc's avatar
    tjc committed
    
        new_options_menu.addActionListener(new ActionListener() 
        {
          public void actionPerformed(ActionEvent event)
          {
            new ExternalProgramOptions(program);
          }
        });
      }
    
      /**
       *  
       **/
    
    tjc's avatar
    tjc committed
    //private int[] getIds() 
    //{
    //  final FeatureVector selected_features = getSelection().getAllFeatures();
    //  final Vector ids_vector = new Vector();
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //  for(int feature_index = 0; feature_index < selected_features.size();
    //      ++feature_index) 
    //  {
    //    final Feature this_feature = selected_features.elementAt(feature_index);
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //    try
    //    {
    //      final Qualifier job_qualifier =
    //        this_feature.getQualifierByName("job");
    //      
    //      final StringVector values = job_qualifier.getValues();
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //      if(values != null && values.size() > 0) 
    //      {
    //        for(int value_index=0; value_index<values.size();
    //            ++value_index) 
    //        {
    //          final String job_value = values.elementAt(value_index);
    //          final StringVector bits = StringVector.getStrings(job_value);
    
    //          if(bits.size() > 4 && bits.elementAt(2).equals("task:")) 
    //          {
    //            try 
    //            {
    //              final Integer task_id = Integer.valueOf(bits.elementAt(3));
    
    //              if(!ids_vector.contains(task_id)) 
    //                ids_vector.add(task_id);
    //            }
    //            catch(NumberFormatException e) {}
    //          }
    //        }
    //      }
    //    } 
    //    catch(InvalidRelationException e) {}
    //  }
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //  final int[] ids = new int[ids_vector.size()];
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //  for(int i=0 ; i<ids.length ; ++i) 
    //    ids[i] =((Integer)ids_vector.elementAt(i)).intValue();
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    //  return ids;
    //}
    
    tjc's avatar
    tjc committed
    }