bug fixes after testing
[Evergreen.git] / Open-ILS / src / apachemods / fieldmapper_lookup-gen.pl
1 #!/usr/bin/perl
2 use strict;
3 use lib '../perlmods/';
4
5 my $map = {};
6 eval "
7         use lib '../perlmods/';
8         use lib '../../../OpenSRF/src/perlmods/';
9         use OpenILS::Utils::Fieldmapper;  
10 ";
11 $map = $Fieldmapper::fieldmap unless ($@);
12
13 die $@ if ($@);
14
15
16 if(!$ARGV[0]) {
17         print "usage: $0 <source_file>\n";
18         exit;
19 }
20
21 warn "Generating fieldmapper-c code...\n";
22
23
24 print $ARGV[0] . "\n";
25
26 open(SOURCE, ">$ARGV[0]");
27
28 print SOURCE <<C;
29 #include "fieldmapper_lookup.h"
30
31
32 char * fm_pton(char * class, int pos) {
33         if (class == NULL) return NULL;
34 C
35
36
37 for my $object (keys %$map) {
38         my $short_name= $map->{$object}->{hint};
39         print SOURCE <<"        C";
40         else if (!strcmp(class, "$short_name")) {
41                 switch (pos) {
42         C
43         for my $field (keys %{$map->{$object}->{fields}}) {
44                 my $position = $map->{$object}->{fields}->{$field}->{position};
45                 print SOURCE <<"                C";
46                         case $position:
47                                 return strdup("$field");
48                                 break;
49                 C
50         }
51         print SOURCE "          }\n";
52         print SOURCE "  }\n";
53 }
54 print SOURCE <<C;
55         return strdup("datum");
56 }
57
58 int isFieldmapper(char* class) {
59         if (class == NULL) return 0;
60 C
61
62 for my $object (keys %$map) {
63         my $short_name= $map->{$object}->{hint};
64         print SOURCE "  else if (!strcmp(class, \"$short_name\")) return 1;\n";
65 }
66 print SOURCE <<C;
67         return 0;
68 }
69
70 int fm_ntop(char* class, char* field) {
71         if (class == NULL) return -1;
72 C
73
74
75 for my $object (keys %$map) {
76         my $short_name= $map->{$object}->{hint};
77         print SOURCE "  else if (!strcmp(class, \"$short_name\")) {\n";
78         for my $field (keys %{$map->{$object}->{fields}}) {
79                 my $position = $map->{$object}->{fields}->{$field}->{position};
80                 print SOURCE "          if (!strcmp(field,\"$field\")) return $position;\n";
81         }
82         print SOURCE "  }\n"
83 }
84
85 print SOURCE "  return -1;\n}\n";
86