initial move of the REST gateway out to Open-ILS
[working/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 OpenILS::Utils::Fieldmapper;  
9 ";
10 $map = $Fieldmapper::fieldmap unless ($@);
11
12 die $@ if ($@);
13
14
15 if(!$ARGV[0]) {
16         print "usage: $0 <source_file>\n";
17         exit;
18 }
19
20 warn "Generating fieldmapper-c code...\n";
21
22
23 print $ARGV[0] . "\n";
24
25 open(SOURCE, ">$ARGV[0]");
26
27 print SOURCE <<C;
28 #include "fieldmapper_lookup.h"
29
30
31 char * fm_pton(char * class, int pos) {
32         if (class == NULL) return NULL;
33 C
34
35
36 for my $object (keys %$map) {
37         my $short_name= $map->{$object}->{hint};
38         print SOURCE <<"        C";
39         else if (!strcmp(class, "$short_name")) {
40                 switch (pos) {
41         C
42         for my $field (keys %{$map->{$object}->{fields}}) {
43                 my $position = $map->{$object}->{fields}->{$field}->{position};
44                 print SOURCE <<"                C";
45                         case $position:
46                                 return strdup("$field");
47                                 break;
48                 C
49         }
50         print SOURCE "          }\n";
51         print SOURCE "  }\n";
52 }
53 print SOURCE <<C;
54         return strdup("datum");
55 }
56
57 int isFieldmapper(char* class) {
58         if (class == NULL) return NULL;
59 C
60
61 for my $object (keys %$map) {
62         my $short_name= $map->{$object}->{hint};
63         print SOURCE "  else if (!strcmp(class, \"$short_name\")) return 1;";
64 }
65 print SOURCE <<C;
66         return NULL;
67 }
68
69 int fm_ntop(char* class, char* field);
70         if (class == NULL) return NULL;
71 C
72
73
74 for my $object (keys %$map) {
75         my $short_name= $map->{$object}->{hint};
76         print SOURCE "  else if (!strcmp(class, \"$short_name\")) {\n";
77         for my $field (keys %{$map->{$object}->{fields}}) {
78                 my $position = $map->{$object}->{fields}->{$field}->{position};
79                 print SOURCE "          if (!strcmp(field,\"$field\")) return $position;\n";
80         }
81         print SOURCE "  }\n"
82 }
83
84 print SOURCE "  return -1;\n}";
85 warn  "done\n";
86