Exemplo n.º 1
0
        internal static DocumentXml ConvertToXmlDoc(ODMLDocument document)
        {
            var xml = new DocumentXml();
            xml.HideNonsenceLabels = document.HideNonsenceLabels;

            xml.EntityTypes = new EntityTypeElementXml[document.EntityTypes.Count];
            for (int i = 0, c = document.EntityTypes.Count; i < c; i++)
            {
                var item = document.EntityTypes[i];
                xml.EntityTypes[i] = EntityTypeElementXml.ConvertToNode(item);
            }

            xml.EnumTypes = new EnumElementXml[document.EnumTypes.Count];
            for (int i = 0, c = document.EnumTypes.Count; i < c; i++)
            {
                var item = document.EnumTypes[i];
                xml.EnumTypes[i] = EnumElementXml.ConvertToNode(item);
            }

            xml.Connections = new ConnectionElementXml[document.Connections.Count];
            for (int i = 0, c = document.Connections.Count; i < c; i++)
            {
                var item = document.Connections[i];
                xml.Connections[i] = ConnectionElementXml.ConvertToNode(item);
            }

            return xml;
        }
Exemplo n.º 2
0
        internal ODMLDocument Restore()
        {
            var doc = new ODMLDocument();

            doc.HideNonsenceLabels = this.HideNonsenceLabels;

            foreach (var item in this.EntityTypes)
            {
                var con = item.Restore();
                doc.EntityTypes.Add(con);
            }

            foreach (var item in this.EnumTypes)
            {
                var con = item.Restore();
                doc.EnumTypes.Add(con);
            }

            foreach (var item in this.Connections)
            {
                var con = item.Restore();
                doc.Connections.Add(con);
            }

            return(doc);
        }
