[Galago-commits] r2374 - in trunk/libgalago: . libgalago tests

galago-commits at freedesktop.org galago-commits at freedesktop.org
Wed Dec 14 00:27:33 PST 2005


Author: chipx86
Date: 2005-12-14 00:27:23 -0800 (Wed, 14 Dec 2005)
New Revision: 2374

Added:
   trunk/libgalago/tests/get-person-attr.c
   trunk/libgalago/tests/person-attr-test.c
Removed:
   trunk/libgalago/tests/get-property.c
   trunk/libgalago/tests/property-test.c
Modified:
   trunk/libgalago/ChangeLog
   trunk/libgalago/libgalago/galago-core.c
   trunk/libgalago/libgalago/galago-dbus.h
   trunk/libgalago/libgalago/galago-object.c
   trunk/libgalago/libgalago/galago-object.h
   trunk/libgalago/libgalago/galago-person.c
   trunk/libgalago/libgalago/galago-person.h
   trunk/libgalago/tests/Makefile.am
Log:
Moved Person Properties out into a more generic Object Attributes model. Subclasses of GalagoObject can set a flag indicating if they support object attributes. Right now, this is only GalagoPerson, but GalagoAccount will later. These are only meant for remoted attributes. Locally stored in-process data should use GObject user data support.


Modified: trunk/libgalago/ChangeLog
===================================================================
--- trunk/libgalago/ChangeLog	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/ChangeLog	2005-12-14 08:27:23 UTC (rev 2374)
@@ -1,3 +1,23 @@
+Wed Dec 14 00:25:47 PST 2005  Christian Hammond <chipx86 at chipx86.com>
+
+	* libgalago/galago-core.c:
+	* libgalago/galago-dbus.h:
+	* libgalago/galago-object.c:
+	* libgalago/galago-object.h:
+	* libgalago/galago-person.c:
+	* libgalago/galago-person.h:
+	* tests/Makefile.am:
+	A tests/get-person-attr.c:
+	D tests/get-property.c:
+	A tests/person-attr-test.c:
+	D tests/property-test.c:
+	  - Moved Person Properties out into a more generic Object Attributes
+	    model. Subclasses of GalagoObject can set a flag indicating if they
+	    support object attributes. Right now, this is only GalagoPerson,
+	    but GalagoAccount will later. These are only meant for remoted
+	    attributes. Locally stored in-process data should use GObject user
+	    data support.
+
 Sun Dec 04 04:36:39 PST 2005  Christian Hammond <chipx86 at chipx86.com>
 
 	* libgalago/galago-core.c:

Modified: trunk/libgalago/libgalago/galago-core.c
===================================================================
--- trunk/libgalago/libgalago/galago-core.c	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-core.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -425,6 +425,12 @@
 
 	dbus_message_iter_init(message, &iter);
 
+#define MATCH_ATTRIBUTABLE_OBJECTS(signalname) \
+	(dbus_message_is_signal(message, GALAGO_DBUS_ACCOUNT_INTERFACE, \
+							(signalname)) || \
+	 dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE, \
+							(signalname)))
+
 	/*
 	 * Core
 	 */
@@ -444,6 +450,71 @@
 		g_object_unref(service);
 	}
 	/*
+	 * Attributes
+	 *
+	 * This applies to Person and Account objects.
+	 */
+	else if (MATCH_ATTRIBUTABLE_OBJECTS("AttributeSet"))
+	{
+		GalagoObject *object = galago_context_get_object(path);
+
+		if (object != NULL)
+		{
+			DBusMessageIter value_iter;
+			const char *name;
+			int arg_type;
+
+			dbus_message_iter_get_basic(&iter, &name);
+			dbus_message_iter_next(&iter);
+
+			dbus_message_iter_recurse(&iter, &value_iter);
+			arg_type = dbus_message_iter_get_arg_type(&iter);
+
+			switch (arg_type)
+			{
+				case DBUS_TYPE_STRING:
+				{
+					const char *value;
+					dbus_message_iter_get_basic(&value_iter, &value);
+					galago_object_set_attr_string(object, name, value);
+					break;
+				}
+
+				case DBUS_TYPE_BOOLEAN:
+				{
+					gboolean value;
+					dbus_message_iter_get_basic(&value_iter, &value);
+					galago_object_set_attr_bool(object, name, value);
+					break;
+				}
+
+				case DBUS_TYPE_UINT32:
+				{
+					dbus_uint32_t value;
+					dbus_message_iter_get_basic(&value_iter, &value);
+					galago_object_set_attr_int(object, name, value);
+					break;
+				}
+
+				default:
+					g_warning("Invalid property type %d received from "
+							  "AttributeSet", arg_type);
+					break;
+			}
+		}
+	}
+	else if (MATCH_ATTRIBUTABLE_OBJECTS("AttributeRemoved"))
+	{
+		GalagoObject *object = galago_context_get_object(path);
+
+		if (object != NULL)
+		{
+			const char *name;
+			dbus_message_iter_get_basic(&iter, &name);
+			galago_object_remove_attr(object, name);
+		}
+	}
+	/*
 	 * Service
 	 */
 	else if (dbus_message_is_signal(message, GALAGO_DBUS_SERVICE_INTERFACE,
@@ -592,75 +663,6 @@
 	 * Person
 	 */
 	else if (dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE,
-									"PropertySet"))
-	{
-		GalagoPerson *person;
-		const char *name;
-
-		person = GALAGO_PERSON(galago_context_get_object(path));
-
-		if (person != NULL)
-		{
-			DBusMessageIter value_iter;
-			int arg_type;
-
-			dbus_message_iter_get_basic(&iter, &name);
-			dbus_message_iter_next(&iter);
-
-			dbus_message_iter_recurse(&iter, &value_iter);
-
-			arg_type = dbus_message_iter_get_arg_type(&iter);
-
-			switch (arg_type)
-			{
-				case DBUS_TYPE_STRING:
-				{
-					const char *value;
-					dbus_message_iter_get_basic(&value_iter, &value);
-					galago_person_set_property_string(person, name, value);
-					break;
-				}
-
-				case DBUS_TYPE_BOOLEAN:
-				{
-					gboolean value;
-					dbus_message_iter_get_basic(&value_iter, &value);
-					galago_person_set_property_bool(person, name, value);
-					break;
-				}
-
-				case DBUS_TYPE_UINT32:
-				{
-					dbus_uint32_t value;
-					dbus_message_iter_get_basic(&value_iter, &value);
-					galago_person_set_property_uint32(person, name, value);
-					break;
-				}
-
-				default:
-					g_warning("Invalid property type %d passed to "
-							  "SetProperty", arg_type);
-					break;
-			}
-		}
-	}
-	else if (dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE,
-									"PropertyRemoved"))
-	{
-		GalagoPerson *person;
-
-		person = GALAGO_PERSON(galago_context_get_object(path));
-
-		if (person != NULL)
-		{
-			const char *name;
-
-			dbus_message_iter_get_basic(&iter, &name);
-
-			galago_person_remove_property(person, name);
-		}
-	}
-	else if (dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE,
 									"PhotoSet"))
 	{
 		galago_dbus_message_iter_get_object(&iter, GALAGO_TYPE_IMAGE);

Modified: trunk/libgalago/libgalago/galago-dbus.h
===================================================================
--- trunk/libgalago/libgalago/galago-dbus.h	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-dbus.h	2005-12-14 08:27:23 UTC (rev 2374)
@@ -32,7 +32,7 @@
 
 #define GALAGO_DBUS_SERVICE "org.freedesktop.Galago"
 
-#define GALAGO_DBUS_ERROR_INVALID_PROPERTY "org.freedesktop.Galago.Error.InvalidProperty"
+#define GALAGO_DBUS_ERROR_INVALID_ATTRIBUTE "org.freedesktop.Galago.Error.InvalidAttribute"
 #define GALAGO_DBUS_ERROR_OBJECT_NOT_FOUND "org.freedesktop.Galago.Error.ObjectNotFound"
 
 G_BEGIN_DECLS

Modified: trunk/libgalago/libgalago/galago-object.c
===================================================================
--- trunk/libgalago/libgalago/galago-object.c	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-object.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -31,6 +31,7 @@
 	GalagoContext *context;
 	gchar *dbus_path;
 	GalagoOrigin origin;
+	GHashTable *attrs_table;
 	gboolean watched : 1;
 };
 
