[evolution-data-server/account-mgmt: 15/28] Add an ESource extension for the groupwise backend.



commit aae2fd238117f3eb002ce12ddfe2c5c7166f2180
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Nov 20 09:27:05 2010 -0500

    Add an ESource extension for the groupwise backend.

 addressbook/backends/groupwise/Makefile.am         |   35 +-
 .../backends/groupwise/e-book-backend-groupwise.c  |  104 ++--
 .../groupwise/e-cal-backend-groupwise-factory.c    |  215 +++----
 .../groupwise/e-cal-backend-groupwise-utils.c      |   92 ++--
 .../backends/groupwise/e-cal-backend-groupwise.c   |  130 ++---
 servers/groupwise/Makefile.am                      |   17 +-
 servers/groupwise/create-account.c                 |    8 -
 servers/groupwise/e-gw-connection.c                |    2 +-
 servers/groupwise/e-gw-connection.h                |    2 +-
 servers/groupwise/e-source-groupwise.c             |  666 ++++++++++++++++++++
 servers/groupwise/e-source-groupwise.h             |  119 ++++
 11 files changed, 1067 insertions(+), 323 deletions(-)
---
diff --git a/addressbook/backends/groupwise/Makefile.am b/addressbook/backends/groupwise/Makefile.am
index 3e64da5..e4ce93f 100644
--- a/addressbook/backends/groupwise/Makefile.am
+++ b/addressbook/backends/groupwise/Makefile.am
@@ -30,23 +30,22 @@ libebookbackendgroupwise_la_LIBADD =					\
 libebookbackendgroupwise_la_LDFLAGS =		\
 	-module -avoid-version $(NO_UNDEFINED)
 
-noinst_PROGRAMS = create-account
-
-create_account_CPPFLAGS = \
-	$(AM_CPPFLAGS)		\
-	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
-	-I$(top_srcdir)/addressbook			\
-	-I$(top_builddir)/addressbook			\
-	-I$(top_srcdir)/servers/groupwise            	\
-	$(EVOLUTION_ADDRESSBOOK_CFLAGS)
-
-create_account_SOURCES = create-account.c
-
-create_account_LDADD =  $(top_builddir)/addressbook/libedata-book/libedata-book-1.2.la      \
-        $(top_builddir)/libedataserver/libedataserver-1.2.la              \
-        $(top_builddir)/servers/groupwise/libegroupwise-1.2.la \
-        $(E_DATA_SERVER_LIBS)
-
+#noinst_PROGRAMS = create-account
+
+#create_account_CPPFLAGS = \
+#	$(AM_CPPFLAGS)		\
+#	-I$(top_srcdir)					\
+#	-I$(top_builddir)				\
+#	-I$(top_srcdir)/addressbook			\
+#	-I$(top_builddir)/addressbook			\
+#	-I$(top_srcdir)/servers/groupwise            	\
+#	$(EVOLUTION_ADDRESSBOOK_CFLAGS)
+
+#create_account_SOURCES = create-account.c
+
+#create_account_LDADD =  $(top_builddir)/addressbook/libedata-book/libedata-book-1.2.la      \
+#        $(top_builddir)/libedataserver/libedataserver-1.2.la              \
+#        $(top_builddir)/servers/groupwise/libegroupwise-1.2.la \
+#        $(E_DATA_SERVER_LIBS)
 
 -include $(top_srcdir)/git.mk
diff --git a/addressbook/backends/groupwise/e-book-backend-groupwise.c b/addressbook/backends/groupwise/e-book-backend-groupwise.c
index 20be955..835de2f 100644
--- a/addressbook/backends/groupwise/e-book-backend-groupwise.c
+++ b/addressbook/backends/groupwise/e-book-backend-groupwise.c
@@ -43,6 +43,8 @@
 #include "libedataserver/e-data-server-util.h"
 #include "libedataserver/e-flag.h"
 #include "libedataserver/e-url.h"
+#include "libedataserver/e-source-offline.h"
+#include "libedataserver/e-source-security.h"
 #include "libebook/e-contact.h"
 #include "libebook/e-destination.h"
 #include "libedata-book/e-book-backend-sexp.h"
@@ -55,6 +57,7 @@
 #include "e-gw-connection.h"
 #include "e-gw-item.h"
 #include "e-gw-filter.h"
+#include "e-source-groupwise.h"
 
 #define EDB_ERROR(_code) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, NULL)
 #define EDB_ERROR_EX(_code,_msg) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, _msg)
@@ -82,7 +85,7 @@ struct _EBookBackendGroupwisePrivate {
 	gboolean is_cache_ready;
 	gboolean is_summary_ready;
 	gboolean marked_for_offline;
-	gchar *use_ssl;
+	const gchar *security;
 	gint mode;
 	EBookBackendSummary *summary;
 	GMutex *update_cache_mutex;
@@ -3242,7 +3245,7 @@ e_book_backend_groupwise_authenticate_user (EBookBackend *backend,
 		}
 
 		priv->cnc = e_gw_connection_new_with_error_handler (priv->uri, user, passwd, &error);
-		if (!E_IS_GW_CONNECTION(priv->cnc) && priv->use_ssl && g_str_equal (priv->use_ssl, "when-possible")) {
+		if (!E_IS_GW_CONNECTION(priv->cnc) && g_strcmp0 (priv->security, "when-possible") == 0) {
 			http_uri = g_strconcat ("http://";, priv->uri + 8, NULL);
 			priv->cnc = e_gw_connection_new (http_uri, user, passwd);
 			g_free (http_uri);
@@ -3449,59 +3452,49 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
 {
 	EBookBackendGroupwise *ebgw;
 	EBookBackendGroupwisePrivate *priv;
+	ESourceGroupwise *gw_extension;
+	ESourceOffline *offline_extension;
+	ESourceSecurity *security_extension;
 	gchar *dirname, *filename, *tmp;
-	gchar *book_name;
-	gchar *uri;
-	gchar **tokens;
 	const gchar *cache_dir;
-	const gchar *port;
 	gint db_error;
 	DB *db;
 	DB_ENV *env;
-	EUri *parsed_uri;
-	const gchar *use_ssl;
-	const gchar *offline;
+	const gchar *uid;
+	const gchar *book_name;
+	const gchar *extension_name;
 
 	cache_dir = e_book_backend_get_cache_dir (backend);
 
+	extension_name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+	gw_extension = e_source_get_extension (source, extension_name);
+
+	extension_name = E_SOURCE_EXTENSION_OFFLINE;
+	offline_extension = e_source_get_extension (source, extension_name);
+
+	extension_name = E_SOURCE_EXTENSION_SECURITY;
+	security_extension = e_source_get_extension (source, extension_name);
+
 	if (enable_debug)
 		printf("\ne_book_backend_groupwise_load_source.. \n");
 	ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
 	priv = ebgw->priv;
 	g_object_ref (source);
 
-	offline = e_source_get_property (source, "offline_sync");
-	if (offline  && g_str_equal (offline, "1"))
-		priv->marked_for_offline = TRUE;
+	priv->marked_for_offline =
+		e_source_offline_get_stay_synchronized (offline_extension);
 
-	uri =  e_source_get_uri (source);
-	priv->original_uri = g_strdup (uri);
-	if (uri == NULL) {
-		g_propagate_error (perror, EDB_ERROR_EX (OTHER_ERROR, "No URI given"));
-		return;
-	}
+	/* XXX This is a bit of a kludge, but build a URI string out of the
+	 *     ESource UID so we can locate the ESource again.  The ESource
+	 *     and its extensions contain all the details we need, so there
+	 *     is no need to embed all those details in the URI itself. */
+	uid = e_source_get_uid (source);
+	priv->original_uri = g_strdup_printf ("esource:%s", uid);
 
-	tokens = g_strsplit (uri, ";", 2);
-	g_free (uri);
-	if (tokens[0])
-		uri = g_strdup (tokens[0]);
-	book_name = g_strdup (tokens[1]);
-	if (book_name == NULL) {
-		g_propagate_error (perror, EDB_ERROR_EX (OTHER_ERROR, "No book name recognized for a URI"));
-		return;
-	}
-	g_strfreev (tokens);
-	parsed_uri = e_uri_new (uri);
-	port = e_source_get_property (source, "port");
-	if (port == NULL)
-		port = "7191";
-	use_ssl = e_source_get_property (source, "use_ssl");
-	if (use_ssl && !g_str_equal (use_ssl, "never"))
-		priv->uri = g_strconcat ("https://";, parsed_uri->host,":", port, "/soap", NULL );
-	else
-		priv->uri = g_strconcat ("http://";, parsed_uri->host,":", port, "/soap", NULL );
+	priv->uri = e_source_build_groupwise_uri (source);
 
-	priv->book_name = book_name;
+	book_name = e_source_groupwise_get_book_name (gw_extension);
+	priv->book_name = g_strdup (book_name);;
 
 	g_free (priv->summary_file_name);
 	tmp = g_build_filename (cache_dir, priv->book_name, NULL);
@@ -3621,7 +3614,7 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
 		return;
 	}
 
-	priv->use_ssl = g_strdup (use_ssl);
+	priv->security = e_source_security_get_method (security_extension);
 	priv->only_if_exists = only_if_exists;
 
 	e_book_backend_set_is_loaded (E_BOOK_BACKEND (backend), TRUE);
@@ -3636,8 +3629,6 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
 
 	if (priv->mode == E_DATA_BOOK_MODE_LOCAL)
 		if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)) {
-			g_free (uri);
-			e_uri_free (parsed_uri);
 			g_propagate_error (perror, EDB_ERROR (OFFLINE_UNAVAILABLE));
 			return;
 		}
@@ -3647,8 +3638,6 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
 		ebgw->priv->is_cache_ready = TRUE;
 	g_free (filename);
 	g_free (dirname);
-	g_free (uri);
-	e_uri_free (parsed_uri);
 
 	/*if (enable_debug) {
 		printf ("summary file name = %s\ncache file name = %s \n",
@@ -3656,10 +3645,9 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
 	}*/
 }
 
-static void
+static gboolean
 e_book_backend_groupwise_remove (EBookBackend *backend,
-				 EDataBook        *book,
-				 guint32           opid)
+                                 GError **error)
 {
 	EBookBackendGroupwise *ebgw;
 	gint status;
@@ -3668,19 +3656,23 @@ e_book_backend_groupwise_remove (EBookBackend *backend,
 		printf ("\ne_book_backend_groupwise_remove...\n");
 	ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
 	if (ebgw->priv->cnc == NULL) {
-		e_data_book_respond_remove (book,  opid,  EDB_ERROR (AUTHENTICATION_REQUIRED));
-		return;
+		g_propagate_error (error, EDB_ERROR (AUTHENTICATION_REQUIRED));
+		return FALSE;
 	}
 	if (!ebgw->priv->is_writable) {
-		e_data_book_respond_remove (book,  opid,  EDB_ERROR (PERMISSION_DENIED));
-		return;
+		g_propagate_error (error, EDB_ERROR (PERMISSION_DENIED));
+		return FALSE;
 	}
 	status = e_gw_connection_remove_item (ebgw->priv->cnc, NULL, ebgw->priv->container_id);
 	if (status == E_GW_CONNECTION_STATUS_OK)
-		e_data_book_respond_remove (book,  opid, EDB_ERROR (SUCCESS));
-	else
-		e_data_book_respond_remove (book,  opid, EDB_ERROR_FAILED_STATUS (OTHER_ERROR, status));
+		return TRUE;
+	else {
+		g_propagate_error (error, EDB_ERROR_FAILED_STATUS (OTHER_ERROR, status));
+		return FALSE;
+	}
 	g_unlink (e_book_backend_db_cache_get_filename (ebgw->priv->file_db));
+
+	return TRUE;
 }
 
 static gchar *
@@ -3838,9 +3830,6 @@ e_book_backend_groupwise_dispose (GObject *object)
 			g_object_unref (bgw->priv->summary);
 			bgw->priv->summary = NULL;
 		}
-		if (bgw->priv->use_ssl) {
-			g_free (bgw->priv->use_ssl);
-		}
 		if (bgw->priv->cache_timeout) {
 			g_source_remove (bgw->priv->cache_timeout);
 			bgw->priv->cache_timeout = 0;
@@ -3868,6 +3857,7 @@ e_book_backend_groupwise_class_init (EBookBackendGroupwiseClass *klass)
 
 	/* Set the virtual methods. */
 	parent_class->load_source             = e_book_backend_groupwise_load_source;
+	parent_class->remove                  = e_book_backend_groupwise_remove;
 	parent_class->get_static_capabilities = e_book_backend_groupwise_get_static_capabilities;
 
 	parent_class->create_contact          = e_book_backend_groupwise_create_contact;
@@ -3883,7 +3873,6 @@ e_book_backend_groupwise_class_init (EBookBackendGroupwiseClass *klass)
 	parent_class->get_supported_fields    = e_book_backend_groupwise_get_supported_fields;
 	parent_class->get_supported_auth_methods = e_book_backend_groupwise_get_supported_auth_methods;
 	parent_class->cancel_operation        = e_book_backend_groupwise_cancel_operation;
-	parent_class->remove                  = e_book_backend_groupwise_remove;
 	parent_class->set_mode                = e_book_backend_groupwise_set_mode;
 	object_class->dispose                 = e_book_backend_groupwise_dispose;
 }
@@ -3898,7 +3887,6 @@ e_book_backend_groupwise_init (EBookBackendGroupwise *backend)
 	priv->is_cache_ready = FALSE;
 	priv->is_summary_ready = FALSE;
 	priv->marked_for_offline = FALSE;
-	priv->use_ssl = NULL;
 	priv->cnc = NULL;
 	priv->original_uri = NULL;
 	priv->cache_timeout = 0;
diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c b/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c
index 49711a9..7c891b1 100644
--- a/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c
+++ b/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c
@@ -16,18 +16,34 @@
 #include "e-cal-backend-groupwise-factory.h"
 #include "e-cal-backend-groupwise.h"
 
-typedef struct {
-	ECalBackendFactory            parent_object;
-} ECalBackendGroupwiseFactory;
+typedef ECalBackendFactory ECalBackendGroupwiseEventsFactory;
+typedef ECalBackendFactoryClass ECalBackendGroupwiseEventsFactoryClass;
 
-typedef struct {
-	ECalBackendFactoryClass parent_class;
-} ECalBackendGroupwiseFactoryClass;
+typedef ECalBackendFactory ECalBackendGroupwiseJournalFactory;
+typedef ECalBackendFactoryClass ECalBackendGroupwiseJournalFactoryClass;
 
-static void
-e_cal_backend_groupwise_factory_instance_init (ECalBackendGroupwiseFactory *factory)
-{
-}
+typedef ECalBackendFactory ECalBackendGroupwiseTodosFactory;
+typedef ECalBackendFactoryClass ECalBackendGroupwiseTodosFactoryClass;
+
+/* Forward Declarations */
+GType e_cal_backend_groupwise_events_factory_get_type (void);
+GType e_cal_backend_groupwise_journal_factory_get_type (void);
+GType e_cal_backend_groupwise_todos_factory_get_type (void);
+
+G_DEFINE_DYNAMIC_TYPE (
+	ECalBackendGroupwiseEventsFactory,
+	e_cal_backend_groupwise_events_factory,
+	E_TYPE_CAL_BACKEND_FACTORY)
+
+G_DEFINE_DYNAMIC_TYPE (
+	ECalBackendGroupwiseJournalFactory,
+	e_cal_backend_groupwise_journal_factory,
+	E_TYPE_CAL_BACKEND_FACTORY)
+
+G_DEFINE_DYNAMIC_TYPE (
+	ECalBackendGroupwiseTodosFactory,
+	e_cal_backend_groupwise_todos_factory,
+	E_TYPE_CAL_BACKEND_FACTORY)
 
 static const gchar *
 _get_protocol (ECalBackendFactory *factory)
