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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_id1_client.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:32:42  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_id1_client.cpp,v 1000.1 2004/06/01 19:32:42 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:  Aaron M. Ucko
  35. *
  36. * File Description:
  37. *   test of datatool-generated ID1 client class
  38. *
  39. * ===========================================================================
  40. */
  41. #include <ncbi_pch.hpp>
  42. #include <corelib/ncbiapp.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <corelib/ncbienv.hpp>
  45. #include <connect/ncbi_core_cxx.hpp>
  46. #include <serial/objostrasn.hpp>
  47. #include <objects/id1/Entry_complexities.hpp>
  48. #include <objects/id1/ID1Seq_hist.hpp>
  49. #include <objects/id1/ID1server_maxcomplex.hpp>
  50. #include <objects/id1/id1_client.hpp>
  51. #include <objects/seqloc/Seq_id.hpp>
  52. #include <objects/seqset/Seq_entry.hpp>
  53. USING_NCBI_SCOPE;
  54. USING_SCOPE(objects);
  55. class CTestID1ClientApp : public CNcbiApplication
  56. {
  57. public:
  58.     void Init(void);
  59.     int  Run(void);
  60. private:
  61.     void RunCommand(const string& command);
  62.     CRef<CID1Client>         m_Client;
  63.     CNcbiOstream*            m_Out;
  64.     auto_ptr<CObjectOStream> m_OutAsn;
  65. };
  66. void CTestID1ClientApp::Init(void)
  67. {
  68.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  69.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  70.                               "simple ID1 client to test datatool changes");
  71.     arg_desc->AddDefaultKey("in", "Filename",
  72.                             "Read commands from <Filename> (default: stdin)",
  73.                             CArgDescriptions::eInputFile, "-",
  74.                             CArgDescriptions::fPreOpen);
  75.     arg_desc->AddDefaultKey("out", "Filename",
  76.                             "Write output to <Filename> (default: stdout)",
  77.                             CArgDescriptions::eOutputFile, "-",
  78.                             CArgDescriptions::fPreOpen);
  79.     SetupArgDescriptions(arg_desc.release());
  80. }
  81. int CTestID1ClientApp::Run(void)
  82. {
  83.     // Setup application registry, error log, and MT-lock for CONNECT library
  84.     CONNECT_Init(&GetConfig());
  85.     const CArgs&  args = GetArgs();
  86.     CNcbiIstream& in   = args["in"].AsInputFile();
  87.     m_Out    = &args["out"].AsOutputFile();
  88.     m_OutAsn.reset(new CObjectOStreamAsn(*m_Out));
  89.     m_Client = new CID1Client;
  90.     string command;
  91.     while ( !in.eof() ) {
  92.         *m_Out << "-- " << flush;
  93.         NcbiGetlineEOL(in, command);
  94.         command = NStr::TruncateSpaces(command);
  95.         if (command == "exit"  ||  command == "quit") {
  96.             break;
  97.         }
  98.         if ( !command.empty() ) {
  99.             RunCommand(command);
  100.         }
  101.     }
  102.     *m_Out << endl;
  103.     return 0;
  104. }
  105. void CTestID1ClientApp::RunCommand(const string& command)
  106. {
  107.     list<string> args;
  108.     NStr::Split(command, " ", args);
  109.     string verb = args.front();
  110.     args.pop_front();
  111.     if (verb == "help") {
  112.         *m_Out << "commands:" << endl;
  113.         *m_Out << "  connect" << endl;
  114.         *m_Out << "  disconnect" << endl;
  115.         *m_Out << "  quit, exit" << endl;
  116.         *m_Out << "  reconnect" << endl;
  117.         *m_Out << "  getgi <accession>" << endl;
  118.         *m_Out << "  getgihist <gi number>" << endl;
  119.         *m_Out << "  getgirev <gi number>" << endl;
  120.         *m_Out << "  getgistate <gi number>" << endl;
  121.         *m_Out << "  getsefromgi <gi number>" << endl;
  122.         *m_Out << "  getseqidsfromgi <gi number>" << endl;
  123.     } else if (verb == "connect") {
  124.         m_Client->Connect();
  125.     } else if (verb == "disconnect") {
  126.         m_Client->Disconnect();
  127.     } else if (verb == "reconnect") {
  128.         m_Client->Reset();
  129.     } else if (verb == "reset") {
  130.         m_Client.Reset(new CID1Client);
  131.     } else if (verb == "getgi") {
  132.         CSeq_id id(args.front());
  133.         *m_Out << m_Client->AskGetgi(id) << endl;
  134.     } else if (verb == "getsefromgi") {
  135.         CID1server_maxcomplex maxplex;
  136.         maxplex.SetMaxplex(eEntry_complexities_entry);
  137.         maxplex.SetGi(NStr::StringToInt(args.front()));
  138.         *m_OutAsn << *m_Client->AskGetsefromgi(maxplex);
  139.         m_OutAsn->Flush();
  140.     } else if (verb == "getseqidsfromgi") {
  141.         int gi = NStr::StringToInt(args.front());
  142.         CID1server_back::TIds ids = m_Client->AskGetseqidsfromgi(gi);
  143.         ITERATE (CID1server_back::TIds, id, ids) {
  144.             *m_Out << (*id)->DumpAsFasta() << endl;
  145.         }
  146.     } else if (verb == "getgihist") {
  147.         int gi = NStr::StringToInt(args.front());
  148.         typedef list< CRef<CID1Seq_hist> > THistory;
  149.         THistory hist = m_Client->AskGetgihist(gi);
  150.         ITERATE (THistory, iter, hist) {
  151.             *m_OutAsn << **iter;
  152.         }
  153.         m_OutAsn->Flush();
  154.     } else if (verb == "getgirev") {
  155.         int gi = NStr::StringToInt(args.front());
  156.         typedef list< CRef<CID1Seq_hist> > THistory;
  157.         THistory hist = m_Client->AskGetgirev(gi);
  158.         ITERATE (THistory, iter, hist) {
  159.             *m_OutAsn << **iter;
  160.         }
  161.         m_OutAsn->Flush();
  162.     } else if (verb == "getgistate") {
  163.         int gi = NStr::StringToInt(args.front());
  164.         *m_Out << m_Client->AskGetgistate(gi) << endl;
  165.     } else {
  166.         ERR_POST("Unrecognized command "" << command << """);
  167.     }
  168. }
  169. int main(int argc, const char* argv[])
  170. {
  171.     return CTestID1ClientApp().AppMain(argc, argv, 0, eDS_Default, 0);
  172. }
  173. /*
  174. * ===========================================================================
  175. *
  176. * $Log: test_id1_client.cpp,v $
  177. * Revision 1000.1  2004/06/01 19:32:42  gouriano
  178. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  179. *
  180. * Revision 1.6  2004/05/19 17:22:59  gorelenk
  181. * Added include of PCH - ncbi_pch.hpp
  182. *
  183. * Revision 1.5  2003/04/09 16:00:14  ucko
  184. * Give all RPC clients unique basenames.
  185. *
  186. * Revision 1.4  2003/03/11 15:39:12  kuznets
  187. * iterate -> ITERATE
  188. *
  189. * Revision 1.3  2002/12/23 15:32:08  dicuccio
  190. * Added 'help' command.  Implemented getgihist and getgirev commands.
  191. *
  192. * Revision 1.2  2002/11/13 21:12:52  ucko
  193. * Fixed code introduced without a test compile.  (Oops.)
  194. *
  195. * Revision 1.1  2002/11/13 20:13:46  ucko
  196. * Add datatool-generated client classes
  197. *
  198. *
  199. * ===========================================================================
  200. */