]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/c-apps/oils_event.c
Added additional param to all the osrfLog* calls which mark
[Evergreen.git] / Open-ILS / src / c-apps / oils_event.c
1 #include "oils_event.h"
2 #include <libxml/parser.h>
3 #include <libxml/tree.h>
4 #include "opensrf/osrf_settings.h"
5
6 osrfHash* __oilsEventEvents = NULL;
7
8 oilsEvent* oilsNewEvent( char* event ) {
9         if(!event) return NULL;
10         if(!__oilsEventEvents) _oilsEventParseEvents();
11         oilsEvent* evt =  (oilsEvent*) safe_malloc(sizeof(oilsEvent));
12         evt->event = strdup(event);
13         evt->permloc = -1;
14         return evt;
15 }
16
17 oilsEvent* oilsNewEvent2( char* event, jsonObject* payload ) {
18         oilsEvent* evt = oilsNewEvent(event);
19         oilsEventSetPayload(evt, payload);
20         return evt;
21 }
22
23 oilsEvent* oilsNewEvent3( char* event, char* perm, int permloc ) {
24         oilsEvent* evt = oilsNewEvent(event);
25         oilsEventSetPermission( evt, perm, permloc );
26         return evt;
27 }
28
29 oilsEvent* oilsNewEvent4( char* event, char* perm, int permloc, jsonObject* payload ) {
30         oilsEvent* evt = oilsNewEvent3( event, perm, permloc );
31         if(evt) oilsEventSetPayload( evt, payload );
32         return evt;
33 }
34
35 void oilsEventSetPermission( oilsEvent* event, char* perm, int permloc ) {
36         if(!(event && perm)) return;
37         event->perm = strdup(perm);
38         event->permloc = permloc;
39 }
40
41 void oilsEventSetPayload( oilsEvent* event, jsonObject* payload ) {
42         if(!(event && payload)) return;
43         event->payload = jsonObjectClone(payload);
44 }
45
46
47 void oilsEventFree( oilsEvent* event ) {
48         if(!event) return;
49         free(event->perm);
50         if(event->json) jsonObjectFree(event->json);
51         else jsonObjectFree(event->payload);
52         free(event);
53 }
54
55
56 jsonObject* oilsEventToJSON( oilsEvent* event ) {
57         if(!event) return NULL;
58         char* code = osrfHashGet( __oilsEventEvents, event->event );
59
60         if(!code) {
61                 osrfLogError(OSRF_LOG_MARK,  "No such event name: %s", event->event );
62                 return NULL;
63         }
64
65         jsonObject* json = jsonNewObject(NULL);
66         jsonObjectSetKey( json, "ilsevent", jsonNewNumberObject(atoi(code)) );
67         jsonObjectSetKey( json, "textcode", jsonNewObject(event->event) );
68
69         if(event->perm) jsonObjectSetKey( json, "ilsperm", jsonNewObject(event->perm) );
70         if(event->permloc != -1) jsonObjectSetKey( json, "ilspermloc", jsonNewNumberObject(event->permloc) );
71         if(event->payload) jsonObjectSetKey( json, "payload", event->payload );
72         event->json = json;
73         return json;
74 }
75
76
77 void _oilsEventParseEvents() {
78         
79         char* xml = osrf_settings_host_value("/ils_events");
80
81         if(!xml) {
82                 osrfLogError(OSRF_LOG_MARK, "Unable to find ILS Events file: %s", xml);
83                 return;
84         }
85
86         xmlDocPtr doc = xmlParseFile(xml);
87         free(xml);
88         int success = 0;
89         __oilsEventEvents = osrfNewHash();
90
91         if( doc ) {
92                 xmlNodePtr root = xmlDocGetRootElement(doc);
93                 if( root ) {
94                         xmlNodePtr child = root->children;
95                         while( child ) {
96                                 if( !strcmp((char*) child->name, "event") ) {
97                                         xmlChar* code = xmlGetProp( child, BAD_CAST "code");
98                                         xmlChar* textcode = xmlGetProp( child, BAD_CAST "textcode");
99                                         if( code && textcode ) {
100                                                 osrfHashSet( __oilsEventEvents, code, textcode );
101                                                 success = 1;
102                                                 osrfLogDebug(OSRF_LOG_MARK, "Loading OILS Event: %s => %s", 
103                                                                 textcode, osrfHashGet( __oilsEventEvents, textcode) );
104                                         }
105                                 }
106                                 child = child->next;
107                         }
108                 }
109         }
110
111         if(!success) osrfLogError(OSRF_LOG_MARK,  " ! Unable to parse events file: %s", xml );
112 }
113
114