PluginArgSet.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:14k
- /*
- * ===========================================================================
- * PRODUCTION $Log: PluginArgSet.cpp,v $
- * PRODUCTION Revision 1000.2 2004/06/01 20:53:35 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.21
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: PluginArgSet.cpp,v 1000.2 2004/06/01 20:53:35 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Author: Mike DiCuccio, Denis Vakatov, Anatoliy Kuznetsov
- *
- * File Description:
- * CPluginArgSet -- defines an interface for collections of plugin arguments
- *
- * Remark:
- * This code was originally generated by application DATATOOL
- * using specifications from the data definition file
- * 'plugin.asn'.
- */
- // standard includes
- #include <ncbi_pch.hpp>
- #include <gui/core/plugin_exception.hpp>
- // generated includes
- #include <gui/plugin/PluginArgSet.hpp>
- #include <gui/plugin/PluginArg.hpp>
- #include <gui/plugin/PluginValueConstraint.hpp>
- // generated classes
- BEGIN_NCBI_SCOPE
- BEGIN_objects_SCOPE // namespace ncbi::objects::
- // destructor
- CPluginArgSet::~CPluginArgSet(void)
- {
- }
- //
- // indexing operator for accessing arguments based on names
- //
- const CPluginArg& CPluginArgSet::operator[] (const string& name) const
- {
- ITERATE (Tdata, iter, Get()) {
- if ( (*iter)->GetName() == name) {
- return (**iter);
- }
- }
- // not found - we throw
- NCBI_THROW(CPluginException, eInvalidArg,
- "No argument named '" + name + "'");
- }
- CPluginArg& CPluginArgSet::operator[] (const string& name)
- {
- NON_CONST_ITERATE (Tdata, iter, Set()) {
- if ( (*iter)->GetName() == name) {
- return (**iter);
- }
- }
- // not found - we throw
- NCBI_THROW(CPluginException, eInvalidArg,
- "No argument named '" + name + "'");
- }
- // HasArgument() can be used to tell whether this set of arguments contains an
- // argument named 'name'
- bool CPluginArgSet::HasArgument(const string& name) const
- {
- ITERATE (Tdata, iter, Get()) {
- if ( (*iter)->GetName() == name) {
- return true;
- }
- }
- return false;
- }
- // add a named argument. This argument is required, and has no default
- // value. Attempts to access the value without setting the value will
- // result in an exception being thrown.
- CPluginArg&
- CPluginArgSet::AddArgument(const string& name, const string& desc,
- CPluginArg::EType type,
- CPluginArg::TData::E_Choice single_or_array)
- {
- if (HasArgument(name)) {
- NCBI_THROW(CPluginException, eInvalidArg,
- string("Argument `") + name + string("' already exists"));
- }
- CRef<CPluginArg> arg(new CPluginArg());
- switch (type) {
- case CPluginArg::eBoolean:
- arg->SetBoolean();
- break;
- case CPluginArg::eInteger:
- arg->SetInteger();
- break;
- case CPluginArg::eDouble:
- arg->SetDouble();
- break;
- case CPluginArg::eString:
- arg->SetString();
- break;
- case CPluginArg::eFile:
- arg->SetFile();
- break;
- case CPluginArg::eDocument:
- arg->SetDocument();
- break;
- case CPluginArg::eObject:
- arg->SetObject();
- break;
- default:
- case CPluginArg::eNotSet:
- NCBI_THROW(CPluginException, eInvalidArg,
- "Invalid argument type in AddArgument()");
- }
- if (single_or_array == CPluginArg::TData::e_Array) {
- arg->SetList();
- }
- arg->SetName(name);
- arg->SetDesc(desc);
- Set().push_back(arg);
- return *arg;
- }
- // add a named argument. This argument is required, and has no default
- // value. Attempts to access the value without setting the value will
- // result in an exception being thrown.
- CPluginArg&
- CPluginArgSet::AddArgument(const string& name, const string& desc,
- const CTypeInfo* type,
- CPluginArg::TData::E_Choice single_or_array)
- {
- if (HasArgument(name)) {
- NCBI_THROW(CPluginException, eInvalidArg,
- string("Argument `") + name + string("' already exists"));
- }
- CRef<CPluginArg> arg(new CPluginArg());
- arg->SetObject(type);
- arg->SetName(name);
- arg->SetDesc(desc);
- if (single_or_array == CPluginArg::TData::e_Array) {
- arg->SetList();
- }
- Set().push_back(arg);
- return *arg;
- }
- // Add a default argument to the set of arguments. This function creates a
- // named argument with a default value of type string.
- CPluginArg&
- CPluginArgSet::AddDefaultArgument(const string& name, const string& desc,
- CPluginArg::EType type,
- const string& val)
- {
- if (HasArgument(name)) {
- NCBI_THROW(CPluginException, eInvalidArg,
- string("Argument `") + name + string("' already exists"));
- }
- CRef<CPluginArg> arg(new CPluginArg());
- arg->SetName(name);
- arg->SetDesc(desc);
- arg->SetDefault(true);
- switch (type) {
- case CPluginArg::eInteger:
- arg->SetInteger(NStr::StringToInt(val));
- break;
- case CPluginArg::eBoolean:
- arg->SetBoolean(NStr::StringToBool(val));
- break;
- case CPluginArg::eDouble:
- arg->SetDouble(NStr::StringToDouble(val));
- break;
- case CPluginArg::eString:
- arg->SetString(val);
- break;
- case CPluginArg::eFile:
- arg->SetFile(val);
- break;
- default:
- NCBI_THROW(CPluginException, eInvalidArg,
- "Attempt to create non-String argument type with "
- "string default value");
- }
- Set().push_back(arg);
- return *arg;
- }
- CPluginArg&
- CPluginArgSet::AddFlag(const string& name, const string& desc)
- {
- return AddArgument(name, desc, CPluginArg::eBoolean);
- }
- CPluginArg&
- CPluginArgSet::AddDefaultFlag(const string& name, const string& desc,
- bool val)
- {
- return AddDefaultArgument(name, desc, CPluginArg::eBoolean,
- NStr::BoolToString(val));
- }
- // add an optional argument to the set of arguments. This supports an
- // optional default value argument. For non-built-in types, the default
- // value is ignored.
- CPluginArg&
- CPluginArgSet::AddOptionalArgument(const string& name, const string& desc,
- CPluginArg::EType type,
- CPluginArg::TData::E_Choice s_or_a)
- {
- if (HasArgument(name)) {
- NCBI_THROW(CPluginException, eInvalidArg,
- string("Argument `") + name + string("' already exists"));
- }
- CRef<CPluginArg> arg(new CPluginArg());
- switch (type) {
- case CPluginArg::eBoolean:
- arg->SetBoolean();
- break;
- case CPluginArg::eInteger:
- arg->SetInteger();
- break;
- case CPluginArg::eDouble:
- arg->SetDouble();
- break;
- case CPluginArg::eString:
- arg->SetString();
- break;
- case CPluginArg::eFile:
- arg->SetFile();
- break;
- case CPluginArg::eDocument:
- arg->SetDocument();
- break;
- case CPluginArg::eObject:
- arg->SetObject();
- break;
- default:
- case CPluginArg::eNotSet:
- NCBI_THROW(CPluginException, eInvalidArg,
- "Invalid argument type in AddArgument()");
- }
- arg->SetName(name);
- arg->SetDesc(desc);
- arg->SetOptional(true);
- if (s_or_a == CPluginArg::TData::e_Array) {
- arg->SetList();
- }
- Set().push_back(arg);
- return *arg;
- }
- CPluginArg&
- CPluginArgSet::AddOptionalArgument(const string& name, const string& desc,
- const CTypeInfo* info,
- CPluginArg::TData::E_Choice s_or_a)
- {
- if (HasArgument(name)) {
- NCBI_THROW(CPluginException, eInvalidArg,
- string("Argument `") + name + string("' already exists"));
- }
- CRef<CPluginArg> arg(new CPluginArg());
- arg->SetName(name);
- arg->SetDesc(desc);
- arg->SetOptional(true);
- arg->SetObject(info);
- if (s_or_a == CPluginArg::TData::e_Array) {
- arg->SetList();
- }
- Set().push_back(arg);
- return *arg;
- }
- //
- // SetConstraint() resets the constraints for a given named argument and adds a
- // new argument constraint
- //
- void CPluginArgSet::SetConstraint(const string& name,
- CPluginValueConstraint& constraint)
- {
- CPluginArg& arg = (*this)[name];
- arg.SetConstraint().clear();
- arg.SetConstraint().push_back( CRef<CPluginValueConstraint>(&constraint) );
- }
- //
- // AddConstraint() adds a constraint to a named argument
- //
- void CPluginArgSet::AddConstraint(const string& name,
- CPluginValueConstraint& constraint)
- {
- CPluginArg& arg = (*this)[name];
- arg.SetConstraint().push_back( CRef<CPluginValueConstraint>(&constraint) );
- }
- END_objects_SCOPE // namespace ncbi::objects::
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- *
- * $Log: PluginArgSet.cpp,v $
- * Revision 1000.2 2004/06/01 20:53:35 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.21
- *
- * Revision 1.21 2004/05/21 22:27:45 gorelenk
- * Added PCH ncbi_pch.hpp
- *
- * Revision 1.20 2004/01/21 14:13:16 dicuccio
- * Added AddFlag() and AddDefaultFlag() - front-ends to AddArgument() and
- * AddDefaultArgument()
- *
- * Revision 1.19 2003/12/16 20:39:47 jcherry
- * Added support for plugin arguments of type file
- *
- * Revision 1.18 2003/10/07 13:36:45 dicuccio
- * Renamed PluginURL* to PluginValue*. Moved validation code into CPluginUtils
- *
- * Revision 1.17 2003/07/23 19:14:08 dicuccio
- * Moved logic for validating plugin arguments into CPluginUtils.
- *
- * Revision 1.16 2003/07/22 15:30:47 dicuccio
- * Dropped support for CSeqVector as a named type. Changed to take advantage of
- * new Convert() API
- *
- * Revision 1.15 2003/06/20 14:48:16 dicuccio
- * Revised handling of default arguments - all built-in argument types are now
- * supported
- *
- * Revision 1.14 2003/06/02 16:06:20 dicuccio
- * Rearranged src/objects/ subtree. This includes the following shifts:
- * - src/objects/asn2asn --> arc/app/asn2asn
- * - src/objects/testmedline --> src/objects/ncbimime/test
- * - src/objects/objmgr --> src/objmgr
- * - src/objects/util --> src/objmgr/util
- * - src/objects/alnmgr --> src/objtools/alnmgr
- * - src/objects/flat --> src/objtools/flat
- * - src/objects/validator --> src/objtools/validator
- * - src/objects/cddalignview --> src/objtools/cddalignview
- * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
- * replaces the three libmmdb? libs.
- *
- * Revision 1.13 2003/05/19 13:37:46 dicuccio
- * Moved gui/core/plugin/ --> gui/plugin/
- *
- * Revision 1.12 2003/05/09 16:46:31 dicuccio
- * Added HasArgument() to check for argument existence. Made sure that all
- * AddArgument() functions will not add two arguments of the same name
- *
- * Revision 1.11 2003/04/30 16:27:15 dicuccio
- * Fixed thinko - forgot to actually set the object type when presented with an
- * object...
- *
- * Revision 1.10 2003/04/30 13:57:06 dicuccio
- * Added interface for specifying multiple constraints for a given argument
- *
- * Revision 1.9 2003/04/29 14:47:34 dicuccio
- * Added validation hook. Changed management of constraints to match new spec
- *
- * Revision 1.8 2003/04/25 14:14:58 dicuccio
- * Changed optional argument API - allow data model objects as optional
- * arguments using new plugin API; remove old "optional-and-default" notions
- *
- * Revision 1.7 2003/04/24 16:33:03 dicuccio
- * Simplified object type specification. Added parallel AddArgument() to
- * indicate argument type from CSerialObject
- *
- * Revision 1.6 2003/03/20 19:58:04 dicuccio
- * Added non-const op[] for indexing
- *
- * Revision 1.5 2003/03/10 23:01:18 kuznets
- * iterate -> ITERATE
- *
- * Revision 1.4 2003/03/03 14:50:56 dicuccio
- * Added plugin argument constraints - lower bound, upper bound, range, and
- * member-of-set
- *
- * Revision 1.3 2003/02/26 20:54:12 dicuccio
- * Wrapped insertion of options (multimap) to get around compilation issues in
- * Solaris
- *
- * Revision 1.2 2003/02/26 14:27:28 dicuccio
- * Removed unnecessary _TRACE() statements
- *
- * Revision 1.1 2003/02/24 13:03:17 dicuccio
- * Renamed classes in plugin spec:
- * CArgSeg --> CPluginArgSet
- * CArgument --> CPluginArg
- * CPluginArgs --> CPluginCommand
- * CPluginCommands --> CPluginCommandSet
- *
- * Revision 1.2 2003/02/21 17:16:53 dicuccio
- * Fixed compilation errors related to changes in plugin architecture
- *
- * Revision 1.1 2003/02/20 19:49:57 dicuccio
- * Created new plugin architecture, based on ASN.1 spec. Moved GBENCH frameowrk
- * over to use new plugin architecture.
- *
- *
- * ===========================================================================
- */
- /* Original file checksum: lines: 64, chars: 1873, CRC32: 1571727e */