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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbires.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2003/11/18 15:42:49  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.31
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef NCBI_RES__HPP
  10. #define NCBI_RES__HPP
  11. /*  $Id: ncbires.hpp,v 1000.1 2003/11/18 15:42:49 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. * Author: 
  37. * Vsevolod Sandomirskiy
  38. *
  39. * File Description:
  40. *   Basic Resource class
  41. *
  42. * ---------------------------------------------------------------------------
  43. * $Log: ncbires.hpp,v $
  44. * Revision 1000.1  2003/11/18 15:42:49  gouriano
  45. * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.31
  46. *
  47. * Revision 1.31  2003/11/05 18:40:55  dicuccio
  48. * Added export specifiers
  49. *
  50. * Revision 1.30  2003/04/10 19:01:46  siyan
  51. * Added doxygen support
  52. *
  53. * Revision 1.29  1999/08/11 18:33:03  sandomir
  54. * class CNcbiResource more logical (some functionality from CNcbiDbResource moved in CNcbiResource; CNcbiCommand get CNcbiResource in ctor
  55. *
  56. * Revision 1.28  1999/05/11 03:11:47  vakatov
  57. * Moved the CGI API(along with the relevant tests) from "corelib/" to "cgi/"
  58. *
  59. * Revision 1.27  1999/05/06 20:32:51  pubmed
  60. * CNcbiResource -> CNcbiDbResource; utils from query; few more context methods
  61. *
  62. *
  63. * ===========================================================================
  64. */
  65. #include <cgi/ncbicgi.hpp>
  66. #include <cgi/ncbicgir.hpp>
  67. #include <functional>
  68. /** @addtogroup CGICmd
  69.  *
  70.  * @{
  71.  */
  72. BEGIN_NCBI_SCOPE
  73. class CNcbiCommand;
  74. class CNcbiResPresentation;
  75. class CNcbiRegistry;
  76. class CCgiContext;
  77. class CNCBINode;
  78. //
  79. // class CNcbiResource
  80. //
  81. typedef list<CNcbiCommand*> TCmdList;
  82. class NCBI_XCGI_EXPORT CNcbiResource
  83. {
  84. public:
  85.     CNcbiResource(CNcbiRegistry& config);
  86.     virtual ~CNcbiResource( void );
  87.     const CNcbiRegistry& GetConfig(void) const;
  88.     CNcbiRegistry& GetConfig(void);
  89.     virtual const CNcbiResPresentation* GetPresentation( void ) const;
  90.     const TCmdList& GetCmdList( void ) const;
  91.     virtual CNcbiCommand* GetDefaultCommand( void ) const = 0;
  92.     void AddCommand( CNcbiCommand* command );
  93.     virtual void HandleRequest( CCgiContext& ctx );
  94. protected:   
  95.     CNcbiRegistry& m_config;  
  96.     TCmdList m_cmd;
  97. private:
  98.     // hide copy-ctor and operator=
  99.     CNcbiResource( const CNcbiResource& ); 
  100.     CNcbiResource& operator=( const CNcbiResource& );
  101. };
  102. //
  103. // class CNcbiCommand
  104. //
  105. class NCBI_XCGI_EXPORT CNcbiCommand
  106. {
  107. public:
  108.     CNcbiCommand( CNcbiResource& resource );
  109.     virtual ~CNcbiCommand( void );
  110.     virtual CNcbiCommand* Clone( void ) const = 0;
  111.     virtual CNCBINode* GetLogo( const CCgiContext& ) const { return 0; }
  112.     virtual string GetName( void ) const = 0;
  113.     virtual string GetLink( CCgiContext& ctx ) const = 0;
  114.     virtual void Execute( CCgiContext& ctx ) = 0;
  115.     virtual bool IsRequested( const CCgiContext& ctx ) const;
  116. protected:
  117.     virtual string GetEntry() const = 0;
  118.     CNcbiResource& GetResource() const
  119.         { return m_resource; }
  120. private:
  121.     CNcbiResource& m_resource;
  122. };
  123. //
  124. // class CNcbiRelocateCommand
  125. //
  126. class NCBI_XCGI_EXPORT CNcbiRelocateCommand :  public CNcbiCommand
  127. {
  128. public:
  129.     CNcbiRelocateCommand( CNcbiResource& resource );
  130.     virtual ~CNcbiRelocateCommand( void );
  131.     virtual void Execute( CCgiContext& ctx );
  132. };
  133. //
  134. // class CNcbiResPresentation
  135. //
  136. class NCBI_XCGI_EXPORT CNcbiResPresentation
  137. {
  138. public:
  139.     virtual ~CNcbiResPresentation() {}
  140.     virtual CNCBINode* GetLogo( void ) const { return 0; }
  141.     virtual string GetName( void ) const = 0;
  142.     virtual string GetLink( void ) const = 0;
  143. };
  144. //
  145. // PRequested
  146. //
  147. template<class T>
  148. class PRequested : public unary_function<T,bool>
  149. {  
  150.     const CCgiContext& m_ctx;
  151.   
  152. public:
  153.   
  154.     explicit PRequested( const CCgiContext& ctx ) 
  155.         : m_ctx( ctx ) {}
  156.     bool operator() ( const T* t ) const 
  157.         { return t->IsRequested( m_ctx ); }
  158. }; // class PRequested
  159. //
  160. // PFindByName
  161. //
  162. template<class T>
  163. class PFindByName : public unary_function<T,bool>
  164. {  
  165.     const string& m_name;
  166.   
  167. public:
  168.     
  169.     explicit PFindByName( const string& name ) 
  170.         : m_name( name ) {}
  171.     
  172.     bool operator() ( const T* t ) const 
  173.         { return AStrEquiv( m_name, t->GetName(), PNocase() ); }
  174.     
  175. }; // class PFindByName
  176. END_NCBI_SCOPE
  177. #endif /* NCBI_RES__HPP */
  178. /* @} */