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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: user_feat_table_reader.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 20:58:44  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: user_feat_table_reader.cpp,v 1000.3 2004/06/01 20:58:44 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.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbifile.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/utils/system_path.hpp>
  46. #include <gui/core/version.hpp>
  47. #include <gui/plugin/PluginCommandSet.hpp>
  48. #include <gui/plugin/PluginInfo.hpp>
  49. #include <gui/plugin/PluginValueConstraint.hpp>
  50. #include <gui/utils/message_box.hpp>
  51. #include <objmgr/object_manager.hpp>
  52. #include <objects/seqset/Seq_entry.hpp>
  53. #include <serial/iterator.hpp>
  54. #include <serial/objostrasn.hpp>
  55. #include <serial/serial.hpp>
  56. #include "user_feat_table_reader.hpp"
  57. #include <objtools/data_loaders/table/user_feature_dload.hpp>
  58. #include <sqlite/sqlite.hpp>
  59. BEGIN_NCBI_SCOPE
  60. USING_SCOPE(objects);
  61. void CUsrFeatTableReader::GetInfo(CPluginInfo& info)
  62. {
  63.     info.Reset();
  64.     // version info macro
  65.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  66.                  string(__DATE__) + " " + string(__TIME__),
  67.                  "CUsrFeatTableReader",
  68.                  "Tabular user features",
  69.                  "Load the contents of a table of user features",
  70.                  "");
  71.     // command info
  72.     CPluginCommandSet& cmds     = info.SetCommands();
  73.     CPluginCommand& import_args = cmds.AddDataCommand(eDataCommand_import);
  74.     import_args.AddArgument("id", "ID",
  75.                             CSeq_id::GetTypeInfo(),
  76.                             CPluginArg::TData::e_Single);
  77.     
  78.     import_args.AddArgument("fname", "File to load", CPluginArg::eFile);
  79.     import_args.AddDefaultArgument("offset", "Numbering convention in file",
  80.                                    CPluginArg::eString, 
  81.                                    "Start of sequence is 1");
  82.     import_args.SetConstraint("offset", (*CPluginValueConstraint::CreateSet(),
  83.                                           "Start of sequence is 1",
  84.                                           "Start of sequence is 0"));
  85.     import_args.AddDefaultArgument("mode", "Accession to use",
  86.                                    CPluginArg::eString,
  87.                                    "Get accession from file");
  88.     import_args.SetConstraint("mode", (*CPluginValueConstraint::CreateSet(),
  89.                                        "Get accession from file",
  90.                                        "Use this ID"));
  91.     import_args.AddOptionalArgument("type",
  92.                       ""type" of user feature (overrides any in file)",
  93.                        CPluginArg::eString);
  94. }
  95. void CUsrFeatTableReader::Import(CPluginMessage& msg)
  96. {
  97.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  98.     CPluginReply& reply = msg.SetReply();
  99.     const CPluginArg& arg = args["id"];
  100.     IDocument* doc = const_cast<IDocument*>(arg.GetDocument());
  101.     const CSeq_id* id = dynamic_cast<const CSeq_id*>(arg.GetObject());
  102.     const string& fname = args["fname"].AsString();
  103.     CUsrFeatDataLoader* loader = NULL;
  104.     TLoaders::iterator iter = m_Loaders.find(fname);
  105.     if (iter != m_Loaders.end()) {
  106.         loader = iter->second;
  107.     }
  108.     string import_name;
  109.     bool delete_file = true;
  110.     if ( !CSQLite::IsValidDB(fname) ) {
  111.         if (NcbiMessageBox("Do you want to save the generated SQL file "
  112.                            "for future use?",
  113.                            eDialog_YesNo, eIcon_Question,
  114.                            "Save SQL File?") == eYes) {
  115.             import_name = fname;
  116.             import_name += ".db";
  117.             delete_file = false;
  118.         }
  119.     } else {
  120.         import_name = fname;
  121.         delete_file = false;
  122.     }
  123.     if (import_name.empty()) {
  124.         import_name = CSystemPath::ResolvePath("<home>", "tmp");
  125.         CDir dir(import_name);
  126.         if ( !dir.Exists() ) {
  127.             dir.Create();
  128.         }
  129.         import_name = CFile::GetTmpNameEx(import_name, "tdb_");
  130.     }
  131.     // figure out parameters
  132.     string offset_string = args["offset"].AsString();
  133.     CUsrFeatDataLoader::EOffset offset;
  134.     if (offset_string == "Start of sequence is 0") {
  135.         offset = CUsrFeatDataLoader::eBeginIsZero;
  136.     } else {
  137.         offset = CUsrFeatDataLoader::eBeginIsOne;
  138.     }
  139.     const CSeq_id* id_to_use = 0;
  140.     if (args["mode"].AsString() == "Use this ID") {
  141.         id_to_use = id;
  142.     }
  143.     string type_string;
  144.     if (args.HasArgument("type")  &&
  145.         CPluginUtils::IsValid(args["type"])) {
  146.         type_string = args["type"].AsString();
  147.     }
  148.     if ( !loader ) {
  149.         try {
  150.             loader = new CUsrFeatDataLoader(fname, import_name,
  151.                                             delete_file, offset,
  152.                                             type_string, id_to_use);
  153.         }
  154.         catch (exception& e) {
  155.             NcbiMessageBox(e.what(), eDialog_Ok, eIcon_Exclamation);
  156.             reply.SetStatus(eMessageStatus_failed);
  157.             return;
  158.         }
  159.         CDocManager::GetObjectManager().RegisterDataLoader(*loader);
  160.         m_Loaders[loader->GetName()] = loader;
  161.     }
  162.     // create our data loader
  163.     CScope& scope = doc->GetScope();
  164.     scope.AddDataLoader(loader->GetName(), 80);
  165.     doc->PostDocumentChanged();
  166.     reply.SetStatus(eMessageStatus_success);
  167. }
  168. END_NCBI_SCOPE
  169. /*
  170.  * ===========================================================================
  171.  * $Log: user_feat_table_reader.cpp,v $
  172.  * Revision 1000.3  2004/06/01 20:58:44  gouriano
  173.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  174.  *
  175.  * Revision 1.9  2004/05/21 22:27:48  gorelenk
  176.  * Added PCH ncbi_pch.hpp
  177.  *
  178.  * Revision 1.8  2004/02/17 20:35:28  rsmith
  179.  * moved core/settings.[ch]pp and core/system_path.[ch]pp to config and utils, respectively.
  180.  *
  181.  * Revision 1.7  2004/02/17 15:17:31  jcherry
  182.  * Removed help url in favor of new help system
  183.  *
  184.  * Revision 1.6  2004/02/11 21:01:52  jcherry
  185.  * Use file argument rather than manually launching file chooser
  186.  *
  187.  * Revision 1.5  2004/01/27 18:45:34  dicuccio
  188.  * Added missing header files
  189.  *
  190.  * Revision 1.4  2003/12/22 19:30:11  dicuccio
  191.  * Updated to match change in IDocument - UpdateAllViews() goes away
  192.  *
  193.  * Revision 1.3  2003/11/24 15:45:41  dicuccio
  194.  * Renamed CVersion to CPluginVersion
  195.  *
  196.  * Revision 1.2  2003/11/14 21:30:15  jcherry
  197.  * Added url for help
  198.  *
  199.  * Revision 1.1  2003/11/14 19:09:19  jcherry
  200.  * Initial version
  201.  *
  202.  * ===========================================================================
  203.  */