Exemplo n.º 3
0
        internal static DocumentXml ConvertToXmlDoc(ODMLDocument document)
        {
            var xml = new DocumentXml();

            xml.HideNonsenceLabels = document.HideNonsenceLabels;

            xml.EntityTypes = new EntityTypeElementXml[document.EntityTypes.Count];
            for (int i = 0, c = document.EntityTypes.Count; i < c; i++)
            {
                var item = document.EntityTypes[i];
                xml.EntityTypes[i] = EntityTypeElementXml.ConvertToNode(item);
            }

            xml.EnumTypes = new EnumElementXml[document.EnumTypes.Count];
            for (int i = 0, c = document.EnumTypes.Count; i < c; i++)
            {
                var item = document.EnumTypes[i];
                xml.EnumTypes[i] = EnumElementXml.ConvertToNode(item);
            }

            xml.Connections = new ConnectionElementXml[document.Connections.Count];
            for (int i = 0, c = document.Connections.Count; i < c; i++)
            {
                var item = document.Connections[i];
                xml.Connections[i] = ConnectionElementXml.ConvertToNode(item);
            }

            return(xml);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 让设计器加载指定的文档对象
        /// </summary>
        /// <param name="designer"></param>
        /// <param name="document"></param>
        public static void BindDocument(this ModelingDesigner designer, ODMLDocument document)
        {
            DocumentBinder.BindDocument(designer, document);

            //绑定新的文档时,需要清空文件路径。
            designer.ClearValue(CurrentOdmlFileProperty);
        }
Exemplo n.º 5
0
        private void btnRefreshClasses_Click(object sender, EventArgs e)
        {
            if (_owner.Project == null)
            {
                return;
            }
            ResetEOM();

            var oldDocument = designer.GetDocument();

            //创建一个新文档对象,使用它来描述最新的文档结构。
            var document = new ODMLDocument();

            //把原来显示的所有实体类型,加入到新文档对象中。
            var eom   = EOM;
            var types = oldDocument.EntityTypes.Select(el => eom.EntityTypes.Find(el.FullName))
                        .Where(t => t != null).ToArray();

            ODMLDocumentHelper.AddToDocument(new AddToDocumentArgs
            {
                Docment  = document,
                TypeList = types,
                AllTypes = eom.EntityTypes
            });

            //新的元素的位置,还原为所有旧元素的位置
            foreach (var el in document.EntityTypes)
            {
                var oldTypeEl = oldDocument.FindEntityType(el.FullName);
                el.Left   = oldTypeEl.Left;
                el.Top    = oldTypeEl.Top;
                el.Width  = oldTypeEl.Width;
                el.Height = oldTypeEl.Height;
            }
            foreach (var el in document.EnumTypes)
            {
                var oldTypeEl = oldDocument.FindEnumType(el.FullName);
                el.Left   = oldTypeEl.Left;
                el.Top    = oldTypeEl.Top;
                el.Width  = oldTypeEl.Width;
                el.Height = oldTypeEl.Height;
            }
            foreach (var el in document.Connections)
            {
                var old = oldDocument.FindConnection(el);
                if (old != null)
                {
                    el.Hidden         = old.Hidden;
                    el.ConnectionType = old.ConnectionType;
                    el.FromPointPos   = old.FromPointPos;
                    el.ToPointPos     = old.ToPointPos;
                }
            }

            //绑定新文档对象到设计器中,丢弃旧对象。
            designer.BindDocument(document);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 加载某个 xml 文件。
        /// </summary>
        /// <param name="odmlFile"></param>
        public static void LoadDocument(this ModelingDesigner designer, string odmlFile)
        {
            var xml = File.ReadAllText(odmlFile);
            var doc = string.IsNullOrEmpty(xml) ? new ODMLDocument() : ODMLDocument.Parse(xml);

            DocumentBinder.BindDocument(designer, doc);

            SetCurrentOdmlFile(designer, odmlFile);
        }
Exemplo n.º 7
0
        private static void AddTypeElements(ODMLDocument doc, IList <EntityType> typeList)
        {
            int row = 0, column = 0;

            for (int i = 0, c = typeList.Count; i < c; i++)
            {
                var type = typeList[i];

                var typeFullName = type.FullName;
                //如果这个实体还没有加进来,就创建一个元素并加入到列表中。
                if (doc.EntityTypes.All(e => e.FullName != typeFullName))
                {
                    var entityTypeEl = new EntityTypeElement(typeFullName);
                    entityTypeEl.FullName       = typeFullName;
                    entityTypeEl.Left           = column * 300;
                    entityTypeEl.Top            = row * 200;
                    entityTypeEl.IsAggtRoot     = type.IsAggtRoot;
                    entityTypeEl.HideProperties = true;
                    entityTypeEl.Label          = GetDomainName(type);

                    foreach (var vp in type.ValueProperties)
                    {
                        var propertyEl = new PropertyElement(vp.Name);
                        propertyEl.Label = GetDomainName(vp);

                        if (vp.PropertyType == ValuePropertyType.Enum)
                        {
                            propertyEl.PropertyType = vp.EnumType.Name;
                        }
                        else
                        {
                            propertyEl.PropertyType = vp.PropertyType.ToString();
                        }

                        //可空类型,显示在属性上时,需要添加"?" 号。
                        if (vp.Nullable)
                        {
                            propertyEl.PropertyType += "?";
                        }

                        entityTypeEl.Properties.Add(propertyEl);
                    }

                    doc.EntityTypes.Add(entityTypeEl);

                    column++;
                    //一排四个。
                    if (column == 3)
                    {
                        row++;
                        column = 0;
                    }
                }
            }
        }
Exemplo n.º 8
0
        ///// <summary>
        ///// 让设计器加载指定的文档对象
        ///// </summary>
        ///// <param name="designer"></param>
        ///// <param name="document"></param>
        //public static void LoadDocument(this ModelingDesigner designer, ODMLDocument document)
        //{
        //    DocumentHelper.LoadDocument(designer, document);
        //    designer.ClearValue(CurrentOdmlFileProperty);
        //}

        /// <summary>
        /// 获取目前绑定在设计器中的文档对象
        /// </summary>
        /// <param name="designer"></param>
        /// <returns></returns>
        public static ODMLDocument GetDocument(this ModelingDesigner designer)
        {
            var doc = designer.DataContext as ODMLDocument;

            if (doc == null)
            {
                doc = new ODMLDocument();
                BindDocument(designer, doc);
            }
            return(doc);

            //return DocumentHelper.GetDocument(designer);
        }
Exemplo n.º 9
0
        private static void TryAddConnection(ODMLDocument document, ConnectionElement connectionEl)
        {
            //目前,暂时不支持自关联的线。
            if (connectionEl.From == connectionEl.To)
            {
                return;
            }

            //要判断是否之前已经添加了这个连接,才继续添加连接。
            if (document.Connections.All(c => c.From != connectionEl.From || c.To != connectionEl.To || c.Label != connectionEl.Label))
            {
                document.Connections.Add(connectionEl);
            }
        }
Exemplo n.º 10
0
        internal ODMLDocument Restore()
        {
            var doc = new ODMLDocument();
            doc.HideNonsenceLabels = this.HideNonsenceLabels;

            foreach (var item in this.EntityTypes)
            {
                var con = item.Restore();
                doc.EntityTypes.Add(con);
            }

            foreach (var item in this.EnumTypes)
            {
                var con = item.Restore();
                doc.EnumTypes.Add(con);
            }

            foreach (var item in this.Connections)
            {
                var con = item.Restore();
                doc.Connections.Add(con);
            }

            return doc;
        }
Exemplo n.º 11
0
        /// <summary>
        /// 测试使用 Document 来进行初始化。
        /// </summary>
        private void IntializeByDocument()
        {
            var document = new ODMLDocument
            {
                EntityTypes =
                {
                    new EntityTypeElement("Item")
                    {
                        Left = 100, Top = 100
                    },
                    new EntityTypeElement("Role")
                    {
                        IsAggtRoot = true,
                        Left       = 300, Top = 100,
                        Properties =
                        {
                            new PropertyElement("Id")
                            {
                                PropertyType = "int"
                            },
                            new PropertyElement("Name")
                            {
                                PropertyType = "string", Name = "名称"
                            },
                        }
                    },
                    new EntityTypeElement("Warehouse")
                    {
                        Left = 300, Top = 300
                    },
                },
                EnumTypes =
                {
                    new EnumElement("CategoryType")
                    {
                        Left  = 100, Top = 300,
                        Items =
                        {
                            new EnumItemElement("NONE")
                            {
                                Label = "未登记"
                            },
                            new EnumItemElement("REJECTED")
                            {
                                Label = "保留"
                            },
                            new EnumItemElement("IDLE")
                            {
                                Label = "预定"
                            },
                            new EnumItemElement("ACCEPTED")
                            {
                                Label = "已受理"
                            },
                            new EnumItemElement("INSTRUCTING")
                            {
                                Label = "指示中"
                            },
                            new EnumItemElement("INSTRUCTED")
                            {
                                Label = "已指示"
                            },
                            new EnumItemElement("RECEIVING")
                            {
                                Label = "进货中"
                            },
                            new EnumItemElement("RECEIVED")
                            {
                                Label = "已进货"
                            },
                            new EnumItemElement("COMPLETED")
                            {
                                Label = "已认可"
                            },
                        }
                    },
                }
            };

            designer.BindDocument(document);
        }