1 #include "oils_event.h"
2 #include <libxml/parser.h>
3 #include <libxml/tree.h>
4 #include "opensrf/osrf_settings.h"
6 osrfHash* __oilsEventEvents = NULL;
8 oilsEvent* oilsNewEvent( char* event ) {
9 if(!event) return NULL;
10 osrfLogInfo(OSRF_LOG_MARK, "Creating new event: %s", event);
11 if(!__oilsEventEvents) _oilsEventParseEvents();
12 oilsEvent* evt = (oilsEvent*) safe_malloc(sizeof(oilsEvent));
13 evt->event = strdup(event);
18 oilsEvent* oilsNewEvent2( char* event, jsonObject* payload ) {
19 oilsEvent* evt = oilsNewEvent(event);
20 oilsEventSetPayload(evt, payload);
24 oilsEvent* oilsNewEvent3( char* event, char* perm, int permloc ) {
25 oilsEvent* evt = oilsNewEvent(event);
26 oilsEventSetPermission( evt, perm, permloc );
30 oilsEvent* oilsNewEvent4( char* event, char* perm, int permloc, jsonObject* payload ) {
31 oilsEvent* evt = oilsNewEvent3( event, perm, permloc );
32 if(evt) oilsEventSetPayload( evt, payload );
36 void oilsEventSetPermission( oilsEvent* event, char* perm, int permloc ) {
37 if(!(event && perm)) return;
38 event->perm = strdup(perm);
39 event->permloc = permloc;
42 void oilsEventSetPayload( oilsEvent* event, jsonObject* payload ) {
43 if(!(event && payload)) return;
44 event->payload = jsonObjectClone(payload);
48 void oilsEventFree( oilsEvent* event ) {
51 if(event->json) jsonObjectFree(event->json);
52 else jsonObjectFree(event->payload);
57 jsonObject* oilsEventToJSON( oilsEvent* event ) {
58 if(!event) return NULL;
59 char* code = osrfHashGet( __oilsEventEvents, event->event );
62 osrfLogError(OSRF_LOG_MARK, "No such event name: %s", event->event );
66 jsonObject* json = jsonNewObject(NULL);
67 jsonObjectSetKey( json, "ilsevent", jsonNewNumberObject(atoi(code)) );
68 jsonObjectSetKey( json, "textcode", jsonNewObject(event->event) );
70 if(event->perm) jsonObjectSetKey( json, "ilsperm", jsonNewObject(event->perm) );
71 if(event->permloc != -1) jsonObjectSetKey( json, "ilspermloc", jsonNewNumberObject(event->permloc) );
72 if(event->payload) jsonObjectSetKey( json, "payload", event->payload );
78 void _oilsEventParseEvents() {
80 char* xml = osrf_settings_host_value("/ils_events");
83 osrfLogError(OSRF_LOG_MARK, "Unable to find ILS Events file: %s", xml);
87 xmlDocPtr doc = xmlParseFile(xml);
90 __oilsEventEvents = osrfNewHash();
93 xmlNodePtr root = xmlDocGetRootElement(doc);
95 xmlNodePtr child = root->children;
97 if( !strcmp((char*) child->name, "event") ) {
98 xmlChar* code = xmlGetProp( child, BAD_CAST "code");
99 xmlChar* textcode = xmlGetProp( child, BAD_CAST "textcode");
100 if( code && textcode ) {
101 osrfHashSet( __oilsEventEvents, code, textcode );
110 if(!success) osrfLogError(OSRF_LOG_MARK, " ! Unable to parse events file: %s", xml );