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 */
1.4.6