/// <summary>
 /// Test constructor
 /// </summary>
 /// <param name="iEmailProvider">Email provider</param>
 /// <param name="iTfsProvider">Smpt Provider</param>
 /// <param name="scriptFile">The script file to run</param>
 /// <param name="dslFolder">Folder to scan for DSL assemblies</param>
 public DslScriptService(Providers.IEmailProvider iEmailProvider, Providers.ITfsProvider iTfsProvider, string scriptFile, string dslFolder)
 {
     this.iEmailProvider = iEmailProvider;
     this.iTfsProvider   = iTfsProvider;
     this.scriptFile     = scriptFile;
     this.dslFolder      = dslFolder;
 }
        /// <summary>
        /// Default constructor
        /// </summary>
        public DslScriptService()
        {
            this.iEmailProvider = new Providers.SmtpEmailProvider(
                System.Configuration.ConfigurationManager.AppSettings["SMTPServer"],
                System.Configuration.ConfigurationManager.AppSettings["FromEmail"],
                System.Configuration.ConfigurationManager.AppSettings["EmailDomain"]);

            this.scriptFile   = System.Configuration.ConfigurationManager.AppSettings["ScriptFile"];
            this.dslFolder    = System.Configuration.ConfigurationManager.AppSettings["DSLFolder"];
            this.scriptFolder = System.Configuration.ConfigurationManager.AppSettings["ScriptFolder"];

            this.iTfsProvider = new Providers.TfsProvider();
        }
        public void RunScript(string dslFolder, string scriptFolder, string scriptname, Dictionary <string, object> args, Providers.ITfsProvider iTfsProvider, Providers.IEmailProvider iEmailProvider, string eventXml)
        {
            if (scriptname == null)
            {
                throw new ArgumentNullException("scriptname");
            }
            else
            {
                if (string.IsNullOrEmpty(scriptFolder))
                {
                    scriptFolder = ".";
                }

                if (File.Exists(scriptname) == false)
                {
                    this.logger.Info(string.Format("TFSEventsProcessor: DslProcessor cannot find script:{0}", scriptname));

                    // we have not been given a resolvable file name, so try appending the base path
                    scriptname = Path.Combine(scriptFolder, scriptname);
                    if (File.Exists(scriptname) == false)
                    {
                        this.logger.Error(string.Format("TFSEventsProcessor: DslProcessor cannot find script:{0}", scriptname));
                        throw new FileNotFoundException(string.Format("The script file '{0}' could not be found", scriptname));
                    }
                }
            }

            if (eventXml == null)
            {
                throw new ArgumentNullException("eventXml");
            }

            if (iTfsProvider == null)
            {
                throw new ArgumentNullException("iTfsProvider");
            }

            if (iEmailProvider == null)
            {
                throw new ArgumentNullException("iEmailProvider");
            }

            if (string.IsNullOrEmpty(dslFolder))
            {
                dslFolder = ".";
            }

            // load the DSL wrapper class via MEF
            //An aggregate catalog that combines multiple catalogs
            var catalog = new AggregateCatalog();

            //Adds all the parts found in the same assembly as the Program class
            if (Directory.Exists(dslFolder))
            {
                this.logger.Info(
                    string.Format("TFSEventsProcessor: DslProcessor loading DSL from {0}", Path.GetFullPath(dslFolder)));
                catalog.Catalogs.Add(new DirectoryCatalog(dslFolder));
            }
            else
            {
                this.logger.Error(
                    string.Format("TFSEventsProcessor: DslProcessor cannot find DSL folder {0}", Path.GetFullPath(dslFolder)));
                return;
            }

            //Create the CompositionContainer with the parts in the catalog
            var container = new CompositionContainer(catalog);

            try
            {
                container.ComposeParts(this);
            }
            catch (CompositionException compositionException)
            {
                this.logger.Error(compositionException.ToString());
                return;
            }

            if (this.dslLibraries.Any())
            {
                // create the engine
                var engine = IronPython.Hosting.Python.CreateEngine(args);
                var objOps = engine.Operations;
                var scope  = engine.CreateScope();

                // inject the providers
                foreach (var item in this.dslLibraries)
                {
                    item.EmailProvider = iEmailProvider;
                    item.TfsProvider   = iTfsProvider;
                    item.EventXml      = eventXml;
                    item.ScriptFolder  = scriptFolder;

                    // Read in the methods
                    foreach (string memberName in objOps.GetMemberNames(item))
                    {
                        scope.SetVariable(memberName, objOps.GetMember(item, memberName));
                    }
                }

                // run the script
                this.logger.Info(string.Format(
                                     "TFSEventsProcessor: DslProcessor running script:{0}",
                                     scriptname));
                var script = engine.CreateScriptSourceFromFile(scriptname);
                script.Execute(scope);
            }
            else
            {
                this.logger.Error(
                    string.Format("TFSEventsProcessor: DslProcessor cannot find DSL libraries in folder {0}", Path.GetFullPath(dslFolder)));
                return;
            }
        }
 /// <summary>
 /// Runs a named Pyphon script that uses the DSL
 /// </summary>
 /// <param name="scriptname">The python script file</param>
 /// <param name="args">The parameters to pass to the script</param>
 /// <param name="iTfsProvider">The TFS provider</param>
 /// <param name="iEmailProvider">The email provider</param>
 public void RunScript(string scriptname, Dictionary <string, object> args, Providers.ITfsProvider iTfsProvider, Providers.IEmailProvider iEmailProvider)
 {
     this.RunScript(@".\dsl", ".", scriptname, args, iTfsProvider, iEmailProvider, string.Empty);
 }
 /// <summary>
 /// Runs a named Pyphon script that uses the DSL
 /// </summary>
 /// <param name="scriptname">The python script file</param>
 /// <param name="iTfsProvider">The TFS provider</param>
 /// <param name="iEmailProvider">The email provider</param>
 public void RunScript(string scriptname, Providers.ITfsProvider iTfsProvider, Providers.IEmailProvider iEmailProvider)
 {
     this.RunScript(@".\dsl", ".", scriptname, null, iTfsProvider, iEmailProvider, string.Empty);
 }
Exemple #6
0
 /// <summary>
 /// Constructor for DSL library
 /// </summary>
 /// <param name="iTfsProvider">The TFS provider</param>
 /// <param name="iEmailProvider">The Email provider</param>
 public DslLibrary(Providers.ITfsProvider iTfsProvider, Providers.IEmailProvider iEmailProvider)
 {
     this.iTfsProvider   = iTfsProvider;
     this.iEmailProvider = iEmailProvider;
 }