Ejemplo n.º 1
0
        /// <summary> </summary>
        public void AddIncomingElement(GraphElement incoming)

        {
            IncomingElements.Add(incoming);
            int maxLength = Math.Max(incoming.graphLength + 1, this.graphLength);

            if (maxLength > this.graphLength)
            {
                this.graphLength = maxLength;
                foreach (var item in OutgoingElements)
                {
                    item.Update();
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Method to check if an element is active
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public bool IsActive(GraphElement element)
        {
            bool ans = true;

            var attributes = element.CurrentElement.attributes;

            foreach (var attribute in attributes)
            {
                var typeName = this.ObjectAttributeTypesById[attribute.id];
                if (typeName.Equals("Active"))
                {
                    return(attribute.ObjectAttributeValues[0].displayValue.Equals("Active"));
                }
            }
            return(ans);
        }
Ejemplo n.º 3
0
        private void BuildServiceGraph()
        {
            List <GraphElement> tmp         = Sources;
            List <GraphElement> allElements = new List <GraphElement>();

            GraphElement[] array = null;
            while (tmp != null)
            {
                this.RouteEnd = tmp;
                array         = new GraphElement[tmp.Count];
                tmp.CopyTo(array, 0);
                for (int i = 0; i < array.Length; i++)
                {
                    if (!allElements.Contains(array[i]))
                    {
                        allElements.Add(array[i]);
                    }
                }
                tmp = BuildNextGraphLevel(tmp, allElements);
            }
            graphElements = allElements;
        }
Ejemplo n.º 4
0
        /// <summary> </summary>
        public void AddOutgoingElement(GraphElement outgoing)

        {
            OutgoingElements.Add(outgoing);
        }
Ejemplo n.º 5
0
        private List <GraphElement> BuildNextGraphLevel(List <GraphElement> GraphElementsLevel, List <GraphElement> allElements)
        {
            ObjectEntry         incomingElement;
            GraphElement        prev;
            GraphElement        next;
            List <GraphElement> nextLevelElements = new List <GraphElement>();

            int[]         indexes;
            int           elementIndex         = 0;
            int           incomingElementIndex = 0;
            HashSet <int> indexHolder          = null;

            GraphElement[] GraphElementsArray = new GraphElement[GraphElementsLevel.Count];
            GraphElementsLevel.CopyTo(GraphElementsArray);
            for (int i = 0; i < RouteElements.Count; i++)
            {
                indexHolder = ElementIncomingElementIndexes[i];
                if (indexHolder != null)
                {
                    indexes = new int[indexHolder.Count];
                    ElementIncomingElementIndexes[i].CopyTo(indexes, 0);

                    for (incomingElementIndex = 0; incomingElementIndex < indexes.Length; incomingElementIndex++)
                    {
                        elementIndex    = indexes[incomingElementIndex];
                        incomingElement = RouteElements[elementIndex];
                        for (int j = 0; j < GraphElementsArray.Length; j++)
                        {
                            prev = (GraphElement)GraphElementsArray[j];
                            if (incomingElement.name.Equals(prev.CurrentElement.name))
                            {
                                next = new GraphElement(RouteElements[i], prev.graphLength - 1, this.ObjectAttributeTypesById);
                                if (allElements.Contains(next))
                                {
                                    next = allElements[allElements.IndexOf(next)];
                                }
                                if (!next.IncomingElements.Contains(prev))
                                {
                                    next.AddIncomingElement(prev);
                                }

                                if (!prev.OutgoingElements.Contains(next))
                                {
                                    prev.AddOutgoingElement(next);
                                }
                                nextLevelElements.Add(next);
                            }
                        }
                    }
                }
            }

            if (nextLevelElements.Count == 0)
            {
                return(null);
            }
            else
            {
                return(nextLevelElements);
            }
        }