/// <summary>
 /// Invokes the analyse mood.
 /// </summary>
 /// <param name="message">The message will be any its depend on user</param>
 /// <param name="methodeName">create mood analyzer using parameterized constructor</param>
 /// <returns>message</returns>
 /// <exception cref="MoodAnalyzerException">Method is not found</exception>
 public static string InvokeAnalyseMood(string message, string methodeName)
 {
     try
     {
         Type       type = Type.GetType("MoodAnalyzerProblem.MoodAnalyzer");
         object     moodAnalyseObject = MoodAnalyzerFactory.CreateMoodAnalyzerUsingParameterizedConstructor("MoodAnalyzerProblem.MoodAnalyzer", "MoodAnalyzer", message);
         MethodInfo methodeInfo       = type.GetMethod(methodeName);
         object     mood = methodeInfo.Invoke(moodAnalyseObject, null);
         return(mood.ToString());
     }
     catch
     {
         throw new MoodAnalyzerException(MoodAnalyzerException.ExceptionType.NO_SUCH_METHODE, "Method is not found");
     }
 }
        //public object CreateMoodAnalyzerParameterObject(string className, string constructor, string message)
        //{
        //    Type type = typeof(MoodAnalyzer);

        //    if (type.Name.Equals(className) || type.FullName.Equals(className))  //check class naem same or not
        //    {
        //        if (type.Name.Equals(constructor))
        //        {
        //            //MoodAnalyzerProblem.MoodAnalyzer
        //            //string pattern = @"." + constructor + "$";
        //            // Match result = Regex.Match(className, pattern); //regex predefine class .pattern matching store result suppose pattern matching then create object than an constructor

        //            ConstructorInfo constructorInfo = type.GetConstructor(new[] { typeof(string) }); //get constructor fetching one construct bsae on the  he feth string parameter constructor fetching
        //            var obj = constructorInfo.Invoke(new object[] { message }); //create object that Parameter Constructor by passing message
        //            return obj;
        //        }
        //        else
        //        {
        //            throw new MoodAnalyzerException(MoodAnalyzerException.ExceptionType.CONSTRUCTOR_NOT_FOUND, "constructor not found");//Constructor name not maching that time we run
        //        }
        //    }
        //    else
        //    {
        //        throw new MoodAnalyzerException(MoodAnalyzerException.ExceptionType.CLASS_NOT_FOUND, "class not found");//Constructor name not maching that time we run
        //    }
        //}

        /* UC6:- Use Reflection to invoke Method –analyseMood
         *       - Use Reflector to Invoke Method
         */
        public string InvokeAnalyzerMethod(string message, string methodName)
        {
            try
            {
                Type type = typeof(MoodAnalyzer);

                MethodInfo          analyzerMoodInfo = type.GetMethod(methodName);
                MoodAnalyzerFactory Factory          = new MoodAnalyzerFactory();
                object moodAnalyzerObject            = Factory.CreateMoodAnalyzerParameterObject("MoodAnalyzerProblem.MoodAnalyzer", "MoodAnalyzer", message);
                object mood = analyzerMoodInfo.Invoke(moodAnalyzerObject, null);
                return(mood.ToString());
            }
            catch (NullReferenceException)
            {
                throw new MoodAnalyzerException(MoodAnalyzerException.ExceptionType.NO_SUCH_METHOD, "Method is not found");
            }
        }