@@ -35,28 +51,20 @@ _get_protocol (ECalBackendFactory *factory)
 	return "groupwise";
 }
 
-static ECalBackend*
-_todos_new_backend (ECalBackendFactory *factory, ESource *source)
-{
-	return g_object_new (e_cal_backend_groupwise_get_type (),
-			     "source", source,
-			     "kind", ICAL_VTODO_COMPONENT,
-			     NULL);
-}
-
 static icalcomponent_kind
-_todos_get_kind (ECalBackendFactory *factory)
+_events_get_kind (ECalBackendFactory *factory)
 {
-	return ICAL_VTODO_COMPONENT;
+	return ICAL_VEVENT_COMPONENT;
 }
 
-static ECalBackend*
-_journal_new_backend (ECalBackendFactory *factory, ESource *source)
+static ECalBackend *
+_events_new_backend (ECalBackendFactory *factory,
+                     ESource *source)
 {
-	return g_object_new (e_cal_backend_groupwise_get_type (),
-			     "source", source,
-			     "kind", ICAL_VJOURNAL_COMPONENT,
-			     NULL);
+	return g_object_new (
+		e_cal_backend_groupwise_get_type (),
+		"kind", ICAL_VEVENT_COMPONENT,
+		"source", source, NULL);
 }
 
 static icalcomponent_kind
@@ -65,139 +73,108 @@ _journal_get_kind (ECalBackendFactory *factory)
 	return ICAL_VJOURNAL_COMPONENT;
 }
 
-static ECalBackend*
-_events_new_backend (ECalBackendFactory *factory, ESource *source)
+static ECalBackend *
+_journal_new_backend (ECalBackendFactory *factory,
+                      ESource *source)
 {
-	return g_object_new (e_cal_backend_groupwise_get_type (),
-			     "source", source,
-			     "kind", ICAL_VEVENT_COMPONENT,
-			     NULL);
+	return g_object_new (
+		e_cal_backend_groupwise_get_type (),
+		"kind", ICAL_VJOURNAL_COMPONENT,
+		"source", source, NULL);
 }
 
 static icalcomponent_kind
-_events_get_kind (ECalBackendFactory *factory)
+_todos_get_kind (ECalBackendFactory *factory)
 {
-	return ICAL_VEVENT_COMPONENT;
+	return ICAL_VTODO_COMPONENT;
 }
 
-static void
-todos_backend_factory_class_init (ECalBackendGroupwiseFactoryClass *klass)
+static ECalBackend *
+_todos_new_backend (ECalBackendFactory *factory,
+                    ESource *source)
 {
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->get_protocol = _get_protocol;
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->get_kind     = _todos_get_kind;
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->new_backend  = _todos_new_backend;
+	return g_object_new (
+		e_cal_backend_groupwise_get_type (),
+		"kind", ICAL_VTODO_COMPONENT,
+		"source", source, NULL);
 }
 
 static void
-events_backend_factory_class_init (ECalBackendGroupwiseFactoryClass *klass)
+e_cal_backend_groupwise_events_factory_class_init (ECalBackendFactoryClass *class)
 {
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->get_protocol = _get_protocol;
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->get_kind     = _events_get_kind;
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->new_backend  = _events_new_backend;
+	class->get_protocol = _get_protocol;
+	class->get_kind     = _events_get_kind;
+	class->new_backend  = _events_new_backend;
 }
 
 static void
-journal_backend_factory_class_init (ECalBackendGroupwiseFactoryClass *klass)
+e_cal_backend_groupwise_events_factory_class_finalize (ECalBackendFactoryClass *class)
 {
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->get_protocol = _get_protocol;
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->get_kind     = _journal_get_kind;
-	E_CAL_BACKEND_FACTORY_CLASS (klass)->new_backend  = _journal_new_backend;
 }
 
-static GType
-events_backend_factory_get_type (GTypeModule *module)
+static void
+e_cal_backend_groupwise_events_factory_init (ECalBackendFactory *factory)
 {
-	GType type;
-
-	GTypeInfo info = {
-		sizeof (ECalBackendGroupwiseFactoryClass),
-		NULL, /* base_class_init */
-		NULL, /* base_class_finalize */
-		(GClassInitFunc)  events_backend_factory_class_init,
-		NULL, /* class_finalize */
-		NULL, /* class_data */
-		sizeof (ECalBackend),
-		0,    /* n_preallocs */
-		(GInstanceInitFunc) e_cal_backend_groupwise_factory_instance_init
-	};
-
-	type = g_type_module_register_type (module,
-					    E_TYPE_CAL_BACKEND_FACTORY,
-					    "ECalBackendGroupwiseEventsFactory",
-					    &info, 0);
-
-	return type;
 }
 
-static GType
-todos_backend_factory_get_type (GTypeModule *module)
+static void
+e_cal_backend_groupwise_journal_factory_class_init (ECalBackendFactoryClass *class)
 {
-	GType type;
-
-	GTypeInfo info = {
-		sizeof (ECalBackendGroupwiseFactoryClass),
-		NULL, /* base_class_init */
-		NULL, /* base_class_finalize */
-		(GClassInitFunc)  todos_backend_factory_class_init,
-		NULL, /* class_finalize */
-		NULL, /* class_data */
-		sizeof (ECalBackend),
-		0,    /* n_preallocs */
-		(GInstanceInitFunc) e_cal_backend_groupwise_factory_instance_init
-	};
-
-	type = g_type_module_register_type (module,
-					    E_TYPE_CAL_BACKEND_FACTORY,
-					    "ECalBackendGroupwiseTodosFactory",
-					    &info, 0);
-
-	return type;
+	class->get_protocol = _get_protocol;
+	class->get_kind     = _journal_get_kind;
+	class->new_backend  = _journal_new_backend;
 }
 
-static GType
-journal_backend_factory_get_type (GTypeModule *module)
+static void
+e_cal_backend_groupwise_journal_factory_class_finalize (ECalBackendFactoryClass *class)
 {
-	GType type;
+}
 
-	GTypeInfo info = {
-		sizeof (ECalBackendGroupwiseFactoryClass),
-		NULL, /* base_class_init */
-		NULL, /* base_class_finalize */
-		(GClassInitFunc)  journal_backend_factory_class_init,
-		NULL, /* class_finalize */
-		NULL, /* class_data */
-		sizeof (ECalBackend),
-		0,    /* n_preallocs */
-		(GInstanceInitFunc) e_cal_backend_groupwise_factory_instance_init
-	};
+static void
+e_cal_backend_groupwise_journal_factory_init (ECalBackendFactory *factory)
+{
+}
 
-	type = g_type_module_register_type (module,
-					    E_TYPE_CAL_BACKEND_FACTORY,
-					    "ECalBackendGroupwiseJournalFactory",
-					    &info, 0);
+static void
+e_cal_backend_groupwise_todos_factory_class_init (ECalBackendFactoryClass *class)
+{
+	class->get_protocol = _get_protocol;
+	class->get_kind     = _todos_get_kind;
+	class->new_backend  = _todos_new_backend;
+}
 
-	return type;
+static void
+e_cal_backend_groupwise_todos_factory_class_finalize (ECalBackendFactoryClass *class)
+{
 }
-
 
-static GType groupwise_types[3];
+static void
+e_cal_backend_groupwise_todos_factory_init (ECalBackendFactory *factory)
+{
+}
 
 void
-eds_module_initialize (GTypeModule *module)
+eds_module_initialize (GTypeModule *type_module)
 {
-	groupwise_types[0] = todos_backend_factory_get_type (module);
-	groupwise_types[1] = events_backend_factory_get_type (module);
-	groupwise_types[2] = journal_backend_factory_get_type (module);
+	e_cal_backend_groupwise_events_factory_register_type (type_module);
+	e_cal_backend_groupwise_journal_factory_register_type (type_module);
+	e_cal_backend_groupwise_todos_factory_register_type (type_module);
 }
 
 void
