Example #1
0
 public void CloneClasses(
     IList<Type> sources,
     TransformNamespace transformNamespace,
     TransformTypeName transformTypeName,
     SubstitutePropertyType substitutePropertyType
 )
 {
     foreach (Type type in sources)
     {
         this.CloneClass(
             type,
             transformNamespace,
             transformTypeName,
             substitutePropertyType
         );
     }
 }
Example #2
0
        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[] { }
                    )
                )
            );
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        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)
                    )
                );
            }
        }
Example #5
0
        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
                )
            );
        }
Example #6
0
        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[] {}
                    )
                )
            );
        }
Example #7
0
        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[] { }
                    )
                )
            );
        }