示例#1
0
 internal CremaDataTableCollection(InternalDataSet dataSet)
 {
     this.dataSet = dataSet;
     this.tables  = dataSet.Tables;
     this.tables.CollectionChanged += Tables_CollectionChanged;
     this.dataSet.PropertyChanged  += InternalDataSet_PropertyChanged;
 }
示例#2
0
        protected override void OnRowChanging(DataRowChangeEventArgs e)
        {
            if (this.RowEventStack.Any() == true)
            {
                if (this.RowEventStack.Peek() == e.Row)
                {
                    base.OnRowChanging(new InternalDataRowChangeEventArgs(e));
                }
                else
                {
                    base.OnRowChanging(e);
                }
            }
            else
            {
                var row = e.Row as InternalTemplateColumn;
                switch (e.Action)
                {
                case DataRowAction.Add:
                {
                    if (this.IsLoading == false)
                    {
                        CremaDataSet.ValidateName(row.ColumnName);
                    }

                    if (this.targetTable != null && this.IsDiffMode == false)
                    {
                        InternalDataSet.ValidateSetDataTypeName(this.targetTable.DataSet, row.DataTypeName);
                    }
                }
                break;
                }
                base.OnRowChanging(e);
            }
        }
示例#3
0
        protected override void OnRowChanging(DataRowChangeEventArgs e)
        {
            if (this.RowEventStack.Any() == true)
            {
                if (this.RowEventStack.Peek() == e.Row)
                {
                    base.OnRowChanging(new InternalDataRowChangeEventArgs(e));
                }
                else
                {
                    base.OnRowChanging(e);
                }
            }
            else
            {
                var row = e.Row as InternalTemplateColumn;
                switch (e.Action)
                {
                case DataRowAction.Add:
                {
                    if (this.IsLoading == false)
                    {
                        CremaDataSet.ValidateName(row.ColumnName);
                    }

                    if (this.targetTable != null && this.IsDiffMode == false)
                    {
                        InternalDataSet.ValidateSetDataTypeName(this.targetTable.DataSet, row.DataTypeName);
                    }

                    if (e.Row is InternalTemplateColumn c && c.TargetColumn == null && this.targetTable != null)
                    {
                        var dataColumn = new InternalDataColumn()
                        {
                            ColumnName = c.ColumnName,

                            IsKey         = c.IsKey,
                            Unique        = c.Unique,
                            Comment       = c.Comment,
                            DefaultValue  = c.DefaultValue ?? (object)DBNull.Value,
                            AutoIncrement = c.AutoIncrement,
                            AllowDBNull   = c.AllowNull,
                            Tags          = c.Tags,
                            ReadOnly      = c.ReadOnly,
                        };
                        this.TargetTable.ValidateAddColumn(dataColumn);
                    }
                }
                break;
                }
                base.OnRowChanging(e);
            }
        }
示例#4
0
 public static InternalDataType GetType(InternalDataSet dataSet, string typeName)
 {
     foreach (var item in dataSet.Tables)
     {
         if (item is InternalDataType dataType)
         {
             if (dataType.LocalName == typeName)
             {
                 return(dataType);
             }
         }
     }
     return(null);
 }
示例#5
0
        protected virtual void OnValidateSetDataTypeName(string value)
        {
            var dataSet = this.Table?.DataSet;

            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (value is string == false)
            {
                throw new ArgumentException(nameof(value));
            }

            if (dataSet == null && CremaDataTypeUtility.IsBaseType(value) == false)
            {
                if (NameValidator.VerifyItemPath(value) == false)
                {
                    throw new ArgumentException(string.Format(Resources.Exception_TypeCannotBeUsed_Format, value), nameof(value));
                }
            }
            if (CremaDataTypeUtility.IsBaseType(value) == true)
            {
                this.OnValidateSetDataType(CremaDataTypeUtility.GetType(value));
            }

            if (dataSet != null && CremaDataTypeUtility.IsBaseType(value) == false)
            {
                if (NameValidator.VerifyItemPath(value) == false)
                {
                    if (InternalDataSet.ContainsType(this.Table?.DataSet, value) == false)
                    {
                        throw new ArgumentException(string.Format(Resources.Exception_TypeCannotBeUsed_Format, value), nameof(value));
                    }
                    var dataType = InternalDataSet.GetType(this.Table?.DataSet, value);
                    this.OnValidateSetCremaType(dataType);
                }
                else
                {
                    var itemName = new ItemName(value);
                    if (InternalDataSet.ContainsType(this.Table?.DataSet, itemName.Name, itemName.CategoryPath) == false)
                    {
                        throw new ArgumentException(string.Format(Resources.Exception_TypeCannotBeUsed_Format, value), nameof(value));
                    }
                    var dataType = InternalDataSet.GetType(this.Table?.DataSet, itemName.Name, itemName.CategoryPath);
                    this.OnValidateSetCremaType(dataType);
                }
            }
        }
示例#6
0
        public static InternalDataType GetType(InternalDataSet dataSet, string name, string categoryPath)
        {
            var itemNamespace = UriUtility.Combine(dataSet.TypeNamespace + categoryPath, name);

            foreach (var item in dataSet.Tables)
            {
                if (item is InternalDataType dataType)
                {
                    if (dataType.Name == name && dataType.Namespace == itemNamespace)
                    {
                        return(dataType);
                    }
                }
            }
            return(null);
        }
