public virtual void ReplicateList <OtherType>(ref List <EntityLink <OtherType> > Source, ref List <EntityLink <EntityType> > Destination, XMLSerializable.LinkType ListType) where OtherType : LinkedEntity <OtherType>, new() { List <EntityLink <EntityType> > NodesToProcess = new List <EntityLink <EntityType> >(); for (int CurrentLocalNode = 0; CurrentLocalNode < Destination.Count; ++CurrentLocalNode) { bool bFound = false; for (int CurrentNode = 0; CurrentNode < Source.Count; ++CurrentNode) { if (Source[CurrentNode].Name == Destination[CurrentLocalNode].Name) { bFound = true; break; } } if (!bFound) { NodesToProcess.Add(Destination[CurrentLocalNode]); Destination.RemoveAt(CurrentLocalNode); --CurrentLocalNode; } } for (int CurrentNode = 0; CurrentNode < NodesToProcess.Count; ++CurrentNode) { BreakLinksToLink(NodesToProcess[CurrentNode]); } for (int CurrentNode = 0; CurrentNode < Source.Count; ++CurrentNode) { bool bFound = false; for (int CurrentLocalNode = 0; CurrentLocalNode < Destination.Count; ++CurrentLocalNode) { if (Destination[CurrentLocalNode].Name == Source[CurrentNode].Name) { bFound = true; break; } } if (!bFound) { CreateAndAddNewStartEndNodeConnection(Source[CurrentNode].Name, ListType); } } }
public virtual void FixupStartEndLink(EntityLink <EntityType> SourceLink, string DestLinkFilename, string DestLinkName, XMLSerializable.LinkType TypeName) { EntityType DestEntity = GetEntityByFileName(DestLinkFilename); if (DestEntity != null) { EntityLink <EntityType> DestinationLink = ((EntityType)DestEntity).GetLinkByName(DestLinkName); if (DestinationLink != null) { SourceLink.EstablishLink(DestinationLink); DestinationLink.EstablishLink(SourceLink); } } else { string InvertLinkType = (DestLinkName.StartsWith("Input") ? DestLinkName.Replace("Input", "Output") : DestLinkName.Replace("Output", "Input")); EntityLink <EntityType> DestinationLink = GetLinkByName(InvertLinkType); if (DestinationLink != null) { SourceLink.EstablishLink(DestinationLink); DestinationLink.EstablishLink(SourceLink); } } }
public virtual void CreateAndAddNewStartEndNodeConnection(string ConnectionName, XMLSerializable.LinkType NodeType) { if (NodeType == XMLSerializable.LinkType.LINK_StartLink) { EntityLink <EntityType> StartLink = new EntityLink <EntityType>(); StartLink.CurrentLinkType = XMLSerializable.LinkType.LINK_StartLink; StartLink.Name = ConnectionName; StartingEntities.Add(StartLink); } else if (NodeType == XMLSerializable.LinkType.LINK_EndLink) { EntityLink <EntityType> EndLink = new EntityLink <EntityType>(); EndLink.CurrentLinkType = XMLSerializable.LinkType.LINK_EndLink; EndLink.Name = ConnectionName; EndingEntities.Add(EndLink); } }