Example #1
0
        public static bool IsItemInSequence(this ModelItem item, out ModelItem sequence)
        {
            if (null == item)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("item"));
            }

            bool result = false;
            int  level  = 0;

            Func <ModelItem, bool> isInSequencePredicate = (p) =>
            {
                switch (level)
                {
                case 0:
                    ++level;
                    return(p is ModelItemCollection);

                case 1:
                    ++level;
                    result = typeof(Sequence).IsAssignableFrom(p.ItemType);
                    return(result);

                default:
                    return(false);
                }
                ;
            };

            ModelItem container = item.GetParentEnumerator(isInSequencePredicate).LastOrDefault();

            sequence = result ? container : null;
            return(result);
        }
Example #2
0
        public static bool IsItemInFlowchart(this ModelItem item, out ModelItem flowchart, out ModelItem flowStep)
        {
            if (null == item)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("item"));
            }

            bool      result            = false;
            int       level             = 0;
            ModelItem flowStepContainer = null;

            flowchart = null;
            flowStep  = null;

            Func <ModelItem, bool> isInFlowchartPredicate = (p) =>
            {
                switch (level)
                {
                case 0:
                    ++level;
                    flowStepContainer = typeof(FlowStep).IsAssignableFrom(p.ItemType) ? p : null;
                    return(null != flowStepContainer);

                case 1:
                    ++level;
                    return(p is ModelItemCollection);

                case 2:
                    ++level;
                    result = (typeof(Flowchart).IsAssignableFrom(p.ItemType));
                    return(result);

                default:
                    return(false);
                }
            };

            ModelItem container = item.GetParentEnumerator(isInFlowchartPredicate).LastOrDefault();

            if (result)
            {
                flowchart = container;
                flowStep  = flowStepContainer;
            }

            return(result);
        }