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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: doc_loader.hpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/04/12 18:12:12  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.18
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___DATA_LOADER__HPP
  10. #define GUI_CORE___DATA_LOADER__HPP
  11. /*  $Id: doc_loader.hpp,v 1000.4 2004/04/12 18:12:12 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.  *    Base class for all data loader plugins for GBENCH framework.
  40.  */
  41. #include <gui/plugin/PluginCommand.hpp>
  42. #include <gui/plugin/PluginRequest.hpp>
  43. #include <gui/plugin/PluginReply.hpp>
  44. #include <gui/core/plugin.hpp>
  45. #include <gui/core/plugin_exception.hpp>
  46. #include <gui/core/doc_manager.hpp>
  47. BEGIN_NCBI_SCOPE
  48. //
  49. // Base class for all data loaders
  50. //
  51. template<typename LoaderType>
  52. class CDocLoader : public CPlugin<LoaderType>
  53. {
  54. public:
  55.     // virtual destructor for proper inheritance
  56.     virtual ~CDocLoader() { }
  57.     virtual void RunCommand(objects::CPluginMessage& msg);
  58.     // Load() is a virtual hook; this is called from the framework
  59.     // when a document read is requested.
  60.     virtual void Load(objects::CPluginMessage& msg)
  61.     {
  62.         NCBI_THROW(CPluginException, eNotSupported,
  63.                    "This plugin does not support the 'load' command");
  64.     }
  65.     // Import() is a virtual hook; this is called from the
  66.     // framework when a document read is requested.
  67.     virtual void Import(objects::CPluginMessage& msg)
  68.     {
  69.         NCBI_THROW(CPluginException, eNotSupported,
  70.                    "This plugin does not support the 'import' command");
  71.     }
  72.     // Save() is a virtual hook; this is called from the framework
  73.     // when a document write is requested.
  74.     virtual void Save(objects::CPluginMessage& msg)
  75.     {
  76.         NCBI_THROW(CPluginException, eNotSupported,
  77.                    "This plugin does not support the 'save' command");
  78.     }
  79.     // Search() is a virtual hook; this is called from the
  80.     // framework when a search is requested
  81.     virtual void Search(objects::CPluginMessage& msg)
  82.     {
  83.         NCBI_THROW(CPluginException, eNotSupported,
  84.                    "This plugin does not support the 'search' command");
  85.     }
  86.     // Manage() is a virtual hook; this is called from the
  87.     // framework when a management interface is requested
  88.     virtual void Manage(objects::CPluginMessage& msg)
  89.     {
  90.         NCBI_THROW(CPluginException, eNotSupported,
  91.                    "This plugin does not support the 'manage' command");
  92.     }
  93. };
  94. //  template functions implementations
  95. template<typename LoaderType>
  96. void CDocLoader<LoaderType>::RunCommand(objects::CPluginMessage& msg)
  97. {
  98.     const objects::CPluginCommand& cmd = msg.GetRequest().GetCommand();
  99.     if ( !cmd.IsSetCommand() ) {
  100.         NCBI_THROW(CPluginException, eInvalidCommand,
  101.                    "Command not set");
  102.     }
  103.     
  104.     switch ( cmd.GetCommand() ) {
  105.     case objects::eDataCommand_load:
  106.         Load(msg);
  107.         CDocManager::UpdateAllViews(fDocumentCreated);
  108.         break;
  109.         
  110.     case objects::eDataCommand_save:
  111.         Save(msg);
  112.         break;
  113.     case objects::eDataCommand_import:
  114.         Import(msg);
  115.         CDocManager::UpdateAllViews(fDocumentCreated);
  116.         break;
  117.     case objects::eDataCommand_search:
  118.         Search(msg);
  119.         break;
  120.     case objects::eDataCommand_manage:
  121.         Manage(msg);
  122.         break;
  123.         
  124.     default:
  125.         break;
  126.     }
  127. }
  128. END_NCBI_SCOPE
  129. /*
  130.  * ===========================================================================
  131.  * $Log: doc_loader.hpp,v $
  132.  * Revision 1000.4  2004/04/12 18:12:12  gouriano
  133.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.18
  134.  *
  135.  * Revision 1.18  2004/04/07 12:32:54  dicuccio
  136.  * Code clean-up.  Made all APIs public
  137.  *
  138.  * Revision 1.17  2003/12/22 19:11:09  dicuccio
  139.  * Don't include the message queue (not needed)
  140.  *
  141.  * Revision 1.16  2003/11/18 17:35:08  dicuccio
  142.  * Removed unnecessary scoping.
  143.  *
  144.  * Revision 1.15  2003/11/06 19:53:12  dicuccio
  145.  * Added objects:: where needed
  146.  *
  147.  * Revision 1.14  2003/11/04 21:06:32  ucko
  148.  * Properly qualify CPluginCommand with objects::.
  149.  *
  150.  * Revision 1.13  2003/11/04 17:09:04  dicuccio
  151.  * Changed API to take a CPluginMessage instead of a paired command/reply
  152.  *
  153.  * Revision 1.12  2003/10/10 17:10:03  dicuccio
  154.  * Cleaned up comments.  Added new interface function for Import() command
  155.  * (separated from Load())
  156.  *
  157.  * Revision 1.11  2003/08/22 15:54:48  dicuccio
  158.  * General clean-up:  Removed unneeded export specifiers from templates; removed
  159.  * 'USING_SCOPE(objects)'
  160.  *
  161.  * Revision 1.10  2003/07/31 16:40:43  dicuccio
  162.  * Changed functions from pure virtual to virtual with default implementation that
  163.  * throws an exception
  164.  *
  165.  * Revision 1.9  2003/07/14 10:57:27  shomrat
  166.  * Plugin messageing system related changes
  167.  *
  168.  * Revision 1.8  2003/06/25 16:59:41  dicuccio
  169.  * Changed CPluginHandle into a pointer-to-implementation (the previous
  170.  * implementation is now the pointer held).  Lots of #include file clean-ups.
  171.  *
  172.  * Revision 1.7  2003/05/19 13:32:43  dicuccio
  173.  * Moved gui/core/plugin --> gui/plugin/
  174.  *
  175.  * Revision 1.6  2003/02/24 13:00:17  dicuccio
  176.  * Renamed classes in plugin spec:
  177.  *     CArgSeg --> CPluginArgSet
  178.  *     CArgument --> CPluginArg
  179.  *     CPluginArgs --> objects::CPluginCommand
  180.  *     CPluginCommands --> CPluginCommandSet
  181.  *
  182.  * Revision 1.5  2003/02/20 19:44:06  dicuccio
  183.  * Created new plugin architecture, mediated via an ASN.1 spec.  Moved GBENCH
  184.  * framework over to use new plugin architecture.
  185.  *
  186.  * Revision 1.4  2003/01/13 13:11:41  dicuccio
  187.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  188.  * Moved all FLUID-generated code into namespace ncbi.
  189.  *
  190.  * Revision 1.3  2002/12/30 17:48:27  dicuccio
  191.  * Added mechanism for data loader plugins to announce supported modes of
  192.  * operation (load, import, save currently)
  193.  *
  194.  * Revision 1.2  2002/12/19 18:13:02  dicuccio
  195.  * Added export specifiers for Win32.
  196.  *
  197.  * Revision 1.1  2002/11/25 19:26:28  dicuccio
  198.  * Initial revision.
  199.  *
  200.  * ===========================================================================
  201.  */
  202. #endif  // GUI_CORE___DATA_LOADER__HPP