00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00030 #include <string.h>
00031 #include <stdlib.h>
00032
00033 #include <glib.h>
00034 #include <glib-object.h>
00035
00036 #include "perr.h"
00037 #include "estron.h"
00038 #include "dui-initdb.h"
00039
00040 struct DuiDatabase_s
00041 {
00042 GObject gobject;
00043 gchar * name;
00044
00045
00046 gchar * provider;
00047 gchar * dbname;
00048 gchar * hostname;
00049 gchar * username;
00050 gchar * authent;
00051
00052
00053 DuiDBConnection *db_conn;
00054 };
00055
00056
00057 enum
00058 {
00059 DB_NAME=1,
00060 DB_PROVIDER,
00061 DB_DBNAME,
00062 DB_HOSTNAME,
00063 DB_USERNAME,
00064 DB_AUTH,
00065 };
00066
00067 typedef struct DuiDatabaseClass_s
00068 {
00069 GObjectClass parent_class;
00070 } DuiDatabaseClass;
00071
00072
00073
00074 static void
00075 db_get_property (GObject *object, guint property_id,
00076 GValue *value, GParamSpec *pspec)
00077 {
00078 gchar * str = NULL;
00079 GValue * val;
00080 DuiDatabase *db = DUI_DATABASE(object);
00081
00082 val = g_new0(GValue, 1);
00083 g_value_init (val, G_TYPE_STRING);
00084 switch (property_id)
00085 {
00086 case DB_NAME: str=db->name; break;
00087 case DB_PROVIDER: str=db->provider; break;
00088 case DB_DBNAME: str=db->dbname; break;
00089 case DB_HOSTNAME: str=db->hostname; break;
00090 case DB_USERNAME: str=db->username; break;
00091 case DB_AUTH: str=db->authent; break;
00092
00093 }
00094 g_value_set_string (val, str);
00095 g_value_copy (val, value);
00096 g_free (val);
00097 }
00098
00099
00100 static void
00101 db_set_property (GObject *object, guint property_id,
00102 const GValue *value, GParamSpec *pspec)
00103 {
00104 gchar * str;
00105 DuiDatabase *db = DUI_DATABASE(object);
00106
00107 str = g_strdup (g_value_get_string (value));
00108 switch (property_id)
00109 {
00110 case DB_NAME: g_free (db->name); db->name = str; break;
00111 case DB_PROVIDER: g_free (db->provider); db->provider = str; break;
00112 case DB_DBNAME: g_free (db->dbname); db->dbname = str; break;
00113 case DB_HOSTNAME: g_free (db->hostname); db->hostname = str; break;
00114 case DB_USERNAME: g_free (db->username); db->username = str; break;
00115 case DB_AUTH: g_free (db->authent); db->authent = str; break;
00116 }
00117 }
00118
00119
00120
00121 #define INSTALL(PROP,NAME,DESC) { \
00122 GParamSpec *pspec; \
00123 pspec = g_param_spec_string (NAME, NULL, \
00124 DESC, NULL, G_PARAM_READWRITE); \
00125 g_object_class_install_property (goc, PROP, pspec); \
00126 }
00127
00128
00129 static void
00130 db_class_init (DuiDatabaseClass *dbclass, gpointer class_data)
00131 {
00132 GObjectClass *goc;
00133
00134 dbclass->parent_class.set_property = db_set_property;
00135 dbclass->parent_class.get_property = db_get_property;
00136
00137 goc = G_OBJECT_CLASS (dbclass);
00138
00139 INSTALL (DB_NAME, "name", "DWI Database term name");
00140 INSTALL (DB_PROVIDER, "provider", "DWI database driver name");
00141 INSTALL (DB_DBNAME, "dbname", "Database name");
00142 INSTALL (DB_HOSTNAME, "hostname", "TCP/IP host name");
00143 INSTALL (DB_USERNAME, "username", "User Login");
00144 INSTALL (DB_AUTH, "authentication", "Password or Other Authentication");
00145 }
00146
00147
00148
00149
00150 static void
00151 db_init (DuiDatabase *db, DuiDatabaseClass *dbclass)
00152 {
00153 db->name = NULL;
00154 db->provider = NULL;
00155 db->dbname = NULL;
00156 db->hostname = NULL;
00157 db->username = NULL;
00158 db->authent = NULL;
00159
00160 db->db_conn = NULL;
00161 }
00162
00163
00164
00165 GType
00166 dui_database_get_type (void)
00167 {
00168 static GType db_type = 0;
00169
00170 if (!db_type)
00171 {
00172 GTypeInfo db_info =
00173 {
00174 sizeof (DuiDatabaseClass),
00175 NULL,
00176 NULL,
00177 (GClassInitFunc) db_class_init,
00178 NULL, NULL,
00179 sizeof (DuiDatabase),
00180 0,
00181 (GInstanceInitFunc) db_init,
00182 NULL
00183 };
00184
00185 db_type = g_type_register_static (G_TYPE_OBJECT,
00186 "DuiDatabase", &db_info, 0);
00187 }
00188 return db_type;
00189 }
00190
00191
00192
00193 DuiDatabase *
00194 dui_database_new (const gchar * name,
00195 const gchar * provider, const gchar * dbname,
00196 const gchar * hostname, const gchar * username,
00197 const gchar * passwd)
00198 {
00199 DuiDatabase *db;
00200
00201 g_type_init();
00202
00203 db = g_object_new (DUI_DATABASE_TYPE, NULL);
00204
00205
00206 if (!name) name = "";
00207 if (!provider) provider = "";
00208 if (!dbname) dbname = "";
00209 if (!hostname) hostname = "";
00210 if (!username) username = "";
00211 if (!passwd) passwd = "";
00212
00213 db->name = g_strdup (name);
00214 db->provider = g_strdup (provider);
00215 db->dbname = g_strdup (dbname);
00216 db->hostname = g_strdup (hostname);
00217 db->username = g_strdup (username);
00218 db->authent = g_strdup (passwd);
00219
00220 db->db_conn = NULL;
00221
00222 return db;
00223 }
00224
00225
00226
00227 void
00228 dui_database_destroy (DuiDatabase *db)
00229 {
00230 dui_connection_free (db->db_conn);
00231 g_free (db->name);
00232 g_free (db->provider);
00233 g_free (db->hostname);
00234 g_free (db->dbname);
00235 g_free (db->username);
00236 g_free (db->authent);
00237
00238
00239 }
00240
00241
00242
00243 DuiDBConnection *
00244 dui_database_do_realize (DuiDatabase *db)
00245 {
00246
00247 if (!db) return NULL;
00248 if (db->db_conn) return db->db_conn;
00249
00250
00251 db->db_conn = dui_connection_new (db->provider,
00252 db->dbname, db->username, db->authent);
00253 if (NULL == db->db_conn)
00254 {
00255 PWARN ("Can't open connection for provider=\"%s\", "
00256 "database=\"%s\", username=\"%s\"",
00257 db->provider, db->dbname, db->username);
00258 }
00259 return db->db_conn;
00260 }
00261
00262
00263
00264 const gchar *
00265 dui_database_get_name (DuiDatabase *db)
00266 {
00267 if (!db) return NULL;
00268 return db->name;
00269 }
00270
00271