package rocks.inspectit.server.diagnosis.engine.rule; import static com.google.common.base.Preconditions.checkNotNull; import java.util.Map; import rocks.inspectit.server.diagnosis.engine.session.Session; /** * Value object providing information to execute a rule implementation. A instance of * <code>ExecutionContext</code> is valid for exactly one execution of a rule implementation. * * <pre> * This encloses: * <ul> * <li>All {@link TagInjection}</li> * <li>All session variables</li> * <li>All {@link ConditionMethod}</li> * <li>The {@link ActionMethod}</li> * </ul> * </pre> * * After the rule is executed the ExecutionContext is invalid and destroyed. * * @author Claudio Waldvogel, Alexander Wert */ public class ExecutionContext { /** * The backing rule implementation. */ private final Object instance; /** * The {@link RuleDefinition} to be executed. The {@link RuleDefinition} is a abstracted and * generalized of a rule implementation {@link #instance)}. * * @see RuleDefinition */ private final RuleDefinition definition; /** * The input to be processed by the rule. * * @see RuleInput */ private final RuleInput input; /** * Container providing all the session variables. */ private final Map<String, Object> sessionParameters; /** * Default Constructor. * * @param definition * The {@link RuleDefinition} * @param instance * The <code>actual implementation</code> * @param input * The {@link RuleInput} to be processed */ public ExecutionContext(RuleDefinition definition, Object instance, RuleInput input) { this(definition, instance, input, Session.EMPTY_SESSION_VARIABLES); } /** * Constructor with session variables. * * @param definition * The {@link RuleDefinition} * @param instance * The <code>actual implementation</code> * @param input * The {@link RuleInput} to be processed * @param sessionParameters * The session variables. */ public ExecutionContext(RuleDefinition definition, Object instance, RuleInput input, Map<String, Object> sessionParameters) { this.definition = checkNotNull(definition, "Rule definition must not be null!"); this.instance = checkNotNull(instance, "Rule implementation instance must not be null!"); this.input = checkNotNull(input, "Rule input must not be null!"); this.sessionParameters = checkNotNull(sessionParameters, "Session parameters must not be null!"); } // ------------------------------------------------------------- // Methods: Accessors // ------------------------------------------------------------- /** * Gets {@link #instance)}. * * @return {@link #instance} */ public Object getInstance() { return instance; } /** * Gets {@link #definition}. * * @return {@link #definition} */ public RuleDefinition getDefinition() { return definition; } /** * Gets {@link #input}. * * @return {@link #input} */ public RuleInput getRuleInput() { return input; } /** * Gets {@link #sessionParameters}. * * @return {@link #sessionParameters} */ public Map<String, Object> getSessionParameters() { return sessionParameters; } }