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

bowersj2 lon-capa-cvs@mail.lon-capa.org
Fri, 01 Nov 2002 18:24:46 -0000


bowersj2		Fri Nov  1 13:24:46 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  Moving towards the improved iterator.
  
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.93 loncom/interface/lonnavmaps.pm:1.94
--- loncom/interface/lonnavmaps.pm:1.93	Tue Oct 29 15:26:03 2002
+++ loncom/interface/lonnavmaps.pm	Fri Nov  1 13:24:45 2002
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.93 2002/10/29 20:26:03 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.94 2002/11/01 18:24:45 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1769,7 +1769,7 @@
 
 sub getIterator {
     my $self = shift;
-    my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift,
+    my $iterator = Apache::lonnavmaps::DFSiterator->new($self, shift, shift,
                                                      shift, undef, shift, 
                                                      $ENV{'form.direction'});
     return $iterator;
@@ -2028,6 +2028,59 @@
 sub FORWARD { return 1; }      # go forward
 sub BACKWARD { return 2; }
 
+sub new {
+    # magic invocation to create a class instance
+    my $proto = shift;
+    my $class = ref($proto) || $proto;
+    my $self = {};
+
+    $self->{NAV_MAP} = shift;
+    return undef unless ($self->{NAV_MAP});
+
+    # Handle the parameters
+    $self->{FIRST_RESOURCE} = shift || $self->{NAV_MAP}->firstResource();
+    $self->{FINISH_RESOURCE} = shift || $self->{NAV_MAP}->finishResource();
+
+    # If the given resources are just the ID of the resource, get the
+    # objects
+    if (!ref($self->{FIRST_RESOURCE})) { $self->{FIRST_RESOURCE} = 
+             $self->{NAV_MAP}->getById($self->{FIRST_RESOURCE}); }
+    if (!ref($self->{FINISH_RESOURCE})) { $self->{FINISH_RESOURCE} = 
+             $self->{NAV_MAP}->getById($self->{FINISH_RESOURCE}); }
+
+    $self->{FILTER} = shift;
+
+    # A hash, used as a set, of resource already seen
+    $self->{ALREADY_SEEN} = shift;
+    if (!defined($self->{ALREADY_SEEN})) { $self->{ALREADY_SEEN} = {} };
+    $self->{CONDITION} = shift;
+
+    # 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.
+
+    # Now we're ready to start iterating.
+}
+
+1;
+
+package Apache::lonnavmaps::DFSiterator;
+
+# UNDOCUMENTED: This is a private library, it should not generally be used
+# by the outside world. What it does is walk through the nav map in a 
+# depth-first fashion. This is not appropriate for most uses, but it is
+# used by the main iterator for pre-processing. It also is able to isolate
+# much of the complexity of the main iterator, so the main iterator is much
+# simpler.
+
+# Here are the tokens for the iterator, replicated from iterator for convenience:
+
+sub BEGIN_MAP { return 1; }    # begining of a new map
+sub END_MAP { return 2; }      # end of the map
+sub BEGIN_BRANCH { return 3; } # beginning of a branch
+sub END_BRANCH { return 4; }   # end of a branch
+sub FORWARD { return 1; }      # go forward
+sub BACKWARD { return 2; }
+
 # Params: nav map, start resource, end resource, filter, condition, 
 # already seen hash ref
 
@@ -2236,7 +2289,7 @@
         my $finishResource = $self->{HERE}->map_finish();
 
         $self->{RECURSIVE_ITERATOR} =
-          Apache::lonnavmaps::iterator->new ($self->{NAV_MAP}, $firstResource, 
+          Apache::lonnavmaps::DFSiterator->new ($self->{NAV_MAP}, $firstResource, 
                      $finishResource, $self->{FILTER}, $self->{ALREADY_SEEN},
                                              $self->{CONDITION}, $self->{DIRECTION});
     }