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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: entrez_db.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 21:26:35  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_PLUGINS_DOC_BASIC___ENTREZ_DB__HPP
  10. #define GUI_PLUGINS_DOC_BASIC___ENTREZ_DB__HPP
  11. /*  $Id: entrez_db.hpp,v 1000.0 2004/06/01 21:26:35 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.  * Authors:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *    CEntrezDBCache -- cache of Entrez database handlers
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <objects/seqloc/Seq_id.hpp>
  43. #include <objects/entrez2/entrez2_client.hpp>
  44. #include <objects/entrez2/Entrez2_docsum.hpp>
  45. #include <objects/entrez2/Entrez2_docsum_list.hpp>
  46. BEGIN_NCBI_SCOPE
  47. class IEntrezDBHandler
  48. {
  49. public:
  50.     struct SHeaderInfo {
  51.         string name;
  52.         float rel_width;
  53.         SHeaderInfo() {}
  54.         SHeaderInfo(const string& n, float w)
  55.             : name(n)
  56.             , rel_width(w) { }
  57.     };
  58.     virtual ~IEntrezDBHandler() { }
  59.     // get the name of the database as Entrez knows it
  60.     virtual string GetDbName() const = 0;
  61.     // get a copy of the name that is nice to print
  62.     virtual string GetVisibleDbName() const = 0;
  63.     // perform a query in the handled database
  64.     virtual CRef<objects::CEntrez2_docsum_list> Query(const string& terms,
  65.                                                       size_t& total_uids,
  66.                                                       size_t offs = 0,
  67.                                                       size_t count = 0) = 0;
  68.     // return the list of column headers to be used when displaying
  69.     // results for this database
  70.     virtual void GetHeaders(vector<SHeaderInfo>& headers) const = 0;
  71.     // return a vector<string> representing the values for a single docsum
  72.     virtual void Format(const objects::CEntrez2_docsum& ds,
  73.                         vector<string>& cols) const = 0;
  74.     // how to resolve to seq-ids when a seq-id is not immediately obvious
  75.     enum ESeqIdFlags {
  76.         // favor nucleotides (proteins favored otherwise)
  77.         fFavorNucleotide    = 0x1,
  78.         // return only the "best" id
  79.         fFavorBest          = 0x2,
  80.         // return only the RefSeq id(s)
  81.         fFavorRefSeq        = 0x4,
  82.         fDefaults           = 0
  83.     };
  84.     typedef int TSeqIdFlags;
  85.     // retrieve seq-ids for a given set of docsums
  86.     typedef list< CRef<objects::CSeq_id> > TIds;
  87.     virtual TIds GetSeqIds(const objects::CEntrez2_docsum_list& ds_list,
  88.                            TSeqIdFlags flags = fDefaults) = 0;
  89.     virtual TIds GetSeqIds(const objects::CEntrez2_docsum& ds,
  90.                            TSeqIdFlags flags = fDefaults) = 0;
  91. };
  92. //
  93. // derived class providing basic query functions
  94. //
  95. class CEntrezDBHandler : public IEntrezDBHandler, public CObject
  96. {
  97. public:
  98.     virtual CRef<objects::CEntrez2_docsum_list> Query(const string& terms,
  99.                                                       size_t& total_uids,
  100.                                                       size_t offs = 0,
  101.                                                       size_t count = 0);
  102. protected:
  103.     objects::CEntrez2Client& x_GetClient();
  104. private:
  105.     CRef<objects::CEntrez2Client> m_Client;
  106. };
  107. //
  108. // manager for instances
  109. class CEntrezDBManager : public CObject
  110. {
  111. public:
  112.     CEntrezDBManager();
  113.     void RegisterHandler(CEntrezDBHandler& handler);
  114.     IEntrezDBHandler& GetHandler(const string& db) const;
  115.     struct SDbEntry {
  116.         string db_name;
  117.         string visible_db_name;
  118.     };
  119.     typedef list<SDbEntry> TEntries;
  120.     void GetDatabases(TEntries& entries);
  121. private:
  122.     typedef map<string, CRef<CEntrezDBHandler> > THandlers;
  123.     THandlers m_Handlers;
  124. };
  125. END_NCBI_SCOPE
  126. /*
  127.  * ===========================================================================
  128.  * $Log: entrez_db.hpp,v $
  129.  * Revision 1000.0  2004/06/01 21:26:35  gouriano
  130.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  131.  *
  132.  * Revision 1.1  2004/05/25 17:15:39  dicuccio
  133.  * Initial revision - moved over from old GenBank search
  134.  *
  135.  * ===========================================================================
  136.  */
  137. #endif  // GUI_PLUGINS_DOC_BASIC___ENTREZ_DB__HPP