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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: validerror_desc.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:47:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: validerror_desc.cpp,v 1000.1 2004/06/01 19:47:57 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:  Jonathan Kans, Clifford Clausen, Aaron Ucko......
  35.  *
  36.  * File Description:
  37.  *   validation of seq_desc
  38.  *   .......
  39.  *
  40.  */
  41. #include <ncbi_pch.hpp>
  42. #include <corelib/ncbistd.hpp>
  43. #include <corelib/ncbistr.hpp>
  44. #include "validatorp.hpp"
  45. #include <objects/general/User_object.hpp>
  46. #include <objects/general/User_field.hpp>
  47. #include <objects/general/Object_id.hpp>
  48. #include <objects/seq/Seqdesc.hpp>
  49. #include <objects/seq/MolInfo.hpp>
  50. BEGIN_NCBI_SCOPE
  51. BEGIN_SCOPE(objects)
  52. BEGIN_SCOPE(validator)
  53. CValidError_desc::CValidError_desc(CValidError_imp& imp) :
  54.     CValidError_base(imp)
  55. {
  56. }
  57. CValidError_desc::~CValidError_desc(void)
  58. {
  59. }
  60. /**
  61.  * Validate descriptors as stand alone objects (no context)
  62.  **/
  63. void CValidError_desc::ValidateSeqDesc(const CSeqdesc& desc)
  64. {
  65.     // switch on type, e.g., call ValidateBioSource, ValidatePubdesc, ...
  66.     switch ( desc.Which() ) {
  67.         case CSeqdesc::e_Mol_type:
  68.         case CSeqdesc::e_Modif:
  69.         case CSeqdesc::e_Method:
  70.             PostErr(eDiag_Info, eErr_SEQ_DESCR_Obsolete,
  71.                 desc.SelectionName(desc.Which()) + " is obsolete", desc);
  72.             break;
  73.         case CSeqdesc::e_Comment:
  74.             ValidateComment(desc.GetComment(), desc);
  75.             break;
  76.         case CSeqdesc::e_Pub:
  77.             m_Imp.ValidatePubdesc(desc.GetPub(), desc);
  78.             break;
  79.         case CSeqdesc::e_User:
  80.             ValidateUser(desc.GetUser(), desc);
  81.             break;
  82.         case CSeqdesc::e_Source:
  83.             m_Imp.ValidateBioSource (desc.GetSource(), desc);
  84.             break;
  85.         
  86.         case CSeqdesc::e_Molinfo:
  87.             ValidateMolInfo(desc.GetMolinfo(), desc);
  88.             break;
  89.         case CSeqdesc::e_not_set:
  90.             break;
  91.         case CSeqdesc::e_Name:
  92.             break;
  93.         case CSeqdesc::e_Title:
  94.             break;
  95.         case CSeqdesc::e_Org:
  96.             break;
  97.         case CSeqdesc::e_Num:
  98.             break;
  99.         case CSeqdesc::e_Maploc:
  100.             break;
  101.         case CSeqdesc::e_Pir:
  102.             break;
  103.         case CSeqdesc::e_Genbank:
  104.             break;
  105.         case CSeqdesc::e_Region:
  106.             break;
  107.         case CSeqdesc::e_Sp:
  108.             break;
  109.         case CSeqdesc::e_Dbxref:
  110.             break;
  111.         case CSeqdesc::e_Embl:
  112.             break;
  113.         case CSeqdesc::e_Create_date:
  114.             break;
  115.         case CSeqdesc::e_Update_date:
  116.             break;
  117.         case CSeqdesc::e_Prf:
  118.             break;
  119.         case CSeqdesc::e_Pdb:
  120.             break;
  121.         case CSeqdesc::e_Het:
  122.             break;
  123.         default:
  124.             break;
  125.     }
  126. }
  127. void CValidError_desc::ValidateComment
  128. (const string& comment,
  129.  const CSeqdesc& desc)
  130. {
  131.     if ( m_Imp.IsSerialNumberInComment(comment) ) {
  132.         PostErr(eDiag_Info, eErr_SEQ_DESCR_SerialInComment,
  133.             "Comment may refer to reference by serial number - "
  134.             "attach reference specific comments to the reference "
  135.             "REMARK instead.", desc);
  136.     }
  137. }
  138. void CValidError_desc::ValidateUser
  139. (const CUser_object& usr,
  140.  const CSeqdesc& desc)
  141. {
  142.     if ( !usr.CanGetType() ) {
  143.         return;
  144.     }
  145.     const CObject_id& oi = usr.GetType();
  146.     if ( !oi.IsStr() ) {
  147.         return;
  148.     }
  149.     if ( NStr::CompareNocase(oi.GetStr(), "TpaAssembly") == 0 ) {
  150.         if ( !m_Imp.IsTPA() ) {
  151.             PostErr(eDiag_Error, eErr_SEQ_DESCR_InvalidForType,
  152.                 "Non-TPA record should not have TpaAssembly object", desc);
  153.         }
  154.     } else if ( NStr::CompareNocase(oi.GetStr(), "RefGeneTracking") == 0 ) {
  155.         bool has_ref_track_status = false;
  156.         ITERATE(CUser_object::TData, field, usr.GetData()) {
  157.             if ( (*field)->CanGetLabel() ) {
  158.                 const CObject_id& obj_id = (*field)->GetLabel();
  159.                 if ( !obj_id.IsStr() ) {
  160.                     continue;
  161.                 }
  162.                 if ( NStr::CompareNocase(obj_id.GetStr(), "Status") == 0 ) {
  163.                     has_ref_track_status = true;
  164.                     break;
  165.                 }
  166.             }
  167.         }
  168.         if ( !has_ref_track_status ) {
  169.             PostErr(eDiag_Error, eErr_SEQ_DESCR_RefGeneTrackingWithoutStatus,
  170.                 "RefGeneTracking object needs to have Status set", desc);
  171.         }
  172.     }
  173. }
  174. void CValidError_desc::ValidateMolInfo
  175. (const CMolInfo& minfo,
  176.  const CSeqdesc& desc)
  177. {
  178.     if ( !minfo.IsSetBiomol() ) {
  179.         return;
  180.     }
  181.     int biomol = minfo.GetBiomol();
  182.     switch ( biomol ) {
  183.     case CMolInfo::eBiomol_unknown:
  184.         PostErr(eDiag_Error, eErr_SEQ_DESCR_InvalidForType,
  185.             "Molinfo-biomol unknown used", desc);
  186.         break;
  187.     case CMolInfo::eBiomol_other:
  188.         if ( !m_Imp.IsXR() ) {
  189.             PostErr(eDiag_Warning, eErr_SEQ_DESCR_InvalidForType,
  190.                 "Molinfo-biomol other used", desc);
  191.         }
  192.         break;
  193.     default:
  194.         break;
  195.     }
  196. }
  197. END_SCOPE(validator)
  198. END_SCOPE(objects)
  199. END_NCBI_SCOPE
  200. /*
  201. * ===========================================================================
  202. *
  203. * $Log: validerror_desc.cpp,v $
  204. * Revision 1000.1  2004/06/01 19:47:57  gouriano
  205. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  206. *
  207. * Revision 1.8  2004/05/21 21:42:56  gorelenk
  208. * Added PCH ncbi_pch.hpp
  209. *
  210. * Revision 1.7  2003/09/03 18:27:17  shomrat
  211. * Check that RefGenTrackking object has Status field
  212. *
  213. * Revision 1.6  2003/05/28 16:28:18  shomrat
  214. * Use the comment variable
  215. *
  216. * Revision 1.5  2003/03/31 14:40:24  shomrat
  217. * $id: -> $id$
  218. *
  219. * Revision 1.4  2003/02/12 17:55:39  shomrat
  220. * Implemented checks for obsolete, comment and molinfo descriptors
  221. *
  222. * Revision 1.3  2003/02/07 21:17:21  shomrat
  223. * Added check IsTPA
  224. *
  225. * Revision 1.2  2002/12/24 16:53:35  shomrat
  226. * Changes to include directives
  227. *
  228. * Revision 1.1  2002/12/23 20:16:22  shomrat
  229. * Initial submission after splitting former implementation
  230. *
  231. *
  232. * ===========================================================================
  233. */