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); }
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); }
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); }
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); }