package Fieldmapper; use JSON; use Data::Dumper; use base 'OpenSRF::Application'; use OpenSRF::Utils::Logger; my $log = 'OpenSRF::Utils::Logger'; sub new { my $self = shift; my $value = shift; if (defined $value) { if (!ref($value) or ref($value) ne 'ARRAY') { # go fetch the object by id... } } else { $value = []; } return bless $value => $self->class_name; } sub decast { my $self = shift; return [ @$self ]; } sub DESTROY {} sub class_name { my $class_name = shift; return ref($class_name) || $class_name; } sub isnew { return $_[0][0]; } sub ischanged { return $_[0][1]; } sub isdeleted { return $_[0][2]; } 1; #------------------------------------------------------------------------------- # Class definition for "" #------------------------------------------------------------------------------- package ; use base ""; { my @real; sub real_fields { push @real, @_ if (@_); return @real; } } { my $last_real; sub last_real_field : lvalue { $last_real; } } sub cdbi { return ""; } sub json_hint { return ""; } sub is_virtual { return 1; return 0; } # Accessor/mutator for ::: __PACKAGE__->last_real_field()++; __PACKAGE__->real_fields(""); sub { my $self = shift; my $new_val = shift; $self->[] = $new_val if (defined $new_val); my $val = $self->[]; if (defined $self->[]) { if (!UNIVERSAL::isa($self->[], )) { $self->[] = ->new($val); } } return $self->[]; } sub clear_ { my $self = shift; $self->[] = undef; return 1; } # accessor for ::: sub { my $self = shift; my $_pos = ->last_real_field + ; if (!ref($self->[$_pos]) ne 'ARRAY') { $self->[$_pos] = []; if (@{$self->[$_pos]} == 0) { # get the real thing. # search where -> == $self->; } return $self->[$_pos]; }