Example #1
0
 private void WriteDomainCollectionToDTOCollection(IEntity entity)
 {
     cw.WriteLine("protected {0} {1}",
                  NamingHelperStack.ToDTOCollectionTypeName(entity, interfacesEnvironment),
                  ToMethodSignature_DomainCollectionToDTO(entity));
     cw.BeginScope();
     cw.WriteLine("{0} {1} = new {0}();",
                  NamingHelperStack.ToDTOCollectionTypeName(entity, interfacesEnvironment),
                  VarName_DTOCollection);
     cw.WriteLine("foreach({0} {1} in {2})",
                  domainEnvironment.ToTypeName(entity, true),
                  VarName_DomainObject,
                  VarName_DomainCollection);
     cw.BeginScope();
     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}.Add({1});",
                  VarName_DTOCollection,
                  VarName_DTO);
     cw.EndScope();
     cw.WriteLine("return {0};", VarName_DTOCollection);
     cw.EndScope();
 }
        private void WriteRefresh(IEntity entity)
        {
            cw.BeginFunction("public {0}void Refresh()",
                             entity.HasSupertype ? "override " : "virtual ");
            List <string> args = new List <string>();

            foreach (IAttribute a in entity.PrimaryId.Attributes)
            {
                args.Add("this." + NamingHelper.ToDTOPropertyName(a));
            }
            cw.WriteLine("{0} o = {0}.{1};",
                         NamingHelperStack.ToDTOAdapterTypeName(entity, null),
                         ServicesLayerConfig.Methods.GetById(entity.PrimaryId, environment).Call(args.ToArray()));
            cw.WriteLine("this.{0} = o != null && o.{0} != null ? o.{0} : new {1}();",
                         NamingHelper.PropertyName_AdapterDTO,
                         NamingHelperStack.ToDTOTypeName(entity, dtoEnvironment));
            cw.EndFunction();
        }
        private void WriteDTOPersistenceFunctions(IEntity entity)
        {
            cw.BeginFunction("public override {0}.{1} Save(bool throwException = false)",
                             interfacesEnvironment.BaseNamespace,
                             NamingHelper.ClassName_CommitResult);
            cw.WriteLine("return PersistenceAction<{0}>({1}.{2}.Action.Save, throwException);",
                         NamingHelperStack.ToDTOTypeName(entity, dtoEnvironment),
                         interfacesEnvironment.BaseNamespace,
                         NamingHelper.ClassName_UnitOfWorkDTO);
            cw.EndFunction();
            cw.WriteLine();

            cw.BeginFunction("public override {0}.{1} Delete(bool throwException = false)",
                             interfacesEnvironment.BaseNamespace,
                             NamingHelper.ClassName_CommitResult);
            cw.WriteLine("return PersistenceAction<{0}>({1}.{2}.Action.Delete, throwException);",
                         NamingHelperStack.ToDTOTypeName(entity, dtoEnvironment),
                         interfacesEnvironment.BaseNamespace,
                         NamingHelper.ClassName_UnitOfWorkDTO);
            cw.EndFunction();
        }
        private void WriteBodyGetByAttributes(IEntity entity, IAttributes attributes)
        {
            cw.WriteLine("{0} {1} = WebClientFactory.GetJsonClient()",
                         NamingHelperStack.ToDTOTypeName(entity, dtoEnvironment),
                         VarName_DTO);
            cw.Indent++;
            cw.WriteLine(".Get<{0}>(String.Format(\"/{1}/{2}\", {3}))",
                         NamingHelperStack.ToServiceResponseName(entity, interfacesEnvironment),
                         NamingHelperStack.ToServiceName(entity, null),
                         cw.ToSeparatedString(attributes.ToList(),
                                              "/",
                                              delegate(object item, int count)
                                              { return(String.Format("{0}/{{{1}}}", (item as IAttribute).Name, count)); }),
                         environment.ToArguments(attributes)
                         );
            cw.WriteLine(".{0};",
                         NamingHelper.ToDTOPropertyName(entity));
            cw.Indent--;

            cw.WriteLine("return {0} == null ? null : new {1}({0});",
                         VarName_DTO,
                         NamingHelperStack.ToDTOAdapterTypeName(entity, null));
        }
