--- trunk2/lib/WebPAC/Tree.pm 2004/09/21 19:08:11 459 +++ trunk2/lib/WebPAC/Tree.pm 2004/09/21 20:43:43 460 @@ -5,6 +5,7 @@ use Carp; use Log::Log4perl qw(get_logger :levels); +use YAML; =head1 NAME @@ -75,7 +76,7 @@ Lookup value which will be called C<$v900> from now on. - my $v900 = $t->{'lookup_v900'}->($code,$start_code); + my $v900 = $t->{'lookup_v900'}->($code); =item lookup_term @@ -93,13 +94,13 @@ Returns children for next iteration of tree generation or undef. - my $next_lvl = $t->{'have_children'}->($code,$v900,$start_code); + my $next_lvl = $t->{'have_children'}->($code,$v900); =item have_children_at_level Returns children for next iteration and next level. - my ($level,$next_lvl) = $t->{'have_children_at_level'}->($code,$v900,$start_code); + my ($level,$next_lvl) = $t->{'have_children_at_level'}->($code,$v900); It's safe to return undef just for next level data (C<$next_lvl> in example above) to stop recursion. @@ -155,7 +156,7 @@ $self->{'show_ids'} = []; $self->{'hide_ids'} = []; - my $html = $self->unroll(0,''); + my $html = $self->unroll(0,()); my $html_file = $self->{'dir'}.'/'.$self->{'html'}; @@ -185,14 +186,14 @@ Generate tree recursively. - my $html = $tree->unroll($level,$start_code); + my $html = $tree->unroll($level,$data_arr); =cut sub unroll { my $self = shift; - my ($level,$start_code) = @_; + my ($level,$data_arr) = @_; my $log = $self->_get_logger(); @@ -204,7 +205,7 @@ my $next_level = $level + 1; $log->logconfess("need level") unless (defined($level)); - $log->logconfess("need start_code") unless (defined($start_code)); + #$log->logconfess("need data_arr") unless (defined($data_arr)); my $tree = $self->{'tree'}; @@ -213,35 +214,35 @@ # all levels passed? return if (! defined($tree->[$level])); - $log->debug("unroll level $level, start code $start_code"); + $log->debug("unroll level $level"); my $html; - foreach my $code ($tree->[$level]->{'code_arr'}->($start_code)) { + foreach my $code ($tree->[$level]->{'code_arr'}->($data_arr)) { if ($code = $tree->[$level]->{'filter_code'}->($code)) { $log->debug("# $level filter passed code $code"); - my $v900 = $tree->[$level]->{'lookup_v900'}->($code,$start_code) || $log->warn("can't lookup_v900($code,$start_code)"); - $log->debug("# $level lookup_v900($code,$start_code) = $v900"); + my $v900 = $tree->[$level]->{'lookup_v900'}->($code) || $log->warn("can't lookup_v900($code)") && return; + $log->debug("# $level lookup_v900($code) = $v900"); - my $term = $tree->[$level]->{'lookup_term'}->($code,$v900) || $log->warn("can't lookup_term($code,$v900)"); + my $term = $tree->[$level]->{'lookup_term'}->($code,$v900) || $log->warn("can't lookup_term($code,$v900)") && return; $log->debug("# $level lookup_term($code,$v900) = $term"); - my $mfn = $tree->[$level]->{'lookup_mfn'}->($code,$v900) || $log->warn("can't lookup_mfn($code,$v900)"); + my $mfn = $tree->[$level]->{'lookup_mfn'}->($code,$v900) || $log->warn("can't lookup_mfn($code,$v900)") && return; $log->debug("# $level lookup_mfn($code,$v900) = $mfn"); $log->debug("$code -> $v900 : $term [$mfn]"); my ($link_start,$link_end) = ('',''); - my $have_children = $tree->[$level]->{'have_children'}->($code,$v900,$start_code); + my $have_children = $tree->[$level]->{'have_children'}->($code,$v900); if (! $have_children) { - $log->debug("# $level doesn't have_children($code,$v900,$start_code)"); - ($next_level,$have_children) = $tree->[$level]->{'have_children_at_level'}->($code,$v900,$start_code) if ($tree->[$level]->{'have_children_at_level'}); - $log->debug("# $level have_children($code,$v900,$start_code) on level $next_level") if ($have_children); + $log->debug("# $level doesn't have_children($code,$v900)"); + ($next_level,$have_children) = $tree->[$level]->{'have_children_at_level'}->($code,$v900) if ($tree->[$level]->{'have_children_at_level'}); + $log->debug("# $level have_children($code,$v900) on level $next_level") if ($have_children); }