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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: validator_plg.cpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 20:57:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.22
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: validator_plg.cpp,v 1000.4 2004/06/01 20:57:16 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: Mati Shomrat
  35.  *
  36.  * File Description:
  37.  *    A plugin wrap for the validator
  38.  *    
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbistd.hpp>
  42. #include <gui/core/doc_manager.hpp>
  43. #include <gui/core/idocument.hpp>
  44. #include <gui/core/version.hpp>
  45. #include <gui/core/plugin_utils.hpp>
  46. #include <gui/plugin/PluginArg.hpp>
  47. #include <gui/plugin/PluginRequest.hpp>
  48. #include <gui/plugin/PluginArgSet.hpp>
  49. #include <gui/plugin/PluginCommandSet.hpp>
  50. #include <gui/plugin/PluginInfo.hpp>
  51. #include <gui/plugin/PluginReply.hpp>
  52. #include <gui/plugin/PluginValue.hpp>
  53. #include <gui/utils/message_box.hpp>
  54. #include <objects/seq/Seq_annot.hpp>
  55. #include <objects/seqset/Seq_entry.hpp>
  56. #include <objects/submit/Seq_submit.hpp>
  57. #include <objmgr/object_manager.hpp>
  58. #include <objmgr/scope.hpp>
  59. #include <objtools/validator/validator.hpp>
  60. #include <FL/Fl.H>
  61. #include "validator_plg.hpp"
  62. #include "val_progress.hpp"
  63. BEGIN_NCBI_SCOPE
  64. USING_SCOPE(ncbi::objects);
  65. USING_SCOPE(ncbi::validator);
  66. USING_SCOPE(ncbi::validator);
  67. void CValidatorPlugin::GetInfo(CPluginInfo& info)
  68. {
  69.     info.Reset();
  70.     // version info macro
  71.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  72.                  string(__DATE__) + " " + string(__TIME__),
  73.                  "CValidatorPlugin", "Validate",
  74.                  "Validate the content of the current selections",
  75.                  "");
  76.     // command info
  77.     CPluginCommand& cmd =
  78.         info.SetCommands().AddAlgoCommand(eAlgoCommand_run);
  79.     // IMPORTANT: The validator take either a Seq-entry, Seq_submit
  80.     //  or Seq_annot as the object to validate. Due to lack of 
  81.     //  support from CPluginArg::EType we use eObject as our 
  82.     //  type.
  83.     cmd.AddArgument("object", "Object to validate",
  84.                     CSeq_entry::GetTypeInfo());
  85.     //cmd. AddDefaultArgument("options", "Validator options",
  86.     //    CPluginArg::eInteger, 0);
  87. }
  88. void CValidatorPlugin::RunCommand(CPluginMessage& msg)
  89. {
  90.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  91.     CPluginReply& reply = msg.SetReply();
  92.     _TRACE("CValidatorPlugin::Run()");
  93.     try {
  94.         const CPluginArg& arg = args["object"];
  95.         // our argument should have only one value
  96.         const CSeq_entry& se  =
  97.             *dynamic_cast<const CSeq_entry*>(arg.GetObject());
  98.         const IDocument&  doc = *arg.GetDocument();
  99.         CScope* scope = &doc.GetScope();
  100.         CObjectManager& objmgr = CDocManager::GetObjectManager();
  101.         Uint4 options = GetOptions();
  102.         // Create the validator
  103.         CRef<CValidator> validator(new CValidator(objmgr));
  104.         // Register progress callback
  105.         auto_ptr<CValProgress> dlg_prg(new CValProgress);
  106.         dlg_prg->show();
  107.         validator->SetProgressCallback(x_ProgressCallback, dlg_prg.get());
  108.         
  109.         // Perform validation
  110.         CConstRef<CValidError> errors;
  111.         errors.Reset
  112.             (validator->Validate(se, scope, options).Release());
  113.         /**
  114.         case CPluginArg::eSeq_annot:
  115.             {{
  116.                 const CSeq_annot& sa = args["object"].AsSeq_annot();
  117.                 obj = &sa;            
  118.                 errors.Reset(validator->Validate(sa, scope, options).release());
  119.             }}
  120.             break;
  121.             
  122.         default:
  123.             {{
  124.                 const CSeq_submit& ss = 
  125.                     dynamic_cast<const CSeq_submit&>(args["object"].AsObject());
  126.                 obj = &ss;
  127.                 errors.Reset(validator->Validate(ss, scope, options).release());
  128.             }}
  129.             break;
  130.         }
  131.         **/
  132.         x_PostViewRequest(doc, errors, se, *scope, options);
  133.         reply.SetStatus(eMessageStatus_success);
  134.     } catch ( const exception& ) {
  135.         reply.SetStatus(eMessageStatus_failed);
  136.         return;
  137.     } 
  138. }
  139. CValidatorPlugin::CValidatorPlugin(void)
  140. {
  141. }
  142. CValidatorPlugin::~CValidatorPlugin(void)
  143. {
  144. }
  145. // =============================== Private ===================================
  146. Uint4 CValidatorPlugin::GetOptions(void) 
  147. {
  148.     return 0;
  149. }
  150. void CValidatorPlugin::x_PostViewRequest
  151. (const IDocument& doc,
  152.  CConstRef<CValidError> errors,
  153.  const CObject& obj,
  154.  const CScope& scope,
  155.  Uint4 options) const
  156. {
  157.     if ( !errors ) {
  158.         return;
  159.     }
  160.     CRef<CPluginMessage> msg(new CPluginMessage);
  161.     msg->SetDestination("CViewValidator");
  162.     CPluginCommand& view_request = msg->SetRequest().SetView();
  163.     view_request.SetCommand(eViewCommand_new_view);
  164.     // document
  165.     CRef<CPluginArg> doc_pa(new CPluginArg);
  166.     doc_pa->SetName("document");
  167.     doc_pa->SetDocument(doc);
  168.     
  169.     // validerror (error repository)
  170.     CRef<CPluginArg> err_pa(new CPluginArg);
  171.     err_pa->SetName("errors");
  172.     err_pa->SetObject(doc, *errors);
  173.     
  174.     // The object which was validated
  175.     CRef<CPluginArg> obj_pa(new CPluginArg);
  176.     obj_pa->SetName("object");
  177.     obj_pa->SetObject(doc, obj);
  178.     // scope 
  179.     CRef<CPluginArg> scope_pa(new CPluginArg);
  180.     scope_pa->SetName("scope");
  181.     scope_pa->SetObject(doc, scope);
  182.     
  183.     // options
  184.     CRef<CPluginArg> options_pa(new CPluginArg);
  185.     options_pa->SetName("options");
  186.     options_pa->SetInteger(options);
  187.     CPluginArgSet::Tdata& view_args = view_request.SetArgs().Set();
  188.     view_args.push_back(doc_pa);
  189.     view_args.push_back(err_pa);
  190.     view_args.push_back(obj_pa);
  191.     view_args.push_back(scope_pa);
  192.     view_args.push_back(options_pa);
  193.     CPluginUtils::CallPlugin(*msg);
  194. }
  195. // callback function
  196. bool CValidatorPlugin::x_ProgressCallback(CValidator::CProgressInfo* pInfo)
  197. {
  198.     Fl::check();
  199.     if ( pInfo == 0 ) {
  200.         return false;
  201.     }
  202.     
  203.     CValProgress* pDlg = reinterpret_cast<CValProgress*>(pInfo->GetUserData());
  204.     if( !pDlg ) {
  205.         return false;
  206.     }
  207.     if ( !pDlg->Cancel() ) {
  208.         pDlg->Update(pInfo);
  209.     } else {
  210.         return true;
  211.     }
  212.     return false;
  213. }
  214. END_NCBI_SCOPE
  215. /*
  216.  * ===========================================================================
  217.  *
  218.  * $Log: validator_plg.cpp,v $
  219.  * Revision 1000.4  2004/06/01 20:57:16  gouriano
  220.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.22
  221.  *
  222.  * Revision 1.22  2004/05/21 22:27:48  gorelenk
  223.  * Added PCH ncbi_pch.hpp
  224.  *
  225.  * Revision 1.21  2004/01/27 18:45:29  dicuccio
  226.  * Added missing header files
  227.  *
  228.  * Revision 1.20  2003/12/22 19:27:49  dicuccio
  229.  * Use CPluginUtils::CallPlugin() instead of posting directly to the message queue
  230.  *
  231.  * Revision 1.19  2003/11/24 15:45:32  dicuccio
  232.  * Renamed CVersion to CPluginVersion
  233.  *
  234.  * Revision 1.18  2003/11/04 17:49:24  dicuccio
  235.  * Changed calling parameters for plugins - pass CPluginMessage instead of paired
  236.  * CPluginCommand/CPluginReply
  237.  *
  238.  * Revision 1.17  2003/10/07 13:47:05  dicuccio
  239.  * Renamed CPluginURL* to CPluginValue*
  240.  *
  241.  * Revision 1.16  2003/09/04 14:05:25  dicuccio
  242.  * Use IDocument instead of CDocument
  243.  *
  244.  * Revision 1.15  2003/08/05 17:07:17  dicuccio
  245.  * Changed calling semantics for the message queue - pass by reference, not
  246.  * CConstRef<>
  247.  *
  248.  * Revision 1.14  2003/07/31 17:02:27  dicuccio
  249.  * Changed plugin message queue class name to be application agnostic
  250.  *
  251.  * Revision 1.13  2003/07/22 15:32:16  dicuccio
  252.  * Changed to make use of new API in plugin_utils.hpp - GetArgValue()
  253.  *
  254.  * Revision 1.12  2003/07/14 11:16:11  shomrat
  255.  * Plugin messageing system related changes
  256.  *
  257.  * Revision 1.11  2003/06/26 15:33:40  dicuccio
  258.  * Moved GetURLValue() from PluginURL.hpp to plugin_utils.hpp.  Fixed compilation
  259.  * errors relating to missing #includes
  260.  *
  261.  * Revision 1.10  2003/06/25 17:02:58  dicuccio
  262.  * Split CPluginHandle into a handle (pointer-to-implementation) and
  263.  * implementation file.  Lots of #include file clean-ups.
  264.  *
  265.  * Revision 1.9  2003/06/20 14:52:36  dicuccio
  266.  * Revised plugin registration - moved GetInfo() into the plugin handler
  267.  *
  268.  * Revision 1.8  2003/06/02 16:06:22  dicuccio
  269.  * Rearranged src/objects/ subtree.  This includes the following shifts:
  270.  *     - src/objects/asn2asn --> arc/app/asn2asn
  271.  *     - src/objects/testmedline --> src/objects/ncbimime/test
  272.  *     - src/objects/objmgr --> src/objmgr
  273.  *     - src/objects/util --> src/objmgr/util
  274.  *     - src/objects/alnmgr --> src/objtools/alnmgr
  275.  *     - src/objects/flat --> src/objtools/flat
  276.  *     - src/objects/validator --> src/objtools/validator
  277.  *     - src/objects/cddalignview --> src/objtools/cddalignview
  278.  * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  279.  * replaces the three libmmdb? libs.
  280.  *
  281.  * Revision 1.7  2003/05/30 13:01:38  dicuccio
  282.  * Use MessageBox() instead of fl_alert() / fl_message()
  283.  *
  284.  * Revision 1.6  2003/05/19 13:39:44  dicuccio
  285.  * Moved gui/core/plugin/ --> gui/plugin/.  Merged core libraries into libgui_core
  286.  *
  287.  * Revision 1.5  2003/05/15 12:19:49  dicuccio
  288.  * release() -> Release() to match CConstRef<>
  289.  *
  290.  * Revision 1.4  2003/05/12 16:09:52  dicuccio
  291.  * Updated to use new plugin action args
  292.  *
  293.  * Revision 1.3  2003/04/25 14:15:58  dicuccio
  294.  * Fixed compilation errors resulting from changes to plugin API
  295.  *
  296.  * Revision 1.2  2003/04/22 16:17:38  shomrat
  297.  * Fl -> FL
  298.  *
  299.  * Revision 1.1  2003/04/18 18:55:46  shomrat
  300.  * Initial revision
  301.  *
  302.  *
  303.  * ===========================================================================
  304.  */