public override void Sync() { var relationTypes = new HashSet <RelationType>(); foreach (var associationType in this.ObjectType.AssociationTypesWhereObjectType) { relationTypes.Add(associationType.RelationType); } SupertypesNode supertypesNode = null; // existing and stale nodes foreach (var node in this) { var inheritancesNode = node as SupertypesNode; if (inheritancesNode != null) { supertypesNode = inheritancesNode; } var roleTypeNode = node as RoleTypeNode; if (roleTypeNode != null) { var relationType = roleTypeNode.RelationType; if (relationType != null) { if (relationTypes.Contains(relationType)) { roleTypeNode.Sync(); relationTypes.Remove(relationType); } else { this.RemoveChild(roleTypeNode); } } } } // new nodes if (supertypesNode == null) { supertypesNode = new SupertypesNode(this.Tree, this.objectType); this.AddChild(supertypesNode); } supertypesNode.Sync(); foreach (var roleType in relationTypes) { var roleNode = new RoleTypeNode(this.Tree, roleType); this.AddChild(roleNode); roleNode.Sync(); } this.Sort(); }
public override void Sync() { var repository = this.Tree.Repository; var domains = new HashSet <Domain>(repository.Domain.Domains.Where(domain => !domain.IsAllorsUnitDomain)); var existingRelationTypes = new HashSet <RelationType>(); // existing and stale nodes foreach (var node in this) { var domainNomde = node as DomainNode; if (domainNomde != null) { var domain = domainNomde.Domain; if (domain != null) { if (domains.Contains(domain)) { domainNomde.Sync(); domains.Remove(domain); } else { this.RemoveChild(domainNomde); } } } var roleTypeNode = node as RoleTypeNode; if (roleTypeNode != null) { var relationType = roleTypeNode.RelationType; if (relationType.ExistAssociationType) { this.RemoveChild(roleTypeNode); } else { existingRelationTypes.Add(relationType); } } } // new nodes foreach (var domain in domains) { var node = new DomainNode(this.Tree, domain); this.AddChild(node); node.Sync(); } foreach (var relationType in repository.Domain.RelationTypes) { if (!relationType.ExistAssociationType && !existingRelationTypes.Contains(relationType)) { var node = new RoleTypeNode(this.Tree, relationType); this.AddChild(node); node.Sync(); } } var superDomainsNode = this.SelectSingleNode(SuperDomainsNode.UniqueId); if (this.Tree.AdvancedView) { if (superDomainsNode == null) { superDomainsNode = new SuperDomainsNode(this.Tree); this.AddChild(superDomainsNode); } superDomainsNode.Sync(); } else { if (superDomainsNode != null) { this.RemoveChild(superDomainsNode); } } var templatesNode = this.SelectSingleNode(TemplatesNode.UniqueId); if (this.Tree.AdvancedView) { if (templatesNode == null) { templatesNode = new TemplatesNode(this.Tree); this.AddChild(templatesNode); } templatesNode.Sync(); } else { if (templatesNode != null) { this.RemoveChild(templatesNode); } } this.Sort(); }