Revert, revert, try another thing
[gnumeric.git] / src / corba-workbook-factory.c
blobe879c7a598851e7ae18363445983513108b3719d
1 /*
2 * corba-workbook-factory.c: CORBA Workbook factory.
4 * Author:
5 * Miguel de Icaza (miguel@gnu.org)
6 */
8 #include <config.h>
9 #include <libgnorba/gnome-factory.h>
10 #include <libgnorba/gnorba.h>
11 #include <gnome.h>
12 #include "sheet.h"
13 #include "gnumeric.h"
14 #include "workbook.h"
15 #include "idl/Gnumeric.h"
16 #include "corba.h"
17 #include "command-context-corba.h"
19 PortableServer_POA gnumeric_poa;
21 typedef struct {
22 POA_GNOME_Gnumeric_WorkbookFactory servant;
23 PortableServer_POA poa;
24 } WorkbookFactoryServant;
26 /* The servant for the workbook factory */
27 static WorkbookFactoryServant workbook_factory_servant;
29 /* The workbook factory object */
30 static GNOME_Gnumeric_WorkbookFactory gnumeric_workbook_factory;
32 static PortableServer_ServantBase__epv gnumeric_workbook_factory_base_epv;
33 static POA_Bonobo_GenericFactory__epv gnumeric_workbook_generic_factory_epv;
34 static POA_GNOME_Gnumeric_WorkbookFactory__epv gnumeric_workbook_factory_epv;
35 static POA_GNOME_Gnumeric_WorkbookFactory__vepv gnumeric_workbook_factory_vepv;
37 static GNOME_Gnumeric_Workbook
38 WorkbookFactory_read (PortableServer_Servant servant, const CORBA_char * filename, CORBA_Environment * ev)
40 CommandContext *context;
41 Workbook *workbook;
43 context = command_context_corba (NULL);
44 workbook = workbook_read (context, filename);
45 gtk_widget_show (workbook->toplevel);
46 gtk_object_unref (GTK_OBJECT (context));
48 if (workbook)
49 return CORBA_Object_duplicate (workbook->corba_server, ev);
50 else
51 return CORBA_OBJECT_NIL;
54 static CORBA_boolean
55 WorkbookFactory_manufactures (PortableServer_Servant servant,
56 const CORBA_char * obj_goad_id,
57 CORBA_Environment * ev)
59 g_warning ("Request for: %s\n", obj_goad_id);
61 printf ("Getting: %s\n", obj_goad_id);
62 if (strcmp (obj_goad_id, "IDL:GNOME:Gnumeric:Workbook:1.0") == 0)
63 return CORBA_TRUE;
64 else {
65 if (strcmp (obj_goad_id, "GOAD_ID:GNOME:Gnumeric:Workbook:1.0") == 0)
66 return CORBA_TRUE;
67 else
68 return CORBA_FALSE;
72 static CORBA_Object
73 WorkbookFactory_create_object (PortableServer_Servant servant,
74 const CORBA_char *goad_id,
75 const GNOME_stringlist *params,
76 CORBA_Environment *ev)
78 Workbook *workbook;
80 if (strcmp (goad_id, "IDL:GNOME:Gnumeric:Workbook:1.0") != 0){
81 if (strcmp (goad_id, "GOADID:GNOME:Gnumeric:Workbook:1.0") != 0){
82 CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
83 ex_Bonobo_GenericFactory_CannotActivate,
84 NULL);
85 return CORBA_OBJECT_NIL;
89 workbook = workbook_new ();
91 return CORBA_Object_duplicate (workbook->corba_server, ev);
95 * Workbook factory server bootstrap
97 static GNOME_Gnumeric_WorkbookFactory
98 GNOME_Gnumeric_WorkbookFactory__create (PortableServer_POA poa, CORBA_Environment *ev)
100 WorkbookFactoryServant *wfs = &workbook_factory_servant;
101 PortableServer_ObjectId *objid;
104 * Set up our tables
106 gnumeric_workbook_factory_epv.read = WorkbookFactory_read;
107 gnumeric_workbook_generic_factory_epv.manufactures = WorkbookFactory_manufactures;
108 gnumeric_workbook_generic_factory_epv.create_object = WorkbookFactory_create_object;
110 gnumeric_workbook_factory_vepv.GNOME_Gnumeric_WorkbookFactory_epv =
111 &gnumeric_workbook_factory_epv;
112 gnumeric_workbook_factory_vepv.Bonobo_GenericFactory_epv =
113 &gnumeric_workbook_generic_factory_epv;
114 gnumeric_workbook_factory_vepv._base_epv =
115 &gnumeric_workbook_factory_base_epv;
117 wfs->servant.vepv = &gnumeric_workbook_factory_vepv;
118 POA_GNOME_Gnumeric_WorkbookFactory__init ((PortableServer_Servant) wfs, ev);
119 objid = PortableServer_POA_activate_object (poa, wfs, ev);
120 CORBA_free (objid);
122 return PortableServer_POA_servant_to_reference (poa, wfs, ev);
126 * CORBA services bootstrap
128 static gboolean
129 _WorkbookFactory_init (CORBA_Environment *ev)
131 PortableServer_POAManager poa_manager;
132 int v;
135 * Get the POA and create the server
137 gnumeric_poa = (PortableServer_POA)
138 CORBA_ORB_resolve_initial_references (
139 gnome_CORBA_ORB (), "RootPOA", ev);
141 if (ev->_major != CORBA_NO_EXCEPTION)
142 return FALSE;
144 poa_manager = PortableServer_POA__get_the_POAManager (gnumeric_poa, ev);
145 if (ev->_major != CORBA_NO_EXCEPTION)
146 return FALSE;
148 PortableServer_POAManager_activate (poa_manager, ev);
149 if (ev->_major != CORBA_NO_EXCEPTION)
150 return FALSE;
153 * Create our workbook factory
155 gnumeric_workbook_factory = GNOME_Gnumeric_WorkbookFactory__create (gnumeric_poa, ev);
156 if (ev->_major != CORBA_NO_EXCEPTION)
157 return FALSE;
160 * Register the server and see if it was already there
162 * The former is kept just for compatibilty reasons for some demo code
163 * that is floating around.
166 v = goad_server_register (CORBA_OBJECT_NIL, gnumeric_workbook_factory,
167 "IDL:GNOME:Gnumeric:WorkbookFactory:1.0", "object", ev);
169 v = goad_server_register (CORBA_OBJECT_NIL, gnumeric_workbook_factory,
170 "GOADID:GNOME:Gnumeric:WorkbookFactory:1.0", "object", ev);
171 if (v == 0)
172 return TRUE;
174 return FALSE;
177 gboolean
178 WorkbookFactory_init (void)
180 CORBA_Environment ev;
181 gboolean retval;
183 CORBA_exception_init (&ev);
184 retval = _WorkbookFactory_init (&ev);
185 CORBA_exception_free (&ev);
187 return retval;