/// <summary>
        /// Creates the swallow exception hander.
        /// </summary>
        /// <param name="parsedAdviceExpression">The parsed advice expression.</param>
        /// <returns></returns>
        protected virtual IExceptionHandler CreateSwallowExceptionHander(ParsedAdviceExpression parsedAdviceExpression)
        {
            IExceptionHandler handler;

            handler = new SwallowExceptionHandler(parsedAdviceExpression.ExceptionNames);
            return(handler);
        }
 private void AddExceptionNames(ParsedAdviceExpression parsedAdviceExpression, IExceptionHandler handler)
 {
     foreach (string exceptionName in parsedAdviceExpression.ExceptionNames)
     {
         handler.SourceExceptionNames.Add(exceptionName);
     }
 }
        /// <summary>
        /// Parses the specified handler string, creating an instance of IExceptionHander.
        /// </summary>
        /// <param name="handlerString">The handler string.</param>
        /// <returns>an instance of an exception handler or null if was not able to correctly parse
        /// handler string.</returns>
        protected virtual IExceptionHandler Parse(string handlerString)
        {
            ParsedAdviceExpression parsedAdviceExpression = ParseAdviceExpression(handlerString);

            if (!parsedAdviceExpression.Success)
            {
                log.Warn("Could not parse exception hander statement " + handlerString);
                return(null);
            }

            return(CreateExceptionHandler(parsedAdviceExpression));
        }
 /// <summary>
 /// Creates the exception handler.
 /// </summary>
 /// <param name="parsedAdviceExpression">The parsed advice expression.</param>
 /// <returns>The exception handler instance</returns>
 protected virtual IExceptionHandler CreateExceptionHandler(ParsedAdviceExpression parsedAdviceExpression)
 {
     if (parsedAdviceExpression.ActionText.IndexOf("log") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.ContainsKey("log"))
         {
             handler = exceptionHandlerTable["log"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateLogExceptionHandler(parsedAdviceExpression.ExceptionNames);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         handler.ActionExpressionText     = parsedAdviceExpression.ActionExpressionText;
         return(handler);
     }
     else if (parsedAdviceExpression.ActionText.IndexOf("translate") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.Contains("translate"))
         {
             handler = exceptionHandlerTable["translate"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateTranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         handler.ActionExpressionText     = parsedAdviceExpression.ActionExpressionText;
         return(handler);
     }
     else if (parsedAdviceExpression.ActionText.IndexOf("wrap") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.Contains("wrap"))
         {
             handler = exceptionHandlerTable["wrap"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateTranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         handler.ActionExpressionText     = ParseWrappedExceptionExpression("wrap", parsedAdviceExpression.AdviceExpression);
         return(handler);
     }
     else if (parsedAdviceExpression.ActionText.IndexOf("replace") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.Contains("replace"))
         {
             handler = exceptionHandlerTable["replace"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateTranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         handler.ActionExpressionText     = ParseWrappedExceptionExpression("replace", parsedAdviceExpression.AdviceExpression);
         return(handler);
     }
     else if (parsedAdviceExpression.ActionText.IndexOf("swallow") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.Contains("swallow"))
         {
             handler = exceptionHandlerTable["swallow"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateSwallowExceptionHander(parsedAdviceExpression);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         return(handler);
     }
     else if (parsedAdviceExpression.ActionText.IndexOf("return") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.Contains("return"))
         {
             handler = exceptionHandlerTable["return"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateReturnValueExceptionHandler(parsedAdviceExpression);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         handler.ActionExpressionText     = parsedAdviceExpression.ActionExpressionText;
         return(handler);
     }
     else if (parsedAdviceExpression.ActionText.IndexOf("execute") >= 0)
     {
         IExceptionHandler handler;
         if (exceptionHandlerTable.Contains("execute"))
         {
             handler = exceptionHandlerTable["execute"];
             AddExceptionNames(parsedAdviceExpression, handler);
         }
         else
         {
             handler = CreateExecuteSpelExceptionHandler(parsedAdviceExpression);
         }
         handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
         handler.ActionExpressionText     = parsedAdviceExpression.ActionExpressionText;
         return(handler);
     }
     else
     {
         log.Warn("Could not parse exception hander statement " + parsedAdviceExpression.AdviceExpression);
     }
     return(null);
 }
 private void AddExceptionNames(ParsedAdviceExpression parsedAdviceExpression, IExceptionHandler handler)
 {
     foreach (string exceptionName in parsedAdviceExpression.ExceptionNames)
     {
         handler.SourceExceptionNames.Add(exceptionName);
     }
 }
 /// <summary>
 /// Creates the swallow exception hander.
 /// </summary>
 /// <param name="parsedAdviceExpression">The parsed advice expression.</param>
 /// <returns></returns>
 protected virtual IExceptionHandler CreateSwallowExceptionHander(ParsedAdviceExpression parsedAdviceExpression)
 {
     IExceptionHandler handler;
     handler = new SwallowExceptionHandler(parsedAdviceExpression.ExceptionNames);
     return handler;
 }
        /// <summary>
        /// Creates the exception handler.
        /// </summary>
        /// <param name="parsedAdviceExpression">The parsed advice expression.</param>
        /// <returns>The exception handler instance</returns>
        protected virtual IExceptionHandler CreateExceptionHandler(ParsedAdviceExpression parsedAdviceExpression)           
        {
            if (parsedAdviceExpression.ActionText.IndexOf("log") >= 0)
            {
                IExceptionHandler handler;
                if (exceptionHandlerTable.ContainsKey("log"))
                {
                    handler = exceptionHandlerTable["log"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                } else
                {
                    handler = CreateLogExceptionHandler(parsedAdviceExpression.ExceptionNames);
                }                
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                handler.ActionExpressionText = parsedAdviceExpression.ActionExpressionText;
                return handler;
            }
            else if (parsedAdviceExpression.ActionText.IndexOf("translate") >= 0)
            {
                IExceptionHandler handler;
                if (exceptionHandlerTable.Contains("translate"))
                {
                    handler = exceptionHandlerTable["translate"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                }
                else
                {
                    handler = CreateTranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
                }                
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                handler.ActionExpressionText = parsedAdviceExpression.ActionExpressionText;
                return handler;
            }
            else if (parsedAdviceExpression.ActionText.IndexOf("wrap") >= 0)
            {

                IExceptionHandler handler;
                if (exceptionHandlerTable.Contains("wrap"))
                {
                    handler = exceptionHandlerTable["wrap"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                }
                else
                {
                    handler = CreateTranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
                }                
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                handler.ActionExpressionText = ParseWrappedExceptionExpression("wrap", parsedAdviceExpression.AdviceExpression);                
                return handler;                
            }
            else if (parsedAdviceExpression.ActionText.IndexOf("replace") >= 0)
            {

                IExceptionHandler handler;
                if (exceptionHandlerTable.Contains("replace"))
                {
                    handler = exceptionHandlerTable["replace"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                } else
                {
                    handler = CreateTranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
                }                 
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                handler.ActionExpressionText = ParseWrappedExceptionExpression("replace", parsedAdviceExpression.AdviceExpression);
                return handler;
            }
            else if (parsedAdviceExpression.ActionText.IndexOf("swallow") >= 0)
            {

                IExceptionHandler handler;
                if (exceptionHandlerTable.Contains("swallow"))
                {
                    handler = exceptionHandlerTable["swallow"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                }
                else
                {
                    handler = CreateSwallowExceptionHander(parsedAdviceExpression);
                }
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                return handler;
            }
            else if (parsedAdviceExpression.ActionText.IndexOf("return") >= 0)
            {

                IExceptionHandler handler;
                if (exceptionHandlerTable.Contains("return"))
                {
                    handler = exceptionHandlerTable["return"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                }
                else
                {
                    handler = CreateReturnValueExceptionHandler(parsedAdviceExpression);
                }
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                handler.ActionExpressionText = parsedAdviceExpression.ActionExpressionText;
                return handler;
            }
            else if (parsedAdviceExpression.ActionText.IndexOf("execute") >= 0)
            {
                IExceptionHandler handler;
                if (exceptionHandlerTable.Contains("execute"))
                {
                    handler = exceptionHandlerTable["execute"];
                    AddExceptionNames(parsedAdviceExpression, handler);
                }
                else
                {
                    handler = CreateExecuteSpelExceptionHandler(parsedAdviceExpression);
                }
                handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
                handler.ActionExpressionText = parsedAdviceExpression.ActionExpressionText;
                return handler;
            }
            else
            {
                log.Warn("Could not parse exception hander statement " + parsedAdviceExpression.AdviceExpression);
            }
            return null;
        }