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)); }
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 }
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(); }