--- nfo/perl/libs/Data/Mungle/Transform/Map.pm 2003/01/19 03:27:33 1.1 +++ nfo/perl/libs/Data/Mungle/Transform/Map.pm 2003/02/14 12:54:30 1.2 @@ -1,7 +1,10 @@ ## -------------------------------------------------------------------------------- -## $Id: Map.pm,v 1.1 2003/01/19 03:27:33 joko Exp $ +## $Id: Map.pm,v 1.2 2003/02/14 12:54:30 joko Exp $ ## -------------------------------------------------------------------------------- ## $Log: Map.pm,v $ +## Revision 1.2 2003/02/14 12:54:30 joko +## + established first code here +## ## Revision 1.1 2003/01/19 03:27:33 joko ## + initial check-in ## @@ -16,5 +19,69 @@ use base 'DesignPattern::Object'; +use Data::Dumper; +use XML::Simple; +use Data::Transform::Encode qw( var2utf8 var_utf2iso ); +use Data::Compare::Struct qw( getRelations getDifference ); +use Data::Transform::Deep qw( deep_copy ); + + +sub _init { + my $self = shift; +} + +sub _touch { + my $self = shift; + if (!$self->{__meta}->{touched}++) { + $self->_readSelectDb(); + } +} + +sub _readSelectDb { + my $self = shift; + my $data = XMLin($self->{filename}); + var_utf2iso($data); + $self->{db} = $data; +} + +sub getKeys { + my $self = shift; + my $source_key = shift; + my $source_type = shift; + + $self->_touch(); + + my $selection = $self->{db}->{source}->{$source_key}->{select} if $source_key; + if ($selection) { + my @selections = keys %$selection; + + # TODO: filter @selections by $source_type + + return @selections; + } +} + +sub applyKeyFilter { + + my $self = shift; + my $filterlist = shift; + + my $data = deep_copy($self->{payload}); + + # calculate intersection + my @list = keys %{$data}; + my $diff = getDifference(\@list, $filterlist); + + # populate new (filtered) result just using intersected elements + my $result; + foreach my $elem (@{$diff}) { + #$result->{$elem} = $memory->{sports}->{$elem}; + delete $data->{$elem}; + } + + return $data; + +} 1; +__END__