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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: hellocmd.cpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 18:32:38  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: hellocmd.cpp,v 1000.0 2004/06/01 18:32:38 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.  * Author:  Lewis Geer, Vsevolod Sandomirskiy, etc.
  35.  *
  36.  * File Description:  
  37.  *   These are the commands triggered by cgi parameters.
  38.  *   These command classes construct the html pages returned to the user.
  39.  *
  40.  */
  41. #include <ncbi_pch.hpp>
  42. #include "hellores.hpp"
  43. #include "hellocmd.hpp"
  44. #include <corelib/ncbistd.hpp>
  45. #include <cgi/cgictx.hpp>
  46. #include <corelib/ncbireg.hpp>
  47. #include <html/page.hpp>
  48. #include <memory>
  49. BEGIN_NCBI_SCOPE
  50. CHelloCommand::CHelloCommand( CNcbiResource& resource )
  51.   : CNcbiCommand( resource )
  52. {}
  53. CHelloCommand::~CHelloCommand()
  54. {}
  55. //
  56. // GetEntry() returns the string used to match the name in a cgi request.
  57. // e.g. for "?cmd=search", GetEntry should return "cmd"
  58. //
  59. string CHelloCommand::GetEntry() const
  60. {
  61.     return string("cmd");  // set the value of this string in helloapi.cpp
  62. }
  63. void CHelloCommand::Execute( CCgiContext& ctx )
  64. {
  65.     const CNcbiRegistry& reg = ctx.GetConfig();
  66.     
  67.     // load in the html template file
  68.     string baseFile = reg.Get( "filesystem", "HtmlBaseFile" );
  69. auto_ptr<CHTMLPage> page( new CHTMLPage( NcbiEmptyString, baseFile ) );
  70.     
  71.     // set up to replace <@VIEW@> in template file with html returned
  72.     // from CreateView
  73. page->AddTagMap( "VIEW", CreateView( ctx ) );
  74. // actual page output
  75.     ctx.GetResponse().WriteHeader();
  76.     page->Print(ctx.GetResponse().out(), CNCBINode::eHTML );
  77. }
  78. //
  79. // CHelloBasicCommand
  80. //
  81. CHelloBasicCommand::CHelloBasicCommand( CNcbiResource& resource )
  82.   : CHelloCommand( resource )
  83. {}
  84. CHelloBasicCommand::~CHelloBasicCommand( void )
  85. {}
  86. CNcbiCommand* CHelloBasicCommand::Clone( void ) const
  87. {
  88.     return new CHelloBasicCommand( GetHelloResource() );
  89. }
  90. //
  91. // GetName() returns the string used to match the value in a cgi request.
  92. // e.g. for "?cmd=search", GetName() should return "search"
  93. //
  94. string CHelloBasicCommand::GetName( void ) const
  95. {
  96.     return string("init"); // set the value of this string in helloapi.cpp
  97. }
  98. //
  99. //  CreateView() is the function that creates the html to replace
  100. //  the <@VIEW@> tag in the HtmlBaseFile
  101. //
  102. CNCBINode* CHelloBasicCommand::CreateView( CCgiContext& ctx)
  103. {
  104.     const CNcbiRegistry& reg = ctx.GetConfig();
  105.      
  106.     auto_ptr <CHTML_form> Form(new CHTML_form(reg.Get("html", "URL")));    
  107.                                  
  108.     Form->AppendChild(new CHTML_text("input", 40));
  109.     Form->AddHidden(GetEntry(), "reply");
  110.     Form->AppendChild(new CHTML_submit("Go","submit"));
  111.     return Form.release();
  112. }
  113. //
  114. // CHelloReplyCommand
  115. //
  116. CHelloReplyCommand::CHelloReplyCommand( CNcbiResource& resource )
  117.   : CHelloBasicCommand( resource )
  118. {}
  119. CHelloReplyCommand::~CHelloReplyCommand( void )
  120. {}
  121. CNcbiCommand* CHelloReplyCommand::Clone( void ) const
  122. {
  123.     return new CHelloReplyCommand( GetHelloResource() );
  124. }
  125. //
  126. // GetName() returns the string used to match the value in a cgi request.
  127. // e.g. for "?cmd=search", GetName() should return "search"
  128. //
  129. string CHelloReplyCommand::GetName( void ) const
  130. {
  131.     return string("reply"); // set the value of this string in helloapi.cpp
  132. }
  133. //
  134. //  CreateView() is the function that creates the html to replace
  135. //  the <@VIEW@> tag in the HtmlBaseFile
  136. //
  137. CNCBINode* CHelloReplyCommand::CreateView( CCgiContext& ctx)
  138. {
  139.     auto_ptr <CHTMLText> Reply(new CHTMLText("Hello"));
  140.   
  141.     // get the list of cgi request name, value pairs
  142.     TCgiEntries& entries = const_cast<TCgiEntries&>
  143.         (ctx.GetRequest().GetEntries());
  144.     // look for ones where the name is "input" 
  145.     pair<TCgiEntriesI,TCgiEntriesI> p = entries.equal_range("input");
  146.     
  147.     // print the values associated with input to the html page
  148.     for(TCgiEntriesI i = p.first; i != p.second; ++i) {
  149.         Reply->AppendChild(new CHTMLText(", "));
  150.         Reply->AppendChild(new CHTMLPlainText(i->second));
  151.     }
  152.     Reply->AppendChild(new CHTML_br);
  153.     Reply->AppendChild(CHelloBasicCommand::CreateView(ctx));
  154.   
  155.     return Reply.release();
  156. }
  157. END_NCBI_SCOPE
  158. /*
  159.  * ===========================================================================
  160.  * $Log: hellocmd.cpp,v $
  161.  * Revision 1000.0  2004/06/01 18:32:38  gouriano
  162.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  163.  *
  164.  * Revision 1.2  2004/05/21 21:41:41  gorelenk
  165.  * Added PCH ncbi_pch.hpp
  166.  *
  167.  * Revision 1.1  2004/05/04 14:44:21  kuznets
  168.  * MOving from the root "hello" to the new location
  169.  *
  170.  * Revision 1.5  2002/04/16 18:50:30  ivanov
  171.  * Centralize threatment of assert() in tests.
  172.  * Added #include <test/test_assert.h>. CVS log moved to end of file.
  173.  *
  174.  * Revision 1.4  1999/11/10 20:11:00  lewisg
  175.  * clean out unnecessary code
  176.  *
  177.  * Revision 1.3  1999/11/10 01:01:06  lewisg
  178.  * get rid of namespace
  179.  *
  180.  * Revision 1.2  1999/10/28 20:08:24  lewisg
  181.  * add commands and  comments
  182.  *
  183.  * Revision 1.1  1999/10/25 21:15:54  lewisg
  184.  * first draft of simple cgi app
  185.  *
  186.  * ===========================================================================
  187.  */