public void Execute(frmProgress fp)
        {
            this.fp = fp;
            ExecutionBlock currentNode = root.NormalChild;
            object         lastObject  = null;

            while (currentNode != null)
            {
                AddText("Executing block " + currentNode.DataBinding.Name + "\r\n");

                ExecutionUnitOutput output = currentNode.Execute(lastObject);
                currentNode = currentNode.NormalChild;
                if (output == null)
                {
                    lastObject = null;
                }
                else
                {
                    lastObject = output.ObjectOutput;
                    if (currentNode is DecisionUnit)
                    {
                        if (!output.DecisionOutput)
                        {
                            currentNode = currentNode.NegationChild;
                        }
                    }
                }
            }
            AddText("Execution done!");
        }
        public bool Execute()
        {
            if (BaseApplication.MainInstance == null)
            {
                //ramane apoi sa le numaram sa fie ok
                BaseApplication.MainInstance = new BaseApplication(1000);
            }
            FlowComponent       current = StartNode.GetDefaultNextControl();
            ExecutionUnitOutput eo      = null;
            Object dataToken            = null;

            while ((current != null) && (!(current is FlowStop)))
            {
                //trecem la urmatorul nod si executam tot ce se poate:d
                //procesam datele
                if (current is FlowProcessing)
                {
                    //eo=(current as ProcessingBlock).ProcessData(dataToken, BaseApplication.MainInstance);
                    //dataToken = (current as ProcessingBlock).ProcessData(dataToken, BaseApplication.MainInstance);
                    //if (dataToken == null) return false;
                    eo        = (current as FlowProcessing).ExecutionUnit.Execute(dataToken);
                    dataToken = eo.ObjectOutput;
                    if (dataToken == null)
                    {
                        return(false);
                    }

                    current = current.GetDefaultNextControl();
                }
                else if (current is FlowDecision)
                {
                    eo        = (current as FlowDecision).ExecutionUnit.Execute(dataToken);
                    dataToken = eo.ObjectOutput;
                    bool cond = eo.DecisionOutput;
                    //bool cond = (current as DecisionBlock).EvaluateCondition(dataToken, BaseApplication.MainInstance);
                    //dataToken = (current as DecisionBlock).GetData(dataToken, BaseApplication.MainInstance);
                    if (dataToken == null)
                    {
                        return(false);
                    }
                    if (cond)
                    {
                        current = (current as FlowDecision).GetDefaultNextControl();
                    }
                    else
                    {
                        current = ((current as FlowDecision).GetNegationNextControl() as FlowComponent);
                    }
                }
            }
            return(true);
        }
        public ExecutionUnitOutput Execute(object input)
        {
            MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor1));
            //MyDesignerItem.Caption.Foreground = Brushes.Red;
            System.Windows.Forms.Application.DoEvents();
            if (DataBinding.PluginDll == "")
            {
                try {
                    Regex  inputReg    = new Regex(DataBinding.InputRegex.Regex, DataBinding.InputRegex.Options);
                    Regex  outputReg   = new Regex(DataBinding.OutputRegex.Regex, DataBinding.OutputRegex.Options);
                    Regex  decisionReg = new Regex(DataBinding.ConditionRegex.Regex, DataBinding.ConditionRegex.Options);
                    string inp         = "";
                    foreach (Match m in inputReg.Matches(input.ToString()))
                    {
                        inp += m.Value;
                    }

                    Process p = new Process();
                    p.StartInfo.FileName               = DataBinding.ExecutablePath;
                    p.StartInfo.Arguments              = DataBinding.Parameters.Replace("$script", DataBinding.ScriptPath).Replace("$input", inp);
                    p.StartInfo.UseShellExecute        = false;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.Start();

                    string str             = p.StandardOutput.ReadToEnd();
                    ExecutionUnitOutput eo = new ExecutionUnitOutput();
                    eo.UnformatedOutput = str;
                    eo.DecisionOutput   = decisionReg.IsMatch(str);
                    eo.RegexpOuput      = "";
                    foreach (Match m in outputReg.Matches(str))
                    {
                        eo.RegexpOuput += m.Value;
                    }
                    eo.ObjectOutput = eo.RegexpOuput;
                    p.Dispose();
                    MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor2));
                    return(eo);
                } catch (Exception e) { SysLog.MainInstance.WriteEventException(e); return(null); }
            }
            else
            {
                try {
                    //incarcam dll-ul, cautam un assembly compatibil (trebuie sa fie doar unul) si-l instantiem in obiect
                    ExecutionUnitOutput eo = new ExecutionUnitOutput();

                    //if (Plugin == null) {
                    Assembly asm = Assembly.LoadFile(DataBinding.PluginDll);
                    foreach (Type t in asm.GetTypes())
                    {
                        //trebuie sa instantiem tipurile ca sa verificam daca implementeaza interfata
                        try {
                            Object o = Activator.CreateInstance(t);
                            if (o is DecisionBlock)
                            {
                                eo.DecisionOutput = (o as DecisionBlock).EvaluateCondition(input, BaseApplication.MainInstance);
                                eo.ObjectOutput   = (o as DecisionBlock).GetData(input, BaseApplication.MainInstance);
                            }
                            if (o is ProcessingBlock)
                            {
                                eo.ObjectOutput = (o as ProcessingBlock).ProcessData(input, BaseApplication.MainInstance);
                            }
                        } catch (Exception e) {
                            SysLog.MainInstance.WriteEventException(e);
                        }
                    }
                    //}
                    MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor2));
                    return(eo);
                } catch (Exception e) {
                    SysLog.MainInstance.WriteEventException(e);
                    MyDesignerItem.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Func(ChangeColor2));
                    return(null);
                }
            }
        }