| 6 |
## |
## |
| 7 |
## ---------------------------------------------------------------------------------------- |
## ---------------------------------------------------------------------------------------- |
| 8 |
## $Log$ |
## $Log$ |
| 9 |
|
## Revision 1.6 2003/02/21 01:47:53 joko |
| 10 |
|
## renamed core function |
| 11 |
|
## |
| 12 |
|
## Revision 1.5 2003/02/20 20:24:33 joko |
| 13 |
|
## + additional pre-flight checks |
| 14 |
|
## |
| 15 |
|
## Revision 1.4 2003/02/14 14:14:38 joko |
| 16 |
|
## + new code refactored here |
| 17 |
|
## |
| 18 |
## Revision 1.3 2003/02/11 07:54:55 joko |
## Revision 1.3 2003/02/11 07:54:55 joko |
| 19 |
## + modified module usage |
## + modified module usage |
| 20 |
## + debugging trials |
## + debugging trials |
| 46 |
use Data::Dumper; |
use Data::Dumper; |
| 47 |
use Hash::Merge qw( merge ); |
use Hash::Merge qw( merge ); |
| 48 |
use libdb qw( hash2Sql ); |
use libdb qw( hash2Sql ); |
| 49 |
use Data::Transform::Deep qw( hash2object ); |
use Data::Transform::Deep qw( merge_to ); |
| 50 |
|
|
| 51 |
|
|
| 52 |
# get logger instance |
# get logger instance |
| 136 |
my $ident = shift; |
my $ident = shift; |
| 137 |
my $force = shift; |
my $force = shift; |
| 138 |
|
|
| 139 |
|
=pod |
| 140 |
|
#print "isa: ", UNIVERSAL::isa($self->{meta}->{$descent}->{storage}), "\n"; |
| 141 |
|
|
| 142 |
|
# this seems to be the first time we access this side, |
| 143 |
|
# so just check (again) for a valid storage handle |
| 144 |
|
if (! ref $self->{meta}->{$descent}->{storage}) { |
| 145 |
|
$logger->critical( __PACKAGE__ . "->_statloadNode( descent=$descent ident=$ident ): Storage handle undefined!" ); |
| 146 |
|
return; |
| 147 |
|
} |
| 148 |
|
=cut |
| 149 |
|
|
| 150 |
#$logger->debug( __PACKAGE__ . "->_statloadNode( descent=$descent ident=$ident )" ); |
#$logger->debug( __PACKAGE__ . "->_statloadNode( descent=$descent ident=$ident )" ); |
| 151 |
|
|
| 152 |
# fetch entry to retrieve checksum from |
# fetch entry to retrieve checksum from |
| 254 |
next; |
next; |
| 255 |
} |
} |
| 256 |
|
|
| 257 |
|
# 2.b check storage handle type |
| 258 |
|
my $dbType = $self->{meta}->{$descent}->{storage}->{locator}->{type}; |
| 259 |
|
if (!$dbType) { |
| 260 |
|
$logger->critical( __PACKAGE__ . "->touchNodeSet: Storage ( descent='$descent', dbKey='$dbkey' ) has no 'dbType' - configuration-error?" ); |
| 261 |
|
next; |
| 262 |
|
} |
| 263 |
|
|
| 264 |
# 3. check if descents (and nodes?) are actually available.... |
# 3. check if descents (and nodes?) are actually available.... |
| 265 |
# TODO: |
# TODO: |
| 266 |
# eventually pre-check mode of access-attempt (read/write) here to provide an "early-croak" if possible |
# eventually pre-check mode of access-attempt (read/write) here to provide an "early-croak" if possible |
| 269 |
# print Dumper($self->{meta}->{$descent}->{storage}->{locator}); |
# print Dumper($self->{meta}->{$descent}->{storage}->{locator}); |
| 270 |
|
|
| 271 |
|
|
|
my $dbType = $self->{meta}->{$descent}->{storage}->{locator}->{type}; |
|
| 272 |
my $nodeName = $self->{meta}->{$descent}->{nodeName}; |
my $nodeName = $self->{meta}->{$descent}->{nodeName}; |
| 273 |
my $accessorType = $self->{meta}->{$descent}->{accessorType}; |
my $accessorType = $self->{meta}->{$descent}->{accessorType}; |
| 274 |
my $accessorName = $self->{meta}->{$descent}->{accessorName}; |
my $accessorName = $self->{meta}->{$descent}->{accessorName}; |
| 474 |
# mix in (merge) values ... |
# mix in (merge) values ... |
| 475 |
# TODO: use Hash::Merge here? benchmark! |
# TODO: use Hash::Merge here? benchmark! |
| 476 |
# no! we'd need a Object::Merge here! it's *...2object* |
# no! we'd need a Object::Merge here! it's *...2object* |
| 477 |
hash2object($object, $map); |
merge_to($object, $map); |
| 478 |
|
|
| 479 |
# trace |
# trace |
| 480 |
#print Dumper($object); |
#print Dumper($object); |
| 506 |
# mix in values |
# mix in values |
| 507 |
#print Dumper($object); |
#print Dumper($object); |
| 508 |
# TODO: use Hash::Merge here??? |
# TODO: use Hash::Merge here??? |
| 509 |
hash2object($object, $map); |
merge_to($object, $map); |
| 510 |
#print Dumper($object); |
#print Dumper($object); |
| 511 |
#exit; |
#exit; |
| 512 |
|
|
| 525 |
#print Dumper($map_callbacks); |
#print Dumper($map_callbacks); |
| 526 |
foreach my $node (keys %{$map_callbacks->{write}}) { |
foreach my $node (keys %{$map_callbacks->{write}}) { |
| 527 |
#print Dumper($node); |
#print Dumper($node); |
| 528 |
my $perl_callback = $self->{meta}->{$descent}->{node} . '::' . $node . '_write'; |
|
| 529 |
|
# ------------ half-redundant: make $self->callCallback($object, $value, $opts) |
| 530 |
|
my $perl_callback = $self->{meta}->{$descent}->{nodeType} . '::' . $node . '_write'; |
| 531 |
my $evalstring = $perl_callback . '( { object => $object, value => $map_callbacks->{write}->{$node}, storage => $self->{meta}->{$descent}->{storage} } );'; |
my $evalstring = $perl_callback . '( { object => $object, value => $map_callbacks->{write}->{$node}, storage => $self->{meta}->{$descent}->{storage} } );'; |
| 532 |
#print $evalstring, "\n"; exit; |
#print $evalstring, "\n"; exit; |
| 533 |
eval($evalstring); |
eval($evalstring); |
| 534 |
if ($@) { |
if ($@) { |
| 535 |
$error = 1; |
$error = 1; |
| 536 |
print $@, "\n"; |
$logger->error( __PACKAGE__ . "->_modifyNode: $@" ); |
| 537 |
|
next; |
| 538 |
} |
} |
| 539 |
|
# ------------ half-redundant: make $self->callCallback($object, $value, $opts) |
| 540 |
|
|
| 541 |
#print "after eval", "\n"; |
#print "after eval", "\n"; |
| 542 |
|
|
| 571 |
|
|
| 572 |
} |
} |
| 573 |
|
|
| 574 |
|
sub _erase_all { |
| 575 |
|
my $self = shift; |
| 576 |
|
my $descent = shift; |
| 577 |
|
#my $node = shift; |
| 578 |
|
#print Dumper($self->{meta}->{$descent}); |
| 579 |
|
#my $node = $self->{meta}->{$descent}->{nodeName}; |
| 580 |
|
my $node = $self->{meta}->{$descent}->{accessorName}; |
| 581 |
|
$logger->debug( __PACKAGE__ . "->_erase_all( node $node )" ); |
| 582 |
|
$self->{meta}->{$descent}->{storage}->eraseAll($node); |
| 583 |
|
} |
| 584 |
|
|
| 585 |
1; |
1; |
| 586 |
|
__END__ |