Пример #1
0
        private static DictionaryEntryNode ResolveResourceConflict(ResourceEvaluation resourceEvaluation, IList <SceneNode> elements, SceneNode destination, ResourceConflictResolution resolution)
        {
            DictionaryEntryNode originalResource    = resourceEvaluation.OriginalResource;
            DocumentNode        evaluatedResource   = resourceEvaluation.EvaluatedResource;
            DictionaryEntryNode dictionaryEntryNode = (DictionaryEntryNode)null;

            if (resolution == ResourceConflictResolution.RenameNew)
            {
                DocumentNode newKey = ResourceHelper.GenerateUniqueResourceKey(originalResource.Key.ToString(), destination);
                ResourceHelper.ChangeKey(elements, originalResource, originalResource.KeyNode.DocumentNode, newKey);
                dictionaryEntryNode = originalResource;
            }
            else if (resolution == ResourceConflictResolution.OverwriteOld)
            {
                DocumentCompositeNode parent = evaluatedResource.Parent;
                if (parent != null && typeof(DictionaryEntry).IsAssignableFrom(parent.TargetType))
                {
                    SceneViewModel viewModel = SceneViewModel.GetViewModel((ISceneViewHost)destination.ProjectContext.GetService(typeof(ISceneViewHost)), parent.DocumentRoot, false);
                    if (viewModel != null)
                    {
                        using (SceneEditTransaction editTransaction = viewModel.CreateEditTransaction(StringTable.UndoResourceOverwrite))
                        {
                            ((DictionaryEntryNode)viewModel.GetSceneNode((DocumentNode)parent)).Value = viewModel.GetSceneNode(originalResource.Value.DocumentNode.Clone(viewModel.Document.DocumentContext));
                            editTransaction.Commit();
                        }
                    }
                }
                dictionaryEntryNode = (DictionaryEntryNode)null;
            }
            else if (resolution == ResourceConflictResolution.UseExisting)
            {
                dictionaryEntryNode = (DictionaryEntryNode)null;
            }
            return(dictionaryEntryNode);
        }
Пример #2
0
        internal static bool CheckEvaluationResult(ResourceEvaluation resourceEvaluation, params ResourceEvaluationResult[] results)
        {
            bool flag = false;

            foreach (ResourceEvaluationResult evaluationResult in results)
            {
                if (resourceEvaluation.ConflictType == evaluationResult)
                {
                    flag = true;
                    break;
                }
            }
            return(flag);
        }
Пример #3
0
        internal static bool PasteResources(PastePackage pastePackage, IDictionary <DocumentNode, string> imageMap, ResourceConflictResolution itemsToDisplay, SceneNode destination, int index, bool lastResourceIsPrimary)
        {
            SceneViewModel             viewModel = destination.ViewModel;
            List <DictionaryEntryNode> list1     = new List <DictionaryEntryNode>((IEnumerable <DictionaryEntryNode>)pastePackage.Resources);

            if (list1.Count == 0)
            {
                return(true);
            }
            bool flag = true;
            IList <ResourceEvaluation> list2 = ResourceHelper.EvaluateResources((IList <DictionaryEntryNode>)list1, destination);
            ResourceConflictResolution conflictResolution = ResourceConflictResolution.Undetermined;

            if (ResourceHelper.CheckEvaluationResults(list2, ResourceEvaluationResult.ConflictingResourceExists, ResourceEvaluationResult.ConflictingResourceIsMasked))
            {
                conflictResolution = ResourceHelper.PromptForResourceConflictResolution(itemsToDisplay);
                if (conflictResolution == ResourceConflictResolution.Undetermined)
                {
                    flag = false;
                }
            }
            if (flag)
            {
                foreach (ResourceEvaluation resourceEvaluation in (IEnumerable <ResourceEvaluation>)list2)
                {
                    ResourceHelper.UpdateImageReferences(resourceEvaluation.OriginalResource.Value.DocumentNode, imageMap, pastePackage, viewModel);
                }
                List <SceneNode> list3 = new List <SceneNode>(pastePackage.Elements.Count);
                foreach (SceneElement sceneElement in pastePackage.Elements)
                {
                    list3.Add((SceneNode)sceneElement);
                }
                ResourceEvaluation resourceEvaluation1 = list2[list2.Count - 1];
                if (lastResourceIsPrimary)
                {
                    list2.RemoveAt(list2.Count - 1);
                    int num = ResourceHelper.AddResources(list2, (IList <SceneNode>)list3, conflictResolution, destination, index);
                    if (ResourceHelper.CheckEvaluationResult(resourceEvaluation1, ResourceEvaluationResult.IdenticalResourceExists))
                    {
                        conflictResolution = ResourceConflictResolution.RenameNew;
                    }
                    ResourceHelper.AddPrimaryResource(resourceEvaluation1, (IList <SceneNode>)list3, conflictResolution, destination, index + num);
                }
                else
                {
                    ResourceHelper.AddResources(list2, (IList <SceneNode>)list3, conflictResolution, destination, index);
                }
            }
            return(flag);
        }
Пример #4
0
        internal static void AddPrimaryResource(ResourceEvaluation evaluatedPrimaryResource, IList <SceneNode> referringElements, ResourceConflictResolution conflictResolution, SceneNode destination, int insertionIndex)
        {
            SceneViewModel         viewModel             = destination.ViewModel;
            ResourceDictionaryNode destinationDictionary = ResourceHelper.EnsureResourceDictionaryNode(destination);
            DictionaryEntryNode    resourceToAdd;

            switch (evaluatedPrimaryResource.ConflictType)
            {
            case ResourceEvaluationResult.NoExistingResource:
                resourceToAdd = evaluatedPrimaryResource.OriginalResource;
                break;

            case ResourceEvaluationResult.IdenticalResourceExists:
                resourceToAdd = ResourceHelper.ResolveResourceConflict(evaluatedPrimaryResource, referringElements, destination, conflictResolution);
                break;

            case ResourceEvaluationResult.IdenticalResourceIsMasked:
                resourceToAdd = evaluatedPrimaryResource.OriginalResource;
                break;

            case ResourceEvaluationResult.ConflictingResourceExists:
                resourceToAdd = ResourceHelper.ResolveResourceConflict(evaluatedPrimaryResource, referringElements, destination, conflictResolution);
                break;

            case ResourceEvaluationResult.ConflictingResourceIsMasked:
                resourceToAdd = evaluatedPrimaryResource.OriginalResource;
                break;

            default:
                throw new InvalidEnumArgumentException("ConflictType", (int)evaluatedPrimaryResource.ConflictType, typeof(ResourceEvaluationResult));
            }
            if (resourceToAdd == null)
            {
                return;
            }
            ResourceHelper.AddResource(resourceToAdd, destinationDictionary, insertionIndex);
        }