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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: PluginValue.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 20:53:55  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: PluginValue.cpp,v 1000.3 2004/06/01 20:53:55 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/PluginValue.hpp>
  49. #include <gui/plugin/PluginObject.hpp>
  50. #include <serial/typeinfo.hpp>
  51. // generated classes
  52. BEGIN_NCBI_SCOPE
  53. BEGIN_objects_SCOPE // namespace ncbi::objects::
  54. // constructor
  55. CPluginValue::CPluginValue(void)
  56. {
  57. }
  58. CPluginValue::CPluginValue(int val)
  59. {
  60.     SetInteger(val);
  61. }
  62. CPluginValue::CPluginValue(double val)
  63. {
  64.     SetDouble(val);
  65. }
  66. CPluginValue::CPluginValue(bool val)
  67. {
  68.     SetBoolean(val);
  69. }
  70. CPluginValue::CPluginValue(const string& str)
  71. {
  72.     SetString(str);
  73. }
  74. CPluginValue::CPluginValue(const IDocument& doc)
  75. {
  76.     SetDocument(doc);
  77. }
  78. CPluginValue::CPluginValue(const IDocument& doc, const CObject& obj)
  79. {
  80.     SetObject(doc, obj);
  81. }
  82. CPluginValue::CPluginValue(const CTypeInfo* info)
  83. {
  84.     SetObject(info);
  85. }
  86. // destructor
  87. CPluginValue::~CPluginValue(void)
  88. {
  89. }
  90. const string& CPluginValue::SetInteger()
  91. {
  92.     return Tparent::SetInteger();
  93. }
  94. void CPluginValue::SetInteger(const string& val)
  95. {
  96.     Tparent::SetInteger(val);
  97. }
  98. void CPluginValue::SetInteger(int val)
  99. {
  100.     Tparent::SetInteger(NStr::IntToString(val));
  101. }
  102. const string& CPluginValue::SetDouble()
  103. {
  104.     return Tparent::SetDouble();
  105. }
  106. void CPluginValue::SetDouble(const string& val)
  107. {
  108.     Tparent::SetDouble(val);
  109. }
  110. void CPluginValue::SetDouble(double val)
  111. {
  112.     Tparent::SetDouble(NStr::DoubleToString(val));
  113. }
  114. const string& CPluginValue::SetBoolean()
  115. {
  116.     return Tparent::SetBoolean();
  117. }
  118. void CPluginValue::SetBoolean(const string& val)
  119. {
  120.     Tparent::SetBoolean(val);
  121. }
  122. void CPluginValue::SetBoolean(bool val)
  123. {
  124.     Tparent::SetBoolean(NStr::BoolToString(val));
  125. }
  126. void CPluginValue::SetObject(const IDocument& doc, const CObject& obj)
  127. {
  128. CPluginObject* obj_var = NULL;
  129. if (dynamic_cast<const IDocument*>(&obj)) {
  130. obj_var = &Tparent::SetDocument();
  131. } else {
  132. obj_var = &Tparent::SetObject();
  133. }
  134. if (obj_var) {
  135. obj_var->SetObject(&doc, &obj);
  136. }
  137. }
  138. void CPluginValue::SetObject(const string& type)
  139. {
  140.     CPluginObject& obj_var = Tparent::SetObject();
  141.     obj_var.SetObject(type);
  142. }
  143. void CPluginValue::SetObject(const CTypeInfo* info)
  144. {
  145.     CPluginObject& obj_var = Tparent::SetObject();
  146.     obj_var.SetObject(info);
  147. }
  148. void CPluginValue::SetDocument(const IDocument& doc)
  149. {
  150.     CPluginObject& obj_var = Tparent::SetDocument();
  151.     obj_var.SetDocument(&doc);
  152. }
  153. void CPluginValue::SetDocument(void)
  154. {
  155.     CPluginObject& obj_var = Tparent::SetDocument();
  156.     obj_var.SetDocument(NULL);
  157. }
  158. const string& CPluginValue::GetObjectSubtype(void) const
  159. {
  160.     if (IsDocument()) {
  161.         return Tparent::GetDocument().GetSubtype();
  162.     } else if (IsObject()) {
  163.         return Tparent::GetObject().GetSubtype();
  164.     }
  165.     return kEmptyStr;
  166. }
  167. bool CPluginValue::AsBoolean(void) const
  168. {
  169.     if ( !IsBoolean() ) {
  170.         NCBI_THROW(CPluginException, eInvalidArg,
  171.                    "Attempt to access non-boolean value as boolean");
  172.     }
  173.     const string& str = GetBoolean();
  174.     if (str.empty()) {
  175.         return false;
  176.     } else {
  177.         return NStr::StringToBool(GetBoolean());
  178.     }
  179. }
  180. int CPluginValue::AsInteger(void) const
  181. {
  182.     if ( !IsInteger() ) {
  183.         NCBI_THROW(CPluginException, eInvalidArg,
  184.                    "Attempt to access non-integer value as integer");
  185.     }
  186.     if (GetInteger().empty()) {
  187.         NCBI_THROW(CPluginException, eInvalidArg,
  188.                    "Attempt to access invalid integer value");
  189.     }
  190.     return NStr::StringToInt(GetInteger());
  191. }
  192. double CPluginValue::AsDouble(void) const
  193. {
  194.     if ( !IsDouble() ) {
  195.         NCBI_THROW(CPluginException, eInvalidArg,
  196.                    "Attempt to access non-double value as double");
  197.     }
  198.     if (GetDouble().empty()) {
  199.         NCBI_THROW(CPluginException, eInvalidArg,
  200.                    "Attempt to access invalid double value");
  201.     }
  202.     return NStr::StringToDouble(GetDouble());
  203. }
  204. const string& CPluginValue::AsString(void) const
  205. {
  206.     switch (Which()) {
  207.     case e_Integer:
  208.         _TRACE("CPluginValue::AsString(): access to integer value as string");
  209.         return GetInteger();
  210.     case e_Double:
  211.         _TRACE("CPluginValue::AsString(): access to double value as string");
  212.         return GetDouble();
  213.     case e_Boolean:
  214.         _TRACE("CPluginValue::AsString(): access to boolean value as string");
  215.         return GetBoolean();
  216.     case e_File:
  217.         _TRACE("CPluginValue::AsString(): access to file value as string");
  218.         return GetFile();
  219.     case e_String:
  220.         return GetString();
  221.     case e_Document:
  222.     case e_Object:
  223.     default:
  224.         NCBI_THROW(CPluginException, eInvalidArg,
  225.                    "Attempt to access non-convertable value as string");
  226.     }
  227. }
  228. const string& CPluginValue::AsFile(void) const
  229. {
  230.     if ( !IsFile() ) {
  231.         NCBI_THROW(CPluginException, eInvalidArg,
  232.                    "Attempt to access non-file value as file");
  233.     }
  234.     if (GetFile().empty()) {
  235.         NCBI_THROW(CPluginException, eInvalidArg,
  236.                    "Attempt to access invalid file value");
  237.     }
  238.     return GetFile();
  239. }
  240. const IDocument& CPluginValue::AsDocument(void) const
  241. {
  242.     if (IsDocument()) {
  243.         if (GetDocument()) {
  244.             return *GetDocument();
  245.         }
  246.         NCBI_THROW(CPluginException, eInvalidArg,
  247.                    "Attempt to access NULL document");
  248.     }
  249.     NCBI_THROW(CPluginException, eInvalidArg,
  250.                "Attempt to access non-document value as document");
  251. }
  252. const CObject& CPluginValue::AsObject(void) const
  253. {
  254.     if (IsObject()) {
  255.         if (GetObject()) {
  256.             return *GetObject();
  257.         }
  258.         NCBI_THROW(CPluginException, eInvalidArg,
  259.                    "Attempt to access NULL object");
  260.     }
  261.     NCBI_THROW(CPluginException, eInvalidArg,
  262.                "Attempt to access non-object value as object");
  263. }
  264. //
  265. // determine if this URL is empty
  266. //
  267. bool CPluginValue::IsEmpty(void) const
  268. {
  269.     switch (Which()) {
  270.     case e_String:
  271.         return (IsString()  &&  GetString().empty());
  272.     case e_File:
  273.         return (IsFile()  &&  GetFile().empty());
  274.     case e_Integer:
  275.         return (IsInteger()  &&  GetInteger().empty());
  276.     case e_Double:
  277.         return (IsDouble()  &&  GetDouble().empty());
  278.     case e_Boolean:
  279.         return (IsBoolean()  &&  GetBoolean().empty());
  280.     case e_Object:
  281.         return (IsObject()  &&  Tparent::GetObject().IsEmpty());
  282.     case e_Document:
  283.         return (IsDocument()  &&  Tparent::GetDocument().IsEmpty());
  284.     default:
  285.         // unhandled = always invalid, always empty
  286.         return true;
  287.     }
  288. }
  289. END_objects_SCOPE // namespace ncbi::objects::
  290. END_NCBI_SCOPE
  291. /*
  292.  * ===========================================================================
  293.  *
  294.  * $Log: PluginValue.cpp,v $
  295.  * Revision 1000.3  2004/06/01 20:53:55  gouriano
  296.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  297.  *
  298.  * Revision 1.9  2004/06/01 18:10:03  dicuccio
  299.  * Interpret empty string as false for boolean arguments
  300.  *
  301.  * Revision 1.8  2004/05/21 22:27:46  gorelenk
  302.  * Added PCH ncbi_pch.hpp
  303.  *
  304.  * Revision 1.7  2004/02/04 13:36:43  dicuccio
  305.  * Implemented resetting of object-based arguments
  306.  *
  307.  * Revision 1.6  2003/12/22 19:24:49  dicuccio
  308.  * Added getters/setters for types to forward from base class - necessary given change in variant
  309.  *
  310.  * Revision 1.5  2003/12/16 21:51:11  jcherry
  311.  * Processing of file parameters
  312.  *
  313.  * Revision 1.4  2003/12/16 20:39:47  jcherry
  314.  * Added support for plugin arguments of type file
  315.  *
  316.  * Revision 1.3  2003/11/03 18:35:54  dicuccio
  317.  * Fixed setting of objects - SetObject() with a document is the same as
  318.  * SetDocument()
  319.  *
  320.  * Revision 1.2  2003/10/27 17:44:33  dicuccio
  321.  * Reworked CPluginValue to be a variant.  Removed ad hoc URL encoding
  322.  *
  323.  * Revision 1.1  2003/10/07 13:36:45  dicuccio
  324.  * Renamed PluginURL* to PluginValue*.  Moved validation code into CPluginUtils
  325.  *
  326.  * Revision 1.23  2003/09/04 14:03:20  dicuccio
  327.  * Use IDocument instead of CDocument
  328.  *
  329.  * Revision 1.22  2003/08/04 17:30:48  dicuccio
  330.  * Endoce an object's subtype as "Object" if no type is known
  331.  *
  332.  * Revision 1.21  2003/07/31 17:02:00  dicuccio
  333.  * Fixed thinko: in setting an object of type document, make sure to set the
  334.  * object type to document
  335.  *
  336.  * Revision 1.20  2003/07/23 19:14:08  dicuccio
  337.  * Moved logic for validating plugin arguments into CPluginUtils.
  338.  *
  339.  * Revision 1.19  2003/07/22 15:30:47  dicuccio
  340.  * Dropped support for CSeqVector as a named type.  Changed to take advantage of
  341.  * new Convert() API
  342.  *
  343.  * Revision 1.18  2003/06/02 16:06:20  dicuccio
  344.  * Rearranged src/objects/ subtree.  This includes the following shifts:
  345.  *     - src/objects/asn2asn --> arc/app/asn2asn
  346.  *     - src/objects/testmedline --> src/objects/ncbimime/test
  347.  *     - src/objects/objmgr --> src/objmgr
  348.  *     - src/objects/util --> src/objmgr/util
  349.  *     - src/objects/alnmgr --> src/objtools/alnmgr
  350.  *     - src/objects/flat --> src/objtools/flat
  351.  *     - src/objects/validator --> src/objtools/validator
  352.  *     - src/objects/cddalignview --> src/objtools/cddalignview
  353.  * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  354.  * replaces the three libmmdb? libs.
  355.  *
  356.  * Revision 1.17  2003/05/19 13:37:46  dicuccio
  357.  * Moved gui/core/plugin/ --> gui/plugin/
  358.  *
  359.  * Revision 1.16  2003/05/09 16:47:45  dicuccio
  360.  * Added IsEmpty() - useful check for optional arguments.  Changed IsValid() to
  361.  * report false for empty arguments of built-in types
  362.  *
  363.  * Revision 1.15  2003/04/29 14:48:07  dicuccio
  364.  * Unified internal representation of all CObject-derived arguments
  365.  *
  366.  * Revision 1.14  2003/04/25 14:14:20  dicuccio
  367.  * Remove a hunk fo dead code
  368.  *
  369.  * Revision 1.13  2003/04/24 19:01:26  ucko
  370.  * Remove unbalanced quote from #if-ed out region (still affected some
  371.  * compilers)
  372.  *
  373.  * Revision 1.12  2003/04/24 16:34:08  dicuccio
  374.  * Large clean-up.  Siplified object type specification and retrieval.
  375.  *
  376.  * Revision 1.11  2003/03/28 17:11:10  dicuccio
  377.  * Added PostRead() to handle type derivation
  378.  *
  379.  * Revision 1.10  2003/03/25 19:40:30  dicuccio
  380.  * Added CSeq_annot as a named type
  381.  *
  382.  * Revision 1.9  2003/03/20 21:17:16  dicuccio
  383.  * Fixed checking of m_Type in retrieval macros to reflect real type returned by
  384.  * GetType()
  385.  *
  386.  * Revision 1.8  2003/03/17 14:50:19  dicuccio
  387.  * Use dynamic_cast<> where appropriate
  388.  *
  389.  * Revision 1.7  2003/03/10 23:01:18  kuznets
  390.  * iterate -> ITERATE
  391.  *
  392.  * Revision 1.6  2003/02/28 15:08:22  dicuccio
  393.  * Added overloaded Assign().  Commented out some unnecessary _TRACE() statements
  394.  *
  395.  * Revision 1.5  2003/02/27 16:25:13  dicuccio
  396.  * Fixed bug in encoding of document - was encoded as integer (ooops).
  397.  *
  398.  * Revision 1.4  2003/02/26 20:54:12  dicuccio
  399.  * Wrapped insertion of options (multimap) to get around compilation issues in
  400.  * Solaris
  401.  *
  402.  * Revision 1.3  2003/02/26 14:28:59  dicuccio
  403.  * Converted all setters to take const arguments, to avoid using const_cast<>
  404.  * outside of this class.  Added beefed up value validation
  405.  *
  406.  * Revision 1.2  2003/02/25 14:46:24  dicuccio
  407.  * Changed internal representation of plugin URL.  Changed data model value
  408.  * types to support an implied document value as well - this enables such
  409.  * arguments to pass scopes with the value value
  410.  *
  411.  * Revision 1.1  2003/02/24 13:03:17  dicuccio
  412.  * Renamed classes in plugin spec:
  413.  *     CArgSeg --> CPluginArgSet
  414.  *     CArgument --> CPluginArg
  415.  *     CPluginArgs --> CPluginCommand
  416.  *     CPluginCommands --> CPluginCommandSet
  417.  *
  418.  * Revision 1.1  2003/02/20 19:49:57  dicuccio
  419.  * Created new plugin architecture, based on ASN.1 spec.  Moved GBENCH frameowrk
  420.  * over to use new plugin architecture.
  421.  *
  422.  *
  423.  * ===========================================================================
  424.  */
  425. /* Original file checksum: lines: 64, chars: 1864, CRC32: 5ef4a2cd */