00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <midgard/midgard_error.h>
00020 #include <midgard/midgard_legacy.h>
00021
00022 GQuark midgard_error_generic(void)
00023 {
00024 static GQuark q = 0;
00025 if (q == 0)
00026 q = g_quark_from_static_string ("midgard-generic-error-quark");
00027 return q;
00028 }
00029
00030 const gchar *midgard_error_string(GQuark domain, gint errcode)
00031 {
00032 switch(errcode){
00033
00034 case MGD_ERR_OK:
00035 return _("MGD_ERR_OK");
00036 break;
00037
00038 case MGD_ERR_ACCESS_DENIED:
00039 return _("Access Denied");
00040 break;
00041
00042 case MGD_ERR_SITEGROUP_VIOLATION:
00043 return _("Resource link crosses sitegroup borders");
00044 break;
00045
00046 case MGD_ERR_NOT_OBJECT:
00047 return _("Not Midgard Object");
00048 break;
00049
00050 case MGD_ERR_NOT_EXISTS:
00051 return _("Object does not exist");
00052 break;
00053
00054 case MGD_ERR_NO_MEM:
00055 return _("Can't allocate memory");
00056 break;
00057
00058 case MGD_ERR_INVALID_NAME:
00059 return _("Invalid characters in object's name");
00060 break;
00061
00062 case MGD_ERR_DUPLICATE:
00063 return _("Object already exist");
00064 break;
00065
00066 case MGD_ERR_HAS_DEPENDANTS:
00067 return _("Object has dependants");
00068 break;
00069
00070 case MGD_ERR_RANGE:
00071 return _("Date range error");
00072 break;
00073
00074 case MGD_ERR_NOT_CONNECTED:
00075 return _("Not connected to the Midgard database");
00076 break;
00077
00078 case MGD_ERR_SG_NOTFOUND:
00079 return _("Sitegroup not found");
00080 break;
00081
00082 case MGD_ERR_INVALID_OBJECT:
00083 return _("Object not registered as Midgard Object");
00084 break;
00085
00086 case MGD_ERR_QUOTA:
00087 return _("Quota limit reached");
00088 break;
00089
00090 case MGD_ERR_INTERNAL:
00091 return _("Critical internal error");
00092 break;
00093
00094 case MGD_ERR_OBJECT_NAME_EXISTS:
00095 return _("Object with such name exists in tree");
00096 break;
00097
00098 case MGD_ERR_OBJECT_NO_STORAGE:
00099 return _("Storage table not defined for object");
00100 break;
00101
00102 case MGD_ERR_OBJECT_NO_PARENT:
00103 return _("Parent object in tree not defined");
00104 break;
00105
00106 case MGD_ERR_INVALID_PROPERTY_VALUE:
00107 return _("Invalid property value.");
00108 break;
00109
00110 case MGD_ERR_USER_DATA:
00111 return "";
00112 break;
00113
00114 case MGD_ERR_OBJECT_DELETED:
00115 return _("Object deleted");
00116 break;
00117
00118 case MGD_ERR_OBJECT_PURGED:
00119 return _("Object purged");
00120 break;
00121
00122 case MGD_ERR_OBJECT_EXPORTED:
00123 return _("Object already exported");
00124 break;
00125
00126 case MGD_ERR_OBJECT_IMPORTED:
00127 return _("Object already imported");
00128 break;
00129
00130 case MGD_ERR_MISSED_DEPENDENCE:
00131 return _("Missed dependence for object.");
00132 break;
00133
00134 default:
00135 return _("Undefined error");
00136
00137 }
00138 }
00139
00140 static gchar* _midgard_error_format(const gchar *msg, va_list args)
00141 {
00142 if(!msg)
00143 return g_strdup("");
00144
00145 gchar *new_string =
00146 g_strdup_vprintf(msg, args);
00147
00148 return new_string;
00149 }
00150
00151 void midgard_set_error(
00152 MidgardConnection *mgd, GQuark domain, gint errcode, const gchar *msg, ...)
00153 {
00154 g_assert(mgd != NULL);
00155
00156 if(!domain)
00157 domain = MGD_GENERIC_ERROR;
00158
00159 if(mgd->errstr)
00160 g_free(mgd->errstr);
00161
00162 gchar *new_msg;
00163 va_list args;
00164
00165 va_start(args, msg);
00166 new_msg = _midgard_error_format(msg, args);
00167 va_end(args);
00168
00169
00170
00171 g_set_error(&mgd->err, domain, errcode,
00172 "%s%s",
00173 midgard_error_string(domain, errcode),
00174 new_msg);
00175 g_free(new_msg);
00176
00177 mgd->errnum = errcode;
00178 mgd->errstr = g_strdup(mgd->err->message);
00179
00180
00181 if(mgd->mgd)
00182 mgd->mgd->errn = errcode;
00183
00184 return;
00185 }