-eds_module_shutdown   (void)
+eds_module_shutdown (void)
 {
 }
 
 void
 eds_module_list_types (const GType **types, gint *num_types)
 {
+	static GType groupwise_types[3];
+
+	groupwise_types[0] = e_cal_backend_groupwise_events_factory_get_type ();
+	groupwise_types[1] = e_cal_backend_groupwise_journal_factory_get_type ();
+	groupwise_types[2] = e_cal_backend_groupwise_todos_factory_get_type ();
+
 	*types = groupwise_types;
-	*num_types = 3;
+	*num_types = G_N_ELEMENTS (groupwise_types);
 }
diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c b/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
index 23984bd..56982bf 100644
--- a/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
+++ b/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
@@ -37,6 +37,7 @@
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <gio/gio.h>
+#include <gconf/gconf-client.h>
 
 #include <e-gw-connection.h>
 #include <e-gw-message.h>
@@ -44,7 +45,7 @@
 #include <libecal/e-cal-time-util.h>
 #include <libsoup/soup-misc.h>
 #include "e-cal-backend-groupwise-utils.h"
-#include "libedataserver/e-source-list.h"
+#include "e-source-groupwise.h"
 
 static gboolean
 get_recur_instance (ECalComponent *comp, time_t instance_start, time_t instance_end, gpointer data)
@@ -2114,23 +2115,6 @@ e_gw_item_set_changes (EGwItem *item, EGwItem *cache_item)
 	}
 }
 
-static void
-add_return_value (EGwSendOptionsReturnNotify track, ESource *source, const gchar *notify)
-{
-	gchar *value;
-
-	switch (track) {
-		case E_GW_RETURN_NOTIFY_MAIL:
-			value =  g_strdup ("mail");
-			break;
-		default:
-			value = g_strdup ("none");
-	}
-
-	e_source_set_property (source, notify, value);
-	g_free (value), value = NULL;
-}
-
 gboolean
 e_cal_backend_groupwise_store_settings (GwSettings *hold)
 {
@@ -2142,8 +2126,8 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 	icalcomponent_kind kind;
 	GConfClient *gconf = gconf_client_get_default ();
 	ESource *source;
-	ESourceList *source_list;
-	const gchar *uid;
+	ESourceGroupwise *groupwise_extension;
+	const gchar *extension_name;
 	gchar *value;
 
 	cbgw = hold->cbgw;
@@ -2151,6 +2135,9 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 	source = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
 	kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
 
+	extension_name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+	groupwise_extension = e_source_get_extension (source, extension_name);
+
 	/* TODO implement send options for Notes */
 	if (kind == ICAL_VJOURNAL_COMPONENT) {
 		g_object_unref (gconf);
@@ -2161,16 +2148,11 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 	}
 
 	gopts = e_gw_sendoptions_get_general_options (opts);
-	if (kind == ICAL_VEVENT_COMPONENT) {
-		source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/calendar/sources");
+	if (kind == ICAL_VEVENT_COMPONENT)
 		sopts = e_gw_sendoptions_get_status_tracking_options (opts, "calendar");
-	} else {
-		source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/tasks/sources");
+	else
 		sopts = e_gw_sendoptions_get_status_tracking_options (opts, "task");
-	}
 
-	uid = e_source_peek_uid (source);
-	source = e_source_list_peek_source_by_uid (source_list, uid);
 	if (gopts) {
 		/* priority */
 		switch (gopts->priority) {
@@ -2186,7 +2168,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 			default:
 				value = g_strdup ("undefined");
 		}
-		e_source_set_property (source, "priority", value);
+		e_source_groupwise_set_priority (groupwise_extension, value);
 		g_free (value), value = NULL;
 
 		/* Reply Requested */
@@ -2197,7 +2179,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 				value = g_strdup_printf ("%d",gopts->reply_within);
 		} else
 			value = g_strdup ("none");
-		e_source_set_property (source, "reply-requested", value);
+		e_source_groupwise_set_reply_requested (groupwise_extension, value);
 		g_free (value), value = NULL;
 
 		/* Delay delivery */
@@ -2207,7 +2189,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 			value = icaltime_as_ical_string_r (tt);
 		} else
 			value = g_strdup ("none");
-		e_source_set_property (source, "delay-delivery", value);
+		e_source_groupwise_set_delivery_delay (groupwise_extension, value);
 		g_free (value), value = NULL;
 
 		/* Expiration date */
@@ -2215,7 +2197,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 			value =  g_strdup_printf ("%d", gopts->expire_after);
 		else
 			value = g_strdup ("none");
-		e_source_set_property (source, "expiration", value);
+		e_source_groupwise_set_expiration (groupwise_extension, value);
 		g_free (value), value = NULL;
 	}
 
@@ -2234,22 +2216,54 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
 			}
 		} else
 			value = g_strdup ("none");
-		e_source_set_property (source, "status-tracking", value);
+		e_source_groupwise_set_status_tracking (groupwise_extension, value);
 		g_free (value), value = NULL;
 
-		add_return_value (sopts->opened, source, "return-open");
-		add_return_value (sopts->accepted, source, "return-accept");
-		add_return_value (sopts->declined, source, "return-decline");
-		add_return_value (sopts->completed, source, "return-complete");
-	}
+		switch (sopts->opened) {
+			case E_GW_RETURN_NOTIFY_MAIL:
+				value = g_strdup ("mail");
+				break;
+			default:
+				value = g_strdup ("none");
+		}
+		e_source_groupwise_set_return_opened (groupwise_extension, value);
+		g_free (value), value = NULL;
+
+		switch (sopts->accepted) {
+			case E_GW_RETURN_NOTIFY_MAIL:
+				value = g_strdup ("mail");
+				break;
+			default:
+				value = g_strdup ("none");
+		}
+		e_source_groupwise_set_return_accepted (groupwise_extension, value);
+		g_free (value), value = NULL;
+
+		switch (sopts->declined) {
+			case E_GW_RETURN_NOTIFY_MAIL:
+				value = g_strdup ("mail");
+				break;
+			default:
+				value = g_strdup ("none");
+		}
+		e_source_groupwise_set_return_declined (groupwise_extension, value);
+		g_free (value), value = NULL;
 
-	e_source_list_sync (source_list, NULL);
+		switch (sopts->completed) {
+			case E_GW_RETURN_NOTIFY_MAIL:
+				value = g_strdup ("mail");
+				break;
+			default:
+				value = g_strdup ("none");
+		}
+		e_source_groupwise_set_return_completed (groupwise_extension, value);
+		g_free (value), value = NULL;
+	}
 
 	g_object_unref (hold->opts);
 	g_free (hold);
 
 	g_object_unref (gconf);
-	g_object_unref (source_list);
 
 	return FALSE;
 }
diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise.c b/calendar/backends/groupwise/e-cal-backend-groupwise.c
index 60fce4a..5d03670 100644
--- a/calendar/backends/groupwise/e-cal-backend-groupwise.c
+++ b/calendar/backends/groupwise/e-cal-backend-groupwise.c
@@ -36,6 +36,9 @@
 #include <libedataserver/e-data-server-util.h>
 #include <libedataserver/e-xml-hash-utils.h>
 #include <libedataserver/e-url.h>
+#include <libedataserver/e-source-offline.h>
+#include <libedataserver/e-source-refresh.h>
+#include <libedataserver/e-source-security.h>
 #include <libedata-cal/e-cal-backend-cache.h>
 #include <libedata-cal/e-cal-backend-file-store.h>
 #include <libedata-cal/e-cal-backend-util.h>
@@ -44,6 +47,7 @@
 #include "e-cal-backend-groupwise.h"
 #include "e-cal-backend-groupwise-utils.h"
 #include "e-gw-connection.h"
+#include "e-source-groupwise.h"
 
 #ifndef O_BINARY
 #define O_BINARY 0
