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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: agp_reader.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:57:21  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: agp_reader.cpp,v 1000.1 2004/06/01 20:57:21 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:  Josh Cherry
  35.  *
  36.  * File Description:
  37.  *    CDataPlugin_AgpReader - load information from an agp file
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "agp_reader.hpp"
  41. #include <gui/core/doc_exception.hpp>
  42. #include <gui/core/doc_manager.hpp>
  43. #include <gui/core/idocument.hpp>
  44. #include <gui/core/plugin_utils.hpp>
  45. #include <gui/core/version.hpp>
  46. #include <gui/plugin/PluginCommandSet.hpp>
  47. #include <gui/plugin/PluginInfo.hpp>
  48. #include <gui/plugin/PluginValueConstraint.hpp>
  49. #include <gui/utils/message_box.hpp>
  50. #include <gui/objutils/utils.hpp>
  51. #include <objects/general/Object_id.hpp>
  52. #include <objects/seq/Seqdesc.hpp>
  53. #include <objects/seq/Seq_descr.hpp>
  54. #include <objtools/readers/agp_read.hpp>
  55. BEGIN_NCBI_SCOPE
  56. USING_SCOPE(objects);
  57. static const string sc_separate = "Load each sequence as a separate document";
  58. static const string sc_together = "Group all sequences in a single document";
  59. //
  60. // factory implementations
  61. //
  62. void CDataPlugin_AgpReader::GetInfo(CPluginInfo& info)
  63. {
  64.     info.Reset();
  65.     // version info macro
  66.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  67.                  string(__DATE__) + " " + string(__TIME__),
  68.                  "CDataPlugin_AgpReader",
  69.                  "AGP File", "Read a file in AGP format",
  70.                  "");
  71.     // command info
  72.     CPluginCommandSet& cmds     = info.SetCommands();
  73.     CPluginCommand& load_args   = cmds.AddDataCommand(eDataCommand_load);
  74.     load_args.AddArgument("fname", "File to load", CPluginArg::eFile);
  75.     load_args.AddDefaultArgument("mode", "Treatment of multiple sequences",
  76.                                  CPluginArg::eString, sc_separate);
  77.     load_args.SetConstraint("mode", (*CPluginValueConstraint::CreateSet(),
  78.                                      sc_separate, sc_together));
  79. }
  80. //
  81. // Default ctor
  82. //
  83. CDataPlugin_AgpReader::CDataPlugin_AgpReader()
  84. {
  85. }
  86. //
  87. // One and only dtor
  88. //
  89. CDataPlugin_AgpReader::~CDataPlugin_AgpReader()
  90. {
  91. }
  92. //
  93. // Load()
  94. // This is a pure virtual requirement and is the main plugin hook.
  95. //
  96. void CDataPlugin_AgpReader::Load(CPluginMessage& msg)
  97. {
  98.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  99.     CPluginReply& reply = msg.SetReply();
  100.     const string& fname = args["fname"].AsString();
  101.     try {
  102.         CNcbiIfstream istr(fname.c_str());
  103.         if (args["mode"].AsString() == sc_separate) {
  104.             vector<CRef<CSeq_entry> > entries;
  105.             AgpRead(istr, entries);
  106.             
  107.             NON_CONST_ITERATE(vector<CRef<CSeq_entry> >, iter, entries) {
  108.                 CRef<CSeq_entry> &entry = *iter;
  109.                 CRef<CScope> 
  110.                     scope(new CScope(CDocManager::GetObjectManager()));
  111.                 scope->AddTopLevelSeqEntry(*entry);
  112.                 scope->AddDefaults();
  113.                 IDocument* doc = CDocManager::CreateDocument(*scope, *entry);
  114.                 reply.AddObject(*doc);
  115.             }
  116.         } else if (args["mode"].AsString() == sc_together) {
  117.             CRef<CBioseq_set> bioseq_set = AgpRead(istr);
  118.             CRef<CSeqdesc> title(new CSeqdesc);
  119.             title->SetTitle(string("Sequences from file ") + fname);
  120.             bioseq_set->SetDescr().Set().push_back(title);
  121.             CRef<CSeq_entry> entry(new CSeq_entry);
  122.             entry->SetSet(*bioseq_set);
  123.             CRef<CScope> scope(new CScope(CDocManager::GetObjectManager()));
  124.             scope->AddTopLevelSeqEntry(*entry);
  125.             scope->AddDefaults();
  126.             IDocument* doc = CDocManager::CreateDocument(*scope, *entry);
  127.             reply.AddObject(*doc);
  128.         } else {
  129.             throw runtime_error(string("invalid load mode: ")
  130.                                 + args["mode"].AsString());
  131.         }
  132.         reply.SetStatus(eMessageStatus_success);
  133.     }
  134.     catch (exception& _DEBUG_ARG(e)) {
  135.         _TRACE("failed to read agp: " << e.what());
  136.     }
  137.     catch (...) {
  138.         _TRACE("failed to read agp: unknown error");
  139.     }
  140. }
  141. END_NCBI_SCOPE
  142. /*
  143.  * ===========================================================================
  144.  * $Log: agp_reader.cpp,v $
  145.  * Revision 1000.1  2004/06/01 20:57:21  gouriano
  146.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  147.  *
  148.  * Revision 1.10  2004/05/25 17:21:59  dicuccio
  149.  * Modified class names.  Fonts to 12 point
  150.  *
  151.  * Revision 1.9  2004/05/21 22:27:48  gorelenk
  152.  * Added PCH ncbi_pch.hpp
  153.  *
  154.  * Revision 1.8  2004/05/03 13:05:42  dicuccio
  155.  * gui/utils --> gui/objutils where needed
  156.  *
  157.  * Revision 1.7  2004/03/16 15:59:50  vasilche
  158.  * Removed warning about unused exception variable
  159.  *
  160.  * Revision 1.6  2004/02/17 15:17:31  jcherry
  161.  * Removed help url in favor of new help system
  162.  *
  163.  * Revision 1.5  2004/02/11 21:01:51  jcherry
  164.  * Use file argument rather than manually launching file chooser
  165.  *
  166.  * Revision 1.4  2004/01/27 18:45:31  dicuccio
  167.  * Added missing header files
  168.  *
  169.  * Revision 1.3  2003/12/10 15:09:32  dicuccio
  170.  * Changed menu item - capitalize AGP
  171.  *
  172.  * Revision 1.2  2003/12/09 21:33:54  jcherry
  173.  * Added url for help
  174.  *
  175.  * Revision 1.1  2003/12/09 00:20:09  jcherry
  176.  * Initial version
  177.  *
  178.  * ===========================================================================
  179.  */