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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: plugin_handle.cpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 20:44:23  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.22
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: plugin_handle.cpp,v 1000.5 2004/06/01 20:44:23 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/core/plugin_exception.hpp>
  41. #include <gui/core/plugin_factory.hpp>
  42. #include <gui/core/plugin_handle.hpp>
  43. #include <gui/core/plugin_registry.hpp>
  44. #include <gui/core/idocument.hpp>
  45. #include <gui/plugin/PluginArgSet.hpp>
  46. #include <gui/plugin/PluginInfo.hpp>
  47. #include <gui/plugin/PluginLibInfo.hpp>
  48. #include <gui/plugin/PluginMessage.hpp>
  49. #include "plugin_handle_impl.hpp"
  50. BEGIN_NCBI_SCOPE
  51. USING_SCOPE(objects);
  52. // comparison operators for plugin handles
  53. bool operator< (const CPluginHandle& h1, const CPluginHandle& h2)
  54. {
  55.     return (h1.LessThan(h2));
  56. }
  57. bool operator== (const CPluginHandle& h1, const CPluginHandle& h2)
  58. {
  59.     return ( !(h1 < h2)  && !(h2 < h1) );
  60. }
  61. bool operator!= (const CPluginHandle& h1, const CPluginHandle& h2)
  62. {
  63.     return !(h1 == h2);
  64. }
  65. CPluginHandle::CPluginHandle()
  66. {
  67. }
  68. CPluginHandle::CPluginHandle(CPluginHandle_Impl& impl)
  69.     : m_Impl(&impl)
  70. {
  71. }
  72. CPluginHandle::CPluginHandle(const CPluginHandle& handle)
  73.     : m_Impl(const_cast<CPluginHandle_Impl*>(handle.m_Impl.GetPointer()))
  74. {
  75. }
  76. CPluginHandle& CPluginHandle::operator=(const CPluginHandle& handle)
  77. {
  78.     if (this != &handle) {
  79.         m_Impl.Reset
  80.             (const_cast<CPluginHandle_Impl*>(handle.m_Impl.GetPointer()));
  81.     }
  82.     return *this;
  83. }
  84. CPluginHandle::~CPluginHandle()
  85. {
  86. }
  87. //
  88. // all requests are forwarded to our implementation
  89. //
  90. const CPluginInfo& CPluginHandle::GetInfo(void) const
  91. {
  92.     if ( !m_Impl ) {
  93.         x_ThrowInvalidHandle();
  94.     }
  95.     return m_Impl->GetInfo();
  96. }
  97. //
  98. // all requests are forwarded to our implementation
  99. //
  100. const CPluginLibInfo& CPluginHandle::GetLibInfo(void) const
  101. {
  102.     if ( !m_Impl ) {
  103.         x_ThrowInvalidHandle();
  104.     }
  105.     return m_Impl->GetLibInfo();
  106. }
  107. CPluginCommandSet::E_Choice CPluginHandle::GetCommand(void) const
  108. {
  109.     if ( !m_Impl ) {
  110.         x_ThrowInvalidHandle();
  111.     }
  112.     return m_Impl->GetCommand();
  113. }
  114. bool CPluginHandle::IsLoaded(void) const
  115. {
  116.     if ( !m_Impl ) {
  117.         x_ThrowInvalidHandle();
  118.     }
  119.     return m_Impl->IsLoaded();
  120. }
  121. bool CPluginHandle::IsEnabled(void) const
  122. {
  123.     if ( !m_Impl ) {
  124.         x_ThrowInvalidHandle();
  125.     }
  126.     return m_Impl->IsEnabled();
  127. }
  128. const string& CPluginHandle::GetClassName(void) const
  129. {
  130.     if ( !m_Impl ) {
  131.         x_ThrowInvalidHandle();
  132.     }
  133.     return m_Impl->GetClassName();
  134. }
  135. const string CPluginHandle::GetHelpFile(void) const
  136. {
  137.     if ( !m_Impl ) {
  138.         x_ThrowInvalidHandle();
  139.     }
  140.     return m_Impl->GetHelpFile();
  141. }
  142. const string& CPluginHandle::GetLibrary(void) const
  143. {
  144.     if ( !m_Impl ) {
  145.         x_ThrowInvalidHandle();
  146.     }
  147.     return m_Impl->GetLibrary();
  148. }
  149. const string& CPluginHandle::GetMenuItem(void) const
  150. {
  151.     if ( !m_Impl ) {
  152.         x_ThrowInvalidHandle();
  153.     }
  154.     return m_Impl->GetMenuItem();
  155. }
  156. const string& CPluginHandle::GetToolTip(void) const
  157. {
  158.     if ( !m_Impl ) {
  159.         x_ThrowInvalidHandle();
  160.     }
  161.     return m_Impl->GetToolTip();
  162. }
  163. int CPluginHandle::GetVerMajor(void) const
  164. {
  165.     if ( !m_Impl ) {
  166.         x_ThrowInvalidHandle();
  167.     }
  168.     return m_Impl->GetVerMajor();
  169. }
  170. int CPluginHandle::GetVerMinor(void) const
  171. {
  172.     if ( !m_Impl ) {
  173.         x_ThrowInvalidHandle();
  174.     }
  175.     return m_Impl->GetVerMinor();
  176. }
  177. int CPluginHandle::GetVerRevision(void) const
  178. {
  179.     if ( !m_Impl ) {
  180.         x_ThrowInvalidHandle();
  181.     }
  182.     return m_Impl->GetVerRevision();
  183. }
  184. const string& CPluginHandle::GetVerBuildDate(void) const
  185. {
  186.     if ( !m_Impl ) {
  187.         x_ThrowInvalidHandle();
  188.     }
  189.     return m_Impl->GetVerBuildDate();
  190. }
  191. //
  192. // determine if a given command subtype is supported
  193. //
  194. bool CPluginHandle::HasCommandSubtype(EAlgoCommand cmd) const
  195. {
  196.     if ( !m_Impl ) {
  197.         x_ThrowInvalidHandle();
  198.     }
  199.     return m_Impl->HasCommandSubtype(cmd);
  200. }
  201. bool CPluginHandle::HasCommandSubtype(EDataCommand cmd) const
  202. {
  203.     if ( !m_Impl ) {
  204.         x_ThrowInvalidHandle();
  205.     }
  206.     return m_Impl->HasCommandSubtype(cmd);
  207. }
  208. bool CPluginHandle::HasCommandSubtype(EViewCommand cmd) const
  209. {
  210.     if ( !m_Impl ) {
  211.         x_ThrowInvalidHandle();
  212.     }
  213.     return m_Impl->HasCommandSubtype(cmd);
  214. }
  215. // return a properly formatted CPluginMessage object to invoke this
  216. // plugin
  217. CRef<CPluginMessage> CPluginHandle::CreateMessage(EAlgoCommand cmd)
  218. {
  219.     if ( !m_Impl ) {
  220.         x_ThrowInvalidHandle();
  221.     }
  222.     return m_Impl->CreateMessage(cmd);
  223. }
  224. CRef<CPluginMessage> CPluginHandle::CreateMessage(EDataCommand cmd)
  225. {
  226.     if ( !m_Impl ) {
  227.         x_ThrowInvalidHandle();
  228.     }
  229.     return m_Impl->CreateMessage(cmd);
  230. }
  231. CRef<CPluginMessage> CPluginHandle::CreateMessage(EViewCommand cmd)
  232. {
  233.     if ( !m_Impl ) {
  234.         x_ThrowInvalidHandle();
  235.     }
  236.     return m_Impl->CreateMessage(cmd);
  237. }
  238. //
  239. // fill in the default set of arguments for a given command
  240. //
  241. bool CPluginHandle::FillDefaults(EAlgoCommand cmd, CPluginCommand& args) const
  242. {
  243.     if ( !m_Impl ) {
  244.         x_ThrowInvalidHandle();
  245.     }
  246.     return m_Impl->FillDefaults(cmd, args);
  247. }
  248. bool CPluginHandle::FillDefaults(EDataCommand cmd, CPluginCommand& args) const
  249. {
  250.     if ( !m_Impl ) {
  251.         x_ThrowInvalidHandle();
  252.     }
  253.     return m_Impl->FillDefaults(cmd, args);
  254. }
  255. bool CPluginHandle::FillDefaults(EViewCommand cmd, CPluginCommand& args) const
  256. {
  257.     if ( !m_Impl ) {
  258.         x_ThrowInvalidHandle();
  259.     }
  260.     return m_Impl->FillDefaults(cmd, args);
  261. }
  262. void CPluginHandle::Execute(CPluginMessage& msg)
  263. {
  264.     if ( !m_Impl ) {
  265.         x_ThrowInvalidHandle();
  266.     }
  267.     m_Impl->Execute(msg);
  268. }
  269. void CPluginHandle::FinalizeArgs(CPluginMessage& msg)
  270. {
  271.     if ( !m_Impl ) {
  272.         x_ThrowInvalidHandle();
  273.     }
  274.     m_Impl->FinalizeArgs(msg);
  275. }
  276. bool CPluginHandle::LessThan(const CPluginHandle& handle) const
  277. {
  278.     if (m_Impl.GetPointer()  &&  handle.m_Impl.GetPointer()) {
  279.         return (*m_Impl < *handle.m_Impl);
  280.     }
  281.     if ( !m_Impl ) {
  282.         return false;
  283.     }
  284.     return true;
  285. }
  286. void CPluginHandle::x_ThrowInvalidHandle() const
  287. {
  288.     NCBI_THROW(CPluginException, eInvalidHandle,
  289.                "Attempt to access invalid plugin handle");
  290. }
  291. END_NCBI_SCOPE
  292. /*
  293.  * ===========================================================================
  294.  * $Log: plugin_handle.cpp,v $
  295.  * Revision 1000.5  2004/06/01 20:44:23  gouriano
  296.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.22
  297.  *
  298.  * Revision 1.22  2004/05/25 17:08:50  dicuccio
  299.  * Added CreateMessage() API to generate a new plugin message for a given plugin
  300.  * call
  301.  *
  302.  * Revision 1.21  2004/05/21 22:27:40  gorelenk
  303.  * Added PCH ncbi_pch.hpp
  304.  *
  305.  * Revision 1.20  2004/02/12 23:03:02  mjohnson
  306.  * Added documentation lookup.
  307.  *
  308.  * Revision 1.19  2004/01/15 22:50:17  jcherry
  309.  * Added FinalizeArgs() for plugins
  310.  *
  311.  * Revision 1.18  2003/12/04 18:10:11  dicuccio
  312.  * Refactored expcetion throwing to make it easier to track errors
  313.  *
  314.  * Revision 1.17  2003/11/26 17:06:32  dicuccio
  315.  * Modified to use standard exception throwing function
  316.  *
  317.  * Revision 1.16  2003/11/06 20:06:29  dicuccio
  318.  * Moved USING_SCOPE(objects) to implementation files
  319.  *
  320.  * Revision 1.15  2003/11/04 17:18:41  dicuccio
  321.  * Changed calling API for plugins - take CPluginMessage directly instead of
  322.  * paired command/reply
  323.  *
  324.  * Revision 1.14  2003/10/23 16:16:12  dicuccio
  325.  * Exposed CPluginLibInfo object
  326.  *
  327.  * Revision 1.13  2003/09/04 14:01:51  dicuccio
  328.  * Introduce IDocument and IView as abstract base classes for CDocument and CView
  329.  *
  330.  * Revision 1.12  2003/08/05 17:07:15  dicuccio
  331.  * Changed calling semantics for the message queue - pass by reference, not
  332.  * CConstRef<>
  333.  *
  334.  * Revision 1.11  2003/07/14 11:00:54  shomrat
  335.  * Plugin messageing system related changes
  336.  *
  337.  * Revision 1.10  2003/06/27 14:37:24  shomrat
  338.  * Added comparison operators == and !=
  339.  *
  340.  * Revision 1.9  2003/06/25 19:54:14  dicuccio
  341.  * Fixed compilation error for Windows - ambiguous op&&
  342.  *
  343.  * Revision 1.8  2003/06/25 17:02:54  dicuccio
  344.  * Split CPluginHandle into a handle (pointer-to-implementation) and
  345.  * implementation file.  Lots of #include file clean-ups.
  346.  *
  347.  * Revision 1.7  2003/06/20 14:47:41  dicuccio
  348.  * Revised handling of plugin registration (moved GetInfo() out of plugin
  349.  * factory and into each handler as a static function)
  350.  *
  351.  * Revision 1.6  2003/05/19 13:35:59  dicuccio
  352.  * Moved gui/core/plugin/ -> gui/plugin/.  Merged gui/core/algo, gui/core/doc/,
  353.  * and gui/core/view/ into one library (gui/core/)
  354.  *
  355.  * Revision 1.5  2003/03/10 22:58:51  kuznets
  356.  * iterate -> ITERATE
  357.  *
  358.  * Revision 1.4  2003/02/28 15:06:39  dicuccio
  359.  * Added enabled flag.  Made help file an optional component
  360.  *
  361.  * Revision 1.3  2003/02/26 14:20:13  dicuccio
  362.  * Removed some unnecessary _TRACE() statements
  363.  *
  364.  * Revision 1.2  2003/02/24 13:03:15  dicuccio
  365.  * Renamed classes in plugin spec:
  366.  *     CArgSeg --> CPluginArgSet
  367.  *     CArgument --> CPluginArg
  368.  *     CPluginArgs --> CPluginCommand
  369.  *     CPluginCommands --> CPluginCommandSet
  370.  *
  371.  * Revision 1.1  2003/02/20 19:49:56  dicuccio
  372.  * Created new plugin architecture, based on ASN.1 spec.  Moved GBENCH frameowrk
  373.  * over to use new plugin architecture.
  374.  *
  375.  * ===========================================================================
  376.  */