3 use vars qw/$fieldmap @class_name_list/;
7 'Fieldmapper::metabib::metarecord' =>
13 id => { position => 0, virtual => 0 },
14 fingerprint => { position => 1, virtual => 0 },
15 master_record => { position => 2, virtual => 0 },
16 mods => { position => 3, virtual => 0 },
18 isnew => { position => 4, virtual => 1 },
19 ischanged => { position => 5, virtual => 1 },
20 isdeleted => { position => 6, virtual => 1 },
24 'Fieldmapper::config::bib_source' =>
30 id => { position => 0, virtual => 0 },
31 quality => { position => 1, virtual => 0 },
32 source => { position => 2, virtual => 0 },
36 'Fieldmapper::config::metabib_field' =>
42 id => { position => 0, virtual => 0 },
43 class => { position => 1, virtual => 0 },
44 name => { position => 2, virtual => 0 },
45 xpath => { position => 3, virtual => 0 },
49 'Fieldmapper::biblio::record_node' =>
55 id => { position => 0, virtual => 0 },
56 owner_doc => { position => 1, virtual => 0 },
57 intra_doc_id => { position => 2, virtual => 0 },
58 parent_node => { position => 3, virtual => 0 },
59 node_type => { position => 4, virtual => 0 },
60 namespace_uri => { position => 5, virtual => 0 },
61 name => { position => 6, virtual => 0 },
62 value => { position => 7, virtual => 0 },
64 isnew => { position => 8, virtual => 1 },
65 ischanged => { position => 9, virtual => 1 },
66 isdeleted => { position => 10, virtual => 1 },
67 children => { position => 11, virtual => 1 },
71 'Fieldmapper::biblio::record_entry' =>
77 id => { position => 0, virtual => 0 },
78 tcn_source => { position => 1, virtual => 0 },
79 tcn_value => { position => 2, virtual => 0 },
80 creator => { position => 3, virtual => 0 },
81 editor => { position => 4, virtual => 0 },
82 create_date => { position => 5, virtual => 0 },
83 edit_date => { position => 6, virtual => 0 },
84 source => { position => 7, virtual => 0 },
85 active => { position => 8, virtual => 0 },
86 deleted => { position => 9, virtual => 0 },
88 isnew => { position => 10, virtual => 1 },
89 ischanged => { position => 11, virtual => 1 },
90 isdeleted => { position => 12, virtual => 1 },
94 'Fieldmapper::actor::user' =>
100 id => { position => 0, virtual => 0 },
101 usrid => { position => 1, virtual => 0 },
102 usrname => { position => 2, virtual => 0 },
103 email => { position => 3, virtual => 0 },
104 prefix => { position => 4, virtual => 0 },
105 first_given_name => { position => 5, virtual => 0 },
106 second_given_name => { position => 6, virtual => 0 },
107 family_name => { position => 7, virtual => 0 },
108 suffix => { position => 8, virtual => 0 },
109 address => { position => 9, virtual => 0 },
110 home_ou => { position => 10, virtual => 0 },
111 gender => { position => 11, virtual => 0 },
112 dob => { position => 12, virtual => 0 },
113 active => { position => 13, virtual => 0 },
114 master_acount => { position => 14, virtual => 0 },
115 super_user => { position => 15, virtual => 0 },
116 usrgroup => { position => 16, virtual => 0 },
117 passwd => { position => 17, virtual => 0 },
119 isnew => { position => 18, virtual => 1 },
120 ischanged => { position => 19, virtual => 1 },
121 isdeleted => { position => 20, virtual => 1 },
129 $value = [] unless (defined $value);
130 return bless $value => $self->class_name;
134 my $class_name = shift;
135 return 'var fieldmap = ' . JSON->perl2JSON($fieldmap) . ';'
143 (my $field = $AUTOLOAD) =~ s/^.*://o;
144 my $class_name = $obj->class_name;
146 die "No field by the name $field in $class_name!"
147 unless (exists $$fieldmap{$class_name}{fields}{$field});
149 my $pos = $$fieldmap{$class_name}{fields}{$field}{position};
152 *{$obj->class_name."::$field"} = sub {
155 $self->[$pos] = $new_val if (defined $new_val);
156 return $self->[$pos];
160 return $obj->$field($value);
164 my $class_name = shift;
165 return ref($class_name) || $class_name;
170 my $class_name = $self->class_name;
171 my $fields = $$fieldmap{$class_name}{fields};
174 !$$fields{$_}{virtual}
175 } sort {$$fields{$a}{position} <=> $$fields{$b}{position}} keys %$fields;
182 return $fieldmap->{$self->class_name}->{api_level};
187 return $fieldmap->{$self->class_name}->{hint};
191 #-------------------------------------------------------------------------------
192 # Now comes the evil! Generate classes
194 for my $pkg ( keys %$fieldmap ) {
197 use base 'Fieldmapper';
200 push @class_name_list, $pkg;
202 JSON->register_class_hint(
203 hint => $pkg->json_hint,
209 print Fieldmapper->javascript() if ($ENV{GEN_JS});