public PipelineExecutionException(Pipeline FaultingPipeline, Pipeline.PipelineStates ErrorState, Dictionary<string, object> DataSegment, Exception InnerException)
     : base("Pipeline Execution Failed", InnerException) 
 {
     this.faultingPipeline = FaultingPipeline;
     this.errorState = ErrorState;
     this.dataSegment = DataSegment;
 }
 public PipelineExecutionException(Pipeline FaultingPipeline, Pipeline.PipelineStates ErrorState, Dictionary <string, object> DataSegment, Exception InnerException)
     : base("Pipeline Execution Failed", InnerException)
 {
     this.faultingPipeline = FaultingPipeline;
     this.errorState       = ErrorState;
     this.dataSegment      = DataSegment;
 }
Пример #3
0
        /// <summary>
        /// State has changed on the context
        /// </summary>
        void m_context_StateChanged(Pipeline Context, Pipeline.PipelineStates OldState, Pipeline.PipelineStates NewState)
        {
            switch (NewState)
            {
            case Pipeline.PipelineStates.SourceLoaded:

                Dictionary <String, StringCollection> parameters = Context.Data["CommandParameters"] as Dictionary <String, StringCollection>;
                StringCollection tCollection = null;
                if (parameters.TryGetValue("apply-deltas", out tCollection))
                {
                    this.m_enabled = Convert.ToBoolean(tCollection[0]);
                }
                // Collection
                if (parameters.TryGetValue("deltafile", out tCollection))
                {
                    this.m_deltaFiles = tCollection;
                }
                else if (this.m_enabled)
                {
                    throw new InvalidOperationException("When enabled, you must supply delta set files using --deltafile parameter");
                }

                // Validate
                if (this.m_enabled)
                {
                    List <String> remDelta = new List <string>();
                    foreach (var file in this.m_deltaFiles)
                    {
                        if (!File.Exists(file))
                        {
                            System.Diagnostics.Trace.WriteLine(String.Format("Cannot find '{0}', delta will be ignored", file), "error");
                            remDelta.Add(file);
                        }
                    }
                    foreach (var f in remDelta)
                    {
                        this.m_deltaFiles.Remove(f);
                    }
                }
                break;

            case Pipeline.PipelineStates.Compiled:
                if (!m_enabled)
                {
                    return;
                }
                // Optimize the COR repository
                System.Diagnostics.Trace.WriteLine("Applying Delta-Sets...", "information");
                foreach (var delta in this.m_deltaFiles)
                {
                    ApplyDelta(delta, Context.Data["SourceCR"] as ClassRepository);
                }
                break;
            }
        }
Пример #4
0
        void Context_StateChanged(Pipeline Context, Pipeline.PipelineStates OldState, Pipeline.PipelineStates NewState)
        {
            if (!enabled)
            {
                return;
            }


            // string builder to construct the data segment string
            StringBuilder sb = new StringBuilder();

            if (Context.Data != null)
            {
                foreach (KeyValuePair <string, object> kv in Context.Data)
                {
                    sb.AppendFormat("{0}={1}\r\n", kv.Key, kv.Value);
                }
            }
            else
            {
                sb.AppendFormat("--- EMPTY DATA SEGMENT ---");
            }


            // Write out our data segment to the file
            TextWriter tw = output == "stdout" ? Console.Out : output == "stderr" ? Console.Error : null;

            try
            {
                if (tw == null)
                {
                    tw = File.AppendText(output);
                }

                tw.Write(string.Format("{4} - [PIPELINE STATE CHANGE ({0}->{1})]\r\nDATA SEGEMENT SIZE: {2}\r\nDATA SEGMENT DATA:\r\n{3}",
                                       OldState.ToString(), NewState.ToString(), Context.Data == null ? 0 : Context.Data.Count, sb.ToString(), DateTime.Now.ToString("dd-MMM-yy HH:mm:ss")));
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.WriteLine(e.ToString(), "fatal");
            }
            finally
            {
                if (tw != null && tw != System.Console.Out)
                {
                    tw.Close();
                }
            }
        }
        /// <summary>
        /// Fires when the host context has changed
        /// </summary>
        /// <param name="Context">The pipeline that is changing state</param>
        /// <param name="OldState">The old state</param>
        /// <param name="NewState">The new state</param>
        void hostContext_StateChanged(Pipeline Context, Pipeline.PipelineStates OldState, Pipeline.PipelineStates NewState)
        {
            switch (NewState)
            {
            case Pipeline.PipelineStates.SourceLoaded:

                Dictionary <String, StringCollection> parameters = hostContext.Data["CommandParameters"] as Dictionary <String, StringCollection>;
                StringCollection tCollection = null;
                if (parameters.TryGetValue("optimize", out tCollection))
                {
                    enabled = Convert.ToBoolean(tCollection[0]);
                }
                // Collection
                if (parameters.TryGetValue("collapse", out tCollection))
                {
                    collapse = Convert.ToBoolean(tCollection[0]);
                }
                // Combination
                if (parameters.TryGetValue("combine", out tCollection))
                {
                    combine = Convert.ToBoolean(tCollection[0]);
                }
                if (parameters.TryGetValue("collapse-ignore-fixed", out tCollection))
                {
                    collapseIgnoreFixed = Convert.ToBoolean(tCollection[0]);
                }
                if (parameters.TryGetValue("collapse-useless-name", out tCollection))
                {
                    foreach (String s in tCollection)
                    {
                        uselessWords.Add(s);
                    }
                }
                if (parameters.TryGetValue("collapse-important-name", out tCollection))
                {
                    foreach (String s in tCollection)
                    {
                        importantWords.Add(s);
                    }
                }
                if (parameters.TryGetValue("collapse-adv-naming", out tCollection))
                {
                    collapseSpecialNaming = Convert.ToBoolean(tCollection[0]);
                }
                if (parameters.TryGetValue("combine-replay", out tCollection))
                {
                    logFile = tCollection[0];
                }
                // Collapse ignore
                if (!parameters.TryGetValue("collapse-ignore", out collapseIgnore) && collapse)
                {
                    throw new InvalidOperationException("If --collapse is specified, then the --collapse-ignore must be specified");
                }
                break;

            case Pipeline.PipelineStates.Compiled:
                if (!enabled)
                {
                    return;
                }
                // Optimize the COR repository
                System.Diagnostics.Trace.WriteLine("Optimizing COR Repository...", "information");
                ClassRepository          classRep  = hostContext.Data["SourceCR"] as ClassRepository;
                ClassRepositoryOptimizer optimizer = new ClassRepositoryOptimizer();

                // Load the replay log if possible
                var combineLog = new CombineLog();
                if (!String.IsNullOrEmpty(logFile) && File.Exists(logFile))
                {
                    combineLog = CombineLog.Load(logFile);
                }

                ClassRepository optimizedRepository = optimizer.Optimize(classRep, combineLog);

                // Save the replay log
                if (!String.IsNullOrEmpty(logFile))
                {
                    combineLog.Save(logFile);
                }

                System.Diagnostics.Trace.WriteLine(string.Format("Optimization resulted in {0:#,##0} fewer features ({1:#0}% reduction)", classRep.Count - optimizedRepository.Count,
                                                                 (1 - ((float)optimizedRepository.Count / classRep.Count)) * 100), "debug");
                hostContext.Data["SourceCR"] = optimizedRepository;
                break;
            }
        }