@@ -38,7 +39,8 @@
 {
 	PROP_0,
 	PROP_CONTEXT,
-	PROP_ORIGIN
+	PROP_ORIGIN,
+	PROP_SUPPORTS_ATTRS
 };
 
 enum
@@ -47,13 +49,21 @@
 	LAST_SIGNAL
 };
 
+#define GALAGO_OBJECT_SUPPORTS_ATTRS(object) \
+	(GALAGO_OBJECT_GET_CLASS(GALAGO_OBJECT(object))->supports_attrs)
+
 static void galago_object_dispose(GObject *gobject);
 static void galago_object_finalize(GObject *gobject);
+static void galago_object_real_dbus_push_full(GalagoObject *object);
 static void galago_object_real_destroy(GalagoObject *object);
 static void galago_object_set_property(GObject *gobject, guint prop_id,
 									   const GValue *value, GParamSpec *pspec);
 static void galago_object_get_property(GObject *gobject, guint prop_id,
 									   GValue *value, GParamSpec *pspec);
+static void _galago_dbus_object_set_attr(GalagoObject *object,
+										 const char *name, GValue *value);
+static GValue *_galago_dbus_object_get_attr(const GalagoObject *object,
+											const char *name);
 
 static GObjectClass *parent_class = NULL;
 static guint signals[LAST_SIGNAL] = {0};
@@ -67,9 +77,11 @@
 
 	parent_class = g_type_class_peek_parent(klass);
 
+	klass->supports_attrs = FALSE;
+
 	klass->dbus_message_append = NULL;
 	klass->dbus_message_get    = NULL;
-	klass->dbus_push_full      = NULL;
+	klass->dbus_push_full      = galago_object_real_dbus_push_full;
 	klass->dbus_get_signature  = NULL;
 	klass->destroy             = galago_object_real_destroy;
 
@@ -99,6 +111,13 @@
 						  GALAGO_TYPE_ORIGIN,
 						  GALAGO_LOCAL,
 						  G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+	g_object_class_install_property(gobject_class, PROP_SUPPORTS_ATTRS,
+		g_param_spec_boolean("supports-attrs",
+							 "Support Remote Attributes",
+							 "Indicates if this object supports remote "
+							 "attributes",
+							 FALSE, G_PARAM_READABLE));
 }
 
 static void
@@ -132,13 +151,34 @@
 	GalagoObject *object = GALAGO_OBJECT(gobject);
 
 	if (object->priv != NULL)
+	{
+		if (object->priv->attrs_table != NULL)
+			g_hash_table_destroy(object->priv->attrs_table);
+
 		g_free(object->priv);
+	}
 
 	if (G_OBJECT_CLASS(parent_class)->finalize != NULL)
 		G_OBJECT_CLASS(parent_class)->finalize(gobject);
 }
 
 static void
+_push_key(const char *name, GValue *value, GalagoObject *object)
+{
+	_galago_dbus_object_set_attr(object, name, value);
+}
+
+static void
+galago_object_real_dbus_push_full(GalagoObject *object)
+{
+	if (object->priv->attrs_table != NULL)
+	{
+		g_hash_table_foreach(object->priv->attrs_table,
+							 (GHFunc)_push_key, object);
+	}
+}
+
+static void
 galago_object_real_destroy(GalagoObject *object)
 {
 	g_signal_handlers_destroy(object);
@@ -178,6 +218,11 @@
 			g_value_set_enum(value, galago_object_get_origin(object));
 			break;
 
+		case PROP_SUPPORTS_ATTRS:
+			g_value_set_boolean(value,
+				GALAGO_OBJECT_GET_CLASS(object)->supports_attrs);
+			break;
+
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
 			break;
@@ -280,3 +325,338 @@
 
 	return object->priv->context;
 }
