static void __mgdschematype_from_node(xmlNode *node, GSList **list) { g_assert(node != NULL); xmlChar *viewname = xmlGetProp(node, (const xmlChar *)MGD_VIEW_RW_NAME); if (!viewname) __view_error(node, "Empty view name. Can not define any type.", NULL); MgdSchemaTypeAttr *type = midgard_core_schema_type_attr_new(); type->name = g_strdup((gchar *)viewname); type->is_view = TRUE; /* Determine base view table */ xmlChar *table = xmlGetProp(node, (const xmlChar *) TYPE_RW_TABLE); /* Table not defined, try classtable */ if (!table) { xmlChar *classname = xmlGetProp(node, (const xmlChar *) "class"); if (!classname) __view_error(node, "'table' or 'class' attribute not found", NULL); MidgardDBObjectClass *dbklass = MIDGARD_DBOBJECT_CLASS(g_type_class_peek(g_type_from_name((const gchar *)classname))); table = (xmlChar *)g_strdup(midgard_core_class_get_table(dbklass)); if (!table) __view_error(node, "NULL table for %s class", classname); xmlFree(classname); } midgard_core_schema_type_set_table(type, (const gchar *)table); xmlFree(table); __get_view_properties(node, type); __get_view_joins(node, type); __get_view_constraints(node, type); midgard_core_schema_type_build_static_sql(type); *list = g_slist_append(*list, type); xmlFree(viewname); }
static void _midgard_workspace_class_init( gpointer g_class, gpointer g_class_data) { GObjectClass *gobject_class = G_OBJECT_CLASS (g_class); MidgardWorkspaceClass *klass = MIDGARD_WORKSPACE_CLASS (g_class); __parent_class = g_type_class_peek_parent (g_class); gobject_class->constructor = _midgard_workspace_constructor; gobject_class->dispose = _midgard_workspace_dispose; gobject_class->finalize = _midgard_workspace_finalize; gobject_class->set_property = _midgard_workspace_set_property; gobject_class->get_property = _midgard_workspace_get_property; /* PROPERTIES */ MgdSchemaPropertyAttr *prop_attr; MgdSchemaTypeAttr *type_attr = midgard_core_schema_type_attr_new(); GParamSpec *pspec; const gchar *property_name; /* parent workspace */ property_name = "parent_workspace"; pspec = g_param_spec_object (property_name, "Parent workspace", "", MIDGARD_TYPE_WORKSPACE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property (gobject_class, PROPERTY_PARENT_WS, pspec); /* id */ property_name = "id"; pspec = g_param_spec_uint (property_name, "Local storage id which identifies workspace", "", 0, G_MAXUINT32, 0, G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROPERTY_ID, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_UINT; prop_attr->field = g_strdup(property_name); prop_attr->table = g_strdup(MGD_WORKSPACE_TABLE); prop_attr->tablefield = g_strjoin(".", MGD_WORKSPACE_TABLE, property_name, NULL); /* Set id property and field as Primary Key */ prop_attr->primaryfield = g_strdup (property_name); prop_attr->is_primary = TRUE; type_attr->primary = g_strdup (property_name); type_attr->primaryfield = g_strdup (property_name); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)property_name), prop_attr); type_attr->_properties_list = g_slist_append (type_attr->_properties_list, (gpointer) property_name); /* up */ property_name = "up"; pspec = g_param_spec_uint (property_name, "Local storage id which identifies up workspace", "", 0, G_MAXUINT32, 0, G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROPERTY_UP, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_UINT; prop_attr->field = g_strdup(property_name); prop_attr->table = g_strdup(MGD_WORKSPACE_TABLE); prop_attr->tablefield = g_strjoin(".", MGD_WORKSPACE_TABLE, property_name, NULL); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)property_name), prop_attr); type_attr->_properties_list = g_slist_append (type_attr->_properties_list, (gpointer) property_name); /* guid */ property_name = "guid"; pspec = g_param_spec_string (property_name, "Guid which identifies workspace object.", "", "", G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROPERTY_GUID, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_GUID; prop_attr->field = g_strdup (property_name); prop_attr->table = g_strdup (MGD_WORKSPACE_TABLE); prop_attr->tablefield = g_strjoin (".", MGD_WORKSPACE_TABLE, property_name, NULL); g_hash_table_insert (type_attr->prophash, g_strdup((gchar *)property_name), prop_attr); type_attr->_properties_list = g_slist_append (type_attr->_properties_list, (gpointer) property_name); /* path */ property_name = "path"; pspec = g_param_spec_string (property_name, "A path workspace is at", "", "", G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROPERTY_PATH, pspec); /* name */ property_name = "name"; pspec = g_param_spec_string (property_name, "WorkspaceStorage name", "", "", G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROPERTY_NAME, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_STRING; prop_attr->field = g_strdup (property_name); prop_attr->table = g_strdup (MGD_WORKSPACE_TABLE); prop_attr->tablefield = g_strjoin (".", MGD_WORKSPACE_TABLE, property_name, NULL); g_hash_table_insert (type_attr->prophash, g_strdup((gchar *)property_name), prop_attr); type_attr->_properties_list = g_slist_append (type_attr->_properties_list, (gpointer )property_name); MIDGARD_DBOBJECT_CLASS (klass)->dbpriv = midgard_core_dbobject_private_new (); MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->storage_data = type_attr; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->storage_data->table = g_strdup(MGD_WORKSPACE_TABLE); MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->storage_data->tables = g_strdup(MGD_WORKSPACE_TABLE); MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->has_metadata = FALSE; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->create_storage = midgard_core_query_create_class_storage; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->update_storage = midgard_core_query_update_class_storage; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->storage_exists = _workspace_storage_exists; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->delete_storage = _workspace_storage_delete; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->get_statement_insert = MIDGARD_DBOBJECT_CLASS (__parent_class)->dbpriv->get_statement_insert; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->get_statement_insert_params = MIDGARD_DBOBJECT_CLASS (__parent_class)->dbpriv->get_statement_insert_params; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->get_statement_update = MIDGARD_DBOBJECT_CLASS (__parent_class)->dbpriv->get_statement_update; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->get_statement_update_params = MIDGARD_DBOBJECT_CLASS (__parent_class)->dbpriv->get_statement_update_params; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->add_fields_to_select_statement = MIDGARD_DBOBJECT_CLASS (__parent_class)->dbpriv->add_fields_to_select_statement; MIDGARD_DBOBJECT_CLASS (klass)->dbpriv->set_from_data_model = _set_from_data_model; }
/* Initialize class */ static void _metadata_class_init (gpointer g_class, gpointer g_class_data) { GObjectClass *gobject_class = G_OBJECT_CLASS (g_class); MidgardMetadataClass *klass = MIDGARD_METADATA_CLASS (g_class); GParamSpec *pspec; __parent_class = g_type_class_peek_parent (g_class); gobject_class->constructor = _metadata_constructor; gobject_class->set_property = _metadata_set_property; gobject_class->get_property = _metadata_get_property; gobject_class->dispose = _metadata_dispose; gobject_class->finalize = _metadata_object_finalize; MgdSchemaPropertyAttr *prop_attr; MgdSchemaTypeAttr *type_attr = midgard_core_schema_type_attr_new(); /* Register properties */ /* creator */ pspec = g_param_spec_string ("creator", "metadata_creator", "Guid of the person who created object's record", NULL /* We can set midgard admin */, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_CREATOR, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_GUID; prop_attr->field = g_strdup("metadata_creator"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("creator"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"creator"), prop_attr); /* created */ pspec = g_param_spec_boxed ("created", "metadata_created", "ISO datetime when object's record has been created", MGD_TYPE_TIMESTAMP, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_CREATED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_created"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("created"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"created"), prop_attr); /* revisor */ pspec = g_param_spec_string ("revisor", "metadata_revisor", "Guid of the person who revised object's record", NULL, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_REVISOR, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_GUID; prop_attr->field = g_strdup("metadata_revisor"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("revisor"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"revisor"), prop_attr); /* revised */ pspec = g_param_spec_boxed ("revised", "metadata_revised", "ISO datetime when object's record has been revised", MIDGARD_TYPE_TIMESTAMP, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_REVISED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_revised"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("revised"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"revised"), prop_attr); /* revision */ pspec = g_param_spec_uint ("revision", "metadata_revision", "Object's record revision number", 0, G_MAXUINT32, 0, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_REVISION, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_UINT; prop_attr->field = g_strdup("metadata_revision"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("revision"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"revision"), prop_attr); /* locker */ pspec = g_param_spec_string ("locker", "metadata_locker", "Guid of the person who (un)locked object's record", NULL, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_LOCKER, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_GUID; prop_attr->field = g_strdup("metadata_locker"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("locker"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"locker"), prop_attr); /* locked */ pspec = g_param_spec_boxed ("locked", "metadata_locked", "ISO datetime when object's record has been (un)locked", MGD_TYPE_TIMESTAMP, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_LOCKED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_locked"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("locked"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"locked"), prop_attr); /* approver */ pspec = g_param_spec_string ("approver", "metadata_approver", "Guid of the person who (un)approved object's record", NULL, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_APPROVER, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_GUID; prop_attr->field = g_strdup("metadata_approver"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("approver"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"approver"), prop_attr); /* approved */ pspec = g_param_spec_boxed ("approved", "metadata_approved", "ISO datetime when object's record has been (un)approved", MGD_TYPE_TIMESTAMP, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_APPROVED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_approved"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("approved"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"approved"), prop_attr); /* authors */ pspec = g_param_spec_string ("authors", "metadata_authors", "The person who is an author.", "", G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_AUTHORS, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_STRING; prop_attr->field = g_strdup("metadata_authors"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("authors"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"authors"), prop_attr); /* owner */ pspec = g_param_spec_string ("owner", "metadata_owner", "Group's guid which is an owner of the object", "", G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_OWNER, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_GUID; prop_attr->field = g_strdup("metadata_owner"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("owner"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"owner"), prop_attr); /* schedulestart */ pspec = g_param_spec_boxed ("schedulestart", "metadata_schedule_start", "ISO datetime when publication time starts.", MGD_TYPE_TIMESTAMP, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_SCHEDULE_START, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_schedule_start"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("schedulestart"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"schedulestart"), prop_attr); /* scheduleend */ pspec = g_param_spec_boxed ("scheduleend", "metadata_schedule_end", "ISO datetime when publication time ends.", MGD_TYPE_TIMESTAMP, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_SCHEDULE_END, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_schedule_end"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("scheduleend"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"scheduleend"), prop_attr); /* hidden */ pspec = g_param_spec_boolean ("hidden", "metadata_hidden", "Whether object should be hidden or not.", FALSE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_HIDDEN, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_BOOLEAN; prop_attr->field = g_strdup("metadata_hidden"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("hidden"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"hidden"), prop_attr); /* nav no entry */ pspec = g_param_spec_boolean ("navnoentry", "metadata_nav_noentry", "Whether object is part of navigation (e.g. menu).", FALSE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_NAV_NOENTRY, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_BOOLEAN; prop_attr->field = g_strdup("metadata_nav_noentry"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("navnoentry"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"navnoentry"), prop_attr); /* size */ pspec = g_param_spec_uint ("size", "metadata_size", "Object's size in bytes", 0, G_MAXUINT32, 0, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_SIZE, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_UINT; prop_attr->field = g_strdup("metadata_size"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("size"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"size"), prop_attr); /* published */ pspec = g_param_spec_boxed ("published", "metadata_published", "ISO datetime when object should be published (by default it's created time)", MGD_TYPE_TIMESTAMP, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_PUBLISHED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_published"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("published"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"published"), prop_attr); /* score */ pspec = g_param_spec_int ("score", "metadata_score", "Object's record score", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_SCORE, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_INT; prop_attr->field = g_strdup("metadata_score"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("score"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"score"), prop_attr); /* exported */ pspec = g_param_spec_boxed ("exported", "metadata_exported", "Whether object has been exported or not.", MGD_TYPE_TIMESTAMP, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_EXPORTED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_exported"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("exported"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"exported"), prop_attr); /* imported */ pspec = g_param_spec_boxed ("imported", "metadata_imported", "Whether object has been imported or not.", MGD_TYPE_TIMESTAMP, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_IMPORTED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_TIMESTAMP; prop_attr->field = g_strdup("metadata_imported"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("imported"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"imported"), prop_attr); /* deleted */ pspec = g_param_spec_boolean ("deleted", "metadata_deleted", "Whether object is deleted or not.", FALSE, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_DELETED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_BOOLEAN; prop_attr->field = g_strdup("metadata_deleted"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("deleted"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"deleted"), prop_attr); /* isapproved */ pspec = g_param_spec_boolean ("isapproved", "metadata_isapproved", "Whether object is approved or not.", FALSE, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_ISAPPROVED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_BOOLEAN; prop_attr->field = g_strdup("metadata_isapproved"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("isapproved"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"isapproved"), prop_attr); /* islocked */ pspec = g_param_spec_boolean ("islocked", "metadata_islocked", "Whether object is locked or unlocked.", FALSE, G_PARAM_READABLE); g_object_class_install_property (gobject_class, MIDGARD_METADATA_ISLOCKED, pspec); prop_attr = midgard_core_schema_type_property_attr_new(); prop_attr->gtype = MGD_TYPE_BOOLEAN; prop_attr->field = g_strdup("metadata_islocked"); prop_attr->table = NULL; prop_attr->tablefield = NULL; prop_attr->name = g_strdup ("islocked"); g_hash_table_insert(type_attr->prophash, g_strdup((gchar *)"islocked"), prop_attr); /* Initialize private member */ MidgardDBObjectClass *dbklass = MIDGARD_DBOBJECT_CLASS (klass); dbklass->dbpriv = g_new(MidgardDBObjectPrivate, 1); dbklass->dbpriv->storage_data = type_attr; dbklass->dbpriv->set_from_xml_node = __set_from_xml_node; dbklass->dbpriv->add_fields_to_select_statement = NULL; dbklass->dbpriv->has_metadata = FALSE; dbklass->dbpriv->get_property = _midgard_metadata_dbpriv_get_property; dbklass->dbpriv->set_property = midgard_core_metadata_dbpriv_set_property; dbklass->dbpriv->set_from_data_model = _midgard_metadata_set_from_data_model; }