3 use vars qw/$fieldmap @class_name_list/;
6 # To dump the Javascript version of the fieldmapper struct use the command:
8 # PERL5LIB=~/cvs/ILS/OpenSRF/src/perlmods/:~/cvs/ILS/Open-ILS/src/perlmods/ GEN_JS=1 perl -MOpenILS::Utils::Fieldmapper -e 'print "\n";'
10 # ... adjusted for your CVS sandbox, of course.
15 'Fieldmapper::metabib::metarecord' =>
21 id => { position => 0, virtual => 0 },
22 fingerprint => { position => 1, virtual => 0 },
23 master_record => { position => 2, virtual => 0 },
24 mods => { position => 3, virtual => 0 },
26 isnew => { position => 4, virtual => 1 },
27 ischanged => { position => 5, virtual => 1 },
28 isdeleted => { position => 6, virtual => 1 },
32 'Fieldmapper::config::bib_source' =>
38 id => { position => 0, virtual => 0 },
39 quality => { position => 1, virtual => 0 },
40 source => { position => 2, virtual => 0 },
44 'Fieldmapper::config::metabib_field' =>
50 id => { position => 0, virtual => 0 },
51 class => { position => 1, virtual => 0 },
52 name => { position => 2, virtual => 0 },
53 xpath => { position => 3, virtual => 0 },
57 'Fieldmapper::biblio::record_node' =>
63 id => { position => 0, virtual => 0 },
64 owner_doc => { position => 1, virtual => 0 },
65 intra_doc_id => { position => 2, virtual => 0 },
66 parent_node => { position => 3, virtual => 0 },
67 node_type => { position => 4, virtual => 0 },
68 namespace_uri => { position => 5, virtual => 0 },
69 name => { position => 6, virtual => 0 },
70 value => { position => 7, virtual => 0 },
71 last_xact_id => { position => 8, virtual => 0 },
73 isnew => { position => 9, virtual => 1 },
74 ischanged => { position => 10, virtual => 1 },
75 isdeleted => { position => 11, virtual => 1 },
76 children => { position => 12, virtual => 1 },
80 'Fieldmapper::biblio::record_entry' =>
86 id => { position => 0, virtual => 0 },
87 tcn_source => { position => 1, virtual => 0 },
88 tcn_value => { position => 2, virtual => 0 },
89 creator => { position => 3, virtual => 0 },
90 editor => { position => 4, virtual => 0 },
91 create_date => { position => 5, virtual => 0 },
92 edit_date => { position => 6, virtual => 0 },
93 source => { position => 7, virtual => 0 },
94 active => { position => 8, virtual => 0 },
95 deleted => { position => 9, virtual => 0 },
96 last_xact_id => { position => 10, virtual => 0 },
98 isnew => { position => 11, virtual => 1 },
99 ischanged => { position => 12, virtual => 1 },
100 isdeleted => { position => 13, virtual => 1 },
104 'Fieldmapper::actor::user' =>
110 id => { position => 0, virtual => 0 },
111 usrid => { position => 1, virtual => 0 },
112 usrname => { position => 2, virtual => 0 },
113 email => { position => 3, virtual => 0 },
114 prefix => { position => 4, virtual => 0 },
115 first_given_name => { position => 5, virtual => 0 },
116 second_given_name => { position => 6, virtual => 0 },
117 family_name => { position => 7, virtual => 0 },
118 suffix => { position => 8, virtual => 0 },
119 address => { position => 9, virtual => 0 },
120 home_ou => { position => 10, virtual => 0 },
121 gender => { position => 11, virtual => 0 },
122 dob => { position => 12, virtual => 0 },
123 active => { position => 13, virtual => 0 },
124 master_acount => { position => 14, virtual => 0 },
125 super_user => { position => 15, virtual => 0 },
126 usrgroup => { position => 16, virtual => 0 },
127 passwd => { position => 17, virtual => 0 },
128 last_xact_id => { position => 18, virtual => 0 },
130 isnew => { position => 19, virtual => 1 },
131 ischanged => { position => 20, virtual => 1 },
132 isdeleted => { position => 21, virtual => 1 },
140 $value = [] unless (defined $value);
141 return bless $value => $self->class_name;
145 my $class_name = shift;
146 return 'var fieldmap = ' . JSON->perl2JSON($fieldmap) . ';'
154 (my $field = $AUTOLOAD) =~ s/^.*://o;
155 my $class_name = $obj->class_name;
157 die "No field by the name $field in $class_name!"
158 unless (exists $$fieldmap{$class_name}{fields}{$field});
160 my $pos = $$fieldmap{$class_name}{fields}{$field}{position};
163 *{$obj->class_name."::$field"} = sub {
166 $self->[$pos] = $new_val if (defined $new_val);
167 return $self->[$pos];
171 return $obj->$field($value);
175 my $class_name = shift;
176 return ref($class_name) || $class_name;
181 my $class_name = $self->class_name;
182 my $fields = $$fieldmap{$class_name}{fields};
185 !$$fields{$_}{virtual}
186 } sort {$$fields{$a}{position} <=> $$fields{$b}{position}} keys %$fields;
193 return $fieldmap->{$self->class_name}->{api_level};
198 return $fieldmap->{$self->class_name}->{hint};
202 #-------------------------------------------------------------------------------
203 # Now comes the evil! Generate classes
205 for my $pkg ( keys %$fieldmap ) {
208 use base 'Fieldmapper';
211 push @class_name_list, $pkg;
213 JSON->register_class_hint(
214 hint => $pkg->json_hint,
220 print Fieldmapper->javascript() if ($ENV{GEN_JS});