plugin_handle_impl.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: plugin_handle_impl.hpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 20:44:28  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___PLUGIN_HANDLE_IMPL__HPP
  10. #define GUI_CORE___PLUGIN_HANDLE_IMPL__HPP
  11. /*  $Id: plugin_handle_impl.hpp,v 1000.4 2004/06/01 20:44:28 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <gui/core/plugin_handle.hpp>
  42. #include <gui/plugin/PluginInfo.hpp>
  43. #include <gui/plugin/PluginLibInfo.hpp>
  44. #include <gui/plugin/PluginArgSet.hpp>
  45. BEGIN_NCBI_SCOPE
  46. USING_SCOPE(objects);
  47. class CPluginFactoryBase;
  48. class CPluginBase;
  49. //
  50. // class CPluginHandle_Impl hides the details of implementing load-on-demand.
  51. //
  52. class CPluginHandle_Impl : public CObject
  53. {
  54.     friend class CPluginRegistry;
  55. public:
  56.     CPluginHandle_Impl(const CPluginLibInfo& info);
  57.     virtual ~CPluginHandle_Impl();
  58.     // retrieve a plugin handle representing this implementation
  59.     CPluginHandle GetHandle(void) const;
  60.     // retrieve the command type this plugin supports
  61.     CPluginCommandSet::E_Choice GetCommand(void) const;
  62.     // determine if a given command sub-type is supported by this plugin
  63.     bool HasCommandSubtype(EAlgoCommand) const;
  64.     bool HasCommandSubtype(EDataCommand) const;
  65.     bool HasCommandSubtype(EViewCommand) const;
  66.     // determine if this plugin has been loaded yet
  67.     bool    IsLoaded(void) const;
  68.     // retrieve the enabled flag
  69.     bool    IsEnabled(void) const;
  70.     // fill in a default set of arguments for the specified algorithm command
  71.     bool FillDefaults(EAlgoCommand cmd, CPluginCommand& args) const;
  72.     // fill in a default set of arguments for the specified data command
  73.     bool FillDefaults(EDataCommand cmd, CPluginCommand& args) const;
  74.     // fill in a default set of arguments for the specified view command
  75.     bool FillDefaults(EViewCommand cmd, CPluginCommand& args) const;
  76.     // return a properly formatted CPluginMessage object to invoke this
  77.     // plugin
  78.     CRef<objects::CPluginMessage> CreateMessage(objects::EAlgoCommand cmd);
  79.     CRef<objects::CPluginMessage> CreateMessage(objects::EDataCommand cmd);
  80.     CRef<objects::CPluginMessage> CreateMessage(objects::EViewCommand cmd);
  81.     // execute a command contained in a plugin message.  This will execute
  82.     // the command in the specified named context; if the context doesn't
  83.     // exist, one will be marshalled.
  84.     void Execute(CPluginMessage& msg);
  85.     // finalize the arguments
  86.     void FinalizeArgs(objects::CPluginMessage& msg);
  87.     // get the plugin info
  88.     const CPluginInfo& GetInfo(void) const;
  89.     // get the plugin libinfo
  90.     const CPluginLibInfo& GetLibInfo(void) const;
  91.     // get the name of the class this plugin exports for a given command
  92.     const string& GetClassName(void) const;
  93.     // retrieve the help file for a given command.  This can either be a file
  94.     // on disk or the help itself. It does not necessarily return what's in the
  95.     // info structure for the plugin. Instead, it uses PluginInfo.Help_file
  96.     // to create a URL, based on the contents of the config [Help].
  97.     //
  98.     // The data returned by PluginInfo.GetHelp_file is an
  99.     // expression that resolves to a URL. The resolution process
  100.     // is as follows:
  101.     //
  102.     // 1. If it's an "http://" URL, then the result is simply the URL.
  103.     //
  104.     // 2. If it's a word, append that word to the value of 
  105.     //    the config variable [Help]/HELP_BASE, with a slash
  106.     //    between. 
  107.     //
  108.     // 3. If it's empty, use HELP_BASE + a slash + the class name with
  109.     //    underscores removed.
  110.     //
  111.     // In the cases of (2) and (3), if HELP_BASE is not set,
  112.     // then the method uses a default URL (within NCBI).
  113.     //
  114.     // Examples:
  115.     //   1. Help text: http://ncbi.nlm.nih.gov/BLAST-help
  116.     // Resolves to: http://ncbi.nlm.nih.gov/BLAST-help
  117.     //
  118.     //   2. Help text: NetBLASTReply
  119.     // In config file: [Help]
  120.     // HELP_BASE=http://genomeworkbench.org/help
  121.     //      Resolves to: http://genomeworkbench.org/help/NetBLASTReply
  122.     //
  123.     //   3. Help text in class CAlgoPlugin_MyPlugin: ""
  124.     // In config file: [Help]
  125.     // HELP_BASE=http://genomeworkbench.org/help
  126.     //      Resolves to: http://genomeworkbench.org/help/CAlgoPluginMyPlugin
  127.     //  Note that in example #3 there are no underscores in the URL.
  128.     //
  129.     //
  130.     //
  131.     const string GetHelpFile (void) const;
  132.     // retrieve the name of the library this plugin lives in
  133.     const string& GetLibrary  (void) const;
  134.     // retrieve the menu item for this plugin
  135.     const string& GetMenuItem (void) const;
  136.     // retrieve the mouse-over tooltip for this menu item
  137.     const string& GetToolTip  (void) const;
  138.     // retrieve the version information for this plugin
  139.     int           GetVerMajor    (void) const;
  140.     int           GetVerMinor    (void) const;
  141.     int           GetVerRevision (void) const;
  142.     const string& GetVerBuildDate(void) const;
  143. protected:
  144.     // internal command to set the factory.  This is called from the registry
  145.     // when a plugin library is loaded.
  146.     void x_SetFactory(CPluginFactoryBase* factory) const;
  147.     CPluginBase* x_GetPlugin(const string& context = "");
  148. private:
  149.     // Our original argument information.  This is the set that we use
  150.     // to define what we are and how we interact with the framework.
  151.     CConstRef<CPluginLibInfo> m_Info;
  152.     // Our working set of information.  This set may be updated as the
  153.     // application proceeds.  Its use is primarily in FillDefaults() and
  154.     // SetDefaults(), where it is used to define the last known set of
  155.     // arguments.
  156.     mutable CRef<CPluginLibInfo> m_WorkingInfo;
  157.     // the factory we represent.  This is initially NULL; it is set when the
  158.     // plugin is loaded
  159.     mutable CPluginFactoryBase*     m_Factory;
  160.     // a dictionary of named instances of the plugin that we manage
  161.     typedef map<string, CRef<CPluginBase> > TPluginDict;
  162.     TPluginDict m_PluginDict;
  163.     // wrapper to retrieve the current working set
  164.     CPluginLibInfo& x_GetWorkingSet(void) const;
  165. };
  166. // comparison operator for plugin handles
  167. inline
  168. bool operator< (const CPluginHandle_Impl& h1, const CPluginHandle_Impl& h2)
  169. {
  170.     return (h1.GetClassName() < h2.GetClassName());
  171. }
  172. END_NCBI_SCOPE
  173. /*
  174.  * ===========================================================================
  175.  * $Log: plugin_handle_impl.hpp,v $
  176.  * Revision 1000.4  2004/06/01 20:44:28  gouriano
  177.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  178.  *
  179.  * Revision 1.12  2004/05/25 17:08:50  dicuccio
  180.  * Added CreateMessage() API to generate a new plugin message for a given plugin
  181.  * call
  182.  *
  183.  * Revision 1.11  2004/02/12 23:03:02  mjohnson
  184.  * Added documentation lookup.
  185.  *
  186.  * Revision 1.10  2004/02/03 21:23:48  dicuccio
  187.  * Added standard accessors for the working set of plugin args
  188.  *
  189.  * Revision 1.9  2004/01/15 22:50:17  jcherry
  190.  * Added FinalizeArgs() for plugins
  191.  *
  192.  * Revision 1.8  2003/11/06 20:04:07  dicuccio
  193.  * Refactored FillDefaults().  Added option to have cached set of arguments
  194.  *
  195.  * Revision 1.7  2003/11/04 17:18:41  dicuccio
  196.  * Changed calling API for plugins - take CPluginMessage directly instead of
  197.  * paired command/reply
  198.  *
  199.  * Revision 1.6  2003/10/23 16:16:36  dicuccio
  200.  * Exposed CPluginLibInfo
  201.  *
  202.  * Revision 1.5  2003/08/05 17:07:15  dicuccio
  203.  * Changed calling semantics for the message queue - pass by reference, not
  204.  * CConstRef<>
  205.  *
  206.  * Revision 1.4  2003/08/02 12:51:07  dicuccio
  207.  * Enabled the context dictionary inside of plugin handles
  208.  *
  209.  * Revision 1.3  2003/07/14 13:32:13  shomrat
  210.  * Removed unnecessary explicit class specification
  211.  *
  212.  * Revision 1.2  2003/07/14 11:01:02  shomrat
  213.  * Plugin messageing system related changes
  214.  *
  215.  * Revision 1.1  2003/06/25 17:02:54  dicuccio
  216.  * Split CPluginHandle into a handle (pointer-to-implementation) and
  217.  * implementation file.  Lots of #include file clean-ups.
  218.  *
  219.  * ===========================================================================
  220.  */
  221. #endif  // GUI_CORE___PLUGIN_HANDLE_IMPL__HPP