]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Storage.pm
more work on the storage server
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Storage.pm
1 package OpenILS::Application::Storage;
2 use OpenSRF::Application;
3 use base qw/OpenSRF::Application/;
4
5 use OpenSRF::EX qw/:try/;
6 use OpenSRF::Utils::Logger qw/:level/;
7
8 my $log = "OpenSRF::Utils::Logger";
9
10 sub DESTROY {};
11
12 our $_db_driver;
13 our $_db_params;
14
15 sub driver {
16         return $_db_driver;
17 }
18
19 sub initialize {
20         return $_db_driver if (defined $_db_driver);
21         my $conf = OpenSRF::Utils::SettingsClient->new;
22
23         $log->debug('Initializing ' . __PACKAGE__ . '...', DEBUG);
24
25         my $driver = $conf->get_value( apps => storage => app_settings => databases => 'driver');
26         my $_db_params = $conf->get_value( apps => storage => app_settings => databases => 'database');
27
28         $_db_driver = "OpenILS::App::Storage::Driver::$driver";
29
30
31         eval "use $_db_driver;";
32         throw OpenILS::EX::Config ( "Can't load $_db_driver!  :  $@" ) if ($@);
33
34         $_db_driver->initialize if ($_db_driver->can('initialize'));
35
36         push @OpenILS::Application::Storage::CDBI::ISA, $_db_driver;
37
38 }
39
40 sub child_init {
41
42         $log->debug('Running child_init for ' . __PACKAGE__ . '...', DEBUG);
43         $_db_driver->child_init if ($_db_driver->can('child_init'));
44         
45         return 1 if ($_db_driver->db_Main($_db_params));
46         return 0;
47 }
48
49 sub getBiblioFieldMaps {
50         my $self = shift;
51         my $client = shift;
52         my $id = shift;
53         $log->debug(" Executing [".$self->method."] as [".$self->api_name."]",INTERNAL);
54         
55         if ($self->api_name =~ /by_class$/) {
56                 if ($id) {
57                         return _cdbi2Hash( config::metarecord_field_map->search( fieldclass => $id ) );
58                 } else {
59                         throw OpenSRF::EX::InvalidArg ('Please give me a Class to look up!');
60                 }
61         } else {
62                 if ($id) {
63                         return _cdbi2Hash( config::metarecord_field_map->retrieve( $id ) );
64                 } else {
65                         return _cdbi_list2AoH( config::metarecord_field_map->retrieve_all );
66                 }
67         }
68 }       
69 __PACKAGE__->register_method(
70         method          => 'getBiblioFieldMaps',
71         api_name        => 'open-ils.storage.config.metarecord_field',
72         argc            => 1,
73 );
74 __PACKAGE__->register_method(
75         method          => 'getBiblioFieldMaps',
76         api_name        => 'open-ils.storage.config.metarecord_field.list',
77         argc            => 0,
78 );
79 __PACKAGE__->register_method(
80         method          => 'getBiblioFieldMaps',
81         api_name        => 'open-ils.storage.config.metarecord_field.list.by_class',
82         argc            => 1,
83 );
84
85
86 sub getBiblioFieldMapClasses {
87         my $self = shift;
88         my $client = shift;
89         my $id = shift;
90
91         $log->debug(" Executing [".$self->method."] as [".$self->api_name."]",INTERNAL);
92
93         if ($id) {
94                 return _cdbi2Hash( config::metarecord_field_class_map->retrieve( $id ) );
95         } else {
96                 return _cdbi_list2AoH( config::metarecord_field_class_map->retrieve_all );
97         }
98 }       
99 __PACKAGE__->register_method(
100         method          => 'getBiblioFieldMapClasses',
101         api_name        => 'open-ils.storage.config.metarecord_field_class',
102         argc            => 1,
103 );
104 __PACKAGE__->register_method(
105         method          => 'getBiblioFieldMapClasses',
106         api_name        => 'open-ils.storage.config.metarecord_field_class.list',
107         argc            => 0,
108 );
109
110 sub _cdbi2Hash {
111         my $obj = shift;
112         return { map { ( $_ => $obj->$_ ) } $obj->columns };
113 }
114
115 sub _cdbi_list2AoH {
116         my @objs = @_;
117         return [ map { _cdbi2oilsHash($_) } @objs ];
118 }
119
120 #-------------------------------------------------------------------------------
121 package OpenILS::App::Storage::CDBI;
122 use vars qw/@ISA/;
123
124 1;