Beispiel #1
0
        private void LoadTables(PdmDiagram diagram, XmlNode symbolRootNode)
        {
            if (symbolRootNode == null)
            {
                return;
            }

            var url           = GetTableReferencePath(diagram);
            var tableRootNode = doc.SelectSingleNode(url, nms);

            foreach (XmlNode child in symbolRootNode.SelectNodes("o:TableSymbol", nms))
            {
                if (child.SelectSingleNode("c:ClonePredecessor", nms) != null)
                {
                    continue;
                }

                var refNode = child.SelectSingleNode("c:Object/o:Table", nms);
                if (refNode != null)
                {
                    var id = refNode.Attributes["Ref"].InnerText;
                    if (existsCodes.Contains(id))
                    {
                        continue;
                    }

                    existsCodes.Add(id);

                    var tNode = tableRootNode.SelectSingleNode("o:Table[@Id='" + id + "']", nms);

                    if (tNode != null)
                    {
                        var nameNode = tNode.SelectSingleNode("a:Name", nms);
                        var codeNode = tNode.SelectSingleNode("a:Code", nms);
                        var descNode = tNode.SelectSingleNode("a:Comment", nms);

                        var table = new PdmTable();
                        table.Id   = id;
                        table.Name = codeNode.InnerText;

                        if (descNode != null && !string.IsNullOrEmpty(descNode.InnerText) &&
                            nameNode.InnerText != descNode.InnerText)
                        {
                            table.Description = descNode.InnerText;
                        }
                        else
                        {
                            table.Description = nameNode.InnerText;
                        }

                        table.Uri = string.Format("{0}/o:Table[@Id='{1}']", url, id);
                        diagram.Tables.Add(table);
                    }
                }
            }
        }
Beispiel #2
0
        private void FindColumn(PdmTable table, List <Table> result, string columnId, out Table iTable, out Column iColumn)
        {
            iTable = result.FirstOrDefault(s => s.Name == table.Name);
            if (iTable == null)
            {
                iColumn = null;
                return;
            }

            var node     = doc.SelectSingleNode(table.Uri, nms);
            var ndColumn = node.SelectSingleNode("c:Columns/o:Column[@Id='" + columnId + "']", nms);
            var codeNode = ndColumn.SelectSingleNode("a:Code", nms);

            iColumn = iTable.Columns.FirstOrDefault(s => s.Name == codeNode.InnerText);
        }
Beispiel #3
0
        public Table ParseTable(PdmTable table)
        {
            var node      = doc.SelectSingleNode(table.Uri, nms);
            var ndColumns = node.SelectNodes("c:Columns/o:Column", nms);
            var newtable  = SchemaExtensionManager.Build <Table>();

            var pkRootNode = node.SelectSingleNode("c:PrimaryKey/o:Key", nms);
            var pkRefId    = pkRootNode == null ? string.Empty : pkRootNode.Attributes["Ref"].InnerText;

            newtable.Name        = table.Name;
            newtable.Description = table.Description;

            foreach (XmlNode child in ndColumns)
            {
                var id          = child.Attributes["Id"].InnerText;
                var nameNode    = child.SelectSingleNode("a:Name", nms);
                var codeNode    = child.SelectSingleNode("a:Code", nms);
                var descNode    = child.SelectSingleNode("a:Comment", nms);
                var dtNode      = child.SelectSingleNode("a:DataType", nms);
                var lngNode     = child.SelectSingleNode("a:Length", nms);
                var mandNode    = child.SelectSingleNode("a:Column.Mandatory", nms);
                var idenNode    = child.SelectSingleNode("a:Identity", nms);
                var defaultNode = child.SelectSingleNode("a:DefaultValue", nms);
                var column      = SchemaExtensionManager.Build <Column>(newtable);
                column.Name = codeNode.InnerText;

                if (descNode != null && !string.IsNullOrEmpty(descNode.InnerText) &&
                    nameNode.InnerText != descNode.InnerText)
                {
                    column.Description = descNode.InnerText;
                }
                else
                {
                    column.Description = nameNode.InnerText;
                }

                if (dtNode != null)
                {
                    ParseDbTypeAndPrecision(dtNode.InnerText, column);
                    column.DbType = DbTypeManager.GetDbType(databaseType, column.DataType);
                }

                if (lngNode != null)
                {
                    column.Length = lngNode.InnerText.To <long>();
                }

                if (mandNode == null)
                {
                    column.IsNullable = true;
                }

                if (idenNode != null)
                {
                    column.AutoIncrement = idenNode.InnerText == "1";
                }

                if (defaultNode != null)
                {
                    column.DefaultValue = defaultNode.InnerText;
                }

                if (!string.IsNullOrEmpty(pkRefId))
                {
                    var pkNode = node.SelectSingleNode("c:Keys/o:Key[@Id='" + pkRefId + "']/c:Key.Columns/o:Column[@Ref='" + id + "']", nms);
                    if (pkNode != null)
                    {
                        column.IsPrimaryKey = true;
                    }
                }

                InitializerUnity.Initialize(column);
                newtable.Columns.Add(column);
            }

            InitializerUnity.Initialize(newtable);
            return(newtable);
        }