1 #include "oils_event.h"
2 #include <libxml/parser.h>
3 #include <libxml/tree.h>
5 osrfHash* __oilsEventEvents = NULL;
7 oilsEvent* oilsNewEvent( char* event ) {
8 if(!event) return NULL;
9 if(!__oilsEventEvents) _oilsEventParseEvents();
10 oilsEvent* evt = (oilsEvent*) safe_malloc(sizeof(oilsEvent));
11 evt->event = strdup(event);
16 oilsEvent* oilsNewEvent2( char* event, jsonObject* payload ) {
17 oilsEvent* evt = oilsNewEvent(event);
18 oilsEventSetPayload(evt, payload);
22 oilsEvent* oilsNewEvent3( char* event, char* perm, int permloc ) {
23 oilsEvent* evt = oilsNewEvent(event);
24 oilsEventSetPermission( evt, perm, permloc );
28 oilsEvent* oilsNewEvent4( char* event, char* perm, int permloc, jsonObject* payload ) {
29 oilsEvent* evt = oilsNewEvent3( event, perm, permloc );
30 if(evt) oilsEventSetPayload( evt, payload );
34 void oilsEventSetPermission( oilsEvent* event, char* perm, int permloc ) {
35 if(!(event && perm)) return;
36 event->perm = strdup(perm);
37 event->permloc = permloc;
40 void oilsEventSetPayload( oilsEvent* event, jsonObject* payload ) {
41 if(!(event && payload)) return;
42 event->payload = jsonObjectClone(payload);
46 void oilsEventFree( oilsEvent* event ) {
49 if(event->json) jsonObjectFree(event->json);
50 else jsonObjectFree(event->payload);
55 jsonObject* oilsEventToJSON( oilsEvent* event ) {
56 if(!event) return NULL;
57 char* code = osrfHashGet( __oilsEventEvents, event->event );
60 osrfLogError( "No such event name: %s", event->event );
64 jsonObject* json = jsonNewObject(NULL);
65 jsonObjectSetKey( json, "ilsevent", jsonNewNumberObject(atoi(code)) );
66 jsonObjectSetKey( json, "textcode", jsonNewObject(event->event) );
68 if(event->perm) jsonObjectSetKey( json, "ilsperm", jsonNewObject(event->perm) );
69 if(event->permloc != -1) jsonObjectSetKey( json, "ilspermloc", jsonNewNumberObject(event->permloc) );
70 if(event->payload) jsonObjectSetKey( json, "payload", event->payload );
76 void _oilsEventParseEvents() {
78 char* xml = "/openils/var/data/ils_events.xml"; /* get me from the settings client */
80 xmlDocPtr doc = xmlParseFile(xml);
82 __oilsEventEvents = osrfNewHash();
85 xmlNodePtr root = xmlDocGetRootElement(doc);
87 xmlNodePtr child = root->children;
88 //osrfLogDebug("Node Name: %s", child->name);
90 if( !strcmp((char*) child->name, "event") ) {
91 xmlChar* code = xmlGetProp( child, BAD_CAST "code");
92 xmlChar* textcode = xmlGetProp( child, BAD_CAST "textcode");
93 if( code && textcode ) {
94 osrfHashSet( __oilsEventEvents, code, textcode );
96 osrfLogDebug("Loading OILS Event: %s => %s",
97 textcode, osrfHashGet( __oilsEventEvents, textcode) );
105 if(!success) osrfLogError( " ! Unable to parse events file: %s", xml );