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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: PluginArg.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:53:33  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.26
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: PluginArg.cpp,v 1000.2 2004/06/01 20:53:33 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:  .......
  35.  *
  36.  * File Description:
  37.  *   .......
  38.  *
  39.  * Remark:
  40.  *   This code was originally generated by application DATATOOL
  41.  *   using specifications from the data definition file
  42.  *   'plugin.asn'.
  43.  */
  44. // standard includes
  45. #include <ncbi_pch.hpp>
  46. #include <gui/core/plugin_exception.hpp>
  47. // generated includes
  48. #include <gui/plugin/PluginArg.hpp>
  49. #include <gui/plugin/PluginObject.hpp>
  50. #include <gui/plugin/PluginValue.hpp>
  51. #include <gui/plugin/PluginValueConstraint.hpp>
  52. #include <gui/plugin/PluginValueRangeConstraint.hpp>
  53. #include <objects/seq/Bioseq.hpp>
  54. #include <objects/seqalign/Seq_align.hpp>
  55. #include <objects/seq/Seq_annot.hpp>
  56. #include <objects/seqfeat/Seq_feat.hpp>
  57. #include <objects/seqloc/Seq_id.hpp>
  58. #include <objects/seqloc/Seq_loc.hpp>
  59. #include <objects/seqres/Seq_graph.hpp>
  60. #include <objects/seqset/Bioseq_set.hpp>
  61. #include <objects/seqset/Seq_entry.hpp>
  62. #include <serial/iterator.hpp>
  63. // generated classes
  64. BEGIN_NCBI_SCOPE
  65. BEGIN_objects_SCOPE // namespace ncbi::objects::
  66. // destructor
  67. CPluginArg::~CPluginArg(void)
  68. {
  69. }
  70. // access the type for this argument
  71. CPluginArg::EType CPluginArg::GetType(void) const
  72. {
  73.     CPluginValue::E_Choice choice = CPluginValue::e_not_set;
  74.     if (GetData().IsSingle()) {
  75.         choice = GetData().GetSingle().Which();
  76.     } else if (GetData().IsArray()  &&
  77.                GetData().GetArray().size() != 0) {
  78.         choice = GetData().GetArray().front()->Which();
  79.     }
  80.     switch (choice) {
  81.     case CPluginValue::e_Integer:
  82.         return eInteger;
  83.     case CPluginValue::e_Double:
  84.         return eDouble;
  85.     case CPluginValue::e_Boolean:
  86.         return eBoolean;
  87.     case CPluginValue::e_String:
  88.         return eString;
  89.     case CPluginValue::e_Document:
  90.         return eDocument;
  91.     case CPluginValue::e_Object:
  92.         return eObject;
  93.     case CPluginValue::e_File:
  94.         return eFile;
  95.     default:
  96.         return eNotSet;
  97.     }
  98. }
  99. // accessors for specific sub-components
  100. const IDocument* CPluginArg::GetDocument(void) const
  101. {
  102.     if (GetData().IsSingle()) {
  103.         return GetData().GetSingle().GetDocument();
  104.     } else {
  105.         return GetData().GetArray().front()->GetDocument();
  106.     }
  107. }
  108. const CObject* CPluginArg::GetObject(void) const
  109. {
  110.     if (GetData().IsSingle()) {
  111.         return GetData().GetSingle().GetObject();
  112.     } else {
  113.         return GetData().GetArray().front()->GetObject();
  114.     }
  115. }
  116. const string& CPluginArg::GetObjectSubtype(void) const
  117. {
  118.     if (GetData().IsSingle()) {
  119.         return GetData().GetSingle().GetObjectSubtype();
  120.     } else {
  121.         return GetData().GetArray().front()->GetObjectSubtype();
  122.     }
  123. }
  124. bool CPluginArg::IsEmpty(void) const
  125. {
  126.     CTypeConstIterator<CPluginValue> iter(*this);
  127.     for ( ;  iter;  ++iter) {
  128.         if ( !iter->IsEmpty() ) {
  129.             return false;
  130.         }
  131.     }
  132.     return true;
  133. }
  134. void CPluginArg::ClearObjects()
  135. {
  136.     switch (GetType()) {
  137.     default:
  138.         break;
  139.     case eDocument:
  140.         if (GetData().IsSingle()) {
  141.             ResetData();
  142.             SetDocument();
  143.         } else {
  144.             ResetData();
  145.             SetDocument();
  146.             SetList();
  147.         }
  148.         break;
  149.     case eObject:
  150.         {{
  151.             string subtype = GetObjectSubtype();
  152.             if (GetData().IsSingle()) {
  153.                 ResetData();
  154.                 SetObject(subtype);
  155.             } else {
  156.                 ResetData();
  157.                 SetObject(subtype);
  158.                 SetList();
  159.             }
  160.         }}
  161.         break;
  162.     }
  163. }
  164. //
  165. // integer handlers
  166. //
  167. void CPluginArg::SetInteger(void)
  168. {
  169.     SetData().Reset();
  170.     SetData().SetSingle().SetInteger();
  171. }
  172. void CPluginArg::SetInteger(const string& arg)
  173. {
  174.     SetData().Reset();
  175.     SetData().SetSingle().SetInteger(arg);
  176. }
  177. void CPluginArg::SetInteger(int arg)
  178. {
  179.     SetData().Reset();
  180.     SetData().SetSingle().SetInteger(arg);
  181. }
  182. void CPluginArg::SetInteger(const list<int>& int_list)
  183. {
  184.     SetData().Reset();
  185.     ITERATE (list<int>, iter, int_list) {
  186.         CRef<CPluginValue> value(new CPluginValue());
  187.         value->SetInteger(*iter);
  188.         SetData().SetArray().push_back(value);
  189.     }
  190. }
  191. int CPluginArg::AsInteger(void) const
  192. {
  193.     if ( !GetData().IsSingle() ) {
  194.         NCBI_THROW(CPluginException, eInvalidArg,
  195.                    "Attempt to cast array argument to single object");
  196.     }
  197.     return GetData().GetSingle().AsInteger();
  198. }
  199. //
  200. // double handlers
  201. //
  202. void CPluginArg::SetDouble(void)
  203. {
  204.     SetData().Reset();
  205.     SetData().SetSingle().SetDouble();
  206. }
  207. void CPluginArg::SetDouble(const string& arg)
  208. {
  209.     SetData().Reset();
  210.     SetData().SetSingle().SetDouble(arg);
  211. }
  212. void CPluginArg::SetDouble(double arg)
  213. {
  214.     SetData().Reset();
  215.     SetData().SetSingle().SetDouble(arg);
  216. }
  217. void CPluginArg::SetDouble(const list<double>& double_list)
  218. {
  219.     SetData().Reset();
  220.     ITERATE (list<double>, iter, double_list) {
  221.         CRef<CPluginValue> value(new CPluginValue());
  222.         value->SetDouble(*iter);
  223.         SetData().SetArray().push_back(value);
  224.     }
  225. }
  226. double CPluginArg::AsDouble(void) const
  227. {
  228.     if ( !GetData().IsSingle() ) {
  229.         NCBI_THROW(CPluginException, eInvalidArg,
  230.                    "Attempt to cast array argument to single object");
  231.     }
  232.     return GetData().GetSingle().AsDouble();
  233. }
  234. //
  235. // boolean handlers
  236. //
  237. void CPluginArg::SetBoolean(void)
  238. {
  239.     SetData().Reset();
  240.     SetData().SetSingle().SetBoolean();
  241. }
  242. void CPluginArg::SetBoolean(bool arg)
  243. {
  244.     SetData().Reset();
  245.     SetData().SetSingle().SetBoolean(arg);
  246. }
  247. void CPluginArg::SetBoolean(const list<bool>& bool_list)
  248. {
  249.     SetData().Reset();
  250.     ITERATE (list<bool>, iter, bool_list) {
  251.         CRef<CPluginValue> value(new CPluginValue());
  252.         value->SetBoolean(*iter);
  253.         SetData().SetArray().push_back(value);
  254.     }
  255. }
  256. bool CPluginArg::AsBoolean(void) const
  257. {
  258.     if ( !GetData().IsSingle() ) {
  259.         NCBI_THROW(CPluginException, eInvalidArg,
  260.                    "Attempt to cast array argument to single object");
  261.     }
  262.     return GetData().GetSingle().AsBoolean();
  263. }
  264. //
  265. // string handlers
  266. //
  267. void CPluginArg::SetString(void)
  268. {
  269.     SetData().Reset();
  270.     SetData().SetSingle().SetString();
  271. }
  272. void CPluginArg::SetString(const string& arg)
  273. {
  274.     SetData().Reset();
  275.     SetData().SetSingle().SetString(arg);
  276. }
  277. void CPluginArg::SetString(const list<string>& string_list)
  278. {
  279.     SetData().Reset();
  280.     ITERATE (list<string>, iter, string_list) {
  281.         CRef<CPluginValue> value(new CPluginValue());
  282.         value->SetString(*iter);
  283.         SetData().SetArray().push_back(value);
  284.     }
  285. }
  286. const string& CPluginArg::AsString(void) const
  287. {
  288.     if ( !GetData().IsSingle() ) {
  289.         NCBI_THROW(CPluginException, eInvalidArg,
  290.                    "Attempt to cast array argument to single object");
  291.     }
  292.     return GetData().GetSingle().AsString();
  293. }
  294. //
  295. // file handlers
  296. //
  297. void CPluginArg::SetFile(void)
  298. {
  299.     SetData().Reset();
  300.     SetData().SetSingle().SetFile();
  301. }
  302. void CPluginArg::SetFile(const string& arg)
  303. {
  304.     SetData().Reset();
  305.     SetData().SetSingle().SetFile(arg);
  306. }
  307. void CPluginArg::SetFile(const list<string>& file_list)
  308. {
  309.     SetData().Reset();
  310.     ITERATE (list<string>, iter, file_list) {
  311.         CRef<CPluginValue> value(new CPluginValue());
  312.         value->SetFile(*iter);
  313.         SetData().SetArray().push_back(value);
  314.     }
  315. }
  316. const string& CPluginArg::AsFile(void) const
  317. {
  318.     if ( !GetData().IsSingle() ) {
  319.         NCBI_THROW(CPluginException, eInvalidArg,
  320.                    "Attempt to cast array argument to single object");
  321.     }
  322.     return GetData().GetSingle().AsFile();
  323. }
  324. //
  325. // document handlers
  326. //
  327. void CPluginArg::SetDocument(void)
  328. {
  329.     SetData().Reset();
  330.     CPluginValue& value = SetData().SetSingle();
  331.     value.SetDocument();
  332. }
  333. void CPluginArg::SetDocument(const IDocument& arg)
  334. {
  335.     SetData().Reset();
  336.     SetData().SetSingle().SetDocument(arg);
  337. }
  338. void CPluginArg::SetDocument(const TValues& Document_list)
  339. {
  340.     SetData().Reset();
  341.     ITERATE (TValues, iter, Document_list) {
  342.         CRef<CPluginValue> value(new CPluginValue());
  343.         value->SetDocument(*(*iter)->GetDocument());
  344.         SetData().SetArray().push_back(value);
  345.     }
  346. }
  347. const IDocument& CPluginArg::AsDocument(void) const
  348. {
  349.     if ( !GetData().IsSingle() ) {
  350.         NCBI_THROW(CPluginException, eInvalidArg,
  351.                    "Attempt to cast array argument to single object");
  352.     }
  353.     return GetData().GetSingle().AsDocument();
  354. }
  355. //
  356. // object handlers
  357. //
  358. void CPluginArg::SetObject(const string& type)
  359. {
  360.     SetData().Reset();
  361.     SetData().SetSingle().SetObject(type);
  362. }
  363. void CPluginArg::SetObject(const CTypeInfo* info)
  364. {
  365.     SetData().Reset();
  366.     SetData().SetSingle().SetObject(info);
  367. }
  368. void CPluginArg::SetObject(const IDocument& doc, const CObject& obj)
  369. {
  370.     SetData().Reset();
  371.     SetData().SetSingle().SetObject(doc, obj);
  372. }
  373. void CPluginArg::SetObject(const TValues& obj_list)
  374. {
  375.     SetData().Reset();
  376.     ITERATE (TValues, iter, obj_list) {
  377.         SetData().SetArray().push_back
  378.             (CRef<CPluginValue> (const_cast<CPluginValue*>(iter->GetPointer())));
  379.     }
  380. }
  381. const CObject& CPluginArg::AsObject(void) const
  382. {
  383.     if ( !GetData().IsSingle() ) {
  384.         NCBI_THROW(CPluginException, eInvalidArg,
  385.                    "Attempt to cast array argument to single object");
  386.     }
  387.     return GetData().GetSingle().AsObject();
  388. }
  389. //
  390. // generic list accessors
  391. //
  392. void CPluginArg::SetList(void)
  393. {
  394.     if (GetData().IsSingle()) {
  395.         CRef<CPluginValue> value(&SetData().SetSingle());
  396.         SetData().Reset();
  397.         SetData().SetArray().push_back(value);
  398.     }
  399. }
  400. void CPluginArg::SetList(const TValues& args)
  401. {
  402.     SetData().Reset();
  403.     SetData().SetArray();
  404.     ITERATE (TValues, iter, args) {
  405.         CPluginValue* value = const_cast<CPluginValue*> (iter->GetPointer());
  406.         SetData().SetArray().push_back( CRef<CPluginValue>(value));
  407.     }
  408. }
  409. void CPluginArg::AsList(TValues& arg) const
  410. {
  411.     if ( !GetData().IsArray() ) {
  412.         NCBI_THROW(CPluginException, eInvalidArg,
  413.                    "Attempt to cast single argument to array");
  414.     }
  415.     arg.clear();
  416.     ITERATE (TData::TArray, iter, GetData().GetArray()) {
  417.         arg.push_back(*iter);
  418.     }
  419. }
  420. END_objects_SCOPE // namespace ncbi::objects::
  421. END_NCBI_SCOPE
  422. /*
  423.  * ===========================================================================
  424.  *
  425.  * $Log: PluginArg.cpp,v $
  426.  * Revision 1000.2  2004/06/01 20:53:33  gouriano
  427.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.26
  428.  *
  429.  * Revision 1.26  2004/05/21 22:27:45  gorelenk
  430.  * Added PCH ncbi_pch.hpp
  431.  *
  432.  * Revision 1.25  2004/03/08 20:21:06  jcherry
  433.  * Fixed object argument clearing
  434.  *
  435.  * Revision 1.24  2004/02/04 13:36:42  dicuccio
  436.  * Implemented resetting of object-based arguments
  437.  *
  438.  * Revision 1.23  2003/12/23 20:23:21  jcherry
  439.  * Make argument values persist across invocations of plugin
  440.  *
  441.  * Revision 1.22  2003/12/16 20:39:47  jcherry
  442.  * Added support for plugin arguments of type file
  443.  *
  444.  * Revision 1.21  2003/10/27 17:44:33  dicuccio
  445.  * Reworked CPluginValue to be a variant.  Removed ad hoc URL encoding
  446.  *
  447.  * Revision 1.20  2003/10/07 13:36:45  dicuccio
  448.  * Renamed PluginURL* to PluginValue*.  Moved validation code into CPluginUtils
  449.  *
  450.  * Revision 1.19  2003/09/04 14:03:20  dicuccio
  451.  * Use IDocument instead of CDocument
  452.  *
  453.  * Revision 1.18  2003/07/23 19:14:08  dicuccio
  454.  * Moved logic for validating plugin arguments into CPluginUtils.
  455.  *
  456.  * Revision 1.17  2003/07/22 15:30:47  dicuccio
  457.  * Dropped support for CSeqVector as a named type.  Changed to take advantage of
  458.  * new Convert() API
  459.  *
  460.  * Revision 1.16  2003/06/26 15:33:39  dicuccio
  461.  * Moved GetURLValue() from PluginURL.hpp to plugin_utils.hpp.  Fixed compilation
  462.  * errors relating to missing #includes
  463.  *
  464.  * Revision 1.15  2003/06/25 17:02:56  dicuccio
  465.  * Split CPluginHandle into a handle (pointer-to-implementation) and
  466.  * implementation file.  Lots of #include file clean-ups.
  467.  *
  468.  * Revision 1.14  2003/05/19 13:37:46  dicuccio
  469.  * Moved gui/core/plugin/ --> gui/plugin/
  470.  *
  471.  * Revision 1.13  2003/05/09 16:45:51  dicuccio
  472.  * Cleaned up IsValid().  Added IsEmpty() - useful check for optional arguments
  473.  *
  474.  * Revision 1.12  2003/05/06 15:56:38  dicuccio
  475.  * Added _TRACE() for all failed object constraints - aids debugging.  Removed
  476.  * unnecessary const_cast<> following object conversion
  477.  *
  478.  * Revision 1.11  2003/04/30 13:53:57  dicuccio
  479.  * Fixed bug in setting of integral argument types - don't reset the whole object,
  480.  * just the data.
  481.  *
  482.  * Revision 1.10  2003/04/29 14:47:04  dicuccio
  483.  * Added internal API for checking constraints of object arguments.  Reworked
  484.  * constraint code in general
  485.  *
  486.  * Revision 1.9  2003/04/24 16:31:57  dicuccio
  487.  * Simplified object storage - use a more generic mechanism for specifying objects.
  488.  *
  489.  * Revision 1.8  2003/03/25 19:40:30  dicuccio
  490.  * Added CSeq_annot as a named type
  491.  *
  492.  * Revision 1.7  2003/03/25 13:12:03  dicuccio
  493.  * Added checking of constraint values in IsValid()
  494.  *
  495.  * Revision 1.6  2003/03/10 23:01:18  kuznets
  496.  * iterate -> ITERATE
  497.  *
  498.  * Revision 1.5  2003/03/10 16:03:42  dicuccio
  499.  * Added accessors for an argument's associated document and abstract object
  500.  *
  501.  * Revision 1.4  2003/03/03 14:50:56  dicuccio
  502.  * Added plugin argument constraints - lower bound, upper bound, range, and
  503.  * member-of-set
  504.  *
  505.  * Revision 1.3  2003/02/26 14:28:05  dicuccio
  506.  * Changed all setters to use const objects, to avoid using const_cast<> outside
  507.  * of this class
  508.  *
  509.  * Revision 1.2  2003/02/25 14:46:24  dicuccio
  510.  * Changed internal representation of plugin URL.  Changed data model argument
  511.  * types to support an implied document argument as well - this enables such
  512.  * arguments to pass scopes with the argument value
  513.  *
  514.  * Revision 1.1  2003/02/24 13:03:17  dicuccio
  515.  * Renamed classes in plugin spec:
  516.  *     CArgSeg --> CPluginArgSet
  517.  *     CArgument --> CPluginArg
  518.  *     CPluginArgs --> CPluginCommand
  519.  *     CPluginCommands --> CPluginCommandSet
  520.  *
  521.  * Revision 1.1  2003/02/20 19:49:57  dicuccio
  522.  * Created new plugin architecture, based on ASN.1 spec.  Moved GBENCH frameowrk
  523.  * over to use new plugin architecture.
  524.  *
  525.  *
  526.  * ===========================================================================
  527.  */
  528. /* Original file checksum: lines: 64, chars: 1879, CRC32: 6874a1e4 */