]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/apachemods/fieldmapper_lookup-gen.pl
changed hold creation to make request_lib the ws_ou of the requestor - also added...
[Evergreen.git] / Open-ILS / src / apachemods / fieldmapper_lookup-gen.pl
1 #!/usr/bin/perl
2 use strict;
3 use lib qw(../perlmods/OpenILS/Utils/ ../../../OpenSRF/src/perlmods);
4
5 use Fieldmapper (IDL => '../../examples/fm_IDL.xml');  
6
7 my $map = {};
8 $map = $Fieldmapper::fieldmap unless ($@);
9
10 die $@ if ($@);
11
12
13 if(!$ARGV[0]) {
14         print "usage: $0 <source_file>\n";
15         exit;
16 }
17
18 warn "Generating fieldmapper-c code...\n";
19
20
21 print $ARGV[0] . "\n";
22
23 open(SOURCE, ">$ARGV[0]");
24
25 print SOURCE <<C;
26 #include "fieldmapper_lookup.h"
27
28
29 char * fm_pton(char * class, int pos) {
30         if (class == NULL) return NULL;
31 C
32
33
34 for my $object (keys %$map) {
35         my $short_name= $map->{$object}->{hint};
36         print SOURCE <<"        C";
37         else if (!strcmp(class, "$short_name")) {
38                 switch (pos) {
39         C
40         for my $field (keys %{$map->{$object}->{fields}}) {
41                 my $position = $map->{$object}->{fields}->{$field}->{position};
42                 print SOURCE <<"                C";
43                         case $position:
44                                 return strdup("$field");
45                                 break;
46                 C
47         }
48         print SOURCE "          }\n";
49         print SOURCE "  }\n";
50 }
51 print SOURCE <<C;
52         return NULL;
53 }
54
55 int isFieldmapper(char* class) {
56         if (class == NULL) return 0;
57 C
58
59 for my $object (keys %$map) {
60         my $short_name= $map->{$object}->{hint};
61         print SOURCE "  else if (!strcmp(class, \"$short_name\")) return 1;\n";
62 }
63 print SOURCE <<C;
64         return 0;
65 }
66
67 int fm_ntop(char* class, char* field) {
68         if (class == NULL) return -1;
69 C
70
71
72 for my $object (keys %$map) {
73         my $short_name= $map->{$object}->{hint};
74         print SOURCE "  else if (!strcmp(class, \"$short_name\")) {\n";
75         for my $field (keys %{$map->{$object}->{fields}}) {
76                 my $position = $map->{$object}->{fields}->{$field}->{position};
77                 print SOURCE "          if (!strcmp(field,\"$field\")) return $position;\n";
78         }
79         print SOURCE "  }\n"
80 }
81
82 print SOURCE "  return -1;\n}\n";
83
84
85
86 print SOURCE <<C;
87 static osrfList* __fm_classes = NULL;
88 osrfList* fm_classes() {
89         if(__fm_classes) return __fm_classes;
90         __fm_classes = osrfNewList();
91 C
92
93 for my $object (keys %$map) {
94         my $short_name= $map->{$object}->{hint};
95         $object =~ s/Fieldmapper:://o;
96         $object =~ s/::/./og;
97         print SOURCE "\tosrfListPush(__fm_classes, \"$short_name\");\n";
98         print SOURCE "\tosrfListPush(__fm_classes, \"$object\");\n";
99 }
100
101 print SOURCE <<C;
102         return __fm_classes;
103 }
104 C
105
106