3 use vars qw/$fieldmap @class_list/;
7 'Fieldmapper::biblio::record_node' =>
13 id => { position => 0, virtual => 0 },
14 owner_doc => { position => 1, virtual => 0 },
15 intra_doc_id => { position => 2, virtual => 0 },
16 parent_node => { position => 3, virtual => 0 },
17 node_type => { position => 4, virtual => 0 },
18 namespace_uri => { position => 5, virtual => 0 },
19 name => { position => 6, virtual => 0 },
20 value => { position => 7, virtual => 0 },
22 isnew => { position => 8, virtual => 1 },
23 ischanged => { position => 9, virtual => 1 },
24 isdeleted => { position => 10, virtual => 1 },
25 children => { position => 11, virtual => 1 },
29 'Fieldmapper::biblio::record_entry' =>
35 id => { position => 0, virtual => 0 },
36 tcn_source => { position => 1, virtual => 0 },
37 tcn_value => { position => 2, virtual => 0 },
38 metarecord => { position => 3, virtual => 0 },
39 creator => { position => 4, virtual => 0 },
40 editor => { position => 5, virtual => 0 },
41 create_date => { position => 6, virtual => 0 },
42 edit_date => { position => 7, virtual => 0 },
43 source => { position => 8, virtual => 0 },
44 active => { position => 9, virtual => 0 },
45 deleted => { position => 10, virtual => 0 },
47 isnew => { position => 11, virtual => 1 },
48 ischanged => { position => 12, virtual => 1 },
49 isdeleted => { position => 13, virtual => 1 },
53 'Fieldmapper::actor::user' =>
59 id => { position => 0, virtual => 0 },
60 usrid => { position => 1, virtual => 0 },
61 usrname => { position => 2, virtual => 0 },
62 email => { position => 3, virtual => 0 },
63 prefix => { position => 4, virtual => 0 },
64 first_given_name => { position => 5, virtual => 0 },
65 second_given_name => { position => 6, virtual => 0 },
66 family_name => { position => 7, virtual => 0 },
67 suffix => { position => 8, virtual => 0 },
68 address => { position => 9, virtual => 0 },
69 home_ou => { position => 10, virtual => 0 },
70 gender => { position => 11, virtual => 0 },
71 dob => { position => 12, virtual => 0 },
72 active => { position => 13, virtual => 0 },
73 master_acount => { position => 14, virtual => 0 },
74 super_user => { position => 15, virtual => 0 },
75 usrgroup => { position => 16, virtual => 0 },
76 passwd => { position => 17, virtual => 0 },
78 isnew => { position => 18, virtual => 1 },
79 ischanged => { position => 19, virtual => 1 },
80 isdeleted => { position => 20, virtual => 1 },
88 $value = [] unless (defined $value);
89 return bless $value => $self->class;
94 return 'var fieldmap = ' . JSON->perl2JSON($fieldmap) . ';'
102 (my $field = $AUTOLOAD) =~ s/^.*://o;
103 my $class = $obj->class;
105 die "No field by the name $field in $class!"
106 unless (exists $$fieldmap{$class}{fields}{$field});
108 my $pos = $$fieldmap{$class}{fields}{$field}{position};
111 *{$obj->class."::$field"} = sub {
114 $self->[$pos] = $new_val if (defined $new_val);
115 return $self->[$pos];
119 return $obj->$field($value);
124 return ref($class) || $class;
130 !$$fieldmap{$self->class}{fields}{$_}{virtual}
131 } keys %{$$fieldmap{$self->class}{fields}};
138 return $fieldmap->{$self->class}->{api_level};
143 return $fieldmap->{$self->class}->{hint};
147 #-------------------------------------------------------------------------------
148 # Now comes the evil! Generate classes
150 for my $pkg ( keys %$fieldmap ) {
153 use base 'Fieldmapper';
156 push @class_list, $pkg;
158 JSON->register_class_hint(
159 hint => $pkg->json_hint,
165 print Fieldmapper->javascript() if ($ENV{GEN_JS});