+
+void
+galago_object_set_attr_string(GalagoObject *object, const char *name,
+							  const char *str_value)
+{
+	GValue *value;
+
+	g_return_if_fail(object    != NULL);
+	g_return_if_fail(name      != NULL && *name      != '\0');
+	g_return_if_fail(str_value != NULL && *str_value != '\0');
+	g_return_if_fail(GALAGO_IS_PERSON(object));
+
+	value = g_new0(GValue, 1);
+	g_value_init(value, G_TYPE_STRING);
+	g_value_set_string(value, str_value);
+	galago_object_set_attr(object, name, value);
+}
+
+void
+galago_object_set_attr_bool(GalagoObject *object, const char *name,
+							gboolean bool_value)
+{
+	GValue *value;
+
+	g_return_if_fail(object != NULL);
+	g_return_if_fail(name   != NULL && *name  != '\0');
+	g_return_if_fail(GALAGO_IS_PERSON(object));
+
+	value = g_new0(GValue, 1);
+	g_value_init(value, G_TYPE_BOOLEAN);
+	g_value_set_boolean(value, bool_value);
+	galago_object_set_attr(object, name, value);
+}
+
+void
+galago_object_set_attr_int(GalagoObject *object, const char *name,
+						   gint32 int_value)
+{
+	GValue *value;
+
+	g_return_if_fail(object != NULL);
+	g_return_if_fail(name   != NULL && *name  != '\0');
+	g_return_if_fail(GALAGO_IS_PERSON(object));
+
+	value = g_new0(GValue, 1);
+	g_value_init(value, G_TYPE_INT);
+	g_value_set_int(value, int_value);
+	galago_object_set_attr(object, name, value);
+}
+
+static void
+destroy_value(GValue *value)
+{
+	g_value_unset(value);
+	g_free(value);
+}
+
+void
+galago_object_set_attr(GalagoObject *object, const char *name, GValue *value)
+{
+	g_return_if_fail(object != NULL);
+	g_return_if_fail(GALAGO_IS_PERSON(object));
+	g_return_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object));
+	g_return_if_fail(name   != NULL && *name  != '\0');
+	g_return_if_fail(value  != NULL);
+	g_return_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING) ||
+					 G_VALUE_HOLDS(value, G_TYPE_BOOLEAN) ||
+					 G_VALUE_HOLDS(value, G_TYPE_INT));
+
+	if (object->priv->attrs_table == NULL)
+	{
+		object->priv->attrs_table =
+			g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
+								  (GFreeFunc)destroy_value);
+	}
+
+	g_hash_table_replace(object->priv->attrs_table,
+						 g_ascii_strdown(name, -1), value);
+
+	if (GALAGO_OBJECT_IS_LOCAL(object))
+		_galago_dbus_object_set_attr(object, name, value);
+}
+
+gboolean
+galago_object_remove_attr(GalagoObject *object, const char *name)
+{
+	char *temp;
+
+	g_return_val_if_fail(object != NULL,                       FALSE);
+	g_return_val_if_fail(GALAGO_IS_PERSON(object),             FALSE);
+	g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
+	g_return_val_if_fail(name   != NULL && *name != '\0',      FALSE);
+
+	if (object->priv->attrs_table == NULL)
+		return TRUE;
+
+	temp = g_ascii_strdown(name, -1);
+	g_hash_table_remove(object->priv->attrs_table, temp);
+	g_free(temp);
+
+	if (GALAGO_OBJECT_IS_LOCAL(object) && galago_is_connected() &&
+		galago_is_feed())
+	{
+		galago_dbus_send_message(GALAGO_OBJECT(object), "RemoveAttribute",
+			galago_value_new(GALAGO_VALUE_TYPE_STRING, &name, NULL),
+			NULL);
+	}
+
+	return TRUE;
+}
+
+const char *
+galago_object_get_attr_string(const GalagoObject *object, const char *name)
+{
+	const GValue *value;
+
+	g_return_val_if_fail(object != NULL,                       NULL);
+	g_return_val_if_fail(GALAGO_IS_PERSON(object),             NULL);
+	g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
+	g_return_val_if_fail(name   != NULL && *name != '\0',      NULL);
+
+	value = galago_object_get_attr(object, name);
+
+	if (value == NULL)
+		return NULL;
+
+	g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING), NULL);
+
+	return g_value_get_string(value);
+}
+
+gboolean
+galago_object_get_attr_bool(const GalagoObject *object, const char *name)
+{
+	const GValue *value;
+
+	g_return_val_if_fail(object != NULL,                       FALSE);
+	g_return_val_if_fail(GALAGO_IS_PERSON(object),             FALSE);
+	g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
+	g_return_val_if_fail(name   != NULL && *name != '\0',      FALSE);
+
+	value = galago_object_get_attr(object, name);
+
+	if (value == NULL)
+		return FALSE;
+
+	g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_BOOLEAN), FALSE);
+
+	return g_value_get_boolean(value);
+}
+
+gint32
+galago_object_get_attr_int(const GalagoObject *object, const char *name)
+{
+	const GValue *value;
+
+	g_return_val_if_fail(object != NULL,                       0);
+	g_return_val_if_fail(GALAGO_IS_PERSON(object),             0);
+	g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), 0);
+	g_return_val_if_fail(name   != NULL && *name != '\0',      0);
+
+	value = galago_object_get_attr(object, name);
+
+	if (value == NULL)
+		return 0;
+
+	g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING), 0);
+
+	return g_value_get_int(value);
+}
+
+const GValue *
+galago_object_get_attr(const GalagoObject *object, const char *name)
+{
+	GValue *value = NULL;
+	char *temp;
+
+	g_return_val_if_fail(object != NULL,                       NULL);
+	g_return_val_if_fail(GALAGO_IS_PERSON(object),             NULL);
+	g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
+	g_return_val_if_fail(name   != NULL && *name != '\0',      NULL);
+
+	temp = g_ascii_strdown(name, -1);
+
+	if (object->priv->attrs_table != NULL)
+		value = g_hash_table_lookup(object->priv->attrs_table, temp);
+
+	if (value == NULL && GALAGO_OBJECT_IS_REMOTE(object))
+		value = _galago_dbus_object_get_attr(object, temp);
+
+	g_free(temp);
+
+	return value;
+}
+
+
+/**************************************************************************
+ * D-BUS Functions
+ **************************************************************************/
+static void
+_galago_dbus_object_set_attr(GalagoObject *object, const char *name,
+							 GValue *value)
+{
+	DBusMessage *message;
+	DBusMessageIter iter, value_iter;
+	gboolean success = TRUE;
+
+	if (!galago_is_connected() || !galago_is_feed())
+		return;
+
+	message = galago_dbus_message_new_method_call(GALAGO_OBJECT(object),
+												  "SetAttribute", FALSE,
+												  &iter);
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+
+	if (G_VALUE_HOLDS(value, G_TYPE_STRING))
+	{
+		const char *str = g_value_get_string(value);
+		dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+										 DBUS_TYPE_STRING_AS_STRING,
+										 &value_iter);
+		dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_STRING, &str);
+		dbus_message_iter_close_container(&iter, &value_iter);
+	}
+	else if (G_VALUE_HOLDS(value, G_TYPE_BOOLEAN))
+	{
+		gboolean b = g_value_get_boolean(value);
+		dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+										 DBUS_TYPE_BOOLEAN_AS_STRING,
+										 &value_iter);
+		dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_BOOLEAN, &b);
+		dbus_message_iter_close_container(&iter, &value_iter);
+	}
+	else if (G_VALUE_HOLDS(value, G_TYPE_INT))
+	{
+		gint32 i = g_value_get_int(value);
+		dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+										 DBUS_TYPE_INT32_AS_STRING,
+										 &value_iter);
+		dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_INT32, &i);
+		dbus_message_iter_close_container(&iter, &value_iter);
+	}
+	else
+		g_assert_not_reached();
+
+	if (success)
+		dbus_connection_send(galago_get_dbus_conn(), message, NULL);
+
+	dbus_message_unref(message);
+}
+
+static GValue *
+_galago_dbus_object_get_attr(const GalagoObject *object, const char *name)
+{
+	DBusConnection *dbus_conn;
+	DBusMessage *message, *reply;
+	DBusMessageIter iter, value_iter;
+	DBusError error;
+	GValue *value = NULL;
+
+	if (!galago_is_connected())
+		return NULL;
+
+	dbus_conn = galago_get_dbus_conn();
+
+	message = galago_dbus_message_new_method_call(GALAGO_OBJECT(object),
+												  "GetAttribute", TRUE, &iter);
+	g_return_val_if_fail(message != NULL, NULL);
+
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+
+	dbus_error_init(&error);
+	reply = dbus_connection_send_with_reply_and_block(dbus_conn, message,
+													  -1, &error);
+	dbus_message_unref(message);
+
+	if (dbus_error_is_set(&error))
+	{
+		if (!dbus_error_has_name(&error, GALAGO_DBUS_ERROR_INVALID_ATTRIBUTE))
+		{
+			g_warning("Error sending Object.GetAttribute(%s, %s): %s",
+					  galago_object_get_dbus_path(object), name, error.message);
+		}
+
+		goto exit;
+	}
+
+	dbus_message_iter_init(reply, &iter);
+	dbus_message_iter_recurse(&iter, &value_iter);
+
+	value = g_new0(GValue, 1);
+
+	int type = dbus_message_iter_get_arg_type(&value_iter);
+	switch (type)
+	{
+		case DBUS_TYPE_STRING:
+		{
+			const char *data;
+			dbus_message_iter_get_basic(&value_iter, &data);
+			g_value_init(value, G_TYPE_STRING);
+			g_value_set_string(value, data);
+			break;
+		}
+
+		case DBUS_TYPE_BOOLEAN:
+		{
+			gboolean data;
+			dbus_message_iter_get_basic(&value_iter, &data);
+			g_value_init(value, G_TYPE_BOOLEAN);
+			g_value_set_boolean(value, data);
+			break;
+		}
+
+		case DBUS_TYPE_UINT32:
+		{
+			int data;
+			dbus_message_iter_get_basic(&value_iter, &data);
+			g_value_init(value, G_TYPE_INT);
+			g_value_set_int(value, data);
+			break;
+		}
+
+		default:
+			g_warning("Unknown attribute type %d for attribute %s",
+					  type, name);
+			break;
+	}
+
+	dbus_message_unref(reply);
+
+exit:
+	dbus_error_free(&error);
+
+	return value;
+}