示例#7
0
 public static bool ContainsType(InternalDataSet dataSet, string typeName)
 {
     if (dataSet == null)
     {
         return(false);
     }
     foreach (var item in dataSet.Tables)
     {
         if (item is InternalDataType dataType)
         {
             if (dataType.LocalName == typeName)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#8
0
        public static bool ContainsType(InternalDataSet dataSet, string name, string categoryPath)
        {
            if (dataSet == null)
            {
                return(false);
            }
            var itemNamespace = UriUtility.Combine(dataSet.TypeNamespace + categoryPath, name);

            foreach (var item in dataSet.Tables)
            {
                if (item is InternalDataType dataType)
                {
                    if (dataType.Name == name && dataType.Namespace == itemNamespace)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#9
0
        public static void ValidateSetDataTypeName(InternalDataSet dataSet, string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (value is string == false)
            {
                throw new ArgumentException(nameof(value));
            }

            if (dataSet == null && CremaDataTypeUtility.IsBaseType(value) == false)
            {
                if (NameValidator.VerifyItemPath(value) == false)
                {
                    throw new ArgumentException(string.Format(Resources.Exception_TypeCannotBeUsed_Format, value), nameof(value));
                }
            }

            if (dataSet != null && CremaDataTypeUtility.IsBaseType(value) == false)
            {
                if (NameValidator.VerifyItemPath(value) == false)
                {
                    if (InternalDataSet.ContainsType(dataSet, value) == false)
                    {
                        throw new ArgumentException(string.Format(Resources.Exception_TypeCannotBeUsed_Format, value), nameof(value));
                    }
                }
                else
                {
                    var itemName = new ItemName(value);
                    if (InternalDataSet.ContainsType(dataSet, itemName.Name, itemName.CategoryPath) == false)
                    {
                        throw new ArgumentException(string.Format(Resources.Exception_TypeCannotBeUsed_Format, value), nameof(value));
                    }
                }
            }
        }
示例#10
0
 internal static string GetTypeName(string baseNamespace, string typeNamespace)
 {
     return(InternalDataSet.GetTypeName(baseNamespace, typeNamespace));
 }
示例#11
0
 internal static string GetTypeName(CremaDataSet dataSet, string typeNamespace)
 {
     return(InternalDataSet.GetTypeName((InternalDataSet)dataSet, typeNamespace));
 }
示例#12
0
 internal static string GetTableCategoryPath(string baseNamespace, string tableNamespace)
 {
     return(InternalDataSet.GetTableCategoryPath(baseNamespace, tableNamespace));
 }
示例#13
0
 internal static string GetTableCategoryPath(CremaDataSet dataSet, string tableNamespace)
 {
     return(InternalDataSet.GetTableCategoryPath((InternalDataSet)dataSet, tableNamespace));
 }
示例#14
0
        public static string GetTypeName(InternalDataSet dataSet, string typeNamespace)
        {
            var baseNamespace = dataSet != null ? dataSet.TypeNamespace : CremaSchema.TypeNamespace;

            return(GetTypeName(baseNamespace, typeNamespace));
        }
示例#15
0
        private CremaDataTable CopyToCore(CremaDataSet dataSet, bool copyData)
        {
            this.ValidateCopyTo(dataSet);

            var columns = EnumerableUtility.Friends(this, this.Childs).SelectMany(item => item.columns);

            foreach (var item in columns)
            {
                var dataType = item.CremaType;
                if (dataType == null)
                {
                    continue;
                }

                if (dataSet.Types.Contains(dataType.TypeName, dataType.CategoryPath) == false)
                {
                    dataType.CopyTo(dataSet);
                }
            }

            var schemaWriter = GetSchemaWriter();
            var action       = new Func <string>(() =>
            {
                using (var sw = new Utf8StringWriter())
                {
                    schemaWriter.Write(sw);
                    return(sw.ToString());
                }
            });

            var schema = action();
            var xml    = copyData == true?this.GetXml() : null;

            var itemName = new ItemName(this.CategoryPath, this.Name);

            dataSet.ReadXmlSchemaString(schema, itemName);
            if (xml != null)
            {
                dataSet.ReadXmlString(xml, itemName);
            }

            var targetTable = dataSet.Tables[this.Name, this.CategoryPath];

            if (this.TemplateNamespace != string.Empty)
            {
                targetTable.AttachTemplatedParent(this.TemplateNamespace);
            }

            return(targetTable);

            CremaSchemaWriter GetSchemaWriter()
            {
                if (this.TemplatedParent != null)
                {
                    return(new CremaSchemaWriter(this.TemplatedParent));
                }
                if (this.TemplateNamespace == string.Empty)
                {
                    return(new CremaSchemaWriter(this));
                }
                var t1 = InternalDataSet.GetTableName((InternalDataSet)this.DataSet, this.TemplateNamespace);
                var c1 = InternalDataSet.GetTableCategoryPath((InternalDataSet)this.DataSet, this.TemplateNamespace);

                return(new CremaSchemaWriter(this, new ItemName(c1, t1)));
            }
        }
示例#16
0
 public static string GenerateHashValue(params TableInfo[] tables)
 {
     return(InternalDataSet.GenerateHashValue(tables));
 }
示例#17
0
 public CremaDataSet()
 {
     this.dataSet = new InternalDataSet(this, CremaDataSet.DefaultDataSetName);
     this.tables  = new CremaDataTableCollection(this.dataSet);
     this.types   = new CremaDataTypeCollection(this.dataSet);
 }
示例#18
0
        public static string GetTableCategoryPath(InternalDataSet dataSet, string tableNamespace)
        {
            var baseNamespace = dataSet != null ? dataSet.TableNamespace : CremaSchema.TableNamespace;

            return(GetTableCategoryPath(baseNamespace, tableNamespace));
        }