/// <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(); } } }
/// <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); }
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; }
/// <summary> </summary> public void AddOutgoingElement(GraphElement outgoing) { OutgoingElements.Add(outgoing); }
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); } }