Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / System / data / design / DatasetMethodGenerator.cs / 4 / DatasetMethodGenerator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All Rights Reserved. // Information Contained Herein is Proprietary and Confidential. // //----------------------------------------------------------------------------- namespace System.Data.Design { using System; using System.CodeDom; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; internal sealed class DatasetMethodGenerator { private TypedDataSourceCodeGenerator codeGenerator = null; private DesignDataSource dataSource = null; private DataSet dataSet = null; private CodeMemberMethod initExpressionsMethod = null; private static PropertyDescriptor namespaceProperty = TypeDescriptor.GetProperties(typeof(DataSet))["Namespace"]; private static PropertyDescriptor localeProperty = TypeDescriptor.GetProperties(typeof(DataSet))["Locale"]; private static PropertyDescriptor caseSensitiveProperty = TypeDescriptor.GetProperties(typeof(DataSet))["CaseSensitive"]; internal DatasetMethodGenerator(TypedDataSourceCodeGenerator codeGenerator, DesignDataSource dataSource) { this.codeGenerator = codeGenerator; this.dataSource = dataSource; this.dataSet = dataSource.DataSet; } internal void AddMethods(CodeTypeDeclaration dataSourceClass) { AddSchemaSerializationModeMembers(dataSourceClass); initExpressionsMethod = InitExpressionsMethod(); dataSourceClass.Members.Add(PublicConstructor()); dataSourceClass.Members.Add( DeserializingConstructor() ); dataSourceClass.Members.Add( InitializeDerivedDataSet() ); dataSourceClass.Members.Add( CloneMethod(initExpressionsMethod) ); dataSourceClass.Members.Add( ShouldSerializeTablesMethod() ); dataSourceClass.Members.Add( ShouldSerializeRelationsMethod() ); dataSourceClass.Members.Add( ReadXmlSerializableMethod() ); dataSourceClass.Members.Add( GetSchemaSerializableMethod() ); dataSourceClass.Members.Add( InitVarsParamLess() ); CodeMemberMethod initClassMethod = null; CodeMemberMethod initVarsMethod = null; InitClassAndInitVarsMethods(out initClassMethod, out initVarsMethod); dataSourceClass.Members.Add( initVarsMethod ); dataSourceClass.Members.Add( initClassMethod ); AddShouldSerializeSingleTableMethods(dataSourceClass); dataSourceClass.Members.Add( SchemaChangedMethod() ); dataSourceClass.Members.Add( GetTypedDataSetSchema() ); dataSourceClass.Members.Add( TablesProperty() ); dataSourceClass.Members.Add( RelationsProperty() ); if (initExpressionsMethod != null) { dataSourceClass.Members.Add(initExpressionsMethod); } } private void AddSchemaSerializationModeMembers(CodeTypeDeclaration dataSourceClass) { CodeMemberField schemaSerializationModeField = CodeGenHelper.FieldDecl( CodeGenHelper.GlobalType(typeof(System.Data.SchemaSerializationMode)), "_schemaSerializationMode", CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(typeof(System.Data.SchemaSerializationMode)), this.dataSource.SchemaSerializationMode.ToString() ) ); dataSourceClass.Members.Add(schemaSerializationModeField); CodeMemberProperty schemaSerializationModeProperty = CodeGenHelper.PropertyDecl( CodeGenHelper.GlobalType(typeof(System.Data.SchemaSerializationMode)), "SchemaSerializationMode", MemberAttributes.Public | MemberAttributes.Override ); schemaSerializationModeProperty.CustomAttributes.Add( CodeGenHelper.AttributeDecl(typeof(System.ComponentModel.BrowsableAttribute).FullName, CodeGenHelper.Primitive(true)) ); schemaSerializationModeProperty.CustomAttributes.Add( CodeGenHelper.AttributeDecl( typeof(System.ComponentModel.DesignerSerializationVisibilityAttribute).FullName, CodeGenHelper.Field(CodeGenHelper.GlobalTypeExpr(typeof(DesignerSerializationVisibility)), "Visible") ) ); schemaSerializationModeProperty.GetStatements.Add( CodeGenHelper.Return(CodeGenHelper.Field(CodeGenHelper.This(), "_schemaSerializationMode")) ); schemaSerializationModeProperty.SetStatements.Add( CodeGenHelper.Assign( CodeGenHelper.Field(CodeGenHelper.This(), "_schemaSerializationMode"), CodeGenHelper.Argument("value") ) ); dataSourceClass.Members.Add(schemaSerializationModeProperty); } private CodeConstructor PublicConstructor() { CodeConstructor constructor = CodeGenHelper.Constructor(MemberAttributes.Public); constructor.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "BeginInit")); constructor.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitClass")); constructor.Statements.Add(CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(CollectionChangeEventHandler)), "schemaChangedHandler", new CodeDelegateCreateExpression( CodeGenHelper.GlobalType(typeof(CollectionChangeEventHandler)), CodeGenHelper.This(), "SchemaChanged"))); constructor.Statements.Add(new System.CodeDom.CodeAttachEventStatement( new CodeEventReferenceExpression( CodeGenHelper.Property(CodeGenHelper.Base(),"Tables"), "CollectionChanged"), CodeGenHelper.Variable("schemaChangedHandler"))); constructor.Statements.Add(new System.CodeDom.CodeAttachEventStatement( new CodeEventReferenceExpression( CodeGenHelper.Property(CodeGenHelper.Base(),"Relations"), "CollectionChanged"), CodeGenHelper.Variable("schemaChangedHandler"))); constructor.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "EndInit")); //\\ this.InitExpressions(); // needs to be called after EndInit to ensure expressions with related tables are initialized correctly if (initExpressionsMethod != null) { constructor.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitExpressions")); } return constructor; } private CodeConstructor DeserializingConstructor() { //\\ protected NorthwindDataSet(SerializationInfo info, StreamingContext context) : base(info, context, false) { //\\ if ((this.IsBinarySerialized(info, context) == true)) { //\\ this.InitVars(false); //\\ System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); //\\ this.Tables.CollectionChanged += schemaChangedHandler1; //\\ this.Relations.CollectionChanged += schemaChangedHandler1; //\\ return; //\\ } //\\ string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string)))); //\\ if(DetermineSchemaSerializationMode(info, context) == SchemaSerializationMode.SerializeSchema) { //\\ System.Data.DataSet ds = new System.Data.DataSet(); //\\ ds.EnforceConstraints = false; //\\ ds.ReadXmlSchema(new System.Xml.XmlTextReader(new System.IO.StringReader(strSchema))); //\\ if ((ds.Tables["Categories"] != null)) { //\\ base.Tables.Add(new CategoriesDataTable(ds.Tables["Categories"])); //\\ } //\\ this.DataSetName = ds.DataSetName; //\\ this.Prefix = ds.Prefix; //\\ this.Namespace = ds.Namespace; //\\ this.Locale = ds.Locale; //\\ this.CaseSensitive = ds.CaseSensitive; //\\ this.EnforceConstraints = ds.EnforceConstraints; //\\ this.Merge(ds, false, System.Data.MissingSchemaAction.Add); //\\ this.InitVars(); //\\ } //\\ else { //\\ this.ReadXmlSchema(new System.Xml.XmlTextReader(new System.IO.StringReader(strSchema))); //\\ } //\\ //\\ this.GetSerializationData(info, context); //\\ System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); //\\ base.Tables.CollectionChanged += schemaChangedHandler; //\\ this.Relations.CollectionChanged += schemaChangedHandler; //\\ } CodeConstructor constructor = CodeGenHelper.Constructor(MemberAttributes.Family); constructor.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(System.Runtime.Serialization.SerializationInfo)), "info")); constructor.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(System.Runtime.Serialization.StreamingContext)) , "context")); constructor.BaseConstructorArgs.AddRange(new CodeExpression[] { CodeGenHelper.Argument("info"), CodeGenHelper.Argument("context"), CodeGenHelper.Primitive(false) }); constructor.Statements.Add( CodeGenHelper.If( CodeGenHelper.EQ( CodeGenHelper.MethodCall( CodeGenHelper.This(), "IsBinarySerialized", new CodeExpression[] { CodeGenHelper.Argument("info"), CodeGenHelper.Argument("context") } ), CodeGenHelper.Primitive(true)), new CodeStatement[] { CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(),"InitVars", CodeGenHelper.Primitive(false))), CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(CollectionChangeEventHandler)), "schemaChangedHandler1", new CodeDelegateCreateExpression( CodeGenHelper.GlobalType(typeof(CollectionChangeEventHandler)), CodeGenHelper.This(), "SchemaChanged" ) ), new System.CodeDom.CodeAttachEventStatement( new CodeEventReferenceExpression( CodeGenHelper.Property(CodeGenHelper.This(), "Tables"), "CollectionChanged" ), CodeGenHelper.Variable("schemaChangedHandler1") ) , new System.CodeDom.CodeAttachEventStatement( new CodeEventReferenceExpression( CodeGenHelper.Property(CodeGenHelper.This(), "Relations"), "CollectionChanged" ), CodeGenHelper.Variable("schemaChangedHandler1") ), CodeGenHelper.Return() } ) ); constructor.Statements.Add( CodeGenHelper.VariableDecl(CodeGenHelper.GlobalType(typeof(System.String)), "strSchema", CodeGenHelper.Cast(CodeGenHelper.GlobalType(typeof(System.String)), CodeGenHelper.MethodCall( CodeGenHelper.Argument("info"), "GetValue", new CodeExpression[] { CodeGenHelper.Str("XmlSchema"), CodeGenHelper.TypeOf(CodeGenHelper.GlobalType(typeof(System.String))) } )))); ArrayList schemaBodySerializeSchema = new ArrayList(); ArrayList schemaBodyDontSerializeSchema = new ArrayList(); schemaBodySerializeSchema.Add(CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(System.Data.DataSet)), "ds", CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(System.Data.DataSet)), new CodeExpression[] {}))); schemaBodySerializeSchema.Add(CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Variable("ds"), "ReadXmlSchema", new CodeExpression[] { CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(System.Xml.XmlTextReader)), new CodeExpression[] { CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.IO.StringReader)), new CodeExpression[] { CodeGenHelper.Variable("strSchema") }) }) }))); foreach(DesignTable table in codeGenerator.TableHandler.Tables) { //\\ this.Tables.Add(new(" ")); schemaBodySerializeSchema.Add( CodeGenHelper.If( CodeGenHelper.IdNotEQ( CodeGenHelper.Indexer( CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Tables"), CodeGenHelper.Str(table.Name)), CodeGenHelper.Primitive(null)), CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Property(CodeGenHelper.Base(), "Tables"), "Add", CodeGenHelper.New( CodeGenHelper.Type(table.GeneratorTableClassName), new CodeExpression[] { CodeGenHelper.Indexer( CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Tables"), CodeGenHelper.Str(table.Name)) } ) ) ) ) ); } schemaBodySerializeSchema.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "DataSetName"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"DataSetName") ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "Prefix"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Prefix") ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "Namespace"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Namespace") ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "Locale"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Locale") ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "CaseSensitive"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"CaseSensitive") ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "EnforceConstraints"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"EnforceConstraints") ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.This(), "Merge", new CodeExpression[] { CodeGenHelper.Variable("ds"), CodeGenHelper.Primitive(false), CodeGenHelper.Field(CodeGenHelper.GlobalTypeExpr(typeof(MissingSchemaAction)),"Add") } ) ) ); schemaBodySerializeSchema.Add( CodeGenHelper.Stm( CodeGenHelper.MethodCall(CodeGenHelper.This(),"InitVars") ) ); schemaBodyDontSerializeSchema.Add( CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.This(), "ReadXmlSchema", new CodeExpression[] { CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.Xml.XmlTextReader)), new CodeExpression[] { CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.IO.StringReader)), new CodeExpression[] { CodeGenHelper.Variable("strSchema") } ) } ) } ) ) ); if (initExpressionsMethod != null) { schemaBodyDontSerializeSchema.Add(CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitExpressions"))); } constructor.Statements.Add( CodeGenHelper.If( CodeGenHelper.EQ( CodeGenHelper.MethodCall( CodeGenHelper.This(), "DetermineSchemaSerializationMode", new CodeExpression[] { CodeGenHelper.Argument("info"), CodeGenHelper.Argument("context") } ), CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(typeof(System.Data.SchemaSerializationMode)), "IncludeSchema" ) ), (CodeStatement[])schemaBodySerializeSchema.ToArray(typeof(CodeStatement)), (CodeStatement[])schemaBodyDontSerializeSchema.ToArray(typeof(CodeStatement)) ) ); constructor.Statements.Add( CodeGenHelper.MethodCall( CodeGenHelper.This(), "GetSerializationData", new CodeExpression [] { CodeGenHelper.Argument("info"), CodeGenHelper.Argument("context") } ) ); constructor.Statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(CollectionChangeEventHandler)), "schemaChangedHandler", new CodeDelegateCreateExpression( CodeGenHelper.GlobalType( typeof(CollectionChangeEventHandler) ), CodeGenHelper.This(), "SchemaChanged" ) ) ); constructor.Statements.Add( new System.CodeDom.CodeAttachEventStatement( new CodeEventReferenceExpression( CodeGenHelper.Property(CodeGenHelper.Base(),"Tables"), "CollectionChanged" ), CodeGenHelper.Variable("schemaChangedHandler") ) ); constructor.Statements.Add( new System.CodeDom.CodeAttachEventStatement( new CodeEventReferenceExpression( CodeGenHelper.Property(CodeGenHelper.This(),"Relations"), "CollectionChanged" ), CodeGenHelper.Variable("schemaChangedHandler") ) ); return constructor; } private CodeMemberMethod InitializeDerivedDataSet() { //\\ protected override void InitializeDerivedDataSet(){ //\\ this.BeginInit(); //\\ this.InitClass(); //\\ this.EndInit(); //\\ } CodeMemberMethod initMethod = CodeGenHelper.MethodDecl( CodeGenHelper.GlobalType(typeof(void)), "InitializeDerivedDataSet", MemberAttributes.Family | MemberAttributes.Override ); initMethod.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "BeginInit")); initMethod.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitClass")); initMethod.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.This(), "EndInit")); return initMethod; } private CodeMemberMethod CloneMethod(CodeMemberMethod initExpressionsMethod) { //\\ public override DataSet Clone() { //\\ cln = ( )base.Clone(); //\\ cln.InitVars(); //\\ cln.InitExpressions(); //\\ cln.SchemaSerializationMode = this.SchemaSerializationMode(); //\\ return cln; //\\ } CodeMemberMethod clone = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(System.Data.DataSet)), "Clone", MemberAttributes.Public | MemberAttributes.Override); clone.Statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.Type(codeGenerator.DataSourceName), "cln", CodeGenHelper.Cast( CodeGenHelper.Type(codeGenerator.DataSourceName), CodeGenHelper.MethodCall(CodeGenHelper.Base(), "Clone", new CodeExpression[] {}) ) ) ); clone.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.Variable("cln"), "InitVars", new CodeExpression [] {})); if (initExpressionsMethod != null) { clone.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.Variable("cln"), "InitExpressions", new CodeExpression[] { })); } clone.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.Variable("cln"), "SchemaSerializationMode"), CodeGenHelper.Property(CodeGenHelper.This(), "SchemaSerializationMode") ) ); clone.Statements.Add(CodeGenHelper.Return(CodeGenHelper.Variable("cln"))); return clone; } private CodeMemberMethod ShouldSerializeTablesMethod() { //\\ protected override bool ShouldSerializeTables() { //\\ return false; //\\ } CodeMemberMethod shouldSerializeTables = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(System.Boolean)), "ShouldSerializeTables", MemberAttributes.Family | MemberAttributes.Override); shouldSerializeTables.Statements.Add(CodeGenHelper.Return(CodeGenHelper.Primitive(false))); return shouldSerializeTables; } private CodeMemberMethod ShouldSerializeRelationsMethod() { //\\ protected override bool ShouldSerializeRelations() { //\\ return false; //\\ } CodeMemberMethod shouldSerializeRelations = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(System.Boolean)), "ShouldSerializeRelations", MemberAttributes.Family | MemberAttributes.Override); shouldSerializeRelations.Statements.Add(CodeGenHelper.Return(CodeGenHelper.Primitive(false))); return shouldSerializeRelations; } private CodeMemberMethod ReadXmlSerializableMethod() { //\\ protected override void ReadXmlSerializable(XmlReader reader) { //\\ if (GetSchemaSerializationMode(reader) == System.Data.SchemaSerializationMode.IncludeSchema) { //\\ this.Reset(); //\\ System.Data.DataSet ds = new System.Data.DataSet(); //\\ ds.ReadXml(reader); //\\ if ((ds.Tables["Categories"] != null)) { //\\ base.Tables.Add(new CategoriesDataTable(ds.Tables["Categories"])); //\\ } //\\ this.DataSetName = ds.DataSetName; //\\ this.Prefix = ds.Prefix; //\\ this.Namespace = ds.Namespace; //\\ this.Locale = ds.Locale; //\\ this.CaseSensitive = ds.CaseSensitive; //\\ this.EnforceConstraints = ds.EnforceConstraints; //\\ this.Merge(ds, false, System.Data.MissingSchemaAction.Add); //\\ this.InitVars(); //\\ } //\\ else { //\\ this.ReadXml(reader); //\\ this.InitVars(); //\\ return; //\\ } //\\ } CodeMemberMethod readXmlSerializable = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(void)), "ReadXmlSerializable", MemberAttributes.Family | MemberAttributes.Override); readXmlSerializable.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(System.Xml.XmlReader)), "reader")); ArrayList includeSchemaStatements = new ArrayList(); ArrayList excludeSchemaStatements = new ArrayList(); includeSchemaStatements.Add(CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(), "Reset", new CodeExpression[] { }))); includeSchemaStatements.Add(CodeGenHelper.VariableDecl(CodeGenHelper.GlobalType(typeof(System.Data.DataSet)), "ds", CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(System.Data.DataSet)), new CodeExpression[] { }))); includeSchemaStatements.Add( CodeGenHelper.Stm(CodeGenHelper.MethodCall( CodeGenHelper.Variable("ds"), "ReadXml", new CodeExpression [] { CodeGenHelper.Argument("reader") } )) ); foreach(DesignTable table in codeGenerator.TableHandler.Tables) { //\\ this.Tables.Add(new (" ")); includeSchemaStatements.Add( CodeGenHelper.If( CodeGenHelper.IdNotEQ( CodeGenHelper.Indexer( CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Tables"), CodeGenHelper.Str(table.Name) ), CodeGenHelper.Primitive(null) ), CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Property(CodeGenHelper.Base(), "Tables"), "Add", CodeGenHelper.New( CodeGenHelper.Type(table.GeneratorTableClassName), new CodeExpression[] { CodeGenHelper.Indexer( CodeGenHelper.Property(CodeGenHelper.Variable("ds"),"Tables"), CodeGenHelper.Str(table.Name) ) } ) ) ) ) // If ); } includeSchemaStatements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "DataSetName"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "DataSetName"))); includeSchemaStatements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "Prefix"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "Prefix"))); includeSchemaStatements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "Namespace"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "Namespace"))); includeSchemaStatements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "Locale"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "Locale"))); includeSchemaStatements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "CaseSensitive"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "CaseSensitive"))); includeSchemaStatements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "EnforceConstraints"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "EnforceConstraints"))); includeSchemaStatements.Add( CodeGenHelper.Stm(CodeGenHelper.MethodCall( CodeGenHelper.This(), "Merge", new CodeExpression[] { CodeGenHelper.Variable("ds"), CodeGenHelper.Primitive(false), CodeGenHelper.Field(CodeGenHelper.GlobalTypeExpr(typeof(MissingSchemaAction)), "Add") } )) ); includeSchemaStatements.Add(CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitVars"))); excludeSchemaStatements.Add(CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(), "ReadXml", new CodeExpression[] { CodeGenHelper.Argument("reader") }))); excludeSchemaStatements.Add(CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitVars"))); readXmlSerializable.Statements.Add( CodeGenHelper.If( CodeGenHelper.EQ( CodeGenHelper.MethodCall( CodeGenHelper.This(), "DetermineSchemaSerializationMode", new CodeExpression[] { CodeGenHelper.Argument("reader") } ), CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(typeof(System.Data.SchemaSerializationMode)), "IncludeSchema" ) ), (CodeStatement[])includeSchemaStatements.ToArray(typeof(CodeStatement)), (CodeStatement[])excludeSchemaStatements.ToArray(typeof(CodeStatement)) ) ); return readXmlSerializable; } private CodeMemberMethod GetSchemaSerializableMethod() { //\\ protected override System.Xml.Schema.XmlSchema GetSchemaSerializable() { //\\ System.IO.MemoryStream stream = new System.IO.MemoryStream(); //\\ WriteXmlSchema(new XmlTextWriter(stream, null )); //\\ stream.Position = 0; //\\ return System.Xml.Schema.XmlSchema.Read(new XmlTextReader(stream)); //\\ } CodeMemberMethod getSchemaSerializable = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(System.Xml.Schema.XmlSchema)), "GetSchemaSerializable", MemberAttributes.Family | MemberAttributes.Override); getSchemaSerializable.Statements.Add(CodeGenHelper.VariableDecl(CodeGenHelper.GlobalType(typeof(System.IO.MemoryStream)), "stream", CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(System.IO.MemoryStream)),new CodeExpression[] {}))); getSchemaSerializable.Statements.Add( CodeGenHelper.MethodCall( CodeGenHelper.This(), "WriteXmlSchema", CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.Xml.XmlTextWriter)), new CodeExpression[] { CodeGenHelper.Argument("stream"), CodeGenHelper.Primitive(null) } ) ) ); getSchemaSerializable.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.Argument("stream"), "Position"), CodeGenHelper.Primitive(0))); getSchemaSerializable.Statements.Add( CodeGenHelper.Return( CodeGenHelper.MethodCall( CodeGenHelper.GlobalTypeExpr(typeof(System.Xml.Schema.XmlSchema)), "Read", new CodeExpression[] { CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.Xml.XmlTextReader)), new CodeExpression[] {CodeGenHelper.Argument("stream")} ), CodeGenHelper.Primitive(null) } ) ) ); return getSchemaSerializable; } private CodeMemberMethod InitVarsParamLess() { //\\ public void InitVars() { //\\ InitVars(true); //\\ } CodeMemberMethod initVarsMethod = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(void)), "InitVars", MemberAttributes.Assembly | MemberAttributes.Final); initVarsMethod.Statements.Add( CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitVars", new CodeExpression[] { CodeGenHelper.Primitive(true) }) ); return initVarsMethod; } private void InitClassAndInitVarsMethods(out CodeMemberMethod initClassMethod, out CodeMemberMethod initVarsMethod) { //\\ private void InitClass() initClassMethod = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(void)), "InitClass", MemberAttributes.Private); //\\ public void InitVars(bool initTable) initVarsMethod = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(void)), "InitVars", MemberAttributes.Assembly | MemberAttributes.Final); initVarsMethod.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(Boolean)), "initTable")); //\\ this.DataSetName = " " initClassMethod.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "DataSetName"), CodeGenHelper.Str(dataSet.DataSetName))); //\\ this.Prefix = " " initClassMethod.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "Prefix"), CodeGenHelper.Str(dataSet.Prefix))); if(namespaceProperty.ShouldSerializeValue(dataSet)) { //\\ this.Namespace = " " initClassMethod.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "Namespace"), CodeGenHelper.Str(dataSet.Namespace))); } if(localeProperty.ShouldSerializeValue(dataSet)) { //\\ this.Locale = new System.Globalization.CultureInfo("dataSet. "); initClassMethod.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "Locale"), CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(System.Globalization.CultureInfo)),new CodeExpression[] {CodeGenHelper.Str(dataSet.Locale.ToString())}))); } if (caseSensitiveProperty.ShouldSerializeValue(dataSet)) { //\\ this.CaseSensitive = ; initClassMethod.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "CaseSensitive"), CodeGenHelper.Primitive(dataSet.CaseSensitive))); } //\\ this.EnforceConstraints = ; initClassMethod.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.This(), "EnforceConstraints"), CodeGenHelper.Primitive(dataSet.EnforceConstraints))); //\\ this.SchemaSerializationMode = ; initClassMethod.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.This(), "SchemaSerializationMode"), CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(typeof(System.Data.SchemaSerializationMode)), this.dataSource.SchemaSerializationMode.ToString() ) ) ); // add statements to initialize tables foreach(DesignTable table in codeGenerator.TableHandler.Tables) { CodeExpression fieldTable = CodeGenHelper.Field(CodeGenHelper.This(), table.GeneratorTableVarName); if (TableContainsExpressions(table)) { //\\ = new (false); initClassMethod.Statements.Add(CodeGenHelper.Assign(fieldTable, CodeGenHelper.New(CodeGenHelper.Type(table.GeneratorTableClassName), new CodeExpression[] { CodeGenHelper.Primitive(false) }))); } else { //\\ = new (); initClassMethod.Statements.Add(CodeGenHelper.Assign(fieldTable, CodeGenHelper.New(CodeGenHelper.Type(table.GeneratorTableClassName), new CodeExpression[] { }))); } //\\ this.Tables.Add(this. ); initClassMethod.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.Property(CodeGenHelper.Base(), "Tables"), "Add", fieldTable)); //\\ this.table = ( )this.Tables[" "]; //\\ if (this.table != null) //\\ this.table .InitVars(); initVarsMethod.Statements.Add( CodeGenHelper.Assign( fieldTable, CodeGenHelper.Cast( CodeGenHelper.Type(table.GeneratorTableClassName), CodeGenHelper.Indexer( CodeGenHelper.Property(CodeGenHelper.Base(), "Tables"), CodeGenHelper.Str(table.Name) ) ) ) ); initVarsMethod.Statements.Add( CodeGenHelper.If( CodeGenHelper.EQ(CodeGenHelper.Variable("initTable"), CodeGenHelper.Primitive(true)), new CodeStatement[] { CodeGenHelper.If( CodeGenHelper.IdNotEQ(fieldTable, CodeGenHelper.Primitive(null)), CodeGenHelper.Stm(CodeGenHelper.MethodCall(fieldTable, "InitVars")) ) } ) ); } /*----------- Add Constraints to the Tables -------------------------*/ CodeExpression varFkc = null; foreach(DesignTable designTable in codeGenerator.TableHandler.Tables) { DataTable table = designTable.DataTable; foreach(Constraint constraint in table.Constraints) { if (constraint is ForeignKeyConstraint) { // We only initialize the foreign key constraints here. //\\ ForeignKeyConstraint fkc; //\\ fkc = new ForeignKeyConstraint(" ", //\\ new DataColumn[] {this.table . Column}, // parent columns //\\ new DataColumn[] {this.table . Column} // child columns //\\ )); //\\ this.table .Constraints.Add(fkc); //\\ fkc.AcceptRejectRule = constraint.AcceptRejectRule; //\\ fkc.DeleteRule = constraint.DeleteRule; //\\ fkc.UpdateRule = constraint.UpdateRule; ForeignKeyConstraint fkc = (ForeignKeyConstraint) constraint; CodeArrayCreateExpression childrenColumns = new CodeArrayCreateExpression(CodeGenHelper.GlobalType(typeof(System.Data.DataColumn)), 0); foreach(DataColumn c in fkc.Columns) { childrenColumns.Initializers.Add( CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), codeGenerator.TableHandler.Tables[c.Table.TableName].GeneratorTableVarName), codeGenerator.TableHandler.Tables[c.Table.TableName].DesignColumns[c.ColumnName].GeneratorColumnPropNameInTable ) ); } CodeArrayCreateExpression parentColumns = new CodeArrayCreateExpression(CodeGenHelper.GlobalType(typeof(System.Data.DataColumn)), 0); foreach(DataColumn c in fkc.RelatedColumns) { parentColumns.Initializers.Add( CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), codeGenerator.TableHandler.Tables[c.Table.TableName].GeneratorTableVarName), codeGenerator.TableHandler.Tables[c.Table.TableName].DesignColumns[c.ColumnName].GeneratorColumnPropNameInTable ) ); } if (varFkc == null) { initClassMethod.Statements.Add(CodeGenHelper.VariableDecl(CodeGenHelper.GlobalType(typeof(System.Data.ForeignKeyConstraint)), "fkc")); varFkc = CodeGenHelper.Variable("fkc"); } initClassMethod.Statements.Add( CodeGenHelper.Assign( varFkc, CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.Data.ForeignKeyConstraint)), new CodeExpression[]{CodeGenHelper.Str(fkc.ConstraintName), parentColumns, childrenColumns} ) ) ); initClassMethod.Statements.Add( CodeGenHelper.MethodCall( CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), codeGenerator.TableHandler.Tables[table.TableName].GeneratorTableVarName), "Constraints" ), "Add", varFkc ) ); string acceptRejectRule = fkc.AcceptRejectRule.ToString(); string deleteRule = fkc.DeleteRule.ToString(); string updateRule = fkc.UpdateRule.ToString(); initClassMethod.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(varFkc, "AcceptRejectRule"), CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(fkc.AcceptRejectRule.GetType()), acceptRejectRule ) ) ); initClassMethod.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(varFkc, "DeleteRule"), CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(fkc.DeleteRule.GetType()), deleteRule ) ) ); initClassMethod.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(varFkc, "UpdateRule"), CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(fkc.UpdateRule.GetType()), updateRule ) ) ); } } } /*----------- Add Relations to the Dataset -------------------------*/ foreach(DesignRelation designRelation in codeGenerator.RelationHandler.Relations) { //\\ this.relation = new DataRelation(" ", //\\ new DataColumn[] {this.table . Column}, // parent columns //\\ new DataColumn[] {this.table . Column}, // child columns //\\ false // createConstraints //\\ )); DataRelation relation = designRelation.DataRelation; if(relation == null) { continue; } CodeArrayCreateExpression parentColCreate = new CodeArrayCreateExpression(CodeGenHelper.GlobalType(typeof(System.Data.DataColumn)), 0); string parentTableField = designRelation.ParentDesignTable.GeneratorTableVarName; foreach(DataColumn column in relation.ParentColumns) { parentColCreate.Initializers.Add( CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), parentTableField), codeGenerator.TableHandler.Tables[column.Table.TableName].DesignColumns[column.ColumnName].GeneratorColumnPropNameInTable ) ); } CodeArrayCreateExpression childColCreate = new CodeArrayCreateExpression(CodeGenHelper.GlobalType(typeof(System.Data.DataColumn)), 0); string childTableField = designRelation.ChildDesignTable.GeneratorTableVarName; foreach(DataColumn column in relation.ChildColumns) { childColCreate.Initializers.Add( CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), childTableField), codeGenerator.TableHandler.Tables[column.Table.TableName].DesignColumns[column.ColumnName].GeneratorColumnPropNameInTable ) ); } CodeExpression relationVarExpression = CodeGenHelper.Field( CodeGenHelper.This(), codeGenerator.RelationHandler.Relations[relation.RelationName].GeneratorRelationVarName ); initClassMethod.Statements.Add( CodeGenHelper.Assign( relationVarExpression, CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.Data.DataRelation)), new CodeExpression[] { CodeGenHelper.Str(relation.RelationName), parentColCreate, childColCreate, CodeGenHelper.Primitive(false) } ) ) ); if (relation.Nested) { //\\ this.relation .Nested = true; initClassMethod.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property( relationVarExpression, "Nested" ), CodeGenHelper.Primitive(true) ) ); } // Add extended properties to the DataRelation ExtendedPropertiesHandler.CodeGenerator = codeGenerator; ExtendedPropertiesHandler.AddExtendedProperties(designRelation, relationVarExpression, initClassMethod.Statements, relation.ExtendedProperties); //\\ this.Relations.Add(this.relation ); initClassMethod.Statements.Add( CodeGenHelper.MethodCall( CodeGenHelper.Property( CodeGenHelper.This(), "Relations" ), "Add", relationVarExpression ) ); //\\ this.relation = this.Relations[" "]; initVarsMethod.Statements.Add( CodeGenHelper.Assign( relationVarExpression, CodeGenHelper.Indexer( CodeGenHelper.Property(CodeGenHelper.This(), "Relations"), CodeGenHelper.Str(relation.RelationName) ) ) ); } // Add extended properties to the dataset, if there are any in the schema file ExtendedPropertiesHandler.CodeGenerator = codeGenerator; ExtendedPropertiesHandler.AddExtendedProperties(this.dataSource, CodeGenHelper.This(), initClassMethod.Statements, dataSet.ExtendedProperties); } // end InitClassAndInitVarsMethods(...) private void AddShouldSerializeSingleTableMethods(CodeTypeDeclaration dataSourceClass) { foreach(DesignTable table in codeGenerator.TableHandler.Tables) { string tablePropertyName = table.GeneratorTablePropName; string shouldSerializeMethodName = MemberNameValidator.GenerateIdName("ShouldSerialize" + tablePropertyName, this.codeGenerator.CodeProvider, false /*useSuffix*/); CodeMemberMethod shouldSerializeTableProperty = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(System.Boolean)), shouldSerializeMethodName, MemberAttributes.Private); shouldSerializeTableProperty.Statements.Add(CodeGenHelper.Return(CodeGenHelper.Primitive(false))); dataSourceClass.Members.Add(shouldSerializeTableProperty); } } private CodeMemberMethod SchemaChangedMethod() { CodeMemberMethod schemaChanged = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(void)), "SchemaChanged", MemberAttributes.Private); schemaChanged.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(object)), "sender")); schemaChanged.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(CollectionChangeEventArgs)), "e")); schemaChanged.Statements.Add( CodeGenHelper.If( CodeGenHelper.EQ( CodeGenHelper.Property(CodeGenHelper.Argument("e"), "Action"), CodeGenHelper.Field(CodeGenHelper.GlobalTypeExpr(typeof(CollectionChangeAction)), "Remove") ), CodeGenHelper.Stm(CodeGenHelper.MethodCall(CodeGenHelper.This(), "InitVars")) ) ); return schemaChanged; } // private CodeMemberMethod GetTypedDataSetSchema() { // //\\ public static XmlSchemaType GetTypedDataSetSchema(XmlSchemaSet xs) { // //\\ Authors_DS ds = new Authors_DS(); // //\\ xs.Add(ds.GetSchemaSerializable()); // //\\ XmlSchemaComplexType type = DataSet.GetDataSetSchema(xs); // //\\ XmlSchemaAttribute attribute = new XmlSchemaAttribute(); // //\\ attribute.Name = "namespace"; // //\\ attribute.FixedValue = ds.Namespace; // //\\ type.Attributes.Add(attribute); // //\\ return type; // //\\ } // CodeMemberMethod getTypedDataSetSchema = CodeGenHelper.MethodDecl(typeof(XmlSchemaType), "GetTypedDataSetSchema", MemberAttributes.Static | MemberAttributes.Public); // getTypedDataSetSchema.Parameters.Add(CodeGenHelper.ParameterDecl(typeof(XmlSchemaSet), "xs")); // // getTypedDataSetSchema.Statements.Add(CodeGenHelper.VariableDecl(dataSource.GeneratorDataSetName, "ds", CodeGenHelper.New(dataSource.GeneratorDataSetName, new CodeExpression[] {}))); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.Argument("xs"), "Add", new CodeExpression [] { CodeGenHelper.MethodCall(CodeGenHelper.Variable("ds"), "GetSchemaSerializable", new CodeExpression[] {})})); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.VariableDecl(typeof(XmlSchemaComplexType), "type", CodeGenHelper.MethodCall(CodeGenHelper.TypeExpr(typeof(DataSet)), "GetDataSetSchema", new CodeExpression[] {CodeGenHelper.Argument("xs")}))); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.VariableDecl(typeof(XmlSchemaAttribute), "attribute", CodeGenHelper.New(typeof(XmlSchemaAttribute), new CodeExpression[] {}))); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.Variable("attribute"), "Name"), CodeGenHelper.Primitive("namespace"))); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.Assign(CodeGenHelper.Property(CodeGenHelper.Variable("attribute"),"FixedValue"), CodeGenHelper.Property(CodeGenHelper.Variable("ds"), "Namespace"))); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.MethodCall(CodeGenHelper.Property(CodeGenHelper.Variable("type"),"Attributes"), "Add", new CodeExpression [] { CodeGenHelper.Variable("attribute") })); // getTypedDataSetSchema.Statements.Add(CodeGenHelper.Return(CodeGenHelper.Variable("type"))); // // return getTypedDataSetSchema; // } internal static void GetSchemaIsInCollection(CodeStatementCollection statements, string dsName, string collectionName) { CodeStatement[] condBodyInner = new CodeStatement[] { CodeGenHelper.Assign( CodeGenHelper.Property( CodeGenHelper.Variable("s1"), "Position" ), CodeGenHelper.Primitive(0) ), CodeGenHelper.Assign( CodeGenHelper.Property( CodeGenHelper.Variable("s2"), "Position" ), CodeGenHelper.Primitive(0) ), CodeGenHelper.ForLoop( CodeGenHelper.Stm( new CodeSnippetExpression("") ), CodeGenHelper.And( CodeGenHelper.IdNotEQ( CodeGenHelper.Property( CodeGenHelper.Variable("s1"), "Position" ), CodeGenHelper.Property( CodeGenHelper.Variable("s1"), "Length" ) ), CodeGenHelper.EQ( CodeGenHelper.MethodCall( CodeGenHelper.Variable("s1"), "ReadByte", new CodeExpression[] {} ), CodeGenHelper.MethodCall( CodeGenHelper.Variable("s2"), "ReadByte", new CodeExpression[] {} ) ) ), CodeGenHelper.Stm( new CodeSnippetExpression("") ), new CodeStatement[] { CodeGenHelper.Stm( new CodeSnippetExpression("") ) } ), CodeGenHelper.If( CodeGenHelper.EQ( CodeGenHelper.Property( CodeGenHelper.Variable("s1"), "Position" ), CodeGenHelper.Property( CodeGenHelper.Variable("s1"), "Length" ) ), new CodeStatement[] { CodeGenHelper.Return( CodeGenHelper.Variable("type") ) } ) }; CodeStatement[] loopBody = new CodeStatement[] { CodeGenHelper.Assign( CodeGenHelper.Variable("schema"), CodeGenHelper.Cast( CodeGenHelper.GlobalType(typeof(XmlSchema)), CodeGenHelper.Property( CodeGenHelper.Variable("schemas"), "Current" ) ) ), CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Variable("s2"), "SetLength", new CodeExpression[] { CodeGenHelper.Primitive(0) } ) ), CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Variable("schema"), "Write", new CodeExpression[] { CodeGenHelper.Variable("s2") } ) ), CodeGenHelper.If( CodeGenHelper.EQ( CodeGenHelper.Property( CodeGenHelper.Variable("s1"), "Length" ), CodeGenHelper.Property( CodeGenHelper.Variable("s2"), "Length" ) ), condBodyInner ) }; CodeStatement[] tryBody = new CodeStatement[] { CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(XmlSchema)), "schema", CodeGenHelper.Primitive(null) ), CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Variable("dsSchema"), "Write", new CodeExpression[] { CodeGenHelper.Variable("s1") } ) ), CodeGenHelper.ForLoop( CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(IEnumerator)), "schemas", CodeGenHelper.MethodCall( CodeGenHelper.MethodCall( CodeGenHelper.Variable(collectionName), "Schemas", new CodeExpression[] { CodeGenHelper.Property( CodeGenHelper.Variable("dsSchema"), "TargetNamespace" ) } ), "GetEnumerator", new CodeExpression[] { } ) ), CodeGenHelper.MethodCall( CodeGenHelper.Variable("schemas"), "MoveNext", new CodeExpression[] { } ), CodeGenHelper.Stm( new CodeSnippetExpression("") ), loopBody ) }; CodeStatement[] finallyBody = new CodeStatement[] { CodeGenHelper.If( CodeGenHelper.IdNotEQ( CodeGenHelper.Variable("s1"), CodeGenHelper.Primitive(null) ), new CodeStatement[] { CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Variable("s1"), "Close", new CodeExpression[] { } ) ) } ), CodeGenHelper.If( CodeGenHelper.IdNotEQ( CodeGenHelper.Variable("s2"), CodeGenHelper.Primitive(null) ), new CodeStatement[] { CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Variable("s2"), "Close", new CodeExpression[] { } ) ) } ) }; CodeStatement[] condBodyOuter = new CodeStatement[] { CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(System.IO.MemoryStream)), "s1", CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.IO.MemoryStream)), new CodeExpression[] { } ) ), CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(System.IO.MemoryStream)), "s2", CodeGenHelper.New( CodeGenHelper.GlobalType(typeof(System.IO.MemoryStream)), new CodeExpression[] { } ) ), CodeGenHelper.Try( tryBody, new CodeCatchClause[] { }, finallyBody ) }; statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(XmlSchema)), "dsSchema", CodeGenHelper.MethodCall( CodeGenHelper.Variable(dsName), "GetSchemaSerializable", new CodeExpression[] { } ) ) ); statements.Add( CodeGenHelper.If( CodeGenHelper.MethodCall( CodeGenHelper.Variable(collectionName), "Contains", new CodeExpression[] { CodeGenHelper.Property( CodeGenHelper.Variable("dsSchema"), "TargetNamespace" ) } ), condBodyOuter ) ); statements.Add( CodeGenHelper.MethodCall( CodeGenHelper.Argument("xs"), "Add", new CodeExpression[] { CodeGenHelper.Variable("dsSchema") } ) ); } private CodeMemberMethod GetTypedDataSetSchema() { //\\ public static XmlSchemaComplexType GetDataSetSchema(XmlSchemaSet xs) { //\\ XmlSchemaComplexType type = new XmlSchemaComplexType(); //\\ XmlSchemaSequence sequence = new XmlSchemaSequence(); //\\ XmlSchemaAny any = new XmlSchemaAny(); //\\ any.Namespace = //\\ sequence.Items.Add(any); //\\ type.Particle = sequence; //\\ XmlSchema dsSchema = ds.GetSchemaSerializable(); //\\ if (xs.Contains(dsSchema.TargetNamespace)) { //\\ MemoryStream s1 = new MemoryStream(); //\\ MemoryStream s2 = new MemoryStream(); //\\ try { //\\ XmlSchema schema = null; //\\ dsSchema.Write(s1); //\\ for (IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { //\\ schema = (XmlSchema)schemas.Current; //\\ s2.SetLength(0); //\\ schema.Write(s2); //\\ if ((s1.Length == s2.Length)) { //\\ s1.Position = 0; //\\ s2.Position = 0; //\\ for (; ((s1.Position != s1.Length) && (s1.ReadByte() == s2.ReadByte())); ) { } //\\ if ((s1.Position == s1.Length)) { //\\ return type; //\\ } //\\ } //\\ } //\\ } //\\ finally { //\\ if (s1 != null) { //\\ s1.Dispose(); //\\ } //\\ if (s2 != null) { //\\ s2.Dispose(); //\\ } //\\ } //\\ } //\\ xs.Add(dsSchema); //\\ return type; //\\ } CodeMemberMethod getDataSetSchema = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(XmlSchemaComplexType)), "GetTypedDataSetSchema", MemberAttributes.Static | MemberAttributes.Public); getDataSetSchema.Parameters.Add(CodeGenHelper.ParameterDecl(CodeGenHelper.GlobalType(typeof(XmlSchemaSet)), "xs")); getDataSetSchema.Statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.Type(dataSource.GeneratorDataSetName), "ds", CodeGenHelper.New( CodeGenHelper.Type(dataSource.GeneratorDataSetName), new CodeExpression[] {} ) ) ); getDataSetSchema.Statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(XmlSchemaComplexType)), "type", CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(XmlSchemaComplexType)), new CodeExpression[] {}) ) ); getDataSetSchema.Statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(XmlSchemaSequence)), "sequence", CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(XmlSchemaSequence)), new CodeExpression[] {}) ) ); getDataSetSchema.Statements.Add( CodeGenHelper.VariableDecl( CodeGenHelper.GlobalType(typeof(XmlSchemaAny)), "any", CodeGenHelper.New(CodeGenHelper.GlobalType(typeof(XmlSchemaAny)), new CodeExpression[] {}) ) ); getDataSetSchema.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.Variable("any"), "Namespace"), CodeGenHelper.Property( CodeGenHelper.Variable("ds"), "Namespace" ) ) ); getDataSetSchema.Statements.Add( CodeGenHelper.Stm( CodeGenHelper.MethodCall( CodeGenHelper.Property(CodeGenHelper.Variable("sequence"), "Items"), "Add", new CodeExpression[] { CodeGenHelper.Variable("any") } ) ) ); getDataSetSchema.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(CodeGenHelper.Variable("type"), "Particle"), CodeGenHelper.Variable("sequence") ) ); // DDBugs 126260: Avoid adding the same schema twice GetSchemaIsInCollection(getDataSetSchema.Statements, "ds", "xs"); getDataSetSchema.Statements.Add(CodeGenHelper.Return(CodeGenHelper.Variable("type"))); return getDataSetSchema; } private CodeMemberProperty TablesProperty() { CodeMemberProperty tablesProperty = CodeGenHelper.PropertyDecl( CodeGenHelper.GlobalType(typeof(System.Data.DataTableCollection)), DataSourceNameHandler.TablesPropertyName, MemberAttributes.Public | MemberAttributes.New | MemberAttributes.Final ); tablesProperty.CustomAttributes.Add( CodeGenHelper.AttributeDecl("System.ComponentModel.DesignerSerializationVisibilityAttribute", CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(typeof(DesignerSerializationVisibility)), "Hidden"))); tablesProperty.GetStatements.Add( CodeGenHelper.Return(CodeGenHelper.Property(CodeGenHelper.Base(), "Tables")) ); return tablesProperty; } private CodeMemberProperty RelationsProperty() { CodeMemberProperty relationsProperty = CodeGenHelper.PropertyDecl( CodeGenHelper.GlobalType(typeof(System.Data.DataRelationCollection)), DataSourceNameHandler.RelationsPropertyName, MemberAttributes.Public | MemberAttributes.New | MemberAttributes.Final ); relationsProperty.CustomAttributes.Add( CodeGenHelper.AttributeDecl("System.ComponentModel.DesignerSerializationVisibilityAttribute", CodeGenHelper.Field( CodeGenHelper.GlobalTypeExpr(typeof(DesignerSerializationVisibility)), "Hidden"))); relationsProperty.GetStatements.Add( CodeGenHelper.Return(CodeGenHelper.Property(CodeGenHelper.Base(), "Relations")) ); return relationsProperty; } private CodeMemberMethod InitExpressionsMethod() { bool bInitExpressions = false; //\\ private void InitExpressions { //\\ this. . .Expression = " "; //\\ .... //\\ } CodeMemberMethod initExpressions = CodeGenHelper.MethodDecl(CodeGenHelper.GlobalType(typeof(void)), "InitExpressions", MemberAttributes.Private); foreach (DesignTable designTable in this.dataSource.DesignTables) { DataTable table = designTable.DataTable; foreach (DataColumn column in table.Columns) { if (column.Expression.Length > 0) { CodeExpression codeField = CodeGenHelper.Property( CodeGenHelper.Property(CodeGenHelper.This(), designTable.GeneratorTablePropName), codeGenerator.TableHandler.Tables[column.Table.TableName].DesignColumns[column.ColumnName].GeneratorColumnPropNameInTable ); bInitExpressions = true; initExpressions.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Property(codeField, "Expression"), CodeGenHelper.Str(column.Expression) ) ); } } } if (bInitExpressions) { return initExpressions; } else { return null; } } private bool TableContainsExpressions(DesignTable designTable) { DataTable table = designTable.DataTable; foreach (DataColumn column in table.Columns) { if (column.Expression.Length > 0) { return true; } } return false; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InternalControlCollection.cs
- Executor.cs
- Bits.cs
- ReadOnlyDictionary.cs
- XmlIgnoreAttribute.cs
- DSGeneratorProblem.cs
- SiteMapNodeItem.cs
- TreeView.cs
- ProcessThread.cs
- RenderContext.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- _AutoWebProxyScriptEngine.cs
- BitmapEffectOutputConnector.cs
- SQLSingle.cs
- Cursor.cs
- HebrewNumber.cs
- EvidenceTypeDescriptor.cs
- CqlGenerator.cs
- RequestCache.cs
- DesignerActionUIStateChangeEventArgs.cs
- BorderSidesEditor.cs
- ProtectedConfiguration.cs
- ObjectNotFoundException.cs
- LineGeometry.cs
- SqlUdtInfo.cs
- UrlPropertyAttribute.cs
- Header.cs
- ToolStripPanelCell.cs
- ClientSideQueueItem.cs
- ArgumentException.cs
- Group.cs
- WebRequestModulesSection.cs
- UnionExpr.cs
- StreamWriter.cs
- CompilerParameters.cs
- XmlSchemaGroup.cs
- Logging.cs
- EventManager.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- ObjectReaderCompiler.cs
- DataGridSortCommandEventArgs.cs
- DictionaryKeyPropertyAttribute.cs
- WebPartTransformerAttribute.cs
- VersionedStreamOwner.cs
- MethodCallConverter.cs
- JournalEntry.cs
- DeleteCardRequest.cs
- SetIndexBinder.cs
- BrowserCapabilitiesFactory.cs
- BitmapFrameDecode.cs
- AlternationConverter.cs
- RecordsAffectedEventArgs.cs
- EpmTargetTree.cs
- SystemColors.cs
- SymbolEqualComparer.cs
- ModelVisual3D.cs
- ISCIIEncoding.cs
- SByteStorage.cs
- AsymmetricAlgorithm.cs
- ADMembershipProvider.cs
- GregorianCalendarHelper.cs
- SamlAssertionKeyIdentifierClause.cs
- DrawingContextDrawingContextWalker.cs
- FileCodeGroup.cs
- TextAction.cs
- WebPartHelpVerb.cs
- LineSegment.cs
- SystemTcpStatistics.cs
- ScriptModule.cs
- MissingFieldException.cs
- SafeArrayRankMismatchException.cs
- infer.cs
- User.cs
- XslException.cs
- ActivationProxy.cs
- XmlLangPropertyAttribute.cs
- CharStorage.cs
- JulianCalendar.cs
- FastPropertyAccessor.cs
- EntityCommand.cs
- TagPrefixCollection.cs
- SoapAttributeAttribute.cs
- ProcessModelInfo.cs
- QueryModel.cs
- StorageAssociationTypeMapping.cs
- InstallHelper.cs
- BroadcastEventHelper.cs
- WebBrowserDocumentCompletedEventHandler.cs
- NotFiniteNumberException.cs
- TextRunTypographyProperties.cs
- IfJoinedCondition.cs
- DllNotFoundException.cs
- GPPOINTF.cs
- DataObjectCopyingEventArgs.cs
- ServicePoint.cs
- FontResourceCache.cs
- DependencyProperty.cs
- prompt.cs
- Socket.cs
- RuntimeHelpers.cs