@@ -723,25 +727,26 @@ static guint
 get_cache_refresh_interval (ECalBackendGroupwise *cbgw)
 {
 	guint time_interval;
-	const gchar *time_interval_string = NULL;
-	gchar *temp = NULL;
+	const gchar *time_interval_string;
 	ECalBackend *backend = E_CAL_BACKEND (cbgw);
 	ESource *source;
+	ESourceRefresh *refresh_extension;
+	const gchar *extension_name;
 
 	time_interval = CACHE_REFRESH_INTERVAL;
 	source = e_cal_backend_get_source (backend);
 
-	time_interval_string = g_getenv ("GETQM_TIME_INTERVAL");
+	extension_name = E_SOURCE_EXTENSION_REFRESH;
+	refresh_extension = e_source_get_extension (source, extension_name);
 
-	if (!time_interval_string)
-		time_interval_string = temp = e_source_get_duped_property (source, "refresh");
+	time_interval_string = g_getenv ("GETQM_TIME_INTERVAL");
 
-	if (time_interval_string) {
+	if (time_interval_string != NULL)
 		time_interval = g_ascii_strtod (time_interval_string, NULL);
-		time_interval *= (60*1000);
-	}
+	else
+		time_interval = e_source_refresh_get_interval_minutes (refresh_extension);
 
-	g_free (temp);
+	time_interval *= (60*1000);
 
 	return time_interval;
 }
@@ -837,40 +842,6 @@ e_cal_backend_groupwise_refresh_calendar (ECalBackendGroupwise *cbgw)
 }
 #endif
 
