lib/openwfe/expressions/environment.rb in ruote-0.9.18 vs lib/openwfe/expressions/environment.rb in ruote-0.9.19
- old
+ new
@@ -1,34 +1,34 @@
#
#--
# Copyright (c) 2006-2008, John Mettraux, OpenWFE.org
# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
+#
+# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
-#
+#
# . Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-#
-# . Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
+# list of conditions and the following disclaimer.
+#
+# . Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
-#
+#
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#++
#
#
@@ -42,205 +42,205 @@
require 'openwfe/expressions/flowexpression'
module OpenWFE
- #
- # An environment is a store for variables.
- # It's an expression thus it's storable in the expression pool.
- #
- class Environment < FlowExpression
- include Rufus::Schedulable
+ #
+ # An environment is a store for variables.
+ # It's an expression thus it's storable in the expression pool.
+ #
+ class Environment < FlowExpression
+ include Rufus::Schedulable
- names :environment
+ names :environment
- V_PAUSED = VAR_PAUSED[1..-1]
+ V_PAUSED = VAR_PAUSED[1..-1]
- #
- # the variables stored in this environment.
- #
- attr_accessor :variables
+ #
+ # the variables stored in this environment.
+ #
+ attr_accessor :variables
- #def initialize (
- # fei, parent, environment_id, application_context, attributes)
- # super(fei, parent, environment_id, application_context, attributes)
- # @variables = {}
- #end
+ #def initialize (
+ # fei, parent, environment_id, application_context, attributes)
+ # super(fei, parent, environment_id, application_context, attributes)
+ # @variables = {}
+ #end
- def initialize
+ def initialize
- super
+ super
- @variables = {}
- end
+ @variables = {}
+ end
- def self.new_env (
- fei, parent_id, environment_id, app_context, attributes)
+ def self.new_env (
+ fei, parent_id, environment_id, app_context, attributes)
- env = self.new
+ env = self.new
- env.fei = fei
- env.parent_id = parent_id
- env.environment_id = environment_id
- env.application_context = app_context
- env.attributes = attributes
+ env.fei = fei
+ env.parent_id = parent_id
+ env.environment_id = environment_id
+ env.application_context = app_context
+ env.attributes = attributes
- env
- end
+ env
+ end
- #
- # Looks up for the value of a variable in this environment.
- #
- def [] (key)
+ #
+ # Looks up for the value of a variable in this environment.
+ #
+ def [] (key)
- value = @variables[key]
+ value = @variables[key]
- return value \
- if @variables.has_key?(key) or is_engine_environment?
+ return value \
+ if @variables.has_key?(key) or is_engine_environment?
- return get_parent[key] if @parent_id
+ return get_parent[key] if @parent_id
- get_expression_pool.fetch_engine_environment[key]
- end
+ get_expression_pool.fetch_engine_environment[key]
+ end
- #
- # Binds a variable in this environment.
- #
- def []= (key, value)
+ #
+ # Binds a variable in this environment.
+ #
+ def []= (key, value)
- #ldebug do
- # "#{fei.to_debug_s} []= "+
- # "'#{key}' => '#{value}' (#{value.class.name})"
- #end
+ #ldebug do
+ # "#{fei.to_debug_s} []= "+
+ # "'#{key}' => '#{value}' (#{value.class.name})"
+ #end
- #synchronize do
+ #synchronize do
- @variables[key] = value
- store_itself
- #end
- end
+ @variables[key] = value
+ store_itself
+ #end
+ end
- #
- # Removes a variable from this environment.
- #
- def delete (key)
- #synchronize do
+ #
+ # Removes a variable from this environment.
+ #
+ def delete (key)
+ #synchronize do
- ldebug { "#{fei.to_debug_s} delete() '#{key}'" }
+ ldebug { "#{fei.to_debug_s} delete() '#{key}'" }
- @variables.delete key
- store_itself
- #end
- end
+ @variables.delete key
+ store_itself
+ #end
+ end
- #
- # This method is usually called before the environment gets wiped
- # out of the expression pool.
- # It takes care of removing subprocess templates pointed at by
- # variables in this environment.
- #
- def unbind
+ #
+ # This method is usually called before the environment gets wiped
+ # out of the expression pool.
+ # It takes care of removing subprocess templates pointed at by
+ # variables in this environment.
+ #
+ def unbind
- #ldebug { "unbind() for #{fei.to_s}" }
+ #ldebug { "unbind() for #{fei.to_s}" }
- @variables.each do |key, value|
+ @variables.each do |key, value|
- #ldebug { "unbind() '#{key}' => #{value.class}" }
+ #ldebug { "unbind() '#{key}' => #{value.class}" }
- if value.kind_of?(FlowExpressionId)
+ if value.kind_of?(FlowExpressionId)
- get_expression_pool.remove(value)
+ get_expression_pool.remove(value)
- #elsif value.kind_of?(FlowExpression)
- # value.cancel
- end
- end
+ #elsif value.kind_of?(FlowExpression)
+ # value.cancel
end
+ end
+ end
- #
- # Returns true if this environment is the engine environment
- #
- def is_engine_environment?
+ #
+ # Returns true if this environment is the engine environment
+ #
+ def is_engine_environment?
- (@fei == get_expression_pool.engine_environment_id)
- end
+ (@fei == get_expression_pool.engine_environment_id)
+ end
- #
- # Should never get used, only the reschedule() method is relevant
- # for the Schedulable aspect of an environment expression.
- #
- def trigger (params)
+ #
+ # Should never get used, only the reschedule() method is relevant
+ # for the Schedulable aspect of an environment expression.
+ #
+ def trigger (params)
- raise "an environment should never get directly triggered"
- end
+ raise "an environment should never get directly triggered"
+ end
- #
- # Will reschedule any 'Schedulable' variable found in this environment
- # this method especially targets cron expressions that are stored
- # as variables and need to be rescheduled upon engine restart.
- #
- def reschedule (scheduler)
+ #
+ # Will reschedule any 'Schedulable' variable found in this environment
+ # this method especially targets cron expressions that are stored
+ # as variables and need to be rescheduled upon engine restart.
+ #
+ def reschedule (scheduler)
- @fei.owfe_version = OPENWFERU_VERSION \
- if @fei.wfurl == 'ee' and @fei.wfname =='ee'
- #
- # so that older versions of engine envs get accepted
+ @fei.owfe_version = OPENWFERU_VERSION \
+ if @fei.wfurl == 'ee' and @fei.wfname =='ee'
+ #
+ # so that older versions of engine envs get accepted
- @variables.each do |key, value|
+ @variables.each do |key, value|
- #ldebug { "reschedule() - item of class #{value.class}" }
+ #ldebug { "reschedule() - item of class #{value.class}" }
- get_expression_pool.paused_instances[@fei.wfid] = true \
- if key == V_PAUSED
+ get_expression_pool.paused_instances[@fei.wfid] = true \
+ if key == V_PAUSED
- next unless value.kind_of?(Rufus::Schedulable)
+ next unless value.kind_of?(Rufus::Schedulable)
- linfo { "reschedule() for instance of #{value.class.name}" }
+ linfo { "reschedule() for instance of #{value.class.name}" }
- value.application_context = @application_context
- value.reschedule(scheduler)
- end
+ value.application_context = @application_context
+ value.reschedule(scheduler)
+ end
- store_itself
- end
+ store_itself
+ end
- #
- # Returns the top environment for the process instance (the
- # environment just before the engine environment).
- #
- def get_root_environment
+ #
+ # Returns the top environment for the process instance (the
+ # environment just before the engine environment).
+ #
+ def get_root_environment
- #ldebug { "get_root_environment\n#{self}" }
+ #ldebug { "get_root_environment\n#{self}" }
- return self unless @parent_id
+ return self unless @parent_id
- get_parent.get_root_environment
- end
+ get_parent.get_root_environment
+ end
- #--
- #def get_subprocess_environment
- # return self if not @parent_id
- # return self if @parent_id.sub_instance_id != @fei.sub_instance_id
- # get_parent.get_subprocess_environment
- #end
- #++
+ #--
+ #def get_subprocess_environment
+ # return self if not @parent_id
+ # return self if @parent_id.sub_instance_id != @fei.sub_instance_id
+ # get_parent.get_subprocess_environment
+ #end
+ #++
- #
- # Returns a deep copy of this environment.
- #
- def dup
+ #
+ # Returns a deep copy of this environment.
+ #
+ def dup
- env = Environment.new_env(
- @fei.dup,
- @parent_id,
- @environment_id,
- @application_context,
- OpenWFE::fulldup(@attributes))
+ env = Environment.new_env(
+ @fei.dup,
+ @parent_id,
+ @environment_id,
+ @application_context,
+ OpenWFE::fulldup(@attributes))
- env.variables = OpenWFE::fulldup self.variables
+ env.variables = OpenWFE::fulldup self.variables
- env
- end
+ env
end
+ end
end