コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }