1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
5 * Chris Toshok (toshok@ximian.com)
7 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
13 #include "e-cal-backend.h"
14 #include "e-cal-backend-factory.h"
15 #include "e-data-cal-factory.h"
17 G_DEFINE_ABSTRACT_TYPE (
19 e_cal_backend_factory,
20 E_TYPE_BACKEND_FACTORY)
22 static EDataCalFactory *
23 cal_backend_factory_get_data_factory (EBackendFactory *factory)
25 EExtensible *extensible;
27 extensible = e_extension_get_extensible (E_EXTENSION (factory));
29 return E_DATA_CAL_FACTORY (extensible);
33 cal_backend_factory_get_hash_key (EBackendFactory *factory)
35 ECalBackendFactoryClass *class;
36 const gchar *component_name;
40 class = E_CAL_BACKEND_FACTORY_GET_CLASS (factory);
41 g_return_val_if_fail (class->factory_name != NULL, NULL);
43 switch (class->component_kind) {
44 case ICAL_VEVENT_COMPONENT:
45 component_name = "VEVENT";
47 case ICAL_VTODO_COMPONENT:
48 component_name = "VTODO";
50 case ICAL_VJOURNAL_COMPONENT:
51 component_name = "VJOURNAL";
54 g_return_val_if_reached (NULL);
57 /* Hash Key: FACTORY_NAME ':' COMPONENT_NAME */
58 length = strlen (class->factory_name) + strlen (component_name) + 2;
59 hash_key = g_alloca (length);
61 hash_key, length, "%s:%s",
62 class->factory_name, component_name);
64 return g_intern_string (hash_key);
68 cal_backend_factory_new_backend (EBackendFactory *factory,
71 ECalBackendFactoryClass *class;
72 EDataCalFactory *data_factory;
73 ESourceRegistry *registry;
75 class = E_CAL_BACKEND_FACTORY_GET_CLASS (factory);
76 g_return_val_if_fail (g_type_is_a (
77 class->backend_type, E_TYPE_CAL_BACKEND), NULL);
79 data_factory = cal_backend_factory_get_data_factory (factory);
80 registry = e_data_cal_factory_get_registry (data_factory);
84 "kind", class->component_kind,
86 "source", source, NULL);
90 e_cal_backend_factory_class_init (ECalBackendFactoryClass *class)
92 EExtensionClass *extension_class;
93 EBackendFactoryClass *factory_class;
95 extension_class = E_EXTENSION_CLASS (class);
96 extension_class->extensible_type = E_TYPE_DATA_CAL_FACTORY;
98 factory_class = E_BACKEND_FACTORY_CLASS (class);
99 factory_class->get_hash_key = cal_backend_factory_get_hash_key;
100 factory_class->new_backend = cal_backend_factory_new_backend;
104 e_cal_backend_factory_init (ECalBackendFactory *factory)