public void CloneClasses( IList<Type> sources, TransformNamespace transformNamespace, TransformTypeName transformTypeName, SubstitutePropertyType substitutePropertyType ) { foreach (Type type in sources) { this.CloneClass( type, transformNamespace, transformTypeName, substitutePropertyType ); } }
private void AddArrayProperty( CodeTypeDeclaration type, PropertyInfo xmlProperty, Type substituteXmlPropertyType, TransformNamespace transformNamespace, TransformTypeName transformTypeName, SubstitutePropertyType substitutePropertyType, CodeConstructor constructor, CodeMemberMethod translateMethod, CodeMemberMethod popTestMethod ) { // Clone the class of the array inner type this.CloneClass( substituteXmlPropertyType.GetElementType(), transformNamespace, transformTypeName, substitutePropertyType ); // Get type of generic list of the array inner type, transformed string dalConstructorType = String.Format( "{0}.List<{1}.{2}>", typeof(List<>).Namespace, transformNamespace(substituteXmlPropertyType.Namespace), transformTypeName(substituteXmlPropertyType.GetElementType().Name) ); this._classBuilder.AddProperty( type, xmlProperty.Name, dalConstructorType, true, true, "This is property " + xmlProperty.Name ); ////////////////////////////////////////////////////////////////////////////////////////// // SCO.Form10941095CTransmittalUpstream.Form1094CUpstreamDetailType[] irsObjs // = new SCO.Form10941095CTransmittalUpstream.Form1094CUpstreamDetailType[this.Form1094CUpstreamDetail.Count]; // for (int index = 0; index < this.Form1094CUpstreamDetail.Count; index = index + 1) // { // irsObjs[index] = this.Form1094CUpstreamDetail[index].Translate(); // } // value.Form1094CUpstreamDetail = irsObjs; ///////////////////////////////////////////////////////////////////////////////////////// string indexVariableName = "index"; { string arrayName = "irsObjs"; translateMethod.Statements.Add(new CodeSnippetStatement(NEW_LINE + new String(' ', 12) + "{")); translateMethod.Statements.Add( new CodeVariableDeclarationStatement( substituteXmlPropertyType.GetElementType().MakeArrayType(), arrayName, new CodeArrayCreateExpression( substituteXmlPropertyType.GetElementType(), new CodePropertyReferenceExpression( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), "Count" ) ) ) ); CodeIterationStatement forloop = new CodeIterationStatement(); CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement( typeof(int), indexVariableName ); declaration.InitExpression = new CodeSnippetExpression("0"); forloop.InitStatement = declaration; forloop.IncrementStatement = new CodeAssignStatement( new CodeVariableReferenceExpression(indexVariableName), new CodeSnippetExpression(indexVariableName + " + 1") ); forloop.TestExpression = new CodeSnippetExpression( String.Format("{0} < this.{1}.Count", indexVariableName, xmlProperty.Name) ); forloop.Statements.Add( new CodeAssignStatement( new CodeArrayIndexerExpression( new CodeVariableReferenceExpression(arrayName), new CodeVariableReferenceExpression(indexVariableName) ), new CodeMethodInvokeExpression( new CodeArrayIndexerExpression( new CodeVariableReferenceExpression(xmlProperty.Name), new CodeVariableReferenceExpression(indexVariableName) ), translateMethod.Name, new CodeExpression[] { } ) ) ); translateMethod.Statements.Add(forloop); translateMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), xmlProperty.Name ), new CodeVariableReferenceExpression(arrayName) ) ); translateMethod.Statements.Add(new CodeSnippetStatement(new String(' ', 12) + "}" + NEW_LINE)); } //////////////////////////////////////////////////////////////////////////////////// // // for (int index = 0; index < ARRAY_TEST_SIZE; index = index + 1) // { // Form1094CUpstreamDetailType value = new Form1094CUpstreamDetailType(); // value.PopulateTest(); // this.Form1094CUpstreamDetail.Add(value); // } /////////////////////////////////////////////////////////////////////////////////// { CodeIterationStatement forloop = new CodeIterationStatement(); CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement( typeof(int), indexVariableName ); declaration.InitExpression = new CodeSnippetExpression("0"); forloop.InitStatement = declaration; forloop.IncrementStatement = new CodeAssignStatement( new CodeVariableReferenceExpression(indexVariableName), new CodeSnippetExpression(indexVariableName + " + 1") ); forloop.TestExpression = new CodeSnippetExpression( String.Format("{0} < {1}", indexVariableName, ARRAY_TEST_SIZE) ); string elementType = String.Format( "{0}.{1}", transformNamespace(substituteXmlPropertyType.GetElementType().Namespace), transformTypeName(substituteXmlPropertyType.GetElementType().Name) ); forloop.Statements.Add( new CodeVariableDeclarationStatement( elementType, TRANSLATE_VAR_NAME, new CodeObjectCreateExpression( elementType, new CodeExpression[] { } ) ) ); forloop.Statements.Add( new CodeMethodInvokeExpression( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), popTestMethod.Name, new CodeExpression[] { } ) ); forloop.Statements.Add( new CodeMethodInvokeExpression( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), "Add", new CodeExpression[] { new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME) } ) ); popTestMethod.Statements.Add(forloop); } // Initialize non standard properties in constructor constructor.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), new CodeObjectCreateExpression( dalConstructorType, new CodeExpression[] { } ) ) ); }
private void CloneEnum( Type source, TransformNamespace transformNamespace, TransformTypeName transformTypeName ) { CodeTypeDeclaration type = this._classBuilder.AddEnum( transformNamespace(source.Namespace), transformTypeName(source.Name) ); if (type != null) { foreach (string enumName in System.Enum.GetNames(source)) { this._classBuilder.AddField(type, enumName); } } }
private void CloneClass( Type source, TransformNamespace transformNamespace, TransformTypeName transformTypeName, SubstitutePropertyType substitutePropertyType ) { CodeTypeDeclaration dalTypeDeclaration = this._classBuilder.AddClass( transformNamespace(source.Namespace), transformTypeName(source.Name) ); if (dalTypeDeclaration != null) { ///////////////////////////////////////////////////////////////////////////////// // Constructor - Initalize // CodeConstructor constructor = this._classBuilder.AddConstructor(dalTypeDeclaration); constructor.Statements.Add(new CodeCommentStatement("This is the constructor.")); ///////////////////////////////////////////////////////////////////////////////// // Translate Method - Initalize // CodeMemberMethod translateMethod = _classBuilder.AddMember(dalTypeDeclaration, "Translate", source); translateMethod.Statements.Add(new CodeCommentStatement("This is the Translate method.")); translateMethod.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(source), TRANSLATE_VAR_NAME)); translateMethod.Statements.Add( new CodeAssignStatement( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), new CodeObjectCreateExpression(new CodeTypeReference(source), new CodeExpression[] { }) ) ); ///////////////////////////////////////////////////////////////////////////////// // PopulateTest Method - Initalize // CodeMemberMethod popTestMethod = _classBuilder.AddMember(dalTypeDeclaration, "PopulateTest", null); popTestMethod.Statements.Add(new CodeCommentStatement("This is the PopulateTest method.")); // Add ID property to be ID in EF database table this._classBuilder.AddIdProperty(dalTypeDeclaration, true, true, "ID property"); foreach (PropertyInfo xmlProperty in source.GetProperties()) { Type substituteXmlPropertyType = substitutePropertyType(dalTypeDeclaration.Name, xmlProperty); if (substituteXmlPropertyType == null) { substituteXmlPropertyType = xmlProperty.PropertyType; } /////////////////////////////////////////////////////////////////// // Built-In/System Property Type // if (substituteXmlPropertyType.FullName.StartsWith("System")) { this.AddSystemProperty( dalTypeDeclaration, xmlProperty, substituteXmlPropertyType, transformNamespace, transformTypeName, constructor, translateMethod, popTestMethod ); } //////////////////////////////////////////////////////////////// // NOT a Built-In/System Property Type else { /////////////////////////////////////////////////////////////////// // Array Property Type // if (substituteXmlPropertyType.IsArray) { this.AddArrayProperty( dalTypeDeclaration, xmlProperty, substituteXmlPropertyType, transformNamespace, transformTypeName, substitutePropertyType, constructor, translateMethod, popTestMethod ); } /////////////////////////////////////////////////////////////////// // Enum Property Type else if (substituteXmlPropertyType.IsEnum) { this.AddEnumProperty( dalTypeDeclaration, xmlProperty, substituteXmlPropertyType, transformNamespace, transformTypeName, substitutePropertyType, constructor, translateMethod, popTestMethod ); } /////////////////////////////////////////////////////////////////// // Non-System Object Property Type // else { this.AddNonSystemProperty( dalTypeDeclaration, xmlProperty, substituteXmlPropertyType, transformNamespace, transformTypeName, substitutePropertyType, constructor, translateMethod, popTestMethod ); } } } // Add return statement to end of Translate method translateMethod.Statements.Add( new CodeMethodReturnStatement( new CodeArgumentReferenceExpression(TRANSLATE_VAR_NAME) ) ); } }
private void AddSystemProperty( CodeTypeDeclaration type, PropertyInfo xmlProperty, Type substituteXmlPropertyType, TransformNamespace transformNamespace, TransformTypeName transformTypeName, CodeConstructor constructor, CodeMemberMethod translateMethod, CodeMemberMethod popTestMethod ) { string dalPropertyType = null; if (dalPropertyType == null) { dalPropertyType = String.Format( "{0}.{1}", substituteXmlPropertyType.Namespace, substituteXmlPropertyType.Name ); } this._classBuilder.AddProperty( type, xmlProperty.Name, dalPropertyType, true, true, "This is property " + xmlProperty.Name ); // If XML property type was string but underlying type was int, add conversion from // int to string if (xmlProperty.PropertyType.FullName.Equals("System.String") && dalPropertyType.Equals("System.Int32")) { /////////////////////////////////////////////////////// // Add the following code: // value.TotalForm1095CALEMemberCnt = Convert.ToString(this.TotalForm1095CALEMemberCnt); // translateMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), xmlProperty.Name ), new CodeMethodInvokeExpression( new CodeTypeReferenceExpression( "System.Convert" ), "ToString", new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ) ) ) ); } else { translateMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), xmlProperty.Name ), new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ) ) ); } CodeExpression ce = null; switch (dalPropertyType) { case "System.String": case "System.Object": ce = new CodePrimitiveExpression(xmlProperty.Name); break; case "System.DateTime": ce = new CodePropertyReferenceExpression( new CodeTypeReferenceExpression( Type.GetType("System.DateTime") ), "Today" ); break; case "System.Boolean": ce = new CodePrimitiveExpression(true); break; case "System.Decimal": ce = new CodePrimitiveExpression(new Decimal(1.234)); break; case "System.Int32": ce = new CodePrimitiveExpression(1); break; default: throw new ApplicationException(String.Format("Unknown System type: '{0}'.", dalPropertyType)); } popTestMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), ce ) ); }
private void AddNonSystemProperty( CodeTypeDeclaration type, PropertyInfo xmlProperty, Type actualXmlPropertyType, TransformNamespace transformNamespace, TransformTypeName transformTypeName, SubstitutePropertyType substitutePropertyType, CodeConstructor constructor, CodeMemberMethod translateMethod, CodeMemberMethod popTestMethod ) { this.CloneClass( actualXmlPropertyType, transformNamespace, transformTypeName, substitutePropertyType ); string dalConstructorType = String.Format( "{0}.{1}", transformNamespace(actualXmlPropertyType.Namespace), transformTypeName(actualXmlPropertyType.Name) ); this._classBuilder.AddProperty( type, xmlProperty.Name, dalConstructorType, true, true, "This is property " + xmlProperty.Name ); translateMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), xmlProperty.Name ), new CodeMethodInvokeExpression( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), translateMethod.Name, new CodeExpression[] {} ) ) ); popTestMethod.Statements.Add( new CodeMethodInvokeExpression( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), popTestMethod.Name, new CodeExpression[] { } ) ); // Initialize non standard properties in constructor // // this.ContactNameGrp = new SCO.IRS.ACA.DAL.FormData.TY15.OtherCompletePersonNameTypeSCO(); // constructor.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), new CodeObjectCreateExpression( dalConstructorType, new CodeExpression[] {} ) ) ); }
private void AddEnumProperty( CodeTypeDeclaration type, PropertyInfo xmlProperty, Type substituteXmlPropertyType, TransformNamespace transformNamespace, TransformTypeName transformTypeName, SubstitutePropertyType substitutePropertyType, CodeConstructor constructor, CodeMemberMethod translateMethod, CodeMemberMethod popTestMethod ) { this.CloneEnum(substituteXmlPropertyType, transformNamespace, transformTypeName); string dalConstructorType = String.Format( "{0}.{1}", transformNamespace(substituteXmlPropertyType.Namespace), transformTypeName(substituteXmlPropertyType.Name) ); this._classBuilder.AddProperty( type, xmlProperty.Name, dalConstructorType, true, true, "This is property " + xmlProperty.Name ); // Add the following code: // // value.state = (IRS.StateType)((int)this.state); // translateMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeVariableReferenceExpression(TRANSLATE_VAR_NAME), xmlProperty.Name ), new CodeCastExpression( substituteXmlPropertyType, new CodeCastExpression( Type.GetType("System.Int32"), new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ) ) ) ) ); // Add the following code: // // this.JanuaryInd = SCO.IRS.ACA.DAL.FormData.TY15.DigitBooleanTypeSCO.Item0; // popTestMethod.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), new CodePropertyReferenceExpression( new CodeTypeReferenceExpression( dalConstructorType ), System.Enum.GetNames(substituteXmlPropertyType)[0] ) ) ); // Initialize non standard properties in constructor constructor.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeThisReferenceExpression(), xmlProperty.Name ), new CodeObjectCreateExpression( dalConstructorType, new CodeExpression[] { } ) ) ); }