public CompositeNode(string name, AssemblyName assemblyName, CompositeNode parent, ModelItem oldItem) : this() { Contract.Requires(name != null); Contract.Requires(assemblyName != null); Name = name; AssemblyName = assemblyName; Parent = parent; OldItem = oldItem; CreateKey(); }
private void UpdateTopModel(CompositeNode node) { if (node.Parent == null) { node.NewItem = CompositeService.UpdateModelItem(node.OldItem, node.Activity); } else { UpdateParentModel(node.Parent, node); } }
private void UpdateParentModel(CompositeNode parent, CompositeNode child) { var items = CompositeService.GetSubModelItems(parent.OldItem); ModelItem childModel = items.FirstOrDefault(m => child.AssemblyName.Equal(m)); if (childModel != null) { CompositeService.UpdateModelItem(childModel, child.Activity); } }
private void UpdateActivity(CompositeNode node) { if (node.NewItem == null) { node.NewItem = CompositeService.CreateModelItem(node.Activity); } var items = CompositeService.GetSubModelItems(node.NewItem); foreach (var child in node.Children) { ModelItem childModel = items.FirstOrDefault(m => child.AssemblyName.Equal(m)); if (childModel != null) { CompositeService.UpdateModelItem(childModel, child.Activity); } } if (node.NewItem != null) { node.Activity = node.NewItem.GetActivity(); } foreach (var item in items) { NodeKeyManager.ApplyModelKey(item, node.Key); } }
private void RefreshKey(ModelItem model, CompositeNode parentNode) { if (NodeKeyManager.CheckIsModel(model) && parentNode != null) { NodeKeyManager.RefreshModelKey(model, parentNode.Key); } else if (NodeKeyManager.CheckIsNode(model)) { NodeKey nodeKey = NodeKeyManager.GetNodeKey(model); if (!nodeKey.IsSuccessfullyApplied) { NodeKeyManager.ApplyNodeSuccessfully(model); } else if (parentNode != null && nodeKey.Name == parentNode.AssemblyName.FullName) { NodeKeyManager.RefreshModelKey(model, parentNode.Key); } } }
private void RecursiveUpdateActivities(CompositeNode node) { if (!node.Children.Any()) { node.NewItem = CompositeService.CreateModelItem(node.Activity); NodeKeyManager.ApplyKey(node.NewItem, node.Key); } else { foreach (var child in node.Children) { RecursiveUpdateActivities(child); } UpdateActivity(node); NodeKeyManager.ApplyNodeKey(node.NewItem, node.Key); } }
private CompositeNode CreateNewNode(CompositeNode parent, ModelItem item, Activity root) { CompositeNode node = null; AssemblyName assembly = null; if (item != null) { assembly = item.GetAssemblyName(); root = CompositeService.GetRootActivity(item.GetActivity()); if (root == null) { return null; } } else { assembly = root.GetAssemblyName(); } if (!AssemblyService.AssemblyIsBuiltIn(assembly)) { node = new CompositeNode(GetDisplayName(item, assembly), assembly, parent, item); node.Activity = root; var subs = WorkflowInspectionServices.GetActivities(node.Activity); foreach (var sub in subs) { var child = CreateNewNode(node, null, sub); child.IfNotNull(c => node.Children.Add(c)); } } return node; }
private bool CheckAddModelIsReferenceSelfCore(ModelItem addedModel, CompositeNode parent) { if (parent == null) { return false; } else { List<CompositeNode> checkParentList = new List<CompositeNode>(); CompositeNode checkParent = parent; while (checkParent != null) { checkParentList.Add(checkParent); checkParent = checkParent.Parent; } return CheckNodeListHasEqualModel(checkParentList, addedModel); } }
private bool CheckAddModelIsReferenceSelf(ModelItem addedModel, CompositeNode parent) { if (CheckAddModelIsReferenceSelfCore(addedModel, parent)) { string message = string.Format(MSG_UpdateReferenceInSelf, parent.AssemblyName.Name); AddInMessageBoxService.Show(message, Title_UpdateOtherActivities, MessageBoxButton.OK, MessageBoxImage.Warning); return true; } return false; }
private CompositeNode AddNewNode(CompositeNode parent, ModelItem modelItem) { CompositeNode addNode = CreateNewNode(parent, modelItem, null); if (addNode != null) { RecursiveUpdateActivities(addNode); UpdateTopModel(addNode); } ArgumentService.CreateArguments(modelItem); return addNode; }
/// <summary> /// Create node key by assembly /// </summary> public static NodeKey CreateKey(AssemblyName assemblyName, CompositeNode parent) { Contract.Requires(assemblyName != null); return new NodeKey() { Key = Guid.NewGuid(), Name = assemblyName.FullName, Parent = parent != null ? parent.Key.Key : Guid.Empty, IsSuccessfullyApplied = false, }; }