예제 #1
0
        private void LinkMapSet_Removed(object source, LinkMapEventArgs e)
        {
            /*debug*/ System.Diagnostics.Debug.Write($"LinkSet_Removed");
            var sourceSimbolo = Store.ElementDirectory.FindElement(e.SourceSimboloId) as Simbolo;
            var targetSimbolo = Store.ElementDirectory.FindElement(e.TargetSimboloId) as Simbolo;

            // Whether any of two simbolos is null, means that the simbolo has been deleted
            // and hyperlink is deleted too.
            if (sourceSimbolo == null || targetSimbolo == null)
            {
                return;
            }

            /*debug*/ System.Diagnostics.Debug.Write($" = [{sourceSimbolo.Nome}] -> [{targetSimbolo.Nome}]");

            var stillHasLinkMap = MapaReferencias.HasLinkMap(sourceSimbolo, targetSimbolo);

            // If still has link maps between this two simbolos,
            // means the Hyperlink must not be deleted.
            if (stillHasLinkMap)
            {
                /*debug*/ System.Diagnostics.Debug.WriteLine($" {{Ainda tem Link}}");
                return;
            }

            var sourceToTargetLinks = SimboloReferences.GetLinks(sourceSimbolo, targetSimbolo);
            var targetToSourceLinks = SimboloReferences.GetLinks(targetSimbolo, sourceSimbolo);

            var countLinks = sourceToTargetLinks.Count + targetToSourceLinks.Count;

            /*debug*/ System.Diagnostics.Debug.WriteLine($" {{SEM mais Links}}. Connectores removidos={countLinks}");

            using (var transaction
                       = Store.TransactionManager.BeginTransaction("LinkMapSet_Removed"))
            {
                foreach (var link in sourceToTargetLinks)
                {
                    link.Delete();
                }
                foreach (var link in targetToSourceLinks)
                {
                    link.Delete();
                }

                /*debug*/ System.Diagnostics.Debug.WriteLine($"LinkMapSet_Removed=[{countLinks}]");
                transaction.Commit();
            }
        }
예제 #2
0
        private void LinkMapSet_Added(object source, LinkMapEventArgs e)
        {
            var sourceSimbolo = Store.ElementDirectory.FindElement(e.SourceSimboloId) as Simbolo;
            var targetSimbolo = Store.ElementDirectory.FindElement(e.TargetSimboloId) as Simbolo;

            /*debug*/ System.Diagnostics.Debug.WriteLine($"LinkSet_Added = [{sourceSimbolo.Nome}] -> [{targetSimbolo.Nome}]");
            var sourceIsNotTarget = !sourceSimbolo.Id.Equals(targetSimbolo.Id);
            var hasLinkMapBetweenSourceAndTarget = MapaReferencias.HasLinkMap(sourceSimbolo, targetSimbolo);
            var islinkedSourceToTarget           = SimboloReferences.GetLinks(sourceSimbolo, targetSimbolo).Any();
            var islinkedTargetToSource           = SimboloReferences.GetLinks(targetSimbolo, sourceSimbolo).Any();
            var isNotAlreadyLinked = !(islinkedSourceToTarget || islinkedTargetToSource);

            if (sourceIsNotTarget && hasLinkMapBetweenSourceAndTarget && isNotAlreadyLinked)
            {
                using (var transaction = Store.TransactionManager.BeginTransaction("LinkMapSet_Added"))
                {
                    var linked = SimboloReferencesBuilder.Connect(sourceSimbolo, targetSimbolo) as SimboloReferences;
                    transaction.Commit();
                }
            }
        }