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;
}