Esempio n. 1
0
 private void SortPrevSteps(LcdStep step)
 {
     if (step.HasJoins && step.Joins.Count > 1)
     {
         step.Joins.Sort(this.ComparePath);
     }
 }
Esempio n. 2
0
        private LcdStep GetNonPathNextStep(Process proc, LcdStep step, Dictionary <string, LcdStep> traversed)
        {
            SortedList <string, LcdStep> steps = new SortedList <string, LcdStep>();

            foreach (LcdStep it in proc.Steps)
            {
                if (traversed.ContainsKey(it.StepID))
                {
                    continue;
                }


                if (this.CompareSteps(step, it) < 0)
                {
                    steps.Add(it.StepID, it);
                }

                if (steps.Count > 0)
                {
                    return(steps.Values[0]);
                }
            }

            return(null);
        }
Esempio n. 3
0
        private void FixRoute(Process proc)
        {
            LcdStep step = proc.FirstStep as LcdStep;

            //무한루프 방지(동일Process안에 Key인 동일 StepID가 존재하면 Key를 변경필요(그럴일 없겠지만)
            Dictionary <string, LcdStep> traversed = new Dictionary <string, LcdStep>();

            while (step != null)
            {
                LcdStep next = GetNonPathNextStep(proc, step, traversed);
                if (next == null)
                {
                    break;
                }

                new PrpPath(step, next, PrpPathType.Pass, 1);
                while (next != null)
                {
                    if (traversed.ContainsKey(step.StepID))
                    {
                        Logger.MonitorInfo("!!!!!!!!! Error Check ProcStep : ProcessID:{0}/ StepID:{1}", proc.ProcessID, step.StepID);
                        return;
                    }
                    else
                    {
                        traversed.Add(step.StepID, step);
                    }

                    step = next;
                    next = step.NextStep as LcdStep;
                }
            }
        }
Esempio n. 4
0
        private static int HasNext(LcdStep x)
        {
            if (x.NextStep == null)
            {
                return(1);
            }

            return(0);
        }
Esempio n. 5
0
        private void InitializeRoute(Process proc)
        {
            LcdStep step = proc.FirstStep as LcdStep;

            if (step == null)
            {
                return;
            }

            int index = 0;


            Dictionary <LcdStep, object> traversed = new Dictionary <LcdStep, object>();

            traversed.Add(step, null);

            LcdStep prev = null;

            while (step != null)
            {
                if (step.StepType == "MAIN")
                {
                    step.Sequence = index++;
                }
                else
                {
                    step.Sequence = -1;
                }

                prev = step;
                step = step.NextStep as LcdStep;

                if (step != null)
                {
                    if (traversed.ContainsKey(step))
                    {
                        // remove endless loop link ?
                        step.Splits.Clear();

                        break;
                    }

                    traversed.Add(step, null);
                }
            }

            foreach (LcdStep it in proc.Steps)
            {
                SortPrevSteps(it);
            }
        }
Esempio n. 6
0
        public static int CompareSteps(LcdStep x, LcdStep y)
        {
            int cmp = x.Sequence.CompareTo(y.Sequence);

            if (cmp == 0)
            {
                cmp = HasNext(x).CompareTo(HasNext(y));
            }
            if (cmp == 0)
            {
                cmp = x.StepID.CompareTo(y.StepID);
            }

            return(cmp);
        }
Esempio n. 7
0
        private void AddStep(Process process, LcdStep step, Dictionary <LcdStep, LcdStep> traversed)
        {
            if (traversed.ContainsKey(step))
            {
                return;
            }

            process.RootActivity.Steps.Add(step);
            traversed.Add(step, step);

            if (step.HasSplits == false)
            {
                return;
            }

            foreach (PrpPath path in step.Splits)
            {
                AddStep(process, path.ToStep as LcdStep, traversed);
            }
        }
Esempio n. 8
0
        private int ComparePath(Mozart.SeePlan.DataModel.Transition a, Mozart.SeePlan.DataModel.Transition b)
        {
            if (object.ReferenceEquals(a, b))
            {
                return(0);
            }

            PrpPath x = (PrpPath)a;
            PrpPath y = (PrpPath)b;

            int cmp = x.Type.CompareTo(y.Type);

            if (cmp == 0)
            {
                LcdStep xStep = x.Step as LcdStep;
                LcdStep yStep = y.Step as LcdStep;

                cmp = this.ComparePrevSteps(xStep, yStep);
            }

            return(cmp);
        }
Esempio n. 9
0
 public static int ComparePrevSteps(LcdStep x, LcdStep y)
 {
     return(x.Sequence.CompareTo(y.Sequence));
 }
Esempio n. 10
0
 private int CompareStepSeq(LcdStep x, LcdStep y)
 {
     return(CompareSteps(x, y));
 }