2 * corba-workbook-factory.c: CORBA Workbook factory.
5 * Miguel de Icaza (miguel@gnu.org)
9 #include <libgnorba/gnome-factory.h>
10 #include <libgnorba/gnorba.h>
15 #include "idl/Gnumeric.h"
17 #include "command-context-corba.h"
19 PortableServer_POA gnumeric_poa
;
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
;
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
));
49 return CORBA_Object_duplicate (workbook
->corba_server
, ev
);
51 return CORBA_OBJECT_NIL
;
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)
65 if (strcmp (obj_goad_id
, "GOAD_ID:GNOME:Gnumeric:Workbook:1.0") == 0)
73 WorkbookFactory_create_object (PortableServer_Servant servant
,
74 const CORBA_char
*goad_id
,
75 const GNOME_stringlist
*params
,
76 CORBA_Environment
*ev
)
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
,
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
;
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
);
122 return PortableServer_POA_servant_to_reference (poa
, wfs
, ev
);
126 * CORBA services bootstrap
129 _WorkbookFactory_init (CORBA_Environment
*ev
)
131 PortableServer_POAManager poa_manager
;
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
)
144 poa_manager
= PortableServer_POA__get_the_POAManager (gnumeric_poa
, ev
);
145 if (ev
->_major
!= CORBA_NO_EXCEPTION
)
148 PortableServer_POAManager_activate (poa_manager
, ev
);
149 if (ev
->_major
!= CORBA_NO_EXCEPTION
)
153 * Create our workbook factory
155 gnumeric_workbook_factory
= GNOME_Gnumeric_WorkbookFactory__create (gnumeric_poa
, ev
);
156 if (ev
->_major
!= CORBA_NO_EXCEPTION
)
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
);
178 WorkbookFactory_init (void)
180 CORBA_Environment ev
;
183 CORBA_exception_init (&ev
);
184 retval
= _WorkbookFactory_init (&ev
);
185 CORBA_exception_free (&ev
);