diff options
author | Arturo Espinosa <unammx@src.gnome.org> | 1999-07-28 23:12:12 +0800 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1999-07-28 23:12:12 +0800 |
commit | c2c3a8ce6a51126ce0a5f368801b9af33372fb79 (patch) | |
tree | 6849aed7ed360f6cf933e65c5fe3bab49d2591af /calendar/gui/corba-cal-factory.c | |
parent | e49e9cc1755266dade86ce33662ceff466f5ca07 (diff) | |
download | gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.tar gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.tar.gz gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.tar.bz2 gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.tar.lz gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.tar.xz gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.tar.zst gsoc2013-evolution-c2c3a8ce6a51126ce0a5f368801b9af33372fb79.zip |
Add the missing files -miguel
svn path=/trunk/; revision=1039
Diffstat (limited to 'calendar/gui/corba-cal-factory.c')
-rw-r--r-- | calendar/gui/corba-cal-factory.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/calendar/gui/corba-cal-factory.c b/calendar/gui/corba-cal-factory.c new file mode 100644 index 0000000000..49a2c5ac76 --- /dev/null +++ b/calendar/gui/corba-cal-factory.c @@ -0,0 +1,130 @@ +/* + * corba-cal-factory.c: Service that provides access to the calendar repositories. + * + * Author: + * Miguel de Icaza (miguel@gnu.org) + */ + +#include <config.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> +#include "gnome-cal.h" +#include "main.h" +#include "alarm.h" +#include "timeutil.h" +#include "../libversit/vcc.h" +#include <libgnorba/gnome-factory.h> +#include <libgnorba/gnorba.h> +#include "GnomeCal.h" +#include "corba-cal-factory.h" +#include "corba-cal.h" + +CORBA_ORB orb; +PortableServer_POA poa; +PortableServer_POAManager poa_manager; + +static POA_GNOME_GenericFactory__epv calendar_epv; +static POA_GNOME_GenericFactory__vepv calendar_vepv; + +/* + * Servant and Object Factory + */ +static POA_GNOME_GenericFactory calendar_servant; +static GNOME_GenericFactory calendar_factory; + +static CORBA_boolean +calendar_supports (PortableServer_Servant servant, + const CORBA_char * obj_goad_id, + CORBA_Environment * ev) +{ + if (strcmp (obj_goad_id, "IDL:GNOME:Calendar:Repository:1.0") == 0) + return CORBA_TRUE; + else + return CORBA_FALSE; +} + +static CORBA_Object +calendar_create_object (PortableServer_Servant servant, + const CORBA_char *goad_id, + const GNOME_stringlist *params, + CORBA_Environment *ev) +{ + GnomeCalendar *gcal; + struct stat s; + char *name; + + if (params->_length == 1) + name = params->_buffer [0]; + else + name = NULL; + + if (strcmp (goad_id, "IDL:GNOME:Calendar:Repository:1.0") != 0){ + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_GNOME_GenericFactory_CannotActivate, + NULL); + return CORBA_OBJECT_NIL; + } + + gcal = gnome_calendar_locate (name); + if (gcal != NULL) + return CORBA_Object_duplicate (gcal->cal->corba_server, ev); + + if (stat (name, &s) != 0){ + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_GNOME_GenericFactory_CannotActivate, + NULL); + return CORBA_OBJECT_NIL; + } + + gcal = new_calendar ("", name, NULL, NULL, FALSE); + + return CORBA_Object_duplicate (gcal->cal->corba_server, ev); +} + +void +init_corba_server (void) +{ + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + poa_manager = PortableServer_POA__get_the_POAManager (poa, &ev); + if (ev._major != CORBA_NO_EXCEPTION){ + g_warning ("Can not get the POA manager"); + CORBA_exception_free (&ev); + return; + } + + PortableServer_POAManager_activate (poa_manager, &ev); + + /* First create the locator for the repositories as a factory object */ + calendar_vepv.GNOME_GenericFactory_epv = &calendar_epv; + calendar_epv.supports = calendar_supports; + calendar_epv.create_object = calendar_create_object; + + calendar_servant.vepv = &calendar_vepv; + POA_GNOME_GenericFactory__init ((PortableServer_Servant) &calendar_servant, &ev); + CORBA_free (PortableServer_POA_activate_object ( + poa, (PortableServer_Servant)&calendar_servant, &ev)); + + calendar_factory = PortableServer_POA_servant_to_reference ( + poa, (PortableServer_Servant) &calendar_servant, &ev); + + goad_server_register ( + CORBA_OBJECT_NIL, calendar_factory, + "IDL:GNOME:Calendar:RepositoryLocator:1.0", "object", &ev); + CORBA_exception_free (&ev); +} + +void +unregister_calendar_services (void) +{ + CORBA_Environment ev; + + CORBA_exception_init (&ev); + goad_server_unregister ( + CORBA_OBJECT_NIL, + "IDL:GNOME:Calendar:RepositoryLocator:1.0", "object", &ev); + CORBA_exception_free (&ev); +} |