Modified: trunk/libgalago/libgalago/galago-object.h
===================================================================
--- trunk/libgalago/libgalago/galago-object.h	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-object.h	2005-12-14 08:27:23 UTC (rev 2374)
@@ -61,6 +61,7 @@
 
 	const char *dbus_interface;
 	const char *dbus_signature;
+	gboolean supports_attrs;
 
 	/* Virtual functions */
 	void (*dbus_message_append)(DBusMessageIter *iter,
@@ -230,6 +231,103 @@
  */
 GalagoContext *galago_object_get_context(const GalagoObject *object);
 
+/**
+ * Sets a string attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute to set.
+ * @param value  The value of the attribute.
+ */
+void galago_object_set_attr_string(GalagoObject *object, const char *name,
+								   const char *value);
+
+/**
+ * Sets a boolean attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute to set.
+ * @param value  The value of the attribute.
+ */
+void galago_object_set_attr_bool(GalagoObject *object, const char *name,
+								 gboolean value);
+
+/**
+ * Sets an integer attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute to set.
+ * @param value  The value of the attribute.
+ */
+void galago_object_set_attr_int(GalagoObject *object, const char *name,
+								gint32 value);
+
+/**
+ * Sets an attribute on an object.
+ *
+ * This is limited to string, boolean, and integer value types.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute to set.
+ * @param value  The value of the attribute.
+ */
+void galago_object_set_attr(GalagoObject *object, const char *name,
+							GValue *value);
+
+/**
+ * Removes an attribute on an object.
+ *
+ * @param object The object
+ * @param name   The name of the attribute to remove
+ *
+ * @return TRUE if the attribute was removed, or FALSE.
+ */
+gboolean galago_object_remove_attr(GalagoObject *object, const char *name);
+
+/**
+ * Returns the value of a string attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+const char *galago_object_get_attr_string(const GalagoObject *object,
+										  const char *name);
+
+/**
+ * Returns the value of a boolean attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+gboolean galago_object_get_attr_bool(const GalagoObject *object,
+									 const char *name);
+
+/**
+ * Returns the value of an integer attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+gint32 galago_object_get_attr_int(const GalagoObject *object,
+								  const char *name);
+
+/**
+ * Returns the value of an attribute on an object.
+ *
+ * @param object The object.
+ * @param name   The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+const GValue *galago_object_get_attr(const GalagoObject *object,
+									 const char *name);
+
+
 /*@}*/
 
 G_END_DECLS

Modified: trunk/libgalago/libgalago/galago-person.c
===================================================================
--- trunk/libgalago/libgalago/galago-person.c	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-person.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -31,12 +31,8 @@
 struct _GalagoPersonPrivate
 {
 	char *id;
-
 	GalagoImage *photo;
-
 	GHashTable *accounts_table;
-	GHashTable *properties_table;
-
 	GList *accounts;
 };
 
@@ -70,11 +66,6 @@
 												  const char *obj_path);
 static void _galago_dbus_person_set_photo(GalagoPerson *person,
 										  GalagoImage *photo);
-static void _galago_dbus_person_set_property(GalagoPerson *person,
-											 const char *name,
-                                             GalagoValue *value);
-static GalagoValue *_galago_dbus_person_get_property(
-	const GalagoPerson *person, const char *name);
 
 
 /**************************************************************************
@@ -105,6 +96,7 @@
 	parent_class = g_type_class_peek_parent(klass);
 
 	object_class->dbus_interface = GALAGO_DBUS_PERSON_INTERFACE;
+	object_class->supports_attrs = TRUE;
 
 	object_class->destroy             = galago_person_destroy;
 	object_class->dbus_message_append = galago_person_dbus_message_append;
@@ -214,9 +206,6 @@
 
 		g_hash_table_destroy(person->priv->accounts_table);
 
-		if (person->priv->properties_table != NULL)
-			g_hash_table_destroy(person->priv->properties_table);
-
 		galago_context_push(galago_object_get_context(object));
 		galago_context_remove_person(person);
 		galago_context_pop();
@@ -273,16 +262,6 @@
 }
 
 static void
-_push_key(void *key, void *val, void *user_data)
-{
-	const char *name     = (const char *)key;
-	GalagoValue *value   = (GalagoValue *)val;
-	GalagoPerson *person = (GalagoPerson *)user_data;
-
-	_galago_dbus_person_set_property(person, name, value);
-}
-
-static void
 galago_person_dbus_push_full(GalagoObject *object)
 {
 	GalagoPerson *person = (GalagoPerson *)object;
@@ -290,11 +269,8 @@
 	_galago_dbus_person_set_photo(person,
 		galago_person_get_photo(person, FALSE));
 
-	if (person->priv->properties_table != NULL)
-	{
-		g_hash_table_foreach(person->priv->properties_table,
-							 _push_key, person);
-	}
+	if (GALAGO_OBJECT_CLASS(parent_class)->dbus_push_full != NULL)
+		GALAGO_OBJECT_CLASS(parent_class)->dbus_push_full(object);
 }
 
 static gchar *
@@ -454,10 +430,10 @@
 
 	/* XXX This is all a hack, but for now, it should work. Improve this! */
 
