src/midgard_error.c

00001 /* 
00002  * Copyright (C) 2006 Piotr Pokora <piotr.pokora@infoglob.pl>
00003  *
00004  * This program is free software; you can redistribute it and/or modify it
00005  * under the terms of the GNU Lesser General Public License as published
00006  * by the Free Software Foundation; either version 2 of the License, or
00007  * (at your option) any later version.
00008  * 
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  * 
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program; if not, write to the Free Software
00016  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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"); /* FIXME This should be returned by GLib error */
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"); /* FIXME , replace with invalid date range or format */
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         /* watch out! midgard 1.7 and midcom needs MGD_ERR_OK string.
00170          * Keep string formatters together */
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         /* FIXME, remove later , this is legacy compatible stuff */
00181         if(mgd->mgd)
00182                 mgd->mgd->errn = errcode;       
00183         
00184         return;         
00185 }

Generated on Thu Feb 22 06:15:18 2007 for midgard-core by  doxygen 1.4.6