[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Fri, 01 Nov 2002 19:50:00 -0000


bowersj2		Fri Nov  1 14:50:00 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  Confidence commit; still working towards the new iterator style. Since
  violent things are going to happen to the code, I want some backups to
  revert to, so expect to see some "nuisance commits" over the next couple
  of hours...
  
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.95 loncom/interface/lonnavmaps.pm:1.96
--- loncom/interface/lonnavmaps.pm:1.95	Fri Nov  1 13:47:26 2002
+++ loncom/interface/lonnavmaps.pm	Fri Nov  1 14:50:00 2002
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.95 2002/11/01 18:47:26 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.96 2002/11/01 19:50:00 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -957,6 +957,10 @@
     # Here's a simple example of the iterator.
     # Preprocess the map: Look for current URL, force inlined maps to display
 
+    # This currently does very little...
+    my $mapEventualIterator = Apache::lonnavmaps::iterator->new($navmap, undef, undef, {},
+                                                                undef, $condition);
+
     my $mapIterator = $navmap->getIterator(undef, undef, {}, 1);
     my $found = 0;
     my $depth = 1;
@@ -968,12 +972,8 @@
     my $counter = 0;
     
     while ($depth > 0) {
-        if ($curRes == $mapIterator->BEGIN_MAP()) {
-            $depth++;
-        }
-        if ($curRes == $mapIterator->END_MAP()) {
-            $depth--;
-        }
+        if ($curRes == $mapIterator->BEGIN_MAP()) { $depth++; }
+        if ($curRes == $mapIterator->END_MAP()) { $depth--; }
 
         if (ref($curRes)) { $counter++; }
 
@@ -1058,12 +1058,8 @@
         if ($curRes == $mapIterator->BEGIN_BRANCH()) {
             $isNewBranch = 1;
         }
-        if ($curRes == $mapIterator->BEGIN_MAP()) {
-            $depth++;
-        }
-        if ($curRes == $mapIterator->END_MAP()) {
-            $depth--;
-        }
+        if ($curRes == $mapIterator->BEGIN_MAP()) { $depth++; }
+        if ($curRes == $mapIterator->END_MAP()) { $depth--; }
 
         if (ref($curRes)) { $counter++; }
 
@@ -2035,6 +2031,11 @@
 sub FORWARD { return 1; }      # go forward
 sub BACKWARD { return 2; }
 
+sub min {
+    (my $a, my $b) = @_;
+    if ($a < $b) { return $a; } else { return $b; }
+}
+
 sub new {
     # magic invocation to create a class instance
     my $proto = shift;
@@ -2064,6 +2065,42 @@
 
     # Now, we need to pre-process the map, by walking forward and backward
     # over the parts of the map we're going to look at.
+
+    my $forwardIterator = Apache::lonnavmaps::DFSiterator->new($self->{NAV_MAP}, 
+                                                               $self->{FIRST_RESOURCE},
+                                                               $self->{FINISH_RESOURCE},
+                                                               $self->{FILTER},
+                                                               undef, $self->{CONDITION},
+                                                               FORWARD());
+    
+    # prime the recursion
+    $self->{FIRST_RESOURCE}->{DATA}->{TOP_DOWN_VAL} = 0;
+    my $depth = 1;
+    $forwardIterator->next();
+    my $curRes = $forwardIterator->next();
+    while ($depth > 0) {
+        if ($curRes == $forwardIterator->BEGIN_MAP()) { $depth++; }
+        if ($curRes == $forwardIterator->END_MAP()) { $depth--; }
+        
+        if (ref($curRes)) {
+            my $topDownVal = $curRes->{DATA}->{TOP_DOWN_VAL};
+            my $nextResources = $curRes->getNext();
+            my $resourceCount = scalar(@{$nextResources});
+            
+            if ($resourceCount == 1) {
+                my $current = $nextResources->[0]->{DATA}->{TOP_DOWN_VAL} || 999999999;
+                $nextResources->[0]->{DATA}->{TOP_DOWN_VAL} = min($topDownVal, $current);
+            }
+            
+            if ($resourceCount > 1) {
+                foreach my $res (@{$nextResources}) {
+                    my $current = $res->{DATA}->{TOP_DOWN_VAL} || 999999999;
+                    $res->{DATA}->{TOP_DOWN_VAL} = min($current, $topDownVal + 1);
+                }
+            }
+        }
+        $curRes = $forwardIterator->next();
+    }
 
     # Now we're ready to start iterating.
 }