midgard/midgard_metadata.h

00001 /* 
00002  * Copyright (C) 2005 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 #ifndef MIDGARD_METADATA_H
00020 #define MIDGARD_METADATA_H
00021 
00035 #include <glib-object.h>
00036 #include "midgard/types.h"
00037 
00038 /* convention macros */
00039 #define MIDGARD_TYPE_METADATA        (midgard_metadata_get_type ())
00040 #define MIDGARD_METADATA(obj)        (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
00041                                     MIDGARD_TYPE_METADATA, MidgardMetadata))
00042 #define MIDGARD_METADATA_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), \
00043                                     MIDGARD_TYPE_METADATA, MidgardMetadataClass))
00044 #define MIDGARD_IS_METADATA(obj)     (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIDGARD_TYPE_METADATA))
00045 #define MIDGARD_IS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIDGARD_TYPE_METADATA))
00046 #define MIDGARD_METADATA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
00047                                     MIDGARD_TYPE_METADATA, MidgardMetadataClass))
00048 
00055 GType midgard_metadata_get_type (void);
00056 
00063 struct MidgardMetadataClass {
00064         GObjectClass parent;
00065 
00066         guint signal_set_created;
00067         guint signal_set_updated;
00068         
00069         void (*set_created) (MgdObject *self);
00070         void (*set_updated) (MgdObject *self);
00071 };
00072 
00078 typedef struct _MidgardMetadataPrivate MidgardMetadataPrivate;
00079 
00085 struct MidgardMetadata {
00086         GObject parent;
00087         
00088         /* private */
00089         MidgardMetadataPrivate *private;
00090 };
00091 
00092 /*
00093  * \ingroup midgard_metadata
00094  *
00095  * Creates new midgard_metadata instance for the given MgdObject instance.
00096  *
00097  * \param[in] klass MidgardObjectClass pointer
00098  *
00099  * \return newly allocated MidgardMetadata object
00100  *
00101  * Function g_object_new may be used as well as object's constructor however
00102  * it's recommended to use this constructor. MgdObject pointer is internally 
00103  * assigned as a pointer to midgard object for which particular metadata object 
00104  * instance was created.
00105  * 
00106  * Midgard Metadata object has two "kinds" of properties.
00107  * The first one is settable ( and overwritten ) only by metadata implementation.
00108  * The second one is freely settable by application. In this case midgard core
00109  * keep value of such property "as is". There is no change or update made for such 
00110  * property even if its value hasn't been changed by application.
00111  * 
00112  * Properties of an object:
00113  *
00114  * - creator
00115  *   Holds a string value with midgard_person object guid.
00116  *   This property can not be overwritten by application. 
00117  *   It is set once when particular schema object's record(s) is created.
00118  * - created
00119  *   Holds an ISO date value ( stored in UTC ).
00120  *   This property can not be overwritten by application. 
00121  *   It is set once when particular schema object's record(s) is created.
00122  * - revisor
00123  *   Holds a string value with midgard_person object guid.
00124  *   This property can not be overwritten by application.
00125  *   It is set when update method is invoked for particular schema object.
00126  * - revised
00127  *   Holds an ISO date value ( stored in UTC ).
00128  *   This property can not be overwritten by application.
00129  *   It is set when update method is invoked for particular schema object.
00130  * - revision
00131  *   Holds unsigned integer value with revision number.
00132  *   This property can not be overwritten by application.
00133  *   It is set ( increased by one ) when update method is invoked for 
00134  *   particular schema object.
00135  * - locker
00136  *   Holds a string value with midgard_person object guid.
00137  *   This property can be set by application.
00138  * - locked
00139  *   Holds an ISO date value ( stored in UTC ).
00140  *   This property can be set by application.
00141  * - approver
00142  *   Holds a string value with midgard_person object guid.
00143  *   This property can be set by application.
00144  * - approved
00145  *   Holds an ISO date value ( stored in UTC ).
00146  *   This property can be set by application.
00147  * - author
00148  *   Holds a string value with midgard_person object guid.
00149  *   This property can be set by application.
00150  * - owner
00151  *   Holds a string value with midgard_person object guid.
00152  *   This property can be set by application.
00153  * - schedulestart
00154  *   Holds an ISO date value ( stored in UTC ).
00155  *   This property can be set by application.
00156  * - scheduleend
00157  *   Holds an ISO date value ( stored in UTC ).
00158  *   This property can be set by application.
00159  * - hidden
00160  *   Holds boolean value.
00161  *   This property can be set by application.
00162  * - navnoentry
00163  *   Holds boolean value.
00164  *   This property can be set by application.
00165  * - size
00166  *   Holds unsigned integer value of object's size ( in bytes ).
00167  *   This property can not be set by application. 
00168  *   Object's size may vary depending on database storage and its optimized
00169  *   for MySQL database engine now. When object is midgard_attachment type
00170  *   then size is file size + object's database record size.
00171  * - published
00172  *   Holds an ISO date value ( stored in UTC ).
00173  *   This property can be set by application.
00174  *
00175  * There is no need to free MidgardMetadata object's memory as it is automatically
00176  * freed when particular object's instance memory is freed. 
00177  *  
00178  */ 
00179 MidgardMetadata *midgard_metadata_new(MgdObject *object);
00180 
00181 /* 
00182  * \ingroup midgard_metadata
00183  *
00184  * Returns MidgardObjectClass pointer.
00185  *
00186  * \param object MidgardMetadata instance
00187  *
00188  * \return MidgardObjectClass which the given MidgardMetadata object was created for.
00189  *
00190  */
00191 MidgardObjectClass *midgard_metadata_get_class(MidgardMetadata *object);
00192 
00193 
00194 /* OBSOLETE */
00195 GParamSpec **midgard_class_list_properties(MgdObject *object, guint *n);
00196 
00197 GParamSpec *midgard_class_find_property(MgdObject *object, gchar *propertyname);
00198 
00199 void midgard_class_get_metadata(MgdObject *object, gint mmt, GValue *val);
00200 
00201 GSList *midgard_class_metadata_types();
00202 
00203 MidgardMetadata *midgard_object_metadata_get(MgdObject *object);
00204 
00205 /* Returns sql string 
00206  *
00207  * @param object MidgardMetadata type object
00208  *
00209  * @return sql query used for MgdObject update or create method
00210  */ 
00211 
00212 gchar *midgard_metadata_get_sql(MidgardMetadata *object);
00213 
00214 /* Set internal midgard metadata properties when object is created
00215  *
00216  * @param object MgdObject  
00217  * 
00218  */
00219 void midgard_metadata_set_create(MgdObject *object);
00220 
00221 /* Set internal midgard metadata properties when object is updated
00222  *
00223  * @param object MgdObject 
00224  * 
00225  */
00226 void midgard_metadata_set_update(MgdObject *object);
00227 
00228 #endif /* MIDGARD_METADATA_H */

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