-	first_name = galago_person_get_property_string(person,
-		GALAGO_PERSON_PROP_FIRST_NAME);
-	last_name = galago_person_get_property_string(person,
-		GALAGO_PERSON_PROP_LAST_NAME);
+	first_name = galago_object_get_attr_string(GALAGO_OBJECT(person),
+											   GALAGO_PERSON_ATTR_FIRST_NAME);
+	last_name = galago_object_get_attr_string(GALAGO_OBJECT(person),
+											  GALAGO_PERSON_ATTR_LAST_NAME);
 
 	if (first_name != NULL || last_name != NULL)
 	{
@@ -719,195 +695,7 @@
 	return account;
 }
 
-void
-galago_person_set_property_string(GalagoPerson *person, const char *name,
-								  const char *str_value)
-{
-	g_return_if_fail(person    != NULL);
-	g_return_if_fail(name      != NULL && *name      != '\0');
-	g_return_if_fail(str_value != NULL && *str_value != '\0');
-	g_return_if_fail(GALAGO_IS_PERSON(person));
 
-	galago_person_set_property(person, name,
-		galago_value_new(GALAGO_VALUE_TYPE_STRING, &str_value, NULL));
-}
-
-void
-galago_person_set_property_bool(GalagoPerson *person, const char *name,
-								gboolean bool_value)
-{
-	g_return_if_fail(person != NULL);
-	g_return_if_fail(name   != NULL && *name  != '\0');
-	g_return_if_fail(GALAGO_IS_PERSON(person));
-
-	galago_person_set_property(person, name,
-		galago_value_new(GALAGO_VALUE_TYPE_BOOLEAN, &bool_value, NULL));
-}
-
-void
-galago_person_set_property_uint32(GalagoPerson *person, const char *name,
-								  guint32 uint_value)
-{
-	g_return_if_fail(person != NULL);
-	g_return_if_fail(name   != NULL && *name  != '\0');
-	g_return_if_fail(GALAGO_IS_PERSON(person));
-
-	galago_person_set_property(person, name,
-		galago_value_new(GALAGO_VALUE_TYPE_UINT, &uint_value, NULL));
-}
-
-#define IS_TYPE_INTEGER(type) \
-	((type) == GALAGO_VALUE_TYPE_UINT    || \
-	 (type) == GALAGO_VALUE_TYPE_INT     || \
-	 (type) == GALAGO_VALUE_TYPE_SHORT   || \
-	 (type) == GALAGO_VALUE_TYPE_USHORT  || \
-	 (type) == GALAGO_VALUE_TYPE_LONG    || \
-	 (type) == GALAGO_VALUE_TYPE_ULONG)
-
-void
-galago_person_set_property(GalagoPerson *person, const char *name,
-						   GalagoValue *value)
-{
-	GalagoType value_type;
-
-	g_return_if_fail(person != NULL);
-	g_return_if_fail(name   != NULL && *name  != '\0');
-	g_return_if_fail(value  != NULL);
-	g_return_if_fail(GALAGO_IS_PERSON(person));
-
-	value_type = galago_value_get_type(value);
-
-	g_return_if_fail(value_type == GALAGO_VALUE_TYPE_STRING  ||
-					 value_type == GALAGO_VALUE_TYPE_BOOLEAN ||
-					 IS_TYPE_INTEGER(value_type));
-
-	if (person->priv->properties_table == NULL)
-	{
-		person->priv->properties_table =
-			g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
-								  (GFreeFunc)galago_value_destroy);
-	}
-
-	g_hash_table_replace(person->priv->properties_table,
-						 g_ascii_strdown(name, -1), value);
-
-	if (GALAGO_OBJECT_IS_LOCAL(person))
-		_galago_dbus_person_set_property(person, name, value);
-}
-
-gboolean
-galago_person_remove_property(GalagoPerson *person, const char *name)
-{
-	char *temp;
-
-	g_return_val_if_fail(person != NULL,                  FALSE);
-	g_return_val_if_fail(name   != NULL && *name != '\0', FALSE);
-	g_return_val_if_fail(GALAGO_IS_PERSON(person),        FALSE);
-
-	if (person->priv->properties_table == NULL)
-		return TRUE;
-
-	temp = g_ascii_strdown(name, -1);
-	g_hash_table_remove(person->priv->properties_table, temp);
-	g_free(temp);
-
-	if (GALAGO_OBJECT_IS_LOCAL(person) && galago_is_connected() &&
-		galago_is_feed())
-	{
-		galago_dbus_send_message(GALAGO_OBJECT(person), "RemoveProperty",
-			galago_value_new(GALAGO_VALUE_TYPE_STRING, &name, NULL),
-			NULL);
-	}
-
-	return TRUE;
-}
-
-const char *
-galago_person_get_property_string(const GalagoPerson *person,
-								  const char *name)
-{
-	const GalagoValue *value;
-
-	g_return_val_if_fail(person != NULL,                  NULL);
-	g_return_val_if_fail(name   != NULL && *name != '\0', NULL);
-	g_return_val_if_fail(GALAGO_IS_PERSON(person),        NULL);
-
-	value = galago_person_get_property(person, name);
-
-	if (value == NULL)
-		return NULL;
-
-	g_return_val_if_fail(
-		galago_value_get_type(value) == GALAGO_VALUE_TYPE_STRING, NULL);
-
-	return galago_value_get_string(value);
-}
-
-gboolean
-galago_person_get_property_bool(const GalagoPerson *person, const char *name)
-{
-	const GalagoValue *value;
-
-	g_return_val_if_fail(person != NULL,                  FALSE);
-	g_return_val_if_fail(name   != NULL && *name != '\0', FALSE);
-	g_return_val_if_fail(GALAGO_IS_PERSON(person),        FALSE);
-
-	value = galago_person_get_property(person, name);
-
-	if (value == NULL)
-		return FALSE;
-
-	g_return_val_if_fail(
-		galago_value_get_type(value) == GALAGO_VALUE_TYPE_BOOLEAN, FALSE);
-
-	return galago_value_get_boolean(value);
-}
-
-guint32
-galago_person_get_property_uint32(const GalagoPerson *person,
-								  const char *name)
-{
-	const GalagoValue *value;
-
-	g_return_val_if_fail(person != NULL,                  0);
-	g_return_val_if_fail(name   != NULL && *name != '\0', 0);
-	g_return_val_if_fail(GALAGO_IS_PERSON(person),        0);
-
-	value = galago_person_get_property(person, name);
-
-	if (value == NULL)
-		return 0;
-
-	g_return_val_if_fail(
-		galago_value_get_type(value) == GALAGO_VALUE_TYPE_UINT, 0);
-
-	return galago_value_get_uint(value);
-}
-
-const GalagoValue *
-galago_person_get_property(const GalagoPerson *person, const char *name)
-{
-	GalagoValue *value = NULL;
-	char *temp;
-
-	g_return_val_if_fail(person != NULL,                  0);
-	g_return_val_if_fail(name   != NULL && *name != '\0', 0);
-	g_return_val_if_fail(GALAGO_IS_PERSON(person),        0);
-
-	temp = g_ascii_strdown(name, -1);
-
-	if (person->priv->properties_table != NULL)
-		value = g_hash_table_lookup(person->priv->properties_table, temp);
-
-	if (value == NULL && GALAGO_OBJECT_IS_REMOTE(person))
-		value = _galago_dbus_person_get_property(person, temp);
-
-	g_free(temp);
-
-	return value;
-}
-
-
 /**************************************************************************
  * D-BUS Functions
  **************************************************************************/
