--- trunk/lib/WebPAC/Validate.pm 2006/09/11 11:57:18 664 +++ trunk/lib/WebPAC/Validate.pm 2006/09/11 11:57:30 665 @@ -272,39 +272,64 @@ sub report { my $self = shift; + my $log = $self->_get_logger(); + sub unroll { - my ($rest,$o, $dump) = @_; + my ($tree, $accumulated) = @_; -#warn "# rest: $rest o: $o\n"; + $log->debug("# ", + ( $tree ? "tree: $tree " : '' ), + ( $accumulated ? "accumulated: $accumulated " : '' ), + ); - return unless ($rest); + my $results; - if (ref($rest) ne 'HASH') { - $o .= "($rest)"; - return ($o,$dump); + if (ref($tree) ne 'HASH') { + return ("$accumulated\t($tree)", undef); } - foreach my $k (sort keys %{ $rest }) { + my $dump; + + foreach my $k (sort keys %{ $tree }) { if ($k eq 'dump') { - $dump = $rest->{dump}; + $dump = $tree->{dump}; warn "## dump: $dump\n"; next; } - my $u; - ($u, $dump) = unroll($rest->{$k}, $o, $dump); - $o .= "$k $u"; + $log->debug("current: $k"); + + my ($new_results, $new_dump) = unroll($tree->{$k}, + $accumulated ? "$accumulated\t$k" : $k + ); + + $log->debug( + ( $new_results ? "new_results: " . dump($new_results) ." " : '' ), + ); + + push @$results, $new_results if ($new_results); + $dump = $new_dump if ($new_dump); + + } + $log->debug( + ( $results ? "results: " . dump($results) ." " : '' ), + ); + + if ($#$results == 0) { + return ($results->[0], $dump); + } else { + return ($results, $dump); } - return ($o,$dump); } my $out = ''; + my $e = $self->{errors} || return; - foreach my $mfn (sort keys %{ $self->{errors} }) { - my ($msg,$dump) = unroll( $self->{errors}->{$mfn}, '', '' ); - $out .= "MFN $mfn\n$msg\t$dump\n\n"; + foreach my $mfn (sort keys %$e) { + my ($r, $d) = unroll( $e->{$mfn} ); + $out .= "MFN $mfn\n", dump($r), "\t$d\n\n"; } return $out;