Exemplo n.º 1
0
        private void WriteOnGet(IEntity entity)
        {
            cw.BeginFunction("public override object OnGet({0} {1})",
                             NamingHelperStack.ToServiceRequestName(entity, interfacesEnvironment),
                             VarName_Request);
            cw.WriteLine("{0} {1} = new {0}();",
                         NamingHelperStack.ToServiceResponseName(entity, interfacesEnvironment),
                         VarName_Response);
            WriteInitResponse(VarName_Response);
            cw.WriteLine("{0} {1} = null;",
                         domainEnvironment.ToTypeName(entity, true),
                         VarName_DomainObject);
            cw.BeginTry();

            cw.If(entity.Constraints.PrimaryId.Attributes.ToNamesString(" && ", VarName_Request + ".", " != null"));      // Global
            // Request by primary id
            cw.WriteLine("{0} = {1}.{2}({3});",
                         VarName_DomainObject,
                         domainEnvironment.ToTypeName(entity, true),
                         DomainLayerConfig.Methods.GetById(entity.Constraints.PrimaryId, domainEnvironment).Name,
                         cw.ToSeparatedString(entity.Constraints.PrimaryId.Attributes.ToList(), ", ",
                                              delegate(object item, int count) {
                return(String.Format("{0}.{1}{2}",
                                     VarName_Request,
                                     (item as IAttribute).Name,
                                     environment.IsNullable(item as IAttribute) ? ".Value" : ""));
            })
                         );

            // Request by uid
            foreach (IUniqueId uid in entity.Constraints.UniqueIds)
            {
                cw.ElseIf(uid.Attributes.ToNamesString(" && ", VarName_Request + ".", " != null"));
                cw.WriteLine("{0} = {1}.{2}({3});",
                             VarName_DomainObject,
                             domainEnvironment.ToTypeName(entity, true),
                             DomainLayerConfig.Methods.GetByUniqueId(uid, domainEnvironment).Name,
                             cw.ToSeparatedString(uid.Attributes.ToList(), ", ",
                                                  delegate(object item, int count) {
                    string arg = String.Empty;
                    if ((item as IAttribute).Type is IEnumerationType)
                    {
                        arg = String.Format("({0})",
                                            domainEnvironment.ToTypeName((item as IAttribute), true));
                    }
                    arg += String.Format("{0}.{1}{2}",
                                         VarName_Request,
                                         (item as IAttribute).Name,
                                         environment.IsNullable(item as IAttribute) ? ".Value" : "");
                    return(arg);
                })
                             );
            }

            // Request by relation
            foreach (IRelation r in entity.Parents)
            {
                cw.ElseIf(r.ChildAttributes.ToNamesString(" && ", VarName_Request + ".", " != null"));
                cw.WriteLine("{0} {1} = new {0}();",
                             NamingHelperStack.ToServiceResponseCollectionName(entity, interfacesEnvironment),
                             VarName_ResponseList);
                WriteInitResponse(VarName_ResponseList);
                cw.BeginTry();
                cw.WriteLine("IList<{0}> list = ",
                             domainEnvironment.ToTypeName(entity, true));
                cw.Indent++;
                cw.WriteLine("{0}.{1};",
                             domainEnvironment.ToTypeName(entity, true),
                             DomainLayerConfig.Methods.GetByRelationParent(r, domainEnvironment)
                             .Call(r.ChildAttributes.ToNamesString(", ", VarName_Request + ".", ".Value"))
                             );
                cw.Indent--;
                cw.WriteLine("{0}.{1} = {2}(list);",
                             VarName_ResponseList,
                             NamingHelperStack.ToDTOCollectionPropertyName(entity),
                             MethodName_DomainCollectionToDTO);
                cw.EndTry();
                WriteCatch(VarName_ResponseList);
                cw.WriteLine("return {0};", VarName_ResponseList);
            }

            cw.Else();             // Collection request TOP MaxPageSize or by page
            cw.WriteLine("{0} {1} = new {0}();",
                         NamingHelperStack.ToServiceResponseCollectionName(entity, interfacesEnvironment),
                         VarName_ResponseList);
            WriteInitResponse(VarName_ResponseList);
            cw.BeginTry();
            cw.WriteLine("IList<{0}> list = null;",
                         domainEnvironment.ToTypeName(entity, true));
            cw.If("{0}.{1} != null && {0}.{2} != null",
                  VarName_Request,
                  NamingHelperStack.ParamName_PageNumber,
                  NamingHelperStack.ParamName_PageSize);
            cw.If("{0}.{1} != null && {0}.{2} != null",
                  VarName_Request,
                  NamingHelperStack.ParamName_SortOrderProperty,
                  NamingHelperStack.ParamName_SortOrderAsc);
            cw.WriteLine("list = {0}.GetPage({1}.{2}.Value, {1}.{3}.Value, new {4}[] {{ new {4}({1}.{5}, {1}.{6}.Value) }});",
                         domainEnvironment.ToTypeName(entity, true),
                         VarName_Request,
                         NamingHelperStack.ParamName_PageNumber,
                         NamingHelperStack.ParamName_PageSize,
                         DomainLayerConfig.GetClassName_SortOrder(true),
                         NamingHelperStack.ParamName_SortOrderProperty,
                         NamingHelperStack.ParamName_SortOrderAsc);
            cw.Else();
            cw.WriteLine("list = {0}.GetPage({1}.{2}.Value, {1}.{3}.Value, null);",
                         domainEnvironment.ToTypeName(entity, true),
                         VarName_Request,
                         NamingHelperStack.ParamName_PageNumber,
                         NamingHelperStack.ParamName_PageSize);
            cw.EndIf();
            cw.Else();
            cw.WriteLine("list = {0}.GetPage(0, {1}, null);",
                         domainEnvironment.ToTypeName(entity, true),
                         RestServiceHelper.MaxPageSize);
            cw.EndIf();
            cw.WriteLine("{0}.{1} = {2}(list);",
                         VarName_ResponseList,
                         NamingHelperStack.ToDTOCollectionPropertyName(entity),
                         MethodName_DomainCollectionToDTO);
            cw.EndTry();
            WriteCatch(VarName_ResponseList);
            cw.WriteLine("return {0};", VarName_ResponseList);

            cw.EndIf();             // Global
            cw.WriteLine();


            cw.If("{0} != null", VarName_DomainObject);
            cw.WriteLine("{0} {1} = new {0}();",
                         NamingHelperStack.ToDTOTypeName(entity, interfacesEnvironment),
                         VarName_DTO);
            cw.WriteLine("{0}.{1}({2}, {3});",
                         NamingHelperStack.ToServiceName(entity, null),
                         MethodName_DomainObjectToDTO,
                         VarName_DomainObject,
                         VarName_DTO);
            cw.WriteLine("{0}.{1} = {2};",
                         VarName_Response,
                         NamingHelperStack.ToDTOPropertyName(entity),
                         VarName_DTO);
            cw.EndIf();
            cw.EndTry();
            WriteCatch(VarName_Response);
            cw.WriteLine("return {0};", VarName_Response);

            cw.EndFunction();
        }