Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 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);
     }
 }