Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / programs / dtinfo / dtinfo / src / UAS / MMDB / MMDB.C
1 // $TOG: MMDB.C /main/8 1998/04/17 11:42:22 mgreess $
2 #include <stream.h>
3 #include "MMDB.hh"
4 #include "UAS_Exceptions.hh"
5 #include "UAS_Buffer.hh"
6 #include "UAS_Common.hh"
7 #include "UAS_Msgs.hh"
8 #include "MMDB_Factory.hh"
9
10 #include "Managers/CatMgr.hh"
11 #include "Registration.hh"
12
13 MMDB::MMDB(const UAS_String &infolibPath)
14 : f_initialized (0), fInfoLibPath (infolibPath)
15 {
16   f_oliasDB = &MMDB_Factory::olias_db();
17   f_infoLib =  f_oliasDB->openInfoLib((char *) infolibPath, 0,
18                 MMDB_Factory::genInfolibName());
19 }
20
21 MMDB::~MMDB()
22 {
23     if (f_infoLib) {
24         //f_oliasDB->closeInfoLib (f_infoLib->get_info_lib_name());
25         f_oliasDB->closeInfoLib (f_infoLib->get_info_lib_uid());
26     }
27     f_infoLib = 0;
28 }
29
30 UAS_String
31 MMDB::infoLibPath () {
32     return fInfoLibPath;
33 }
34
35 UAS_String
36 MMDB::infoLibUid()
37 {
38   return UAS_String(f_infoLib->get_info_lib_uid());
39 }
40
41 OLIAS_DB *
42 MMDB::database()
43 {
44   if (!f_initialized)
45     {
46       f_initialized = 1;
47       info_lib *lib = f_infoLib;
48       int bad_count = lib->bad_infobases();
49       if (bad_count > 0)
50         {
51           UAS_ErrorMsg msg;
52           UAS_Buffer buf(256);
53           const char *x =
54                 (char*)UAS_String(CATGETS(Set_UAS_MMDB, 1, "The following bookcases are not valid:"));
55           buf.write (x, sizeof(char), strlen(x));
56           for (int i = 1; i <= bad_count; i++)
57             {
58               buf.write ("\n", sizeof(char), 1);
59               x = lib->get_bad_infobase_path(i);
60               buf.write (x, sizeof(char), strlen(x));
61               buf.write ("/", sizeof(char), 1);
62               x = lib->get_bad_infobase_name(i);
63               buf.write (x, sizeof(char), strlen(x));
64             }
65           buf.write ("\0", sizeof(char), 1);
66           msg.fErrorMsg = buf.data();
67           UAS_Common::send_message (msg);
68         }
69     }
70   return (f_oliasDB);
71 }
72
73 info_base *
74 MMDB::infobase (const char *locator)
75 {
76   info_base *ib = f_infoLib->getInfobaseByComponent((const char *)locator,
77                     info_lib::LOC);
78   if (ib == NULL)
79     throw (CASTEXCEPT Exception());
80   else
81     return (ib);
82 }