/// <summary>
        /// Notifies the observers.
        /// </summary>
        /// <param name="scriptingStatusDescription">The scripting status description.</param>
        /// <param name="aditionalData">The aditional data.</param>
        private void NotifyObservers(ScriptingStatusDescription scriptingStatusDescription, object aditionalData)
        {
            ScriptingStatus scriptingStatus = new ScriptingStatus
            {
                AditionalData = aditionalData,
                ScriptingStatusDescription = scriptingStatusDescription
            };

            foreach (IScriptingStatusObserver observer in this.observers)
            {
                observer.ReceiveMessage(this, scriptingStatus);
            }
        }
        /// <summary>
        /// Gets the strategy for the given scripting status description.
        /// </summary>
        /// <param name="scriptingStatusDescription">The scripting status description.</param>
        /// <returns></returns>
        public IScriptingStatusInterpretationStrategy GetStrategy(ScriptingStatusDescription scriptingStatusDescription)
        {
            switch (scriptingStatusDescription)
            {
            case ScriptingStatusDescription.BeginAllScriptsCompile:
                return(new BeginAllScriptsCompileScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.FinalizeAllScriptsCompile:
                return(new FinalizeAllScriptsCompileScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.BeginScriptCompile:
                return(new BeginScriptCompileCompileScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.FinalizeScriptCompile:
                return(new FinalizeScriptCompileScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.SuccessScriptCompile:
                return(new SuccessScriptCompileScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.FailScriptCompile:
                return(new FailScriptCompileScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.BeginAllScriptsExecute:
                return(new BeginAllScriptsExecuteScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.FinalizeAllScriptsExecute:
                return(new FinalizeAllScriptsExecuteScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.BeginScriptExecute:
                return(new BeginScriptExecuteScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.FinalizeScriptExecute:
                return(new FinalizeScriptExecuteScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.SuccessScriptExecute:
                return(new SuccessScriptExecuteScriptingStatusInterpretationStrategy());

            case ScriptingStatusDescription.FailScriptExecute:
                return(new FailScriptExecuteScriptingStatusInterpretationStrategy());

            default:
                return(new EmptyScriptingStatusInterpretationStrategy());
            }
        }
 /// <summary>
 /// Notifies the observers.
 /// </summary>
 /// <param name="scriptingStatusDescription">The scripting status description.</param>
 private void NotifyObservers(ScriptingStatusDescription scriptingStatusDescription)
 {
     this.NotifyObservers(scriptingStatusDescription, null);
 }