2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 // $XConsortium: mmdb.C /main/7 1996/10/26 18:19:36 cde-hal $
25 #include "api/utility.h"
26 #include "utility/db_version.h"
27 #include "misc/unique_id.h"
28 #include "oliasdb/olias_funcs.h"
29 #include "oliasdb/collectionIterator.h"
30 #include "oliasdb/mmdb.h"
31 #include "mgrs/managers.h"
32 #include "api/base.h" // for UIDSIZ define
34 OLIAS_DB::OLIAS_DB() : infolib_array(20)
36 //fprintf(stderr, "OLIAS_DB::OLIAS_DB()");
37 managers::template_mgr -> insert_template(&dlp_template);
38 managers::template_mgr -> insert_template(&doc_template);
39 managers::template_mgr -> insert_template(&graphic_template);
40 managers::template_mgr -> insert_template(&locator_template);
41 managers::template_mgr -> insert_template(&node_template);
42 managers::template_mgr -> insert_template(&toc_template);
43 managers::template_mgr -> insert_template(&mark_template);
44 //managers::template_mgr -> insert_template(&pref_template);
45 managers::template_mgr -> insert_template(&stylesheet_template);
47 ///////////////////////////////
49 ///////////////////////////////
51 info_base_set_names = new charPtr[7];
53 info_base_set_names[0] = NODE_SET_NAME;
54 info_base_set_names[1] = TOC_SET_NAME;
55 info_base_set_names[2] = LOCATOR_SET_NAME;
56 info_base_set_names[3] = GRAPHIC_SET_NAME,
57 info_base_set_names[4] = DOC_SET_NAME;
58 info_base_set_names[5] = STYLESHEET_SET_NAME;
59 info_base_set_names[6] = 0;
61 info_base_list_names = new charPtr[2];
62 info_base_list_names[0] = DLP_LIST_NAME;
63 info_base_list_names[1] = 0;
70 for ( int i=0; i<infolib_array.no_elmts(); i++ ) {
71 x = (info_lib*)(infolib_array)[i];
75 delete info_base_set_names;
76 delete info_base_list_names;
79 int OLIAS_DB::validInfoLibPath(const char* path)
83 if ( exist_dir(path) == false )
86 if ( exist_file(MAP_FILE, path) == true )
89 if ( exist_file(MAP_FILE_8_3, path) == true )
94 mcatch (mmdbException &,e)
104 OLIAS_DB::openInfoLib(const char* infoLibPath, const char* selectedBaseName,
105 const char* infoLibName)
108 for ( i=0; i<infolib_array.no_elmts(); i++ ) {
109 if ( infolib_array[i] == 0 )
113 info_lib* x = new info_lib(
114 info_base_set_names, info_base_list_names,
115 (char*)infoLibPath, (char*)selectedBaseName,
116 (char*)infoLibName, i
120 // see if infolib already exists in mmdb, if it does, just
121 // return a pointer to it.
125 y = getInfoLib(x->get_info_lib_uid(), idx);
132 infolib_array.insert(x, i);
133 infolib_array.reset_elmts(i+1);
138 void OLIAS_DB::closeInfoLib(const char* infoLibUid)
141 info_lib* x = getInfoLib(infoLibUid, i);
144 infolib_array.insert(0, i);
149 info_lib* OLIAS_DB::getInfoLib(int i)
151 if ( 0 <= i && i < infolib_array.no_elmts() )
153 return (info_lib*)infolib_array[i];
158 info_lib* OLIAS_DB::getInfoLib(const char* infoLibUid, int& i)
161 for ( i=0; i<infolib_array.no_elmts(); i++ ) {
162 x = (info_lib*)(infolib_array)[i];
163 //if ( x && strcmp(x -> get_info_lib_name(), infoLibName) == 0 )
164 if ( x && strcmp(x -> get_info_lib_uid(), infoLibUid) == 0 )
170 char* OLIAS_DB::getInfoLibUid(char* infoLibPath)
172 static char info_lib_uid[UIDSIZ];
173 char info_lib_name[PATHSIZ];
175 if ( exist_file(MAP_FILE_8_3, infoLibPath) == true ) {
176 fstream map_in(form("%s/%s", infoLibPath, MAP_FILE_8_3), ios::in);
178 if ( !map_in.getline(info_lib_name, PATHSIZ, '\t') ||
179 !map_in.getline(info_lib_uid, UIDSIZ, '\n') )
189 OLIAS_DB::real_destroy_info_base(const char* info_lib_path, const char* base_name)
191 if ( unlink(form("%s/%s/%s.%s", info_lib_path, base_name, base_name, DATA_FILE_SUFFIX)) != 0 )
194 if ( unlink(form("%s/%s/%s.%s", info_lib_path, base_name, base_name, INDEX_FILE_SUFFIX)) != 0 )
197 if ( unlink(form("%s/%s/%s.%s", info_lib_path, base_name, base_name, SCHEMA_FILE_SUFFIX)) != 0 )
200 if ( rmdir(form("%s/%s", info_lib_path, base_name)) != 0 )
206 Boolean OLIAS_DB::real_destroy(const char* infoLibPath, const char* infoLibName)
208 // remove all infobases in the dir
210 char base_name[PATHSIZ];
211 char base_desc[PATHSIZ];
214 int major_mm_version = 0;
215 int minor_mm_version = 0;
217 snprintf(buf, sizeof(buf), "%s/%s", infoLibPath, MAP_FILE_8_3);
218 fstream in(buf, ios::in);
220 while ( in.getline(base_name, PATHSIZ, '\t') ) {
222 in.getline(base_desc, PATHSIZ, '\t');
224 in >> major_mm_version >> minor_mm_version;
228 if ( real_destroy_info_base(infoLibPath, base_name) != true )
233 if ( unlink(buf) != 0 )
239 Boolean OLIAS_DB::destroy(const char* infoLibPath, const char* infoLibName)
242 if ( getInfoLib(infoLibName, i) ) {
243 if ( infolib_array[i] )
246 return real_destroy(infoLibPath, infoLibName);
249 return real_destroy(infoLibPath, infoLibName);
252 int OLIAS_DB::major_code_version()
257 int OLIAS_DB::minor_code_version()
262 mm_version OLIAS_DB::code_version()
264 return mm_version(MAJOR, MINOR);