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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: validator.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 21:01:57  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef VALIDATOR___VALIDATOR__HPP
  10. #define VALIDATOR___VALIDATOR__HPP
  11. /*  $Id: validator.hpp,v 1000.0 2003/10/29 21:01:57 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Jonathan Kans, Clifford Clausen, Aaron Ucko......
  37.  *
  38.  * File Description:
  39.  *   Validates CSeq_entries and CSeq_submits
  40.  *   .......
  41.  *
  42.  */
  43. #include <corelib/ncbistd.hpp>
  44. #include <serial/objectinfo.hpp>
  45. #include <serial/serialbase.hpp>
  46. #include <map>
  47. BEGIN_NCBI_SCOPE
  48. BEGIN_SCOPE(objects)
  49. class CSeq_entry;
  50. class CSeq_submit;
  51. class CSeq_annot;
  52. class CObjectManager;
  53. class CScope;
  54. BEGIN_SCOPE(validator)
  55. class NCBI_VALIDATOR_EXPORT CValidErrItem : public CObject 
  56. {
  57. public:
  58.     // constructor
  59.     CValidErrItem(EDiagSev             sev,
  60.                   unsigned int         ei,
  61.                   const string&        msg,
  62.                   const CSerialObject& obj);
  63.     // destructor
  64.     ~CValidErrItem(void);
  65.     // access functions
  66.     EDiagSev                GetSeverity (void) const;
  67.     const string&           GetSevAsStr (void) const;
  68.     const string&           GetMsg      (void) const;
  69.     const string&           GetErrCode  (void) const;
  70.     const string&           GetVerbose  (void) const;
  71.     const CConstObjectInfo& GetObject   (void) const;
  72. private:
  73.     // member data values
  74.     EDiagSev         m_Severity;   // severity level
  75.     unsigned int     m_ErrIndex;   // error code index
  76.     string           m_Message;    // specific error message
  77.     CConstObjectInfo m_Object;     // type plus offending object
  78.     // internal string arrays
  79.     static const string sm_Terse [];
  80.     static const string sm_Verbose [];
  81. };
  82. class NCBI_VALIDATOR_EXPORT CValidError : public CObject
  83. {
  84. public:
  85.     // constructors
  86.     CValidError(void);
  87.     
  88.     void AddValidErrItem(const CValidErrItem* item);
  89.     // Statistics
  90.     SIZE_TYPE TotalSize(void)    const;
  91.     SIZE_TYPE Size(EDiagSev sev) const;
  92.     SIZE_TYPE InfoSize(void)     const;
  93.     SIZE_TYPE WarningSize(void)  const;
  94.     SIZE_TYPE ErrorSize(void)    const;
  95.     SIZE_TYPE CriticalSize(void) const;
  96.     SIZE_TYPE FatalSize(void)    const;
  97.     // destructor
  98.     ~CValidError(void);
  99. private:
  100.     typedef vector < CConstRef < CValidErrItem > > TErrs;
  101.     // Prohibit copy constructor & assignment operator
  102.     CValidError(const CValidError&);
  103.     CValidError& operator= (const CValidError&);
  104.     // Error list
  105.     TErrs m_ErrItems;
  106.     // statistics
  107.     map<EDiagSev, SIZE_TYPE>     m_Stats;
  108.     friend class CValidError_CI;
  109. };
  110. class NCBI_VALIDATOR_EXPORT CValidError_CI
  111. {
  112. public:
  113.     CValidError_CI(void);
  114.     CValidError_CI(const CValidError& ve,
  115.                    const string& errcode = kEmptyStr,
  116.                    EDiagSev minsev  = eDiagSevMin,
  117.                    EDiagSev maxsev  = eDiagSevMax);
  118.     CValidError_CI(const CValidError_CI& iter);
  119.     virtual ~CValidError_CI(void);
  120.     CValidError_CI& operator=(const CValidError_CI& iter);
  121.     CValidError_CI& operator++(void);
  122.     operator bool(void) const;
  123.     const CValidErrItem& operator* (void) const;
  124.     const CValidErrItem* operator->(void) const;
  125. private:
  126.     bool Filter(const CValidErrItem& item) const;
  127.     bool AtEnd(void) const;
  128.     void Next(void);
  129.     CConstRef<CValidError>               m_Validator;
  130.     CValidError::TErrs::const_iterator   m_Current;
  131.     // filters:
  132.     string                               m_ErrCodeFilter;
  133.     EDiagSev                             m_MinSeverity;
  134.     EDiagSev                             m_MaxSeverity;
  135. };
  136. class NCBI_VALIDATOR_EXPORT CValidator : public CObject 
  137. {
  138. public:
  139.     enum EValidOptions {
  140.         eVal_non_ascii       = 0x1,
  141.         eVal_no_context      = 0x2,
  142.         eVal_val_align       = 0x4,
  143.         eVal_val_exons       = 0x8,
  144.         eVal_splice_err      = 0x10,
  145.         eVal_ovl_pep_err     = 0x20,
  146.         eVal_need_taxid      = 0x40,
  147.         eVal_need_isojta     = 0x80, 
  148.         eVal_validate_id_set = 0x100,
  149.         eVal_remote_fetch    = 0x200,
  150.         // !!! For test purposes only {
  151.         eVal_perf_bottlenecks  = 0x1000
  152.         // }
  153.     };
  154.     // Construtor / Destructor
  155.     CValidator(CObjectManager& objmgr);
  156.     ~CValidator(void);
  157.     // Validation methods:
  158.     // It is possible to validate objects of types CSeq_entry, CSeq_submit 
  159.     // or CSeq_annot. In addition to the object to validate the user must 
  160.     // provide the scope which contain that object, and validation options
  161.     // that are created by OR'ing EValidOptions (as specified above)
  162.     // Validate Seq-entry. 
  163.     // If provding a scope the Seq-entry must be a 
  164.     // top-level Seq-entry in that scope.
  165.     CConstRef<CValidError> Validate(const CSeq_entry& se, CScope* scope = 0,
  166.         Uint4 options = 0);
  167.     // Validate Seq-submit.
  168.     // Validates each of the Seq-entry contained in the submission.
  169.     CConstRef<CValidError> Validate(const CSeq_submit& ss, CScope* scope = 0,
  170.         Uint4 options = 0);
  171.     // Validate Seq-annot
  172.     // Validates stand alone Seq-annot objects. This will supress any
  173.     // check on the context of the annotaions.
  174.     CConstRef<CValidError> Validate(const CSeq_annot& sa, CScope* scope = 0,
  175.         Uint4 options = 0);
  176.     // progress reporting
  177.     class CProgressInfo
  178.     {
  179.     public:
  180.         enum EState {
  181.             eState_not_set,
  182.             eState_Initializing,
  183.             eState_Align,
  184.             eState_Annot,
  185.             eState_Bioseq,
  186.             eState_Bioseq_set,
  187.             eState_Desc,
  188.             eState_Descr,
  189.             eState_Feat,
  190.             eState_Graph
  191.         };
  192.         CProgressInfo(void): m_State(eState_not_set), 
  193.             m_Total(0), m_TotalDone(0), 
  194.             m_Current(0), m_CurrentDone(0),
  195.             m_UserData(0)
  196.         {}
  197.         EState GetState(void)       const { return m_State;       }
  198.         size_t GetTotal(void)       const { return m_Total;       }
  199.         size_t GetTotalDone(void)   const { return m_TotalDone;   }
  200.         size_t GetCurrent(void)     const { return m_Current;     }
  201.         size_t GetCurrentDone(void) const { return m_CurrentDone; }
  202.         void*  GetUserData(void)    const { return m_UserData;    }
  203.     private:
  204.         friend class CValidError_imp;
  205.         EState m_State;
  206.         size_t m_Total;
  207.         size_t m_TotalDone;
  208.         size_t m_Current;
  209.         size_t m_CurrentDone; 
  210.         void*  m_UserData;
  211.     };
  212.     typedef bool (*TProgressCallback)(CProgressInfo*);
  213.     void SetProgressCallback(TProgressCallback callback, void* user_data = 0);
  214. private:
  215.     // Prohibit copy constructor & assignment operator
  216.     CValidator(const CValidator&);
  217.     CValidator& operator= (const CValidator&);
  218.     CRef<CObjectManager>    m_ObjMgr;
  219.     TProgressCallback       m_PrgCallback;
  220.     void*                   m_UserData;
  221. };
  222. // Inline Functions:
  223. inline
  224. SIZE_TYPE CValidError::TotalSize(void) const 
  225. {
  226.     return m_ErrItems.size();
  227. }
  228. inline
  229. SIZE_TYPE CValidError::Size(EDiagSev sev) const 
  230. {
  231.     return const_cast<CValidError*>(this)->m_Stats[sev]; 
  232. }
  233. inline
  234. SIZE_TYPE CValidError::InfoSize(void) const
  235. {
  236.     return Size(eDiag_Info);
  237. }
  238. inline
  239. SIZE_TYPE CValidError::WarningSize(void) const
  240. {
  241.     return Size(eDiag_Warning);
  242. }
  243. inline
  244. SIZE_TYPE CValidError::ErrorSize(void) const
  245. {
  246.     return Size(eDiag_Error);
  247. }
  248. inline
  249. SIZE_TYPE CValidError::CriticalSize(void) const
  250. {
  251.     return Size(eDiag_Critical);
  252. }
  253. inline
  254. SIZE_TYPE CValidError::FatalSize(void) const
  255. {
  256.     return Size(eDiag_Fatal);
  257. }
  258. END_SCOPE(validator)
  259. END_SCOPE(objects)
  260. END_NCBI_SCOPE
  261. /*
  262. * ===========================================================================
  263. *
  264. * $Log: validator.hpp,v $
  265. * Revision 1000.0  2003/10/29 21:01:57  gouriano
  266. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.13
  267. *
  268. * Revision 1.13  2003/05/15 00:23:01  ucko
  269. * auto_ptr<> -> CConstRef<> in return type of CValidator::Validate, per
  270. * the actual current definitions in validator.cpp...
  271. *
  272. * Revision 1.12  2003/04/18 19:06:52  shomrat
  273. * redundant comma
  274. *
  275. * Revision 1.11  2003/04/15 14:55:02  shomrat
  276. * Added a progress callback mechanism
  277. *
  278. * Revision 1.10  2003/04/04 18:29:06  shomrat
  279. * Added remote_fetch option
  280. *
  281. * Revision 1.9  2003/03/21 20:57:59  shomrat
  282. * Added validate is set agins db option
  283. *
  284. * Revision 1.8  2003/03/20 18:52:11  shomrat
  285. * Addes support for standalone Seq-annot validation. Decoupling the validation class (CValidator) from the error repository (CValidError)
  286. *
  287. * Revision 1.7  2003/03/10 18:11:53  shomrat
  288. * Added statistics information
  289. *
  290. * Revision 1.6  2003/03/06 19:31:57  shomrat
  291. * Bug fix and code cleanup in CValidError_CI
  292. *
  293. * Revision 1.5  2003/02/24 20:14:59  shomrat
  294. * Added AddValidErrItem instead of exposing the undelying container
  295. *
  296. * Revision 1.4  2003/02/07 21:00:27  shomrat
  297. * Added size()
  298. *
  299. * Revision 1.3  2003/02/03 20:16:55  shomrat
  300. * Added option to supress suspected performance bottlenecks (for testing)
  301. *
  302. * Revision 1.2  2003/01/07 19:57:03  shomrat
  303. * Added Win32 export specifier; Memebr GetMessage() changed to GetMsg() due to conflict
  304. *
  305. * Revision 1.1  2002/12/19 20:54:23  shomrat
  306. * From /objects/util/validate.hpp
  307. *
  308. *
  309. * ===========================================================================
  310. */
  311. #endif  /* VALIDATOR___VALIDATOR__HPP */