Example #5
0
        private void WritePersistence()
        {
            if (genie.Lamp.Config.Patterns.Security != null)
            {
                cw.WriteLine("[Authenticate]");
            }
            cw.WriteLine("public partial class {0} : RestServiceBase<{1}>, IRequiresRequestContext",
                         NamingHelperStack.ToServiceName(NamingHelper.ServiceName_Persistence),
                         NamingHelperStack.ToServiceRequestName(NamingHelper.ServiceName_Persistence));
            cw.BeginScope();
            cw.WriteLine("public override object OnGet({0} {1})",
                         NamingHelperStack.ToServiceRequestName(NamingHelper.ServiceName_Persistence),
                         VarName_Request);
            cw.BeginScope();
            cw.WriteLine("return new {0}();",
                         NamingHelperStack.ToServiceResponseName(NamingHelper.ServiceName_Persistence));
            cw.EndScope();
            cw.WriteLine();

            cw.WriteLine("public override object OnPost({0} {1})",
                         NamingHelperStack.ToServiceRequestName(NamingHelper.ServiceName_Persistence),
                         VarName_Request);
            cw.BeginScope();
            cw.WriteLine("{0} {1} = new {0}();",
                         NamingHelperStack.ToServiceResponseName(NamingHelper.ServiceName_Persistence),
                         VarName_Response);
            cw.WriteLine("{0}.{1} = {2}.Commit({3}.{4}, {0}.{5});",
                         VarName_Response,
                         NamingHelper.PropertyName_CommitResult,
                         NamingHelperStack.ToServiceName(NamingHelper.ServiceName_Persistence),
                         VarName_Request,
                         NamingHelper.PropertyName_UnitOfWorkDTO,
                         PropertyName_UpdatedObjects);
            cw.WriteLine("return {0};", VarName_Response);
            cw.EndScope();
            cw.WriteLine();
            // Commit
            cw.BeginFunction("public static {0} Commit({1} {2}, {3} {4})",
                             NamingHelper.ClassName_CommitResult,
                             NamingHelper.ClassName_UnitOfWorkDTO,
                             NamingHelper.VarName_UnitOfWork,
                             ClassName_UpdatedObjects,
                             VarName_UpdatedObjects);
            cw.WriteLine("{0} commitResult = new {0}();", NamingHelper.ClassName_CommitResult);
            cw.WriteLine("{0}.{1} uow = new {0}.{1}();",
                         DomainLayerConfig.PersistenceNamespace,
                         NamingHelper.ClassName_UnitOfWorkDomain);
            cw.WriteLine("foreach({0}.WorkItem wi in unitOfWork.WorkItems)",
                         NamingHelper.ClassName_UnitOfWorkDTO);
            cw.BeginScope();
            cw.WriteLine("InitDomain(wi);");
            cw.If("wi.Action == {0}.Action.Save",
                  NamingHelper.ClassName_UnitOfWorkDTO);
            cw.WriteLine("uow.Save(wi.DomainObject);");
            cw.Else();
            cw.WriteLine("uow.Delete(wi.DomainObject);");
            cw.EndIf();
            cw.EndScope();
            cw.BeginTry();
            cw.WriteLine("uow.Commit();");
            cw.WriteLine("if ({0} != null) {0}.Clear();", VarName_UpdatedObjects);
            cw.WriteLine("foreach({0}.WorkItem wi in unitOfWork.WorkItems)",
                         NamingHelper.ClassName_UnitOfWorkDTO);
            cw.BeginScope();
            cw.If("wi.Action != {0}.Action.Delete", NamingHelper.ClassName_UnitOfWorkDTO);
            cw.WriteLine("InitDTO(wi);");
            cw.WriteLine("if ({0} != null) {0}.Add(wi.Item.Internal_ObjectId, wi.Item);", VarName_UpdatedObjects);
            cw.EndIf();
            cw.EndScope();
            cw.EndTry();
            cw.BeginCatch("Exception e");
            cw.WriteLine("commitResult.HasError = true;", VarName_Response);
            cw.WriteLine("commitResult.Message = e.Message;", VarName_Response);
            cw.WriteLine("commitResult.ExceptionString = e.ToString();", VarName_Response);
            cw.EndCatch();
            cw.WriteLine("return commitResult;");
            cw.EndFunction();
            cw.WriteLine();

            // InitDomain
            cw.BeginFunction("private static void InitDomain({0}.WorkItem wi)",
                             NamingHelper.ClassName_UnitOfWorkDTO);
            cw.WriteLine("switch(({0})wi.Item.Get{1}())",
                         NamingHelper.EnumName_DomainTypes,
                         NamingHelper.PropertyName_DomainTypeId);
            cw.BeginScope();
            foreach (IEntity entity in Model.Entities)
            {
                if (!entity.Persistence.Persisted)
                {
                    continue;
                }
                cw.WriteLine("case {0}.{1}:",
                             NamingHelper.EnumName_DomainTypes,
                             NamingHelper.ToDomainTypesEnumItemName(entity));
                cw.BeginScope();
                List <string> getByIdArgs = new List <string>();
                foreach (IAttribute a in entity.PrimaryId.Attributes)
                {
                    getByIdArgs.Add(String.Format("(wi.Item as {0}).{1}",
                                                  NamingHelperStack.ToDTOTypeName(entity, interfacesEnvironment),
                                                  a.Name));
                }
                cw.WriteLine("wi.DomainObject = {0}.{1};",
                             domainEnvironment.ToTypeName(entity, true),
                             DomainLayerConfig.Methods.GetById(entity.PrimaryId, domainEnvironment).Call(getByIdArgs.ToArray()));
                cw.If("wi.DomainObject == null");
                cw.WriteLine("wi.DomainObject = new {0}();",
                             domainEnvironment.ToTypeName(entity, true));
                cw.EndIf();
                cw.WriteLine("{0}.{1}(wi.Item as {2}, wi.DomainObject as {3});",
                             NamingHelperStack.ToServiceName(entity, environment),
                             MethodName_DTOToDomainObject,
                             NamingHelperStack.ToDTOTypeName(entity, interfacesEnvironment),
                             domainEnvironment.ToTypeName(entity, true));
                cw.WriteLine("break;");
                cw.EndScope();
            }
            cw.WriteLine("default: throw new ApplicationException(\"Cannot save non-persistent object\");");
            cw.EndScope();
            cw.EndFunction();
            cw.WriteLine();
            // InitDTO
            cw.WriteLine("private static void InitDTO({0}.WorkItem wi)",
                         NamingHelper.ClassName_UnitOfWorkDTO);
            cw.BeginScope();
            cw.WriteLine("switch(({0})wi.Item.Get{1}())",
                         NamingHelper.EnumName_DomainTypes,
                         NamingHelper.PropertyName_DomainTypeId);
            cw.BeginScope();
            foreach (IEntity entity in Model.Entities)
            {
                if (!entity.Persistence.Persisted)
                {
                    continue;
                }
                cw.WriteLine("case {0}.{1}:",
                             NamingHelper.EnumName_DomainTypes,
                             NamingHelper.ToDomainTypesEnumItemName(entity));
                cw.BeginScope();
                cw.WriteLine("(wi.DomainObject as {0}).Refresh();",
                             domainEnvironment.ToTypeName(entity, true));
                cw.WriteLine("{0}.{1}(wi.DomainObject as {2}, wi.Item as {3});",
                             NamingHelperStack.ToServiceName(entity, environment),
                             MethodName_DomainObjectToDTO,
                             domainEnvironment.ToTypeName(entity, true),
                             NamingHelperStack.ToDTOTypeName(entity, interfacesEnvironment));
                cw.WriteLine("break;");
                cw.EndScope();
            }
            cw.WriteLine("default: throw new ApplicationException(\"Cannot process non-persistent object\");");
            cw.EndScope();
            cw.EndScope();

            cw.EndScope();             // Class
        }
Example #6
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();
        }