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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: lds_admin.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:45:56  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: lds_admin.cpp,v 1000.1 2004/06/01 19:45:56 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: Anatoliy Kuznetsov
  35.  *
  36.  * File Description:  LDS database maintanance implementation.
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <objtools/lds/admin/lds_admin.hpp>
  41. #include <objtools/lds/admin/lds_files.hpp>
  42. #include <objtools/lds/admin/lds_object.hpp>
  43. BEGIN_NCBI_SCOPE
  44. BEGIN_SCOPE(objects)
  45. CLDS_Management::CLDS_Management(CLDS_Database& db)
  46. : m_lds_db(db)
  47. {}
  48. void CLDS_Management::SyncWithDir(const string& dir_name, 
  49.                                   ERecurse recurse,
  50.                                   EComputeControlSum control_sum)
  51. {
  52.     CLDS_Set files_deleted;
  53.     CLDS_Set files_updated;
  54.     SLDS_TablesCollection& db = m_lds_db.GetTables();
  55.     CLDS_File aFile(db);
  56.     bool rec = (recurse == eRecurseSubDirs);
  57.     bool control = (control_sum == eComputeControlSum);
  58.     aFile.SyncWithDir(dir_name, &files_deleted, &files_updated, rec, control);
  59.     CLDS_Set objects_deleted;
  60.     CLDS_Set annotations_deleted;
  61.     CLDS_Object obj(db, m_lds_db.GetObjTypeMap());
  62.     obj.DeleteCascadeFiles(files_deleted, 
  63.                            &objects_deleted, &annotations_deleted);
  64.     obj.UpdateCascadeFiles(files_updated);
  65.     m_lds_db.Sync();
  66. }
  67. CLDS_Database* 
  68. CLDS_Management::OpenCreateDB(const string&      dir_name,
  69.                               const string&      db_name,
  70.                               bool*              is_created,
  71.                               ERecurse           recurse,
  72.                               EComputeControlSum control_sum)
  73. {
  74.     CLDS_Database* db = new CLDS_Database(dir_name, db_name);
  75.     try {
  76.         db->Open();
  77.         *is_created = false;
  78.     } 
  79.     catch (CBDB_ErrnoException& ex)
  80.     {
  81.         // Failed to open: file does not exists.
  82.         // Force the construction
  83.         LOG_POST("Warning: trying to open LDS database:" << ex.what());
  84.         CLDS_Management admin(*db);
  85.         admin.Create();
  86.         admin.SyncWithDir(dir_name, recurse, control_sum);
  87.         *is_created = true;
  88.     }
  89.     return db;
  90. }
  91. void CLDS_Management::Create() 
  92.     m_lds_db.Create(); 
  93.     SLDS_TablesCollection& db = m_lds_db.GetTables();
  94.     //
  95.     // Upload the object type DB
  96.     //
  97.     LOG_POST(Info << "Uploading " << "objecttype");
  98.     CLDS_CoreObjectsReader  core_reader;
  99.     const CLDS_CoreObjectsReader::TCandidates& cand 
  100.                                 = core_reader.GetCandidates();
  101.     
  102.     int id = 1;
  103.     db.object_type_db.object_type = id;
  104.     db.object_type_db.type_name = "FastaEntry";
  105.     db.object_type_db.Insert();
  106.     LOG_POST(Info << "  " << "FastaEntry");
  107.     ++id;
  108.     ITERATE(CLDS_CoreObjectsReader::TCandidates, it, cand) {
  109.         string type_name = it->type_info.GetTypeInfo()->GetName();
  110.         db.object_type_db.object_type = id;
  111.         db.object_type_db.type_name = type_name;
  112.         db.object_type_db.Insert();
  113.         LOG_POST(Info << "  " << type_name);
  114.         ++id;
  115.     }
  116.     m_lds_db.LoadTypeMap();
  117. }
  118. END_SCOPE(objects)
  119. END_NCBI_SCOPE
  120. /*
  121.  * ===========================================================================
  122.  * $Log: lds_admin.cpp,v $
  123.  * Revision 1000.1  2004/06/01 19:45:56  gouriano
  124.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  125.  *
  126.  * Revision 1.10  2004/05/21 21:42:55  gorelenk
  127.  * Added PCH ncbi_pch.hpp
  128.  *
  129.  * Revision 1.9  2004/04/20 14:52:25  rsmith
  130.  * Name fl -> aFile since fl is a macro (?!) on Macs.
  131.  *
  132.  * Revision 1.8  2003/10/09 18:12:27  kuznets
  133.  * Some functionality of lds migrated into lds_admin
  134.  *
  135.  * Revision 1.7  2003/10/09 16:45:28  kuznets
  136.  * + explicit Sync() call
  137.  *
  138.  * Revision 1.6  2003/10/06 20:16:20  kuznets
  139.  * Added support for sub directories and option to disable CRC32 for files
  140.  *
  141.  * Revision 1.5  2003/08/11 20:01:48  kuznets
  142.  * Reflecting lds.hpp header change
  143.  *
  144.  * Revision 1.4  2003/08/06 20:13:05  kuznets
  145.  * Fixed LDS database creation bug CLDS_Management::OpenCreateDB always reported TRUE
  146.  * in is_created parameter
  147.  *
  148.  * Revision 1.3  2003/06/25 18:28:40  kuznets
  149.  * + CLDS_Management::OpenCreateDB(...)
  150.  *
  151.  * Revision 1.2  2003/06/16 16:24:43  kuznets
  152.  * Fixed #include paths (lds <-> lds_admin separation)
  153.  *
  154.  * Revision 1.1  2003/06/16 14:55:00  kuznets
  155.  * lds splitted into "lds" and "lds_admin"
  156.  *
  157.  * ===========================================================================
  158. */