cvsuser     02/02/28 21:15:25

  Modified:    P5EEx/Blue/P5EEx/Blue Context.pm
  Log:
  fixed some issues in service initialization
  
  Revision  Changes    Path
  1.17      +52 -20    p5ee/P5EEx/Blue/P5EEx/Blue/Context.pm
  
  Index: Context.pm
  ===================================================================
  RCS file: /cvs/public/p5ee/P5EEx/Blue/P5EEx/Blue/Context.pm,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -w -r1.16 -r1.17
  --- Context.pm        22 Feb 2002 22:30:45 -0000      1.16
  +++ Context.pm        1 Mar 2002 05:15:25 -0000       1.17
  @@ -1,6 +1,6 @@
   
   #############################################################################
  -## $Id: Context.pm,v 1.16 2002/02/22 22:30:45 spadkins Exp $
  +## $Id: Context.pm,v 1.17 2002/03/01 05:15:25 spadkins Exp $
   #############################################################################
   
   package P5EEx::Blue::Context;
  @@ -449,7 +449,23 @@
       # take care of all %$args attributes next
       ################################################################
   
  -    $lightweight = ($name =~ /[\{\}\[\]]/);
  +    # A "lightweight" widget is one which never has to handle events.
  +    #   1. its attributes are only ever required when it is displayed
  +    #   2. its attributes will be OK by combining the %$args with the %$config
  +    #      and %$state.
  +    #   3. all of the necessary %$args are supplied whereever it is displayed.
  +    # This all saves space in the Session state, as the attribute values can
  +    # be relied upon to be supplied by the config file and the code (and
  +    # minimal reliance on the Session state).
  +    # This is really handy when you have something like a huge spreadsheet
  +    # of text entry cells (usually an indexed variable).
  +
  +    if (defined $args->{lightweight}) {          # may be specified explicitly
  +        $lightweight = $args->{lightweight};
  +    }
  +    else {
  +        $lightweight = ($name =~ /[\{\}\[\]]/);  # or implicitly for indexed 
variables
  +    }
       $override = $args->{override};
   
       if ($new_service || $override) {
  @@ -461,8 +477,7 @@
               if (!defined $service->{$attrib} ||
                   ($override && $service->{$attrib} ne $args->{$attrib})) {
                   $service->{$attrib} = $args->{$attrib};
  -                # don't store state in session for "lightweight" services
  -                # $service_state->{$attrib} = $args->{$attrib} if (! $lightweight);
  +                $session->{state}{$type}{$name}{$attrib} = $args->{$attrib} if 
(!$lightweight);
               }
               $self->dbgprint("Context->service() [arg=$attrib] name=$name 
lw=$lightweight ovr=$override",
                   " service=", $service->{$attrib},
  @@ -665,8 +680,13 @@
               if ($P5EEx::Blue::Context::DEBUG && $self->dbg(ref($self),"wget",3));
           return $value;
       } # match {
  +    elsif ($var =~ /^([a-zA-Z0-9_\.-]+)([\{\}\[\]].*)$/) {
  +
  +        $name = $1;
  +        $var = $2;
   
       $self->widget($name) if (!defined $self->{session}{cache}{Widget}{$name});
  +
       $var =~ s/\{([^\}]+)\}/\{"$1"\}/g;
       $perl = "\$value = \$self->{session}{cache}{Widget}{\$name}$var;";
       eval $perl;
  @@ -674,6 +694,8 @@
   
       $self->dbgprint("Context->wget($name,$var) (indexed) = [$value]")
           if ($P5EEx::Blue::Context::DEBUG && $self->dbg(ref($self),"wget",3));
  +    }
  +
       return $value;
   }
   
  @@ -711,23 +733,33 @@
   
       if ($var !~ /[\[\]\{\}]/) {         # no special chars, "foo.bar"
           $self->{session}{state}{Widget}{$name}{$var} = $value;
  -        $self->widget($name) if (!defined $self->{session}{cache}{Widget}{$name});
  -        $self->{session}{cache}{Widget}{$name}{$var} = $value;
  +        $self->{session}{cache}{Widget}{$name}{$var} = $value
  +            if (defined $self->{session}{cache}{Widget}{$name});
           return;
       } # match {
       elsif ($var =~ /^\{([^\}]+)\}$/) {  # a simple "{foo.bar}"
           $var = $1;
           $self->{session}{state}{Widget}{$name}{$var} = $value;
  -        $self->widget($name) if (!defined $self->{cache}{Widget}{$name});
  -        $self->{session}{cache}{Widget}{$name}{$var} = $value;
  +        $self->{session}{cache}{Widget}{$name}{$var} = $value
  +            if (defined $self->{session}{cache}{Widget}{$name});
           return;
       } # match {
  +    elsif ($var =~ /^([a-zA-Z0-9_\.-]+)([\{\}\[\]].*)$/) {
  +
  +        $name = $1;
  +        $var = $2;
   
  -    $self->widget($name) if (!defined $self->{session}{cache}{Widget}{$name});
       $var =~ s/\{([^\}]+)\}/\{"$1"\}/g;  # put quotes around hash keys
  -    $perl = "\$self->{session}{state}{Widget}{\$name}$var = \$value; 
\$self->{session}{cache}{Widget}{\$name}$var = \$value;";
  +
  +        $self->widget($name) if (!defined $self->{session}{cache}{Widget}{$name});
  +
  +        $perl  = "\$self->{session}{state}{Widget}{\$name}$var = \$value;";
  +        $perl .= "\$self->{session}{cache}{Widget}{\$name}$var = \$value;";
  +
       eval $perl;
       print STDERR "ERROR: Context->wset($name,$var,$value): eval ($perl): $@\n" if 
($@);
  +    }
  +
       return $value;
   }
   
  
  
  


Reply via email to