cvsuser 02/04/18 21:35:31
Modified: P5EEx/Blue/P5EEx/Blue Context.pm
Log:
change Session 'state' to 'store' and remove non-implied containers
Revision Changes Path
1.26 +47 -49 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.25
retrieving revision 1.26
diff -u -w -r1.25 -r1.26
--- Context.pm 18 Apr 2002 16:41:50 -0000 1.25
+++ Context.pm 19 Apr 2002 04:35:31 -0000 1.26
@@ -1,6 +1,6 @@
#############################################################################
-## $Id: Context.pm,v 1.25 2002/04/18 16:41:50 spadkins Exp $
+## $Id: Context.pm,v 1.26 2002/04/19 04:35:31 spadkins Exp $
#############################################################################
package P5EEx::Blue::Context;
@@ -40,16 +40,16 @@
=head1 DESCRIPTION
-A Context class models the environment (aka "context)
+A Context class models the environment (aka "context")
in which the current process is running.
The role of the Context class is to abstract the details of the
various runtime environments (or Platforms) (including their event loops)
so that the basic programming model for the developer is uniform.
-Since the Context objects are the objects which initiate events in the
+Since the Context objects are the objects that initiate events in the
P5EE universe, they must be sure to wrap those event handlers with
-try/catch blocks (or at least "eval{};if($@){}" blocks).
+try/catch blocks (i.e. "eval{};if($@){}" blocks).
The main functions of the Context class are to
@@ -127,7 +127,7 @@
$config->{$type}{$name} Read-only service config
$context->{Session}{$session_id}
[$context->{session}]
- $session->{state}{$type}{$name} Runtime state
+ $session->{store}{$type}{$name} Runtime state which is stored
$session->{cache}{$type}{$name} Instances of services
=cut
@@ -203,15 +203,25 @@
$session_class = $args{sessionClass};
$session_class = "P5EEx::Blue::Session::HTMLHidden" if (! $session_class);
+ eval {
$self->{config} = P5EEx::Blue::P5EE->new($config_class, "new", \%args);
+ };
+ $self->add_message($@) if ($@);
+
$self->init(\%args);
+ eval {
$self->dbgprint("Context->new(): configClass=$config_class
sessionClass=$session_class")
if ($P5EEx::Blue::DEBUG && $self->dbg(1));
$self->{session} = P5EEx::Blue::P5EE->new($session_class, "new", \%args);
+ };
+ $self->add_message($@) if ($@);
+ eval {
$self->{user_agent} = P5EEx::Blue::UserAgent->new($self);
+ };
+ $self->add_message($@) if ($@);
return $self;
}
@@ -336,7 +346,6 @@
$lcf_type = "repository"; # lower-case first letter
$config = $context->config();
$repositoryType = $config->{Repository}{sysdb}{repositoryType};
- $container = $config->{Repository}{sysdb}{container};
The following sources are consulted to populate the service
attributes.
@@ -362,11 +371,11 @@
my ($args, $lcf_type, $new_service, $override, $lightweight, $attrib);
my ($service, $config, $class, $session);
- my ($service_state, $service_config, $service_type, $service_type_config);
+ my ($service_store, $service_config, $service_type, $service_type_config);
if (!defined $type) {
P5EEx::Blue::Exception->throw(
- error => "service(): no service type specified\n",
+ error => "cannot create a service of unknown type\n",
);
}
@@ -395,20 +404,20 @@
$config = $self->{config};
$service_config = $config->{$type}{$name};
- $service_state = $session->{state}{$type}{$name};
+ $service_store = $session->{store}{$type}{$name};
- $self->dbgprint("Context->service(): new service. config=$config
sconf=$service_config sstate=$service_state")
+ $self->dbgprint("Context->service(): new service. config=$config
sconf=$service_config sstore=$service_store")
if ($P5EEx::Blue::DEBUG && $self->dbg(6));
$new_service = 1;
################################################################
- # start with runtime state for the widget from the session
+ # start with runtime store for the widget from the session
################################################################
- if ($service_state) {
- foreach $attrib (keys %$service_state) {
+ if ($service_store) {
+ foreach $attrib (keys %$service_store) {
if (!defined $service->{$attrib}) {
- $service->{$attrib} = $service_state->{$attrib};
+ $service->{$attrib} = $service_store->{$attrib};
}
}
}
@@ -449,11 +458,11 @@
# 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.
+ # and %$store.
# 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
+ # This all saves space in the Session store, 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).
+ # minimal reliance on the Session store).
# This is really handy when you have something like a huge spreadsheet
# of text entry cells (usually an indexed variable).
@@ -474,28 +483,17 @@
if (!defined $service->{$attrib} ||
($override && $service->{$attrib} ne $args->{$attrib})) {
$service->{$attrib} = $args->{$attrib};
- $session->{state}{$type}{$name}{$attrib} = $args->{$attrib} if
(!$lightweight);
+ $session->{store}{$type}{$name}{$attrib} = $args->{$attrib} if
(!$lightweight);
}
$self->dbgprint("Context->service() [arg=$attrib] name=$name
lw=$lightweight ovr=$override",
" service=", $service->{$attrib},
- " service_state=", $service_state->{$attrib},
+ " service_store=", $service_store->{$attrib},
" args=", $args->{$attrib})
if ($P5EEx::Blue::DEBUG && $self->dbg(6));
}
}
if ($new_service) {
- #####################################################################
- # infer a container (if none supplied, by the dots in the "name")
- #####################################################################
- if (! defined $service->{container}) {
- if ($name =~ /^(.+)\./) {
- $service_config->{container} = $1;
- }
- elsif ($name ne "default") {
- $service_config->{container} = "default";
- }
- }
$class = $service->{"${lcf_type}Class"}; # find class of service
@@ -505,7 +503,7 @@
}
else {
P5EEx::Blue::Exception->throw(
- error => "service(): no class specified\n",
+ error => "no class was configured for the \"$type\" named
\"$name\"\n",
);
}
}
@@ -607,7 +605,7 @@
* it exists in the Session's widget cache, or
(i.e. it has already been referenced and instantiated in the cache),
- * it exists in the Session's state, or
+ * it exists in the Session's store, or
(i.e. it was referenced in an earlier request in this session)
* it exists in the Config
@@ -628,14 +626,14 @@
$widget_class =
$self->{session}{cache}{Widget}{$widget_name}{widgetClass} ||
- $self->{session}{state}{Widget}{$widget_name}{widgetClass} ||
+ $self->{session}{store}{Widget}{$widget_name}{widgetClass} ||
$self->{config}{Widget}{$widget_name}{widgetClass};
if (!$widget_class) {
$widget_type =
$self->{session}{cache}{Widget}{$widget_name}{widgetType} ||
- $self->{session}{state}{Widget}{$widget_name}{widgetType} ||
+ $self->{session}{store}{Widget}{$widget_name}{widgetType} ||
$self->{config}{Widget}{$widget_name}{widgetType};
if ($widget_type) {
@@ -722,7 +720,7 @@
if (!defined $value && defined $default) {
$value = $default;
if ($setdefault) {
- $self->{session}{state}{Widget}{$name}{$var} = $value;
+ $self->{session}{store}{Widget}{$name}{$var} = $value;
$self->widget($name) if (!defined
$self->{session}{cache}{Widget}{$name});
$self->{session}{cache}{Widget}{$name}{$var} = $value;
}
@@ -737,7 +735,7 @@
if (!defined $value && defined $default) {
$value = $default;
if ($setdefault) {
- $self->{session}{state}{Widget}{$name}{$var} = $value;
+ $self->{session}{store}{Widget}{$name}{$var} = $value;
$self->widget($name) if (!defined
$self->{session}{cache}{Widget}{$name});
$self->{session}{cache}{Widget}{$name}{$var} = $value;
}
@@ -802,14 +800,14 @@
if ($P5EEx::Blue::DEBUG && $self->dbg(3));
if ($var !~ /[\[\]\{\}]/) { # no special chars, "foo.bar"
- $self->{session}{state}{Widget}{$name}{$var} = $value;
+ $self->{session}{store}{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->{session}{store}{Widget}{$name}{$var} = $value;
$self->{session}{cache}{Widget}{$name}{$var} = $value
if (defined $self->{session}{cache}{Widget}{$name});
return;
@@ -820,7 +818,7 @@
#$self->widget($name) if (!defined $self->{session}{cache}{Widget}{$name});
- $perl = "\$self->{session}{state}{Widget}{\$name}$var = \$value;";
+ $perl = "\$self->{session}{store}{Widget}{\$name}$var = \$value;";
$perl .= "\$self->{session}{cache}{Widget}{\$name}$var = \$value;"
if (defined $self->{session}{cache}{Widget}{$name});
@@ -864,14 +862,14 @@
if ($P5EEx::Blue::DEBUG && $self->dbg(3));
if ($var !~ /[\[\]\{\}]/) { # no special chars, "foo.bar"
- delete $self->{session}{state}{Widget}{$name}{$var};
+ delete $self->{session}{store}{Widget}{$name}{$var};
delete $self->{session}{cache}{Widget}{$name}{$var}
if (defined $self->{session}{cache}{Widget}{$name});
return;
} # match {
elsif ($var =~ /^\{([^\}]+)\}$/) { # a simple "{foo.bar}"
$var = $1;
- delete $self->{session}{state}{Widget}{$name}{$var};
+ delete $self->{session}{store}{Widget}{$name}{$var};
delete $self->{session}{cache}{Widget}{$name}{$var}
if (defined $self->{session}{cache}{Widget}{$name});
return;
@@ -882,7 +880,7 @@
#$self->widget($name) if (!defined $self->{session}{cache}{Widget}{$name});
- $perl = "delete \$self->{session}{state}{Widget}{\$name}$var;";
+ $perl = "delete \$self->{session}{store}{Widget}{\$name}$var;";
$perl .= "delete \$self->{session}{cache}{Widget}{\$name}$var;"
if (defined $self->{session}{cache}{Widget}{$name});