midgard/types.h

00001 /* 
00002 Copyright (C) 2004,2005,2006 Piotr Pokora <piotr.pokora@infoglob.pl>
00003 Copyright (C) 2004 Alexander Bokovoy <ab@samba.org>
00004 
00005 This program is free software; you can redistribute it and/or modify it
00006 under the terms of the GNU Lesser General Public License as published
00007 by the Free Software Foundation; either version 2 of the License, or
00008 (at your option) any later version.
00009 
00010 This program is distributed in the hope that it will be useful,
00011 but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 GNU General Public License for more details.
00014 
00015 You should have received a copy of the GNU General Public License
00016 along with this program; if not, write to the Free Software
00017 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 */
00019 
00020 #ifndef TYPES_H
00021 #define TYPES_H
00022 
00041 #include "midgard/midgard_legacy.h"
00042 #include <glib-object.h>
00043 #include <midgard/query_builder.h>
00044 
00045 #define MIDGARD_TYPE_OBJECT midgard_object_get_type()
00046 #define MIDGARD_OBJECT(object)  (G_TYPE_CHECK_INSTANCE_CAST ((object), MIDGARD_TYPE_OBJECT, MgdObject))
00047 #define MIDGARD_OBJECT_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), MIDGARD_TYPE_OBJECT, MidgardObjectClass))
00048 #define MIDGARD_IS_OBJECT(object)   (G_TYPE_CHECK_INSTANCE_TYPE ((object), MIDGARD_TYPE_OBJECT))
00049 #define MIDGARD_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIDGARD_TYPE_OBJECT))
00050 #define MIDGARD_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIDGARD_TYPE_OBJECT, MidgardObjectClass))
00051 #define MIDGARD_OBJECT_GET_CLASS_BY_NAME(name) ((MidgardObjectClass*) g_type_class_peek(g_type_from_name(name)))
00052 
00053 typedef struct _MgdObject MgdObject;
00054 typedef struct _MidgardObjectClass MidgardObjectClass;
00055 
00056 typedef struct _MidgardTypePrivate MidgardTypePrivate;
00057 
00058 typedef struct MidgardMetadata MidgardMetadata;
00059 typedef struct MidgardMetadataClass MidgardMetadataClass;
00060 
00061 /* Get object by id and by type , only for backwards compatibility */
00062 
00063 #define _MIDGARD_OBJECT_GET_BY_TYPE(klassname) \
00064     if ((object = midgard_object_new(mgd, klassname, NULL)) != NULL ) { \
00065         g_object_set((GObject*) object, "id" , (guint)id, NULL ); \
00066         if ((midgard_object_get_by_id(object)) == 0);  \
00067         return object; \
00068         return NULL; \
00069     } else { \
00070         return NULL; \
00071     } \
00072 
00073 struct _MgdObject {
00074         GObject parent;
00075         
00076         /* private */
00077         MidgardTypePrivate *private;
00078         MgdSchemaTypeAttr *data;
00079 
00080         midgard *mgd;
00081         GType type;
00082         const gchar *cname;
00083         gpointer *klass;
00084         MidgardMetadata *metadata;      
00085 };
00086 
00087 struct _MidgardObjectClass {
00088         GObjectClass parent;
00089         
00090         /* private */
00091         MgdSchemaTypeAttr *data;        
00092 };
00093 
00094 extern void midgard_get_midgard(MgdObject *mobj, midgard *mgd);
00095 
00102 extern GType midgard_object_get_type(void);
00103 
00126 extern enum
00127 {
00128         MGD_OBJECT_ACTION_NONE = 0,
00129         MGD_OBJECT_ACTION_DELETE,
00130         MGD_OBJECT_ACTION_PURGE,
00131         MGD_OBJECT_ACTION_CREATE,
00132         MGD_OBJECT_ACTION_UPDATE
00133 }MidgardObjectAction;
00134 
00168 extern MgdObject *midgard_object_new(midgard *mgd, const gchar *name, GValue *value);
00169 
00196 extern MgdObject *midgard_object_new_by_id(midgard *mgd, const gchar *name, gchar *id);
00197 
00221 extern gboolean midgard_object_get_by_id(MgdObject *object);
00222 
00272 extern gboolean midgard_object_update(MgdObject *object);
00273 
00321 extern gboolean midgard_object_create(MgdObject *object);
00322 
00339 extern GObject **midgard_object_find(MgdObject *object, guint *n_objects);
00340 
00341 extern gchar * midgard_object_build_path(MgdObject *mobj);
00342 
00361 extern gboolean midgard_object_is_in_parent_tree(MgdObject *object, guint rootid, guint id);
00362 
00380 extern gboolean midgard_object_is_in_tree(MgdObject *object, guint rootid, guint id);
00381 
00382 extern gchar * midgard_object_get_tree(MgdObject *object, GSList *tnodes);
00383 
00384 extern MgdObject *midgard_object_get_by_old_guid(midgard *mgd, gchar *guid);
00385 
00404 extern gboolean midgard_object_get_by_guid(MgdObject *object);
00405 
00406 /*
00407  * \ingroup MgdObject
00408  *
00409  * Delete object's record(s) from database.
00410  *
00411  * \param object MgdObject
00412  *
00413  * \return TRUE if object's record(s) is successfully deleted from database.
00414  * FALSE otherwise.
00415  *
00416  * Caller is responsible to set 'guid' property before calling this function.
00417  * Object's record is not fully deleted from database. Instead, it is marked 
00418  * as deleted , thus it is possible to undelete object later with static 
00419  * method midgard_object_undelete.
00420  *
00421  * FALSE is returned in such cases:
00422  *
00423  * - Midgard Schema is not set for this object ( MGD_ERR_INTERNAL )
00424  * - Object's has no storage defined ( MGD_ERR_OBJECT_NO_STORAGE )
00425  * - Object's property guid is empty ( MGD_ERR_INVALID_PROPERTY_VALUE )
00426  * - SQL query failed ( MGD_ERR_INTERNAL )
00427  *  
00428  */ 
00429 extern gboolean midgard_object_delete(MgdObject *object);
00430 
00453 extern gboolean midgard_object_purge(MgdObject *object);
00454 
00470 extern MgdObject *midgard_object_get_parent(MgdObject *object);
00471 
00472 extern gint midgard_object_get(MgdObject *object);
00473 
00486 extern GObject **midgard_object_list(MgdObject *object, guint *n_objects);
00487 
00501 extern GObject **midgard_object_list_children(MgdObject *object, const gchar *childname, 
00502                 guint *n_objects);
00514 extern GObject **midgard_object_get_languages(
00515         MgdObject *self, guint *n_objects);
00516 
00517 
00541 extern MgdObject *midgard_get_object_by_guid(
00542         MidgardConnection *mgd, const gchar *guid);
00543 
00549 extern MgdObject *midgard_object_get_by_path(midgard *mgd, const gchar *classname , const gchar *path);
00550 
00556 extern const gchar *midgard_object_parent(MgdObject *object);
00557 
00576 extern gboolean midgard_object_undelete(MidgardConnection *mgd, 
00577                         const gchar *guid);
00578 
00596 extern gchar *midgard_object_export(MgdObject *self);
00597 
00598 
00620 extern gboolean midgard_import_object(
00621                         MidgardConnection *mgd, gchar *xml);
00622         
00623 #endif /* TYPES_H */

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