-static gchar *
-form_uri (ESource *source)
-{
-	gchar *uri;
-	const gchar *port;
-	gchar *formed_uri;
-	const gchar *use_ssl;
-
-	EUri *parsed_uri;
-
-	uri = e_source_get_uri (source);
-	if (uri == NULL)
-		return NULL;
-
-	parsed_uri = e_uri_new (uri);
-	if (parsed_uri == NULL)
-		return NULL;
-
-	port = e_source_get_property (source, "port");
-	if (port == NULL)
-		port = "7191";
-	use_ssl = e_source_get_property (source, "use_ssl");
-
-	if (use_ssl && !g_str_equal (use_ssl, "never"))
-		formed_uri = g_strconcat ("https://";, parsed_uri->host,":", port, "/soap", NULL );
-	else
-		formed_uri = g_strconcat ("http://";, parsed_uri->host,":", port, "/soap", NULL );
-
-	g_free (uri);
-	e_uri_free (parsed_uri);
-	return formed_uri;
-
-}
-
 static gpointer
 cache_init (ECalBackendGroupwise *cbgw)
 {
@@ -948,7 +919,7 @@ set_container_id_with_count (ECalBackendGroupwise *cbgw, GError **perror)
 	case ICAL_VEVENT_COMPONENT:
 	case ICAL_VTODO_COMPONENT:
 	case ICAL_VJOURNAL_COMPONENT:
-		e_source_set_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
+		e_source_set_display_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
 		break;
 	default:
 		priv->container_id = NULL;
@@ -994,22 +965,32 @@ connect_to_server (ECalBackendGroupwise *cbgw, GError **perror)
 	gchar *real_uri;
 	ECalBackendGroupwisePrivate *priv;
 	ESource *source;
-	const gchar *use_ssl;
+	ESourceGroupwise *groupwise_extension;
+	ESourceSecurity *security_extension;
 	gchar *http_uri;
 	gint permissions;
 	GThread *thread;
 	GError *error = NULL;
-	gchar *parent_user = NULL;
 	icalcomponent_kind kind;
 	EGwConnectionErrors errors;
+	const gchar *parent_user = NULL;
+	const gchar *extension_name;
+	const gchar *security;
 	priv = cbgw->priv;
 
 	source = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
-	real_uri = NULL;
-	if (source)
-		real_uri = form_uri (source);
-	use_ssl = e_source_get_property (source, "use_ssl");
 
+	extension_name = E_SOURCE_EXTENSION_SECURITY;
+	security_extension = e_source_get_extension (source, extension_name);
+
+	extension_name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+	groupwise_extension = e_source_get_extension (source, extension_name);
+
+	security = e_source_security_get_method (security_extension);
+
+	parent_user = e_source_groupwise_get_parent_id_name (groupwise_extension);
+
+	real_uri = e_source_build_groupwise_uri (source);
 	if (!real_uri) {
 		g_propagate_error (perror, EDC_ERROR_EX (NoSuchCal, _("Invalid server URI")));
 		return;
@@ -1020,13 +1001,12 @@ connect_to_server (ECalBackendGroupwise *cbgw, GError **perror)
 
 	kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
 
-	parent_user = (gchar *) e_source_get_property (source, "parent_id_name");
 	/* create connection to server */
-	if (parent_user) {
+	if (parent_user != NULL) {
 		EGwConnection *cnc;
 		/* create connection to server */
 		cnc = e_gw_connection_new (real_uri, parent_user, priv->password);
-		if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) {
+		if (!E_IS_GW_CONNECTION(cnc) && g_strcmp0 (security, "when-possible") == 0) {
 			http_uri = g_strconcat ("http://";, real_uri + 8, NULL);
 			cnc = e_gw_connection_new (http_uri, parent_user, priv->password);
 			g_free (http_uri);
@@ -1059,7 +1039,7 @@ connect_to_server (ECalBackendGroupwise *cbgw, GError **perror)
 
 		priv->cnc = e_gw_connection_new_with_error_handler ( real_uri, priv->username, priv->password, &errors);
 
-		if (!E_IS_GW_CONNECTION(priv->cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) {
+		if (!E_IS_GW_CONNECTION(priv->cnc) && g_strcmp0 (security, "when-possible") == 0) {
 			http_uri = g_strconcat ("http://";, real_uri + 8, NULL);
 			priv->cnc = e_gw_connection_new_with_error_handler (http_uri, priv->username, priv->password, &errors);
 			g_free (http_uri);
@@ -1339,14 +1319,17 @@ e_cal_backend_groupwise_open (ECalBackendSync *backend, EDataCal *cal, gboolean
 	cbgw->priv->read_only = FALSE;
 
 	if (priv->mode == CAL_MODE_LOCAL) {
-		ESource *esource;
-		const gchar *display_contents = NULL;
+		ESource *source;
+		ESourceOffline *offline_extension;
+		const gchar *extension_name;
 
 		cbgw->priv->read_only = TRUE;
-		esource = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
-		display_contents = e_source_get_property (esource, "offline_sync");
+		source = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
+
+		extension_name = E_SOURCE_EXTENSION_OFFLINE;
+		offline_extension = e_source_get_extension (source, extension_name);
 
-		if (!display_contents || !g_str_equal (display_contents, "1")) {
+		if (!e_source_offline_get_stay_synchronized (offline_extension)) {
 			PRIV_UNLOCK (priv);
 			g_propagate_error (perror, EDC_ERROR (RepositoryOffline));
 			return;
@@ -1377,8 +1360,9 @@ e_cal_backend_groupwise_open (ECalBackendSync *backend, EDataCal *cal, gboolean
 	PRIV_UNLOCK (priv);
 }
 
-static void
-e_cal_backend_groupwise_remove (ECalBackendSync *backend, EDataCal *cal, GError **perror)
+/* is_loaded handler for the file backend */
+static gboolean
+e_cal_backend_groupwise_is_loaded (ECalBackend *backend)
 {
 	ECalBackendGroupwise *cbgw;
 	ECalBackendGroupwisePrivate *priv;
@@ -1386,18 +1370,12 @@ e_cal_backend_groupwise_remove (ECalBackendSync *backend, EDataCal *cal, GError
 	cbgw = E_CAL_BACKEND_GROUPWISE (backend);
 	priv = cbgw->priv;
 
-	PRIV_LOCK (priv);
-
-	/* remove the cache */
-	if (priv->store)
-		e_cal_backend_store_remove (priv->store);
-
-	PRIV_UNLOCK (priv);
+	return priv->store ? TRUE : FALSE;
 }
 
-/* is_loaded handler for the file backend */
 static gboolean
-e_cal_backend_groupwise_is_loaded (ECalBackend *backend)
+e_cal_backend_groupwise_remove (ECalBackend *backend,
+                                GError **error)
 {
 	ECalBackendGroupwise *cbgw;
 	ECalBackendGroupwisePrivate *priv;
@@ -1405,7 +1383,15 @@ e_cal_backend_groupwise_is_loaded (ECalBackend *backend)
 	cbgw = E_CAL_BACKEND_GROUPWISE (backend);
 	priv = cbgw->priv;
 
-	return priv->store ? TRUE : FALSE;
+	PRIV_LOCK (priv);
+
+	/* remove the cache */
+	if (priv->store)
+		e_cal_backend_store_remove (priv->store);
+
+	PRIV_UNLOCK (priv);
+
+	return TRUE;
 }
 
 /* is_remote handler for the file backend */
@@ -2788,7 +2774,6 @@ e_cal_backend_groupwise_class_init (ECalBackendGroupwiseClass *class)
 	sync_class->get_ldap_attribute_sync = e_cal_backend_groupwise_get_ldap_attribute;
 	sync_class->get_static_capabilities_sync = e_cal_backend_groupwise_get_static_capabilities;
 	sync_class->open_sync = e_cal_backend_groupwise_open;
-	sync_class->remove_sync = e_cal_backend_groupwise_remove;
 	sync_class->create_object_sync = e_cal_backend_groupwise_create_object;
 	sync_class->modify_object_sync = e_cal_backend_groupwise_modify_object;
 	sync_class->remove_object_sync = e_cal_backend_groupwise_remove_object;
@@ -2805,6 +2790,7 @@ e_cal_backend_groupwise_class_init (ECalBackendGroupwiseClass *class)
 	sync_class->get_changes_sync = e_cal_backend_groupwise_get_changes;
 
 	backend_class->is_loaded = e_cal_backend_groupwise_is_loaded;
+	backend_class->remove = e_cal_backend_groupwise_remove;
 	backend_class->start_query = e_cal_backend_groupwise_start_query;
 	backend_class->get_mode = e_cal_backend_groupwise_get_mode;
 	backend_class->set_mode = e_cal_backend_groupwise_set_mode;
diff --git a/servers/groupwise/Makefile.am b/servers/groupwise/Makefile.am
index b815620..25817e3 100644
--- a/servers/groupwise/Makefile.am
+++ b/servers/groupwise/Makefile.am
@@ -1,4 +1,5 @@
-noinst_PROGRAMS = create-account soap-test
+#noinst_PROGRAMS = create-account soap-test
+noinst_PROGRAMS = soap-test
 
 SERVERS_GROUPWISE_CPPFLAGS= \
 	-DG_LOG_DOMAIN=\"libegroupwise\"		\
@@ -7,12 +8,12 @@ SERVERS_GROUPWISE_CPPFLAGS= \
 	$(SOUP_CFLAGS)					\
 	$(E_DATA_SERVER_CFLAGS)
 
-create_account_CPPFLAGS = $(SERVERS_GROUPWISE_CPPFLAGS)
-create_account_SOURCES = create-account.c
-create_account_LDADD = 						\
-	$(top_builddir)/libedataserver/libedataserver-1.2.la	\
-	$(SOUP_LIBS)						\
-	$(E_DATA_SERVER_LIBS)
+#create_account_CPPFLAGS = $(SERVERS_GROUPWISE_CPPFLAGS)
+#create_account_SOURCES = create-account.c
+#create_account_LDADD = 						\
+#	$(top_builddir)/libedataserver/libedataserver-1.2.la	\
+#	$(SOUP_LIBS)						\
+#	$(E_DATA_SERVER_LIBS)
 
 soap_test_CPPFLAGS = $(SERVERS_GROUPWISE_CPPFLAGS)
 soap_test_SOURCES = soap-test.c
@@ -56,6 +57,8 @@ libegroupwise_1_2_la_SOURCES =			\
 	e-gw-recur-utils.h			\
 	e-gw-proxy.h				\
 	e-gw-proxy.c				\
+	e-source-groupwise.h			\
+	e-source-groupwise.c			\
 	soup-soap-message.c			\
 	soup-soap-response.c			\
 	build-timestamp.h
diff --git a/servers/groupwise/create-account.c b/servers/groupwise/create-account.c
index b308c87..279a7fd 100644
--- a/servers/groupwise/create-account.c
+++ b/servers/groupwise/create-account.c
@@ -2,22 +2,17 @@
 #include <config.h>
 #include <gconf/gconf-client.h>
 #include <glib.h>
-#include <libedataserver/e-source-list.h>
 
-static GConfClient *conf_client;
 static GMainLoop *main_loop;
 static gchar *arg_hostname, *arg_username, *arg_password;
 
 static void
 add_account (const gchar *conf_key, const gchar *hostname, const gchar *username)
 {
-	ESourceList *source_list;
 	ESourceGroup *group;
 	ESource *source;
 	gchar *group_name;
 
-	source_list = e_source_list_new_for_gconf (conf_client, conf_key);
-
 	group_name = g_strdup (hostname);
 	group = e_source_group_new (group_name, "groupwise://");
 	e_source_list_add_group (source_list, group, -1);
@@ -64,14 +59,11 @@ main (gint argc, gchar *argv[])
 	else
 		arg_password = NULL;
 
-	conf_client = gconf_client_get_default ();
-
 	main_loop = g_main_loop_new (NULL, TRUE);
 	g_idle_add ((GSourceFunc) idle_cb, NULL);
 	g_main_loop_run (main_loop);
 
 	/* terminate */
-	g_object_unref (conf_client);
 	g_main_loop_unref (main_loop);
 
 	return 0;
diff --git a/servers/groupwise/e-gw-connection.c b/servers/groupwise/e-gw-connection.c
index a4e281e..7ddebae 100644
--- a/servers/groupwise/e-gw-connection.c
+++ b/servers/groupwise/e-gw-connection.c
@@ -4043,7 +4043,7 @@ form_proxy_login_request (EGwConnection *cnc, const gchar * username, const gcha
 }
 
 EGwConnection *
-e_gw_connection_get_proxy_connection (EGwConnection *parent_cnc, gchar *username, const gchar *password, const gchar *proxy, gint  *permissions)
+e_gw_connection_get_proxy_connection (EGwConnection *parent_cnc, const gchar *username, const gchar *password, const gchar *proxy, gint  *permissions)
 {
 	EGwConnection *cnc;
 	SoupSoapMessage *msg;
diff --git a/servers/groupwise/e-gw-connection.h b/servers/groupwise/e-gw-connection.h
index d66bfab..15f648b 100644
--- a/servers/groupwise/e-gw-connection.h
+++ b/servers/groupwise/e-gw-connection.h
@@ -180,7 +180,7 @@ EGwConnectionStatus e_gw_connection_add_proxy (EGwConnection *cnc, proxyHandler
 EGwConnectionStatus e_gw_connection_remove_proxy (EGwConnection *cnc, proxyHandler *newProxy);
 EGwConnectionStatus e_gw_connection_modify_proxy (EGwConnection *cnc, proxyHandler *newProxy);
 EGwConnectionStatus e_gw_connection_get_proxy_list (EGwConnection *cnc, GList **proxy_info);
-EGwConnection *e_gw_connection_get_proxy_connection (EGwConnection *cnc1, gchar *username, const gchar *password, const gchar *proxy, int* permissions);
+EGwConnection *e_gw_connection_get_proxy_connection (EGwConnection *cnc1, const gchar *username, const gchar *password, const gchar *proxy, int* permissions);
 EGwConnectionStatus e_gw_connection_get_all_mail_uids (EGwConnection *cnc, const gchar *container, gint cursor, gboolean forward, gint count, const gchar *cursor_seek, GList **list);
 
 G_END_DECLS
diff --git a/servers/groupwise/e-source-groupwise.c b/servers/groupwise/e-source-groupwise.c
new file mode 100644
index 0000000..da39abf
--- /dev/null
+++ b/servers/groupwise/e-source-groupwise.c
@@ -0,0 +1,666 @@
+/*
+ * e-source-groupwise.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include "e-source-groupwise.h"
+
+#include <libedataserver/e-source-authentication.h>
+#include <libedataserver/e-source-security.h>
+
+#define E_SOURCE_GROUPWISE_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE \
+	((obj), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwisePrivate))
+
+struct _ESourceGroupwisePrivate {
+	gchar *book_name;
+	gchar *delivery_delay;
+	gchar *expiration;
+	gchar *parent_id_name;
+	gchar *priority;
+	gchar *reply_requested;
+	gchar *return_accepted;
+	gchar *return_completed;
+	gchar *return_declined;
+	gchar *return_opened;
+	gchar *status_tracking;
+};
+
+enum {
+	PROP_0,
+	PROP_BOOK_NAME,
+	PROP_DELIVERY_DELAY,
+	PROP_EXPIRATION,
+	PROP_PARENT_ID_NAME,
+	PROP_PRIORITY,
+	PROP_REPLY_REQUESTED,
+	PROP_RETURN_ACCEPTED,
+	PROP_RETURN_COMPLETED,
+	PROP_RETURN_DECLINED,
+	PROP_RETURN_OPENED,
+	PROP_STATUS_TRACKING
+};
+
+G_DEFINE_TYPE (
+	ESourceGroupwise,
+	e_source_groupwise,
+	E_TYPE_SOURCE_EXTENSION)
+
+static void
+source_groupwise_set_property (GObject *object,
+                               guint property_id,
+                               const GValue *value,
+                               GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_BOOK_NAME:
+			e_source_groupwise_set_book_name (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_DELIVERY_DELAY:
+			e_source_groupwise_set_delivery_delay (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_EXPIRATION:
+			e_source_groupwise_set_expiration (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_PARENT_ID_NAME:
+			e_source_groupwise_set_parent_id_name (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_PRIORITY:
+			e_source_groupwise_set_priority (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_REPLY_REQUESTED:
+			e_source_groupwise_set_reply_requested (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_RETURN_ACCEPTED:
+			e_source_groupwise_set_return_accepted (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_RETURN_COMPLETED:
+			e_source_groupwise_set_return_completed (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_RETURN_DECLINED:
+			e_source_groupwise_set_return_declined (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_RETURN_OPENED:
+			e_source_groupwise_set_return_opened (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_STATUS_TRACKING:
+			e_source_groupwise_set_status_tracking (
+				E_SOURCE_GROUPWISE (object),
+				g_value_get_string (value));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+source_groupwise_get_property (GObject *object,
+                               guint property_id,
+                               GValue *value,
+                               GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_BOOK_NAME:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_book_name (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_DELIVERY_DELAY:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_delivery_delay (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_EXPIRATION:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_expiration (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_PARENT_ID_NAME:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_parent_id_name (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_PRIORITY:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_priority (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_REPLY_REQUESTED:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_reply_requested (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_RETURN_ACCEPTED:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_return_accepted (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_RETURN_COMPLETED:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_return_completed (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_RETURN_DECLINED:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_return_declined (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_RETURN_OPENED:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_return_opened (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+
+		case PROP_STATUS_TRACKING:
+			g_value_set_string (
+				value,
+				e_source_groupwise_get_status_tracking (
+				E_SOURCE_GROUPWISE (object)));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+source_groupwise_finalize (GObject *object)
+{
+	ESourceGroupwisePrivate *priv;
+
+	priv = E_SOURCE_GROUPWISE_GET_PRIVATE (object);
+
+	g_free (priv->book_name);
+	g_free (priv->delivery_delay);
+	g_free (priv->expiration);
+	g_free (priv->parent_id_name);
+	g_free (priv->priority);
+	g_free (priv->reply_requested);
+	g_free (priv->return_accepted);
+	g_free (priv->return_completed);
+	g_free (priv->return_declined);
+	g_free (priv->return_opened);
+	g_free (priv->status_tracking);
+
+	/* Chain up to parent's finalize() method. */
+	G_OBJECT_CLASS (e_source_groupwise_parent_class)->finalize (object);
+}
+
+static void
+e_source_groupwise_class_init (ESourceGroupwiseClass *class)
+{
+	GObjectClass *object_class;
+	ESourceExtensionClass *extension_class;
+
+	g_type_class_add_private (class, sizeof (ESourceGroupwisePrivate));
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->set_property = source_groupwise_set_property;
+	object_class->get_property = source_groupwise_get_property;
+	object_class->finalize = source_groupwise_finalize;
+
+	extension_class = E_SOURCE_EXTENSION_CLASS (class);
+	extension_class->name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+
+	g_object_class_install_property (
+		object_class,
+		PROP_BOOK_NAME,
+		g_param_spec_string (
+			"book-name",
+			"Book Name",
+			"The name of the EBook",
+			NULL,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_DELIVERY_DELAY,
+		g_param_spec_string (
+			"delivery-delay",
+			"Delivery Delay",
+			"Delivery delay",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_EXPIRATION,
+		g_param_spec_string (
+			"expiration",
+			"Expiration",
+			"Expiration",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_PARENT_ID_NAME,
+		g_param_spec_string (
+			"parent-id-name",
+			"Parent ID Name",
+			"Parent ID name",
+			NULL,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_PRIORITY,
+		g_param_spec_string (
+			"priority",
+			"Priority",
+			"Priority",
+			"undefined",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_REPLY_REQUESTED,
+		g_param_spec_string (
+			"reply-requested",
+			"Reply Requested",
+			"Reply requested",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_RETURN_ACCEPTED,
+		g_param_spec_string (
+			"return-accepted",
+			"Return Accepted",
+			"Return accepted",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_RETURN_COMPLETED,
+		g_param_spec_string (
+			"return-completed",
+			"Return Completed",
+			"Return completed",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_RETURN_DECLINED,
+		g_param_spec_string (
+			"return-declined",
+			"Return Declined",
+			"Return declined",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_RETURN_OPENED,
+		g_param_spec_string (
+			"return-opened",
+			"Return Opened",
+			"Return opened",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_STATUS_TRACKING,
+		g_param_spec_string (
+			"status-tracking",
+			"Status Tracking",
+			"Status tracking",
+			"none",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+}
+
+static void
+e_source_groupwise_init (ESourceGroupwise *extension)
+{
+	extension->priv = E_SOURCE_GROUPWISE_GET_PRIVATE (extension);
+}
+
+const gchar *
+e_source_groupwise_get_book_name (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->book_name;
+}
+
+void
+e_source_groupwise_set_book_name (ESourceGroupwise *extension,
+                                  const gchar *book_name)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->book_name);
+	extension->priv->book_name = g_strdup (book_name);
+
+	g_object_notify (G_OBJECT (extension), "book-name");
+}
+
+const gchar *
+e_source_groupwise_get_delivery_delay (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->delivery_delay;
+}
+
+void
+e_source_groupwise_set_delivery_delay (ESourceGroupwise *extension,
+                                       const gchar *delivery_delay)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->delivery_delay);
+	extension->priv->delivery_delay = g_strdup (delivery_delay);
+
+	g_object_notify (G_OBJECT (extension), "delivery-delay");
+}
+
+const gchar *
+e_source_groupwise_get_expiration (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->expiration;
+}
+
+void
+e_source_groupwise_set_expiration (ESourceGroupwise *extension,
+                                   const gchar *expiration)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->expiration);
+	extension->priv->expiration = g_strdup (expiration);
+
+	g_object_notify (G_OBJECT (extension), "expiration");
+}
+
+const gchar *
+e_source_groupwise_get_parent_id_name (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->parent_id_name;
+}
+
+void
+e_source_groupwise_set_parent_id_name (ESourceGroupwise *extension,
+                                       const gchar *parent_id_name)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->parent_id_name);
+	extension->priv->parent_id_name = g_strdup (parent_id_name);
+
+	g_object_notify (G_OBJECT (extension), "parent-id-name");
+}
+
+const gchar *
+e_source_groupwise_get_priority (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->priority;
+}
+
+void
+e_source_groupwise_set_priority (ESourceGroupwise *extension,
+                                 const gchar *priority)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->priority);
+	extension->priv->priority = g_strdup (priority);
+
+	g_object_notify (G_OBJECT (extension), "priority");
+}
+
+const gchar *
+e_source_groupwise_get_reply_requested (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->reply_requested;
+}
+
+void
+e_source_groupwise_set_reply_requested (ESourceGroupwise *extension,
+                                        const gchar *reply_requested)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->reply_requested);
+	extension->priv->reply_requested = g_strdup (reply_requested);
+
+	g_object_notify (G_OBJECT (extension), "reply-requested");
+}
+
+const gchar *
+e_source_groupwise_get_return_accepted (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->return_accepted;
+}
+
+void
+e_source_groupwise_set_return_accepted (ESourceGroupwise *extension,
+                                        const gchar *return_accepted)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->return_accepted);
+	extension->priv->return_accepted = g_strdup (return_accepted);
+
+	g_object_notify (G_OBJECT (extension), "return-accepted");
+}
+
+const gchar *
+e_source_groupwise_get_return_completed (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->return_completed;
+}
+
+void
+e_source_groupwise_set_return_completed (ESourceGroupwise *extension,
+                                         const gchar *return_completed)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->return_completed);
+	extension->priv->return_completed = g_strdup (return_completed);
+
+	g_object_notify (G_OBJECT (extension), "return-completed");
+}
+
+const gchar *
+e_source_groupwise_get_return_declined (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->return_declined;
+}
+
+void
+e_source_groupwise_set_return_declined (ESourceGroupwise *extension,
+                                        const gchar *return_declined)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->return_declined);
+	extension->priv->return_declined = g_strdup (return_declined);
+
+	g_object_notify (G_OBJECT (extension), "return-declined");
+}
+
+const gchar *
+e_source_groupwise_get_return_opened (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->return_opened;
+}
+
+void
+e_source_groupwise_set_return_opened (ESourceGroupwise *extension,
+                                      const gchar *return_opened)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->return_opened);
+	extension->priv->return_opened = g_strdup (return_opened);
+
+	g_object_notify (G_OBJECT (extension), "return-opened");
+}
+
+const gchar *
+e_source_groupwise_get_status_tracking (ESourceGroupwise *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+	return extension->priv->status_tracking;
+}
+
+void
+e_source_groupwise_set_status_tracking (ESourceGroupwise *extension,
+                                        const gchar *status_tracking)
+{
+	g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+	g_free (extension->priv->status_tracking);
+	extension->priv->status_tracking = g_strdup (status_tracking);
+
+	g_object_notify (G_OBJECT (extension), "status-tracking");
+}
+
+gchar *
+e_source_build_groupwise_uri (ESource *source)
+{
+	ESourceAuthentication *auth_extension;
+	ESourceSecurity *security_extension;
+	gboolean secure_connection;
+	const gchar *extension_name;
+	const gchar *host;
+	guint16 port;
+	gchar *uri;
+
+	g_return_val_if_fail (E_IS_SOURCE (source), NULL);
+
+	extension_name = E_SOURCE_EXTENSION_AUTHENTICATION;
+	auth_extension = e_source_get_extension (source, extension_name);
+
+	extension_name = E_SOURCE_EXTENSION_SECURITY;
+	security_extension = e_source_get_extension (source, extension_name);
+
+	host = e_source_authentication_get_host (auth_extension);
+	port = e_source_authentication_get_port (auth_extension);
+
+	secure_connection = e_source_security_get_secure (security_extension);
+
+	if (secure_connection)
+		uri = g_strdup_printf ("https://%s:%d/soap";, host, port);
+	else
+		uri = g_strdup_printf ("http://%s:%d/soap";, host, port);
+
+	return uri;
+}
diff --git a/servers/groupwise/e-source-groupwise.h b/servers/groupwise/e-source-groupwise.h
new file mode 100644
index 0000000..f2246eb
--- /dev/null
+++ b/servers/groupwise/e-source-groupwise.h
@@ -0,0 +1,119 @@
+/*
+ * e-source-groupwise.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#ifndef E_SOURCE_GROUPWISE_H
+#define E_SOURCE_GROUPWISE_H
+
+#include <libedataserver/e-source-extension.h>
+
+/* Standard GObject macros */
+#define E_TYPE_SOURCE_GROUPWISE \
+	(e_source_groupwise_get_type ())
+#define E_SOURCE_GROUPWISE(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwise))
+#define E_SOURCE_GROUPWISE_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((cls), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwiseClass))
+#define E_IS_SOURCE_GROUPWISE(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), E_TYPE_SOURCE_GROUPWISE))
+#define E_IS_SOURCE_GROUPWISE_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), E_TYPE_SOURCE_GROUPWISE))
+#define E_SOURCE_GROUPWISE_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwiseClass))
+
+#define E_SOURCE_EXTENSION_GROUPWISE_BACKEND "GroupWise Backend"
+
+G_BEGIN_DECLS
+
+typedef struct _ESourceGroupwise ESourceGroupwise;
+typedef struct _ESourceGroupwiseClass ESourceGroupwiseClass;
+typedef struct _ESourceGroupwisePrivate ESourceGroupwisePrivate;
+
+struct _ESourceGroupwise {
+	ESourceExtension parent;
+	ESourceGroupwisePrivate *priv;
+};
+
+struct _ESourceGroupwiseClass {
+	ESourceExtensionClass parent_class;
+};
+
+GType		e_source_groupwise_get_type	(void);
+const gchar *	e_source_groupwise_get_book_name
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_book_name
+						(ESourceGroupwise *extension,
+						 const gchar *book_name);
+const gchar *	e_source_groupwise_get_delivery_delay
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_delivery_delay
+						(ESourceGroupwise *extension,
+						 const gchar *delivery_delay);
+const gchar *	e_source_groupwise_get_expiration
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_expiration
+						(ESourceGroupwise *extension,
+						 const gchar *expiration);
+const gchar *	e_source_groupwise_get_parent_id_name
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_parent_id_name
+						(ESourceGroupwise *extension,
+						 const gchar *parent_id_name);
+const gchar *	e_source_groupwise_get_priority	(ESourceGroupwise *extension);
+void		e_source_groupwise_set_priority	(ESourceGroupwise *extension,
+						 const gchar *priority);
+const gchar *	e_source_groupwise_get_reply_requested
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_reply_requested
+						(ESourceGroupwise *extension,
+						 const gchar *reply_requested);
+const gchar *	e_source_groupwise_get_return_accepted
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_return_accepted
+						(ESourceGroupwise *extension,
+						 const gchar *return_accepted);
+const gchar *	e_source_groupwise_get_return_completed
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_return_completed
+						(ESourceGroupwise *extension,
+						 const gchar *return_completed);
+const gchar *	e_source_groupwise_get_return_declined
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_return_declined
+						(ESourceGroupwise *extension,
+						 const gchar *return_declined);
+const gchar *	e_source_groupwise_get_return_opened
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_return_opened
+						(ESourceGroupwise *extension,
+						 const gchar *return_opened);
+const gchar *	e_source_groupwise_get_status_tracking
+						(ESourceGroupwise *extension);
+void		e_source_groupwise_set_status_tracking
+						(ESourceGroupwise *extension,
+						 const gchar *status_tracking);
+
+gchar *		e_source_build_groupwise_uri	(ESource *source);
+
+G_END_DECLS
+
+#endif /* E_SOURCE_LDAP_H */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]