b510a8aa4afa813422ffcec6ab3f7d207c39ed9c
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Event.pm
1 package OpenILS::Event;
2 use strict; use warnings;
3 use XML::LibXML;
4 use OpenSRF::Utils::SettingsClient;
5 use OpenSRF::Utils::Logger;
6 my $logger = "OpenSRF::Utils::Logger";
7
8
9 # Creates a new Event object.  
10 # The first param is the event name
11 # Following the first param is an optional hash of params:
12 #               perm => the name of the permission error for permimssion errors
13 #               permloc => the location of the permission error for permission errors
14 #               payload => the payload to be returned on successfull events
15
16
17 my $events = undef;
18 sub new {
19         my( $class, $event, %params ) = @_;
20
21         _load_events() unless $events;
22
23         if( $event ne 'SUCCESS' ) {
24                 $logger->info("Returning non-success event object: $event ");  
25         }
26
27         my $e = $events->{$event};
28         throw OpenSRF::EX 
29                 ("No event defined with textcode: $event") unless defined $e;
30
31         my( $m, $f, $l ) = caller(0);
32         my( $mm, $ff, $ll ) = caller(1);
33
34         return { ilsevent => $e, textcode => $event, 
35                 stacktrace => "$f:$l, $ff:$ll", %params };
36 }
37
38 sub _load_events {
39         my $settings_client = OpenSRF::Utils::SettingsClient->new();
40         my $eventsxml =  $settings_client->config_value( "ils_events" );
41
42         if(!$eventsxml) { 
43                 throw OpenSRF::EX ("No ils_events file found in settings config"); 
44         }
45
46         $logger->info("Loading events xml file $eventsxml");
47
48         my $doc = XML::LibXML->new->parse_file($eventsxml);
49
50         my @nodes = $doc->documentElement->findnodes('//event');
51         for my $node (@nodes) {
52                 $events->{$node->getAttribute('textcode')} = 
53                         $node->getAttribute('code');
54         }
55 }
56
57 1;