@@ -925,157 +713,3 @@
 			NULL);
 	}
 }
-
-static void
-_galago_dbus_person_set_property(GalagoPerson *person, const char *name,
-								 GalagoValue *value)
-{
-	DBusMessage *message;
-	DBusMessageIter iter, value_iter;
-	GalagoType type;
-	gboolean success = TRUE;
-
-	if (!galago_is_connected() || !galago_is_feed())
-		return;
-
-	type = galago_value_get_type(value);
-
-	message = galago_dbus_message_new_method_call(GALAGO_OBJECT(person),
-												  "SetProperty", FALSE,
-												  &iter);
-	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
-
-	switch (type)
-	{
-		case GALAGO_VALUE_TYPE_STRING:
-		{
-			const char *str = galago_value_get_string(value);
-			dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
-											 DBUS_TYPE_STRING_AS_STRING,
-											 &value_iter);
-			dbus_message_iter_append_basic(&value_iter,
-										   DBUS_TYPE_STRING, &str);
-			dbus_message_iter_close_container(&iter, &value_iter);
-			break;
-		}
-
-		case GALAGO_VALUE_TYPE_BOOLEAN:
-		{
-			gboolean b = galago_value_get_boolean(value);
-			dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
-											 DBUS_TYPE_BOOLEAN_AS_STRING,
-											 &value_iter);
-			dbus_message_iter_append_basic(&value_iter,
-										   DBUS_TYPE_BOOLEAN, &b);
-			dbus_message_iter_close_container(&iter, &value_iter);
-			break;
-		}
-
-		case GALAGO_VALUE_TYPE_UINT:
-		{
-			unsigned int i = galago_value_get_uint(value);
-			dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
-											 DBUS_TYPE_UINT32_AS_STRING,
-											 &value_iter);
-			dbus_message_iter_append_basic(&value_iter,
-										   DBUS_TYPE_UINT32, &i);
-			dbus_message_iter_close_container(&iter, &value_iter);
-			break;
-		}
-
-		default:
-			g_warning("Unknown property type %d for property %s",
-					  type, name);
-			success = FALSE;
-			return;
-	}
-
-	if (success)
-		dbus_connection_send(galago_get_dbus_conn(), message, NULL);
-
-	dbus_message_unref(message);
-}
-
-static GalagoValue *
-_galago_dbus_person_get_property(const GalagoPerson *person, const char *name)
-{
-	DBusConnection *dbus_conn;
-	DBusMessage *message, *reply;
-	DBusMessageIter iter, value_iter;
-	DBusError error;
-	GalagoValue *value = NULL;
-
-	if (!galago_is_connected())
-		return NULL;
-
-	dbus_conn = galago_get_dbus_conn();
-
-	message = galago_dbus_message_new_method_call(GALAGO_OBJECT(person),
-												  "GetProperty", TRUE, &iter);
-
-	g_return_val_if_fail(message != NULL, NULL);
-
-	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
-
-	dbus_error_init(&error);
-
-	reply = dbus_connection_send_with_reply_and_block(dbus_conn, message,
-													  -1, &error);
-
-	dbus_message_unref(message);
-
-	if (dbus_error_is_set(&error))
-	{
-		if (!dbus_error_has_name(&error, GALAGO_DBUS_ERROR_INVALID_PROPERTY))
-		{
-			g_warning("Error sending Person.GetProperty(%s, %s): %s",
-					  galago_person_get_id(person), name, error.message);
-		}
-
-		goto exit;
-	}
-
-	dbus_message_iter_init(reply, &iter);
-	dbus_message_iter_recurse(&iter, &value_iter);
-
-	int type = dbus_message_iter_get_arg_type(&value_iter);
-
-	switch (type)
-	{
-		case DBUS_TYPE_STRING:
-		{
-			const char *data;
-			dbus_message_iter_get_basic(&value_iter, &data);
-			value = galago_value_new(GALAGO_VALUE_TYPE_STRING, &data, NULL);
-			break;
-		}
-
-		case DBUS_TYPE_BOOLEAN:
-		{
-			gboolean data;
-			dbus_message_iter_get_basic(&value_iter, &data);
-			value = galago_value_new(GALAGO_VALUE_TYPE_BOOLEAN, &data, NULL);
-			break;
-		}
-
-		case DBUS_TYPE_UINT32:
-		{
-			int data;
-			dbus_message_iter_get_basic(&value_iter, &data);
-			value = galago_value_new(GALAGO_VALUE_TYPE_UINT, &data, NULL);
-			break;
-		}
-
-		default:
-			g_warning("Unknown property type %d for property %s",
-					  type, name);
-			break;
-	}
-
-	dbus_message_unref(reply);
-
-exit:
-	dbus_error_free(&error);
-
-	return value;
-}

Modified: trunk/libgalago/libgalago/galago-person.h
===================================================================
--- trunk/libgalago/libgalago/galago-person.h	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-person.h	2005-12-14 08:27:23 UTC (rev 2374)
@@ -74,15 +74,6 @@
 #endif
 };
 
-typedef enum
-{
-	GALAGO_PROPERTY_TYPE_UNKNOWN = -1,  /**< Unknown property type.       */
-	GALAGO_PROPERTY_TYPE_STRING  = 0,   /**< String type.                 */
-	GALAGO_PROPERTY_TYPE_BOOL,          /**< Boolean type.                */
-	GALAGO_PROPERTY_TYPE_UINT32         /**< Unsigned 32-bit integer type */
-
-} GalagoPropertyType;
-
 #define GALAGO_TYPE_PERSON (galago_person_get_type())
 
 /** Cast @c obj to a GalagoPerson. */
@@ -111,19 +102,19 @@
 G_BEGIN_DECLS
 
 /**************************************************************************/
-/** @name Common Property Definitions                                     */
+/** @name Common Attribute Definitions                                    */
 /**************************************************************************/
 /*{*/
 
-#define GALAGO_PERSON_PROP_UID          "uid"
-#define GALAGO_PERSON_PROP_FIRST_NAME   "first-name"
-#define GALAGO_PERSON_PROP_MIDDLE_NAME  "middle-name"
-#define GALAGO_PERSON_PROP_LAST_NAME    "last-name"
-#define GALAGO_PERSON_PROP_ADDRESS      "address"
-#define GALAGO_PERSON_PROP_CITY         "city"
-#define GALAGO_PERSON_PROP_STATE        "state"
-#define GALAGO_PERSON_PROP_COUNTRY      "country"
-#define GALAGO_PERSON_PROP_ZIPCODE      "zipcode"
+#define GALAGO_PERSON_ATTR_UID          "uid"
+#define GALAGO_PERSON_ATTR_FIRST_NAME   "first-name"
+#define GALAGO_PERSON_ATTR_MIDDLE_NAME  "middle-name"
+#define GALAGO_PERSON_ATTR_LAST_NAME    "last-name"
+#define GALAGO_PERSON_ATTR_ADDRESS      "address"
+#define GALAGO_PERSON_ATTR_CITY         "city"
+#define GALAGO_PERSON_ATTR_STATE        "state"
+#define GALAGO_PERSON_ATTR_COUNTRY      "country"
+#define GALAGO_PERSON_ATTR_ZIPCODE      "zipcode"
 
 /*@}*/
 
@@ -272,102 +263,6 @@
 										 const char *username,
 										 gboolean query);
 
-/**
- * Sets a string property on a person.
- *
- * @param person The person.
- * @param name   The name of the property to set.
- * @param value  The value of the property.
- */
-void galago_person_set_property_string(GalagoPerson *person, const char *name,
-									   const char *value);
-
-/**
- * Sets a boolean property on a person.
- *
- * @param person The person.
- * @param name   The name of the property to set.
- * @param value  The value of the property.
- */
-void galago_person_set_property_bool(GalagoPerson *person, const char *name,
-									 gboolean value);
-
-/**
- * Sets a uint32 property on a person.
- *
- * @param person The person.
- * @param name   The name of the property to set.
- * @param value  The value of the property.
- */
-void galago_person_set_property_uint32(GalagoPerson *person, const char *name,
-									   guint32 value);
-
-/**
- * Sets a property on a person.
- *
- * This is limited to string, boolean, and uint32 value types.
- *
- * @param person The person.
- * @param name   The name of the property to set.
- * @param value  The value of the property.
- */
-void galago_person_set_property(GalagoPerson *person, const char *name,
-								GalagoValue *value);
-
-/**
- * Removes a property on a person.
- *
- * @param person The person
- * @param name   The name of the property to remove
- *
- * @return TRUE if the property was removed, or FALSE.
- */
-gboolean galago_person_remove_property(GalagoPerson *person, const char *name);
-
-/**
- * Returns the value of a string property on a person.
- *
- * @param person The person.
- * @param name   The name of the property.
- *
- * @return The property value, or NULL.
- */
-const char *galago_person_get_property_string(const GalagoPerson *person,
-											  const char *name);
-
-/**
- * Returns the value of a boolean property on a person.
- *
- * @param person The person.
- * @param name   The name of the property.
- *
- * @return The property value, or NULL.
- */
-gboolean galago_person_get_property_bool(const GalagoPerson *person,
-										 const char *name);
-
-/**
- * Returns the value of a uint32 property on a person.
- *
- * @param person The person.
- * @param name   The name of the property.
- *
- * @return The property value, or NULL.
- */
-guint32 galago_person_get_property_uint32(const GalagoPerson *person,
-										  const char *name);
-
-/**
- * Returns the value of a property on a person.
- *
- * @param person The person.
- * @param name   The name of the property.
- *
- * @return The property value, or NULL.
- */
-const GalagoValue *galago_person_get_property(const GalagoPerson *person,
-											  const char *name);
-
 /*@}*/
 
 G_END_DECLS

Modified: trunk/libgalago/tests/Makefile.am
===================================================================
--- trunk/libgalago/tests/Makefile.am	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/tests/Makefile.am	2005-12-14 08:27:23 UTC (rev 2374)
@@ -6,12 +6,12 @@
 
 noinst_PROGRAMS = \
 	get-avatar \
+	get-person-attr \
 	get-presence \
-	get-property \
 	monitor \
 	presence-feed \
 	presence-feed-2 \
-	property-test \
+	person-attr-test \
 	$(unittests)
 
 common_ldflags = \
@@ -24,8 +24,8 @@
 get_presence_SOURCES = get-presence.c
 get_presence_LDADD   = $(common_ldflags)
 
-get_property_SOURCES = get-property.c
-get_property_LDADD   = $(common_ldflags)
+get_person_attr_SOURCES = get-person-attr.c
+get_person_attr_LDADD   = $(common_ldflags)
 
 monitor_SOURCES = monitor.c
 monitor_LDADD   = $(common_ldflags)
@@ -36,8 +36,8 @@
 presence_feed_2_SOURCES = presence-feed-2.c
 presence_feed_2_LDADD   = $(common_ldflags)
 
-property_test_SOURCES = property-test.c
-property_test_LDADD   = $(common_ldflags)
+person_attr_test_SOURCES = person-attr-test.c
+person_attr_test_LDADD   = $(common_ldflags)
 
 check_libgalago_SOURCES = check-libgalago.c
 check_libgalago_LDADD   = $(common_ldflags) $(CHECK_LIBS)

Copied: trunk/libgalago/tests/get-person-attr.c (from rev 2356, trunk/libgalago/tests/get-property.c)
===================================================================
--- trunk/libgalago/tests/get-property.c	2005-12-03 06:15:28 UTC (rev 2356)
+++ trunk/libgalago/tests/get-person-attr.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -0,0 +1,76 @@
+/**
+ * @file get-person-attr.c Queries the attributes of a person.
+ *
+ * @Copyright (C) 2004-2005 Christian Hammond
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA  02111-1307  USA
+ */
+#include <libgalago/galago.h>
+#include <stdio.h>
+
+int
+main(int argc, char **argv)
+{
+	char *person_id, *attr_name;
+	GalagoPerson *person;
+	const GValue *value;
+
+	if (argc != 3)
+	{
+		fprintf(stderr, "Usage: get-person-attr person-id attribute\n");
+		exit(1);
+	}
+
+	person_id = argv[1];
+	attr_name = argv[2];
+
+	galago_init("get-person-attr", FALSE);
+
+	person = galago_get_person(person_id, GALAGO_REMOTE, TRUE);
+
+	if (person == NULL)
+	{
+		fprintf(stderr, "Unknown person %s\n", person_id);
+		exit(1);
+	}
+
+	value = galago_object_get_attr(GALAGO_OBJECT(person), attr_name);
+
+	if (value == NULL)
+	{
+		fprintf(stderr, "Attribute '%s' is not set\n", attr_name);
+		exit(1);
+	}
+
+	if (G_VALUE_HOLDS(value, G_TYPE_STRING))
+	{
+		printf("%s\n", g_value_get_string(value));
+	}
+	else if (G_VALUE_HOLDS(value, G_TYPE_BOOLEAN))
+	{
+		printf("%s\n", g_value_get_boolean(value) ? "true" : "false");
+	}
+	else if (G_VALUE_HOLDS(value, G_TYPE_INT))
+	{
+		printf("%d\n", g_value_get_int(value));
+	}
+	else
+	{
+		fprintf(stderr, "Unknown attribute type returned\n");
+	}
+
+	return 0;
+}

Deleted: trunk/libgalago/tests/get-property.c
===================================================================
--- trunk/libgalago/tests/get-property.c	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/tests/get-property.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -1,79 +0,0 @@
-/**
- * @file get-property.c Queries the property of a person.
- *
- * @Copyright (C) 2004-2005 Christian Hammond
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the Free
- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- */
-#include <libgalago/galago.h>
-#include <stdio.h>
-
-int
-main(int argc, char **argv)
-{
-	char *person_id, *prop_name;
-	GalagoPerson *person;
-	const GalagoValue *property;
-
-	if (argc != 3)
-	{
-		fprintf(stderr, "Usage: get-property person-id property\n");
-		exit(1);
-	}
-
-	person_id = argv[1];
-	prop_name = argv[2];
-
-	galago_init("get_property", FALSE);
-
-	person = galago_get_person(person_id, GALAGO_REMOTE, TRUE);
-
-	if (person == NULL)
-	{
-		fprintf(stderr, "Unknown person %s\n", person_id);
-		exit(1);
-	}
-
-	property = galago_person_get_property(person, prop_name);
-
-	if (property == NULL)
-	{
-		fprintf(stderr, "Property '%s' is not set\n", prop_name);
-		exit(1);
-	}
-
-	switch (galago_value_get_type(property))
-	{
-		case GALAGO_VALUE_TYPE_STRING:
-			printf("%s\n", galago_value_get_string(property));
-			break;
-
-		case GALAGO_VALUE_TYPE_BOOLEAN:
-			printf("%s\n",
-				   galago_value_get_boolean(property) ? "true" : "false");
-			break;
-
-		case GALAGO_VALUE_TYPE_UINT:
-			printf("%d\n", galago_value_get_uint(property));
-			break;
-
-		default:
-			fprintf(stderr, "Unknown property type returned\n");
-			break;
-	}
-
-	return 0;
-}

Copied: trunk/libgalago/tests/person-attr-test.c (from rev 2356, trunk/libgalago/tests/property-test.c)
===================================================================
--- trunk/libgalago/tests/property-test.c	2005-12-03 06:15:28 UTC (rev 2356)
+++ trunk/libgalago/tests/person-attr-test.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -0,0 +1,80 @@
+/**
+ * @file person-attr-test.c A simple test for person attributes
+ *
+ * @Copyright (C) 2005 Christian Hammond <chipx86 at chipx86.com>
+ * @Copyright (C) 2004 Trent Lloyd  <lathiat at bur.st>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA  02111-1307  USA
+ */
+#include <libgalago/galago.h>
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[])
+{
+	GalagoService *service;
+	GalagoAccount *account;
+	GalagoPerson *person;
+	GalagoPresence *presence;
+	GalagoStatus *status;
+
+	if (!galago_init("person-attr-test-feed", TRUE))
+		exit(1);
+
+	/* Setup our test service */
+	service  = galago_create_service("lathiat", "Lathiats Godly Program", 0);
+	person   = galago_create_person("dizzy");
+	account  = galago_service_create_account(service, person, "lathiat");
+	presence = galago_account_create_presence(account);
+
+	status = galago_status_new(GALAGO_STATUS_AVAILABLE, "harass",
+							   "Taking harassments", TRUE);
+
+	galago_presence_add_status(presence, status);
+
+	galago_object_set_attr_string(GALAGO_OBJECT(person),
+								  "email", "lathiat at bur.st");
+	galago_object_set_attr_string(GALAGO_OBJECT(person),
+								  "x-godly", "false");
+
+	printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=false)=%s\n",
+			galago_object_get_attr_string(GALAGO_OBJECT(person), "email"),
+			galago_object_get_attr_string(GALAGO_OBJECT(person), "x-godly"));
+
+	printf("Removing godly\n");
+
+	galago_object_remove_attr(GALAGO_OBJECT(person), "x-godly");
+
+	printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=NULL)=%s\n",
+			galago_object_get_attr_string(GALAGO_OBJECT(person), "email"),
+			galago_object_get_attr_string(GALAGO_OBJECT(person), "x-godly"));
+
+	printf("Changing email\n");
+
+	galago_object_set_attr_string(GALAGO_OBJECT(person),
+								  "email", "lathiat at sixlabs.org");
+
+	printf("Properties: (email=lathiat at sixlabs.org)=%s, (x-godly=NULL)=%s\n",
+			galago_object_get_attr_string(GALAGO_OBJECT(person), "email"),
+			galago_object_get_attr_string(GALAGO_OBJECT(person), "x-godly"));
+
+	printf("done.\n");
+
+	return 0;
+}

Deleted: trunk/libgalago/tests/property-test.c
===================================================================
--- trunk/libgalago/tests/property-test.c	2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/tests/property-test.c	2005-12-14 08:27:23 UTC (rev 2374)
@@ -1,76 +0,0 @@
-/**
- * @file property-test.c A simple test for properties
- *
- * @Copyright (C) 2004 Trent Lloyd  <lathiat at bur.st>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the Free
- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- */
-#include <libgalago/galago.h>
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-#include <string.h>
-
-int
-main(int argc, char *argv[])
-{
-	GalagoService *service;
-	GalagoAccount *account;
-	GalagoPerson *person;
-	GalagoPresence *presence;
-	GalagoStatus *status;
-
-	if (!galago_init("property-test-feed", TRUE))
-		return 1;
-
-	/* Setup our test service */
-	service  = galago_create_service("lathiat", "Lathiats Godly Program", 0);
-	person   = galago_create_person("dizzy");
-	account  = galago_service_create_account(service, person, "lathiat");
-	presence = galago_account_create_presence(account);
-
-	status = galago_status_new(GALAGO_STATUS_AVAILABLE, "harass",
-							   "Taking harassments", TRUE);
-
-	galago_presence_add_status(presence, status);
-
-	galago_person_set_property_string(person, "email", "lathiat at bur.st");
-	galago_person_set_property_string(person, "x-godly", "false");
-
-	printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=false)=%s\n",
-			galago_person_get_property_string(person, "email"),
-			galago_person_get_property_string(person, "x-godly"));
-
-	printf("Removing godly\n");
-
-	galago_person_remove_property(person, "x-godly");
-
-	printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=NULL)=%s\n",
-			galago_person_get_property_string(person, "email"),
-			galago_person_get_property_string(person, "x-godly"));
-
-	printf("Changing email\n");
-
-	galago_person_set_property_string(person, "email", "lathiat at sixlabs.org");
-
-	printf("Properties: (email=lathiat at sixlabs.org)=%s, (x-godly=NULL)=%s\n",
-			galago_person_get_property_string(person, "email"),
-			galago_person_get_property_string(person, "x-godly"));
-
-	printf("done.\n");
-
-	return 0;
-}



More information about the galago-commits mailing list