public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (InvalidDataInfo)conceptInfo; // Using nonstandard naming of variables to avoid name clashes with injected code. string getErrorMessageMethod = @"public IEnumerable<InvalidDataMessage> " + info.GetErrorMessageMethodName() + @"(IEnumerable<Guid> invalidData_Ids) { const string invalidData_Description = " + CsUtility.QuotedString(info.ErrorMessage) + @"; " + OverrideUserMessagesTag.Evaluate(info) + @" return invalidData_Ids.Select(id => new InvalidDataMessage { ID = id, Message = invalidData_Description }); } "; codeBuilder.InsertCode(getErrorMessageMethod, RepositoryHelper.RepositoryMembers, info.Source); codeBuilder.AddReferencesFromDependency(typeof(InvalidDataMessage)); string dataStructure = info.Source.Module.Name + "." + info.Source.Name; string systemMessage = @"""DataStructure:" + dataStructure + @",ID:"" + invalidItemId.ToString()" + SystemMessageAppendTag.Evaluate(info); string validationSnippet = @"if (insertedNew.Count() > 0 || updatedNew.Count() > 0) { Guid[] changedItemsId = inserted.Concat(updated).Select(item => item.ID).ToArray(); Guid invalidItemId = this.Filter(this.Query(changedItemsId), new " + info.FilterType + @"()) .Select(item => item.ID).FirstOrDefault(); if (invalidItemId != default(Guid)) { var userMessage = " + info.GetErrorMessageMethodName() + @"(new[] { invalidItemId }).Single(); string systemMessage = " + systemMessage + @"; throw new Rhetos.UserException(userMessage.Message, userMessage.MessageParameters, systemMessage, null); } } "; codeBuilder.InsertCode(validationSnippet, WritableOrmDataStructureCodeGenerator.OnSaveTag2, info.Source); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { codeBuilder.InsertCode(CodeSnippet); codeBuilder.AddReferencesFromDependency(typeof(Guid)); codeBuilder.AddReferencesFromDependency(typeof(System.Linq.Enumerable)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ReportDataInfo)conceptInfo; codeBuilder.InsertCode(ServiceDefinitionCodeSnippet(info), InitialCodeGenerator.RhetosRestClassesTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.WebApiRestGenerator.Utilities.ServiceUtility)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.WebApiRestGenerator.Utilities.DownloadReportResult)); codeBuilder.AddReferencesFromDependency(typeof(Newtonsoft.Json.JsonConvert)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { codeBuilder.InsertCode(CodeSnippet); codeBuilder.AddReference(CaptionsResourceGenerator.ResourcesAssemblyDllPath); codeBuilder.AddReferencesFromDependency(typeof(Guid)); codeBuilder.AddReferencesFromDependency(typeof(System.Linq.Enumerable)); codeBuilder.AddReferencesFromDependency(typeof(System.ComponentModel.DefaultValueAttribute)); // using namespace System.ComponentModel codeBuilder.AddReferencesFromDependency(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute)); // using namespace System.ComponentModel.DataAnnotations }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ReportFileInfo)conceptInfo; codeBuilder.InsertCode(RepositoryFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); codeBuilder.InsertCode("IReportRepository", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode(RegisterRepository(info), ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); codeBuilder.AddReferencesFromDependency(typeof(ReportFile)); codeBuilder.AddReferencesFromDependency(typeof(IReportRepository)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (WriteInfo)conceptInfo; codeBuilder.InsertCode("IWritableRepository<" + info.DataStructure.Module.Name + "." + info.DataStructure.Name + ">", RepositoryHelper.RepositoryInterfaces, info.DataStructure); codeBuilder.InsertCode("IValidateRepository", RepositoryHelper.RepositoryInterfaces, info.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(IWritableRepository <>)); codeBuilder.AddReferencesFromDependency(typeof(IValidateRepository)); codeBuilder.InsertCode(MemberFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.InvalidDataMessage)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ReportDataInfo)conceptInfo; codeBuilder.InsertCode(ServiceRegistrationCodeSnippet(info), InitialCodeGenerator.ServiceRegistrationTag); codeBuilder.InsertCode(ServiceInitializationCodeSnippet(info), InitialCodeGenerator.ServiceInitializationTag); codeBuilder.InsertCode(ServiceDefinitionCodeSnippet(info), InitialCodeGenerator.RhetosRestClassesTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.RestGenerator.Utilities.ServiceUtility)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.RestGenerator.Utilities.DownloadReportResult)); codeBuilder.AddReferencesFromDependency(typeof(Newtonsoft.Json.JsonConvert)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info is IWritableOrmDataStructure) { codeBuilder.InsertCode("IWritableRepository<" + info.Module.Name + "." + info.Name + ">", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode(MemberFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ExceptionsUtility)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.CsUtility)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { DataStructureInfo info = (DataStructureInfo)conceptInfo; if (IsTypeSupported(info)) { //codeBuilder.InsertCode(ServiceRegistrationCodeSnippet(info), InitialCodeGenerator.ServiceRegistrationTag); //codeBuilder.InsertCode(ServiceInitializationCodeSnippet(info), InitialCodeGenerator.ServiceInitializationTag); codeBuilder.InsertCode(ServiceDefinitionCodeSnippet(info), InitialCodeGenerator.RhetosRestClassesTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Processing.DefaultCommands.ReadCommandResult)); codeBuilder.AddReferencesFromDependency(typeof(Newtonsoft.Json.Linq.JToken)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ActionInfo)conceptInfo; RepositoryHelper.GenerateRepository(info, codeBuilder); codeBuilder.InsertCode("IActionRepository", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode(RepositoryFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); codeBuilder.InsertCode(RegisterRepository(info), ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); codeBuilder.AddReferencesFromDependency(typeof(ExportAttribute)); codeBuilder.AddReferencesFromDependency(typeof(ExportMetadataAttribute)); codeBuilder.AddReferencesFromDependency(typeof(MefProvider)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info.Module.Name == "Common" && info.Name == "PermissionBrowse") { codeBuilder.InsertCode("Rhetos.Dom.DefaultConcepts.IPermissionLoader", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode(MemberFunctionsSnippet, RepositoryHelper.RepositoryMembers, info); codeBuilder.InsertCode(RegisterRepository(info), ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); codeBuilder.AddReferencesFromDependency(typeof(IPermissionLoader)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.Claim)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info.Module.Name == "Common" && info.Name == "PermissionBrowse") { codeBuilder.InsertCode("Rhetos.SimpleWindowsAuth.IPermissionLoader", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode(MemberFunctionsSnippet, RepositoryHelper.RepositoryMembers, info); codeBuilder.InsertCode(RegisterRepository(info), ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); codeBuilder.AddReferencesFromDependency(typeof(IPermissionLoader)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.Claim)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (HierarchySingleRootInternalInfo)conceptInfo; codeBuilder.InsertCode(CheckInvalidItemsSnippet(info), Dsl.DefaultConcepts.HierarchyInfo.BeforeRecomputeTag, info.Hierarchy); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (LoadOldItemsInfo)conceptInfo; codeBuilder.InsertCode(GetSnippet(info), WritableOrmDataStructureCodeGenerator.InitializationTag, info.SaveMethod.Entity); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.Graph)); }
public static void GenerateRepository(DataStructureInfo info, ICodeBuilder codeBuilder) { codeBuilder.InsertCode(RepositorySnippet(info), ModuleCodeGenerator.HelperNamespaceMembersTag, info.Module); codeBuilder.InsertCode(CallFromModuleRepostiorySnippet(info), ModuleCodeGenerator.RepositoryMembersTag, info.Module); codeBuilder.InsertCode(RegisterRepository(info), ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Extensibility.NamedPluginsExtensions)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DenyUserEditDataStructureInfo)conceptInfo; codeBuilder.InsertCode(CheckChangesSnippet(info), WritableOrmDataStructureCodeGenerator.ArgumentValidationTag, info.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DenyUserEditInfo)conceptInfo; codeBuilder.InsertCode(CheckChangesOnInsertSnippet(info), WritableOrmDataStructureCodeGenerator.ArgumentValidationTag, info.Property.DataStructure); codeBuilder.InsertCode(CheckChangesOnUpdateSnippet(info), WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (InvalidDataInfo)conceptInfo; codeBuilder.InsertCode(CheckInvalidItemsSnippet(info), WritableOrmDataStructureCodeGenerator.OnSaveTag2, info.Source); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { DataStructureInfo info = (DataStructureInfo)conceptInfo; if (IsTypeSupported(info)) { codeBuilder.InsertCode(ServiceRegistrationCodeSnippet(info), InitialCodeGenerator.ServiceRegistrationTag); codeBuilder.InsertCode(ServiceInitializationCodeSnippet(info), InitialCodeGenerator.ServiceInitializationTag); codeBuilder.InsertCode(ServiceDefinitionCodeSnippet(info), InitialCodeGenerator.RhetosRestClassesTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Processing.DefaultCommands.ReadCommandResult)); codeBuilder.AddReferencesFromDependency(typeof(Newtonsoft.Json.Linq.JToken)); if (info is IWritableOrmDataStructure) WritableOrmDataStructureCodeGenerator.GenerateCode(conceptInfo, codeBuilder); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (LockPropertyInfo)conceptInfo; codeBuilder.InsertCode(CheckLockedPropertySnippet(info), WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Source.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DeactivatableInfo)conceptInfo; codeBuilder.InsertCode(DefaultSnippet(info), WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Entity); codeBuilder.InsertCode("Rhetos.Dom.DefaultConcepts.IDeactivatable", DataStructureCodeGenerator.InterfaceTag, info.Entity); codeBuilder.AddReferencesFromDependency(typeof(IDeactivatable)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (AutoCodeCachedInfo)conceptInfo; string snippet = string.Format( @"Rhetos.Dom.DefaultConcepts.AutoCodeHelper.UpdateCodes( _executionContext.NHibernateSession, ""{0}.{1}"", ""{2}"", insertedNew.Select(item => new Rhetos.Dom.DefaultConcepts.AutoCodeItem<{0}.{1}> {{ Item = item, Code = item.{2}, Grouping = """" }}), (item, newCode) => item.{2} = newCode); ", info.Property.DataStructure.Module.Name, info.Property.DataStructure.Name, info.Property.Name); codeBuilder.InsertCode(snippet, WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.AutoCodeHelper)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.AutoCodeItem<>)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { DataStructureInfo info = (DataStructureInfo)conceptInfo; codeBuilder.InsertCode(ImplementationCodeSnippet(info)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Mvc.BaseMvcModel)); _localizedDisplayAttribute.InsertOrOverrideAttribute(codeBuilder, info, LocalizedDisplayAttributeProperties(info)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info.Module.Name == "Common" && info.Name == "Claim") codeBuilder.InsertCode(RepositoryMemberSnippet(info), RepositoryHelper.RepositoryMembers, info); codeBuilder.AddReferencesFromDependency(typeof(DeactivateInsteadOfDelete)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (UserRequiredPropertyInfo)conceptInfo; if (IsSupported(info.Property)) { codeBuilder.InsertCode(CheckDataSnippet(info), WritableOrmDataStructureCodeGenerator.ArgumentValidationTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (RequiredPropertyInfo)conceptInfo; if (IsSupported(info.Property)) { codeBuilder.InsertCode(CheckDataSnippet(info), WritableOrmDataStructureCodeGenerator.ProcessedOldDataTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (RequiredPropertyInfo)conceptInfo; if (RequiredPropertyCodeGenerator.IsSupported(info.Property) && (info.Property is ShortStringPropertyInfo || info.Property is LongStringPropertyInfo)) { codeBuilder.InsertCode(CheckDataSnippet(info), WritableOrmDataStructureCodeGenerator.NewDataLoadedTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (AutoCodeCachedInfo)conceptInfo; string dataStructure = info.Property.DataStructure.Module.Name + "." + info.Property.DataStructure.Name; string snippet = $@"AutoCodeHelper.UpdateCodesWithCache( _executionContext.SqlExecuter, ""{dataStructure}"", ""{info.Property.Name}"", insertedNew.Select(item => AutoCodeItem.Create(item, item.{info.Property.Name}{GroupingTag.Evaluate(info)})).ToList(), (item, newCode) => item.{info.Property.Name} = newCode); "; // Inserting snippet at OldDataLoadedTag instead of InitializationTag, to ensure that // default values for code format or grouping can be set before generating the autocode. codeBuilder.InsertCode(snippet, WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(AutoCodeHelper)); codeBuilder.AddReferencesFromDependency(typeof(AutoCodeItem)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (UniqueMultiplePropertiesInfo)conceptInfo; if (IsSupported(info)) { codeBuilder.InsertCode(CheckSavedItemsSnippet(info), WritableOrmDataStructureCodeGenerator.OnSaveTag2, info.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (AutoCodeCachedInfo)conceptInfo; string snippet = string.Format( @"Rhetos.Dom.DefaultConcepts.AutoCodeHelper.UpdateCodes( _executionContext.SqlExecuter, ""{0}.{1}"", ""{2}"", insertedNew.Select(item => new Rhetos.Dom.DefaultConcepts.AutoCodeItem<{0}.{1}> {{ Item = item, Code = item.{2}, Grouping = """" }}), (item, newCode) => item.{2} = newCode); ", info.Property.DataStructure.Module.Name, info.Property.DataStructure.Name, info.Property.Name); codeBuilder.InsertCode(snippet, WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.AutoCodeHelper)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.AutoCodeItem <>)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ModuleExternalReferenceInfo)conceptInfo; var type = Type.GetType(info.TypeOrAssembly); if (type != null) codeBuilder.AddReferencesFromDependency(type); else codeBuilder.AddReference(info.TypeOrAssembly); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (InvalidDataInfo)conceptInfo; // Using nonstandard naming of variables to avoid name clashes with injected code. string errorMessageMethod = $@"public IEnumerable<InvalidDataMessage> {info.GetErrorMessageMethodName()}(IEnumerable<Guid> invalidData_Ids) {{ IDictionary<string, object> metadata = new Dictionary<string, object>(); {ErrorMetadataTag.Evaluate(info)} {CustomValidationResultTag.Evaluate(info)} }} "; codeBuilder.InsertCode(errorMessageMethod, RepositoryHelper.RepositoryMembers, info.Source); codeBuilder.AddReferencesFromDependency(typeof(InvalidDataMessage)); // HACK: Using IDslModel as a cleaner alternative to ConceptMetadata (which is not saved with DslModel). // We could remove InvalidDataMessageInfo and InvalidDataAllowSaveInfo concepts, // add a base validation concept for InvalidData that does not have these features (default validation result and DenySave), // and make InvalidData a macro that adds the features, but the result would not be fully backward compatible. bool hasCustomValidationMessage = _dslModel.FindByKey($"{nameof(InvalidDataMessageInfo)} {info.GetKeyProperties()}") != null; if (!hasCustomValidationMessage) { string defaultValidationResult = $@" return invalidData_Ids.Select(id => new InvalidDataMessage {{ ID = id, Message = {CsUtility.QuotedString(info.ErrorMessage)}, Metadata = metadata }});"; codeBuilder.InsertCode(defaultValidationResult, CustomValidationResultTag, info); } codeBuilder.InsertCode( "metadata[\"Validation\"] = " + CsUtility.QuotedString(info.FilterType) + ";\r\n ", ErrorMetadataTag, info); bool allowSave = _dslModel.FindByKey($"{nameof(InvalidDataAllowSaveInfo)} {info.GetKeyProperties()}") != null; string validationSnippet = $@"if ({(allowSave ? "!" : "")}onSave) {{ var errorIds = this.Filter(this.Query(ids), new {info.FilterType}()).Select(item => item.ID).ToArray(); if (errorIds.Count() > 0) foreach (var error in {info.GetErrorMessageMethodName()}(errorIds)) yield return error; }} "; codeBuilder.InsertCode(validationSnippet, WritableOrmDataStructureCodeGenerator.OnSaveValidateTag, info.Source); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (UserRequiredPropertyInfo)conceptInfo; if (UserRequiredPropertyCodeGenerator.IsSupported(info.Property) && (info.Property is ShortStringPropertyInfo || info.Property is LongStringPropertyInfo)) { codeBuilder.InsertCode(CheckDataSnippet(info), WritableOrmDataStructureCodeGenerator.ArgumentValidationTag, info.Property.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info.Module.Name == "Common" && info.Name == "Claim") { codeBuilder.InsertCode(RepositoryMemberSnippet(info), RepositoryHelper.RepositoryMembers, info); } codeBuilder.AddReferencesFromDependency(typeof(DeactivateInsteadOfDelete)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info is IWritableOrmDataStructure) { codeBuilder.InsertCode("IWritableRepository", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode(MemberFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); codeBuilder.InsertCode(RegisterRepository(info), ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ExceptionsUtility)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DeactivatableInfo)conceptInfo; string saveCode = @"DeactivatableCodeGenerator.SetActiveByDefault(insertedNew, updatedNew, updated); "; codeBuilder.InsertCode(saveCode, WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Entity); codeBuilder.InsertCode("Rhetos.Dom.DefaultConcepts.IDeactivatable", DataStructureCodeGenerator.InterfaceTag, info.Entity); codeBuilder.AddReferencesFromDependency(typeof(IDeactivatable)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info is IOrmDataStructure) { codeBuilder.InsertCode(CodeSnippet(info), DataStructureCodeGenerator.BodyTag, info); codeBuilder.AddInterfaceAndReference(string.Format("System.IEquatable<{0}>", info.Name), typeof (System.IEquatable<>), info); PropertyInfo idProperty = new PropertyInfo {DataStructure = info, Name = "ID"}; PropertyHelper.GenerateCodeForType(idProperty, codeBuilder, "Guid", true); codeBuilder.AddInterfaceAndReference(typeof (IEntity), info); RepositoryHelper.GenerateRepository(info, codeBuilder); RepositoryHelper.GenerateQueryableRepositoryFunctions(info, codeBuilder, QuerySnippet(info)); codeBuilder.AddReferencesFromDependency(typeof(IQueryDataSourceCommandImplementation)); codeBuilder.AddReferencesFromDependency(typeof(GenericFilterWithPagingUtility)); codeBuilder.AddReferencesFromDependency(typeof(QueryDataSourceCommandResult)); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; if (info is IWritableOrmDataStructure) { codeBuilder.InsertCode("IWritableRepository<" + info.Module.Name + "." + info.Name + ">", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.InsertCode("IValidateRepository", RepositoryHelper.RepositoryInterfaces, info); codeBuilder.AddReferencesFromDependency(typeof(IWritableRepository <>)); codeBuilder.AddReferencesFromDependency(typeof(IValidateRepository)); codeBuilder.InsertCode(MemberFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ExceptionsUtility)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.CsUtility)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.InvalidDataMessage)); codeBuilder.InsertCode(PersistenceStorageMappingSnippet(info), DomInitializationCodeGenerator.PersistenceStorageMappingsTag); string registerRepository = $@"_mappings.Add(typeof({info.Module.Name}.{info.Name}), new {info.Module.Name}_{info.Name}_Mapper()); "; codeBuilder.InsertCode(registerRepository, DomInitializationCodeGenerator.PersistenceStorageMappingRegistrationTag); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { ModuleInfo info = (ModuleInfo)conceptInfo; if (!CommonClassesCreated) { codeBuilder.InsertCode(GenerateCommonClassesSnippet()); // Types used in the preceding code snippet: codeBuilder.AddReferencesFromDependency(typeof(Autofac.Module)); // Includes a reference to Autofac.dll. codeBuilder.AddReferencesFromDependency(typeof(NHibernate.ISession)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.IUserInfo)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ISqlExecuter)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.IAuthorizationManager)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ResourcesFolder)); codeBuilder.AddReferencesFromDependency(typeof(System.ComponentModel.Composition.ExportAttribute)); CommonClassesCreated = true; } codeBuilder.InsertCode(GenerateNamespaceSnippet(info)); // Default .NET framework asseblies: codeBuilder.AddReferencesFromDependency(typeof(int)); // Includes reference to mscorlib.dll codeBuilder.AddReferencesFromDependency(typeof(Enumerable)); // Includes reference to System.Core. codeBuilder.AddReferencesFromDependency(typeof(ISet<>)); // Includes reference to System. codeBuilder.AddReferencesFromDependency(typeof(RuntimeBinderException)); // Includes reference to Microsoft.CSharp. codeBuilder.AddReferencesFromDependency(typeof(System.Data.Common.DbDataReader)); // Includes reference to System.Data. codeBuilder.AddReferencesFromDependency(typeof(System.Data.DataRowExtensions)); // Includes reference to System.Data.DataSetExtensions. codeBuilder.AddReferencesFromDependency(typeof(System.Xml.Serialization.XmlSerializer)); // Includes reference to System.Xml. codeBuilder.AddReferencesFromDependency(typeof(System.Xml.Linq.XElement)); // Includes reference to System.Xml.Linq. // Commonly used Rhetos classes: codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.FilterAll)); // Includes reference to Rhetos.Dom.DefaultConcepts.dll // Other classes used in domain object model: codeBuilder.AddReferencesFromDependency(typeof(NHibernate.Linq.LinqExtensionMethods)); // Includes reference to NHibernate.dll. codeBuilder.AddReferencesFromDependency(typeof(System.Runtime.Serialization.DataContractAttribute)); // Includes reference to System.Runtime.Serialization.dll. codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceTransaction)); codeBuilder.InsertCode(ModuleRepositoryInCommonRepositorySnippet(info), CommonDomRepositoryMembersTag); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ModuleExternalReferenceInfo)conceptInfo; var type = Type.GetType(info.TypeOrAssembly); if (type != null) { codeBuilder.AddReferencesFromDependency(type); } else { codeBuilder.AddReference(info.TypeOrAssembly); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (LoadOldItemsInfo)conceptInfo; string snippet = $@"var updatedIdsList = updatedNew.Select(item => item.ID).ToList(); var deletedIdsList = deletedIds.Select(item => item.ID).ToList(); var updatedOld = Filter(Query(), updatedIdsList).Select(item => new {{ item.ID{SelectPropertiesTag.Evaluate(info)} }}).ToList(); var deletedOld = Filter(Query(), deletedIdsList).Select(item => new {{ item.ID{SelectPropertiesTag.Evaluate(info)} }}).ToList(); Rhetos.Utilities.Graph.SortByGivenOrder(updatedOld, updatedIdsList, item => item.ID); Rhetos.Utilities.Graph.SortByGivenOrder(deletedOld, deletedIdsList, item => item.ID); "; codeBuilder.InsertCode(snippet, WritableOrmDataStructureCodeGenerator.InitializationTag, info.SaveMethod.Entity); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.Graph)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (InvalidDataInfo)conceptInfo; // Using nonstandard naming of variables to avoid name clashes with injected code. string errorMessageMethod = $@"public IEnumerable<InvalidDataMessage> {info.GetErrorMessageMethodName()}(IEnumerable<Guid> invalidData_Ids) {{ const string invalidData_Description = {CsUtility.QuotedString(info.ErrorMessage)}; IDictionary<string, object> metadata = new Dictionary<string, object>(); {ErrorMetadataTag.Evaluate(info)} {OverrideUserMessagesTag.Evaluate(info)} return invalidData_Ids.Select(id => new InvalidDataMessage {{ ID = id, Message = invalidData_Description, Metadata = metadata }}); }} "; codeBuilder.InsertCode(errorMessageMethod, RepositoryHelper.RepositoryMembers, info.Source); codeBuilder.AddReferencesFromDependency(typeof(InvalidDataMessage)); codeBuilder.InsertCode( "metadata[\"Validation\"] = " + CsUtility.QuotedString(info.FilterType) + ";\r\n ", ErrorMetadataTag, info); // HACK: IDslModel should not be used in code generator. // We should remove AllowSave concept, // add a base validation concept for InvalidData that does not block saving, // add DenySave concept that referenced the base validation and blocks saving, // and make InvalidData a macro that adds DenySave. bool allowSave = _dslModel.FindByKey($"{nameof(InvalidDataAllowSaveInfo)} {info.GetKeyProperties()}") != null; string validationSnippet = $@"if ({(allowSave ? "!" : "")}onSave) {{ var errorIds = this.Filter(this.Query(ids), new {info.FilterType}()).Select(item => item.ID).ToArray(); if (errorIds.Count() > 0) foreach (var error in {info.GetErrorMessageMethodName()}(errorIds)) yield return error; }} "; codeBuilder.InsertCode(validationSnippet, WritableOrmDataStructureCodeGenerator.OnSaveValidateTag, info.Source); }
public static void GenerateQueryableRepositoryFunctions(DataStructureInfo info, ICodeBuilder codeBuilder, string queryFunctionBody, string loadFunctionBody = null) { if (loadFunctionBody == null) { loadFunctionBody = "return Query().ToSimple().ToArray();"; } GenerateReadableRepositoryFunctions(info, codeBuilder, loadFunctionBody); if (queryFunctionBody != null) { codeBuilder.InsertCode(RepositoryQueryFunctionsSnippet(info, queryFunctionBody), RepositoryMembers, info); codeBuilder.InsertCode("IQueryableRepository<Common.Queryable." + info.Module.Name + "_" + info.Name + ">", RepositoryInterfaces, info); } codeBuilder.InsertCode(SnippetToSimpleObjectsConversion(info), DomInitializationCodeGenerator.QueryExtensionsMembersTag); codeBuilder.InsertCode(SnippetToNavigationConversion(info), DataStructureCodeGenerator.BodyTag, info); codeBuilder.InsertCode(SnippetToSimpleObjectConversion(info), DataStructureQueryableCodeGenerator.MembersTag, info); codeBuilder.InsertCode(SnippetLoadSimpleObjectsConversion(info), DomInitializationCodeGenerator.QueryExtensionsMembersTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.Graph)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (UniqueMultiplePropertiesInfo)conceptInfo; if (ImplementInObjectModel(info)) { codeBuilder.InsertCode(CheckSavedItemsSnippet(info), WritableOrmDataStructureCodeGenerator.OnSaveTag2, info.DataStructure); codeBuilder.AddReferencesFromDependency(typeof(UserException)); } if (info.SqlImplementation() && info.DataStructure is IWritableOrmDataStructure) { var ormDataStructure = (IWritableOrmDataStructure)info.DataStructure; string systemMessage = "DataStructure:" + info.DataStructure + ",Property:" + info.PropertyNames; string interpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsUniqueError(interpretedException, " + CsUtility.QuotedString(ormDataStructure.GetOrmSchema() + "." + ormDataStructure.GetOrmDatabaseObject()) + @", " + CsUtility.QuotedString(SqlIndexMultipleDatabaseDefinition.ConstraintName(info)) + @")) ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @"; "; codeBuilder.InsertCode(interpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.DataStructure); } }
public static void GenerateRepository(DataStructureInfo info, ICodeBuilder codeBuilder) { string module = info.Module.Name; string entity = info.Name; string repositorySnippet = $@"{RepositoryAttributes.Evaluate(info)} public class {entity}_Repository : {OverrideBaseTypeTag.Evaluate(info)} global::Common.RepositoryBase {RepositoryInterfaces.Evaluate(info)} {{ {RepositoryPrivateMembers.Evaluate(info)} public {entity}_Repository(Common.DomRepository domRepository, Common.ExecutionContext executionContext{ConstructorArguments.Evaluate(info)}) {{ _domRepository = domRepository; _executionContext = executionContext; {ConstructorCode.Evaluate(info)} }} {RepositoryMembers.Evaluate(info)} }} "; codeBuilder.InsertCode(repositorySnippet, ModuleCodeGenerator.HelperNamespaceMembersTag, info.Module); string callFromModuleRepostiorySnippet = $@"private {entity}_Repository _{entity}_Repository; public {entity}_Repository {entity} {{ get {{ return _{entity}_Repository ?? (_{entity}_Repository = ({entity}_Repository)Rhetos.Extensibility.NamedPluginsExtensions.GetPlugin(_repositories, {CsUtility.QuotedString(module + "." + entity)})); }} }} "; codeBuilder.InsertCode(callFromModuleRepostiorySnippet, ModuleCodeGenerator.RepositoryMembersTag, info.Module); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Extensibility.NamedPluginsExtensions)); string registerRepository = $@"builder.RegisterType<{module}._Helper.{entity}_Repository>().Keyed<IRepository>(""{module}.{entity}"").InstancePerLifetimeScope(); "; codeBuilder.InsertCode(registerRepository, ModuleCodeGenerator.CommonAutofacConfigurationMembersTag); }
public static void GenerateQueryableRepositoryFunctions(DataStructureInfo info, ICodeBuilder codeBuilder, string queryFunctionBody, string loadFunctionBody = null) { if (loadFunctionBody == null) loadFunctionBody = "return Query().ToSimple().ToArray();"; GenerateReadableRepositoryFunctions(info, codeBuilder, loadFunctionBody); if (queryFunctionBody != null) { codeBuilder.InsertCode(RepositoryQueryFunctionsSnippet(info, queryFunctionBody), RepositoryMembers, info); codeBuilder.InsertCode("IQueryableRepository<Common.Queryable." + info.Module.Name + "_" + info.Name + ">", RepositoryInterfaces, info); } codeBuilder.InsertCode(SnippetToSimpleObjectsConversion(info), DomInitializationCodeGenerator.QueryExtensionsMembersTag); codeBuilder.InsertCode(SnippetToNavigationConversion(info), DataStructureCodeGenerator.BodyTag, info); codeBuilder.InsertCode(SnippetToSimpleObjectConversion(info), DataStructureQueryableCodeGenerator.MembersTag, info); codeBuilder.InsertCode(SnippetLoadSimpleObjectsConversion(info), DomInitializationCodeGenerator.QueryExtensionsMembersTag); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.Graph)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (LockItemsInfo)conceptInfo; codeBuilder.InsertCode(CheckLockedItemsSnippet(info), WritableOrmDataStructureCodeGenerator.OldDataLoadedTag, info.Source); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DenySaveInfo)conceptInfo; codeBuilder.InsertCode(CheckInvalidItemsSnippet(info), WritableOrmDataStructureCodeGenerator.OnSaveTag2, info.Source); codeBuilder.AddReferencesFromDependency(typeof(UserException)); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { codeBuilder.InsertCode(CodeSnippet); // global codeBuilder.AddReferencesFromDependency(typeof(Guid)); codeBuilder.AddReferencesFromDependency(typeof(System.Linq.Enumerable)); codeBuilder.AddReferencesFromDependency(typeof(System.Configuration.ConfigurationElement)); codeBuilder.AddReferencesFromDependency(typeof(System.Diagnostics.Stopwatch)); // registration codeBuilder.AddReferencesFromDependency(typeof(System.ComponentModel.Composition.ExportAttribute)); codeBuilder.AddReferencesFromDependency(typeof(Autofac.Integration.Wcf.AutofacServiceHostFactory)); // wcf dataservices codeBuilder.AddReferencesFromDependency(typeof(System.Data.Services.DataServiceException)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Services.Common.DataServiceEntityAttribute)); codeBuilder.AddReferencesFromDependency(typeof(System.ServiceModel.ServiceContractAttribute)); codeBuilder.AddReferencesFromDependency(typeof(System.ServiceModel.Activation.AspNetCompatibilityRequirementsAttribute)); codeBuilder.AddReferencesFromDependency(typeof(System.ServiceModel.Web.WebServiceHost)); codeBuilder.AddReferencesFromDependency(typeof(System.Uri)); codeBuilder.AddReferencesFromDependency(typeof(System.Web.Routing.RouteTable)); // rhetos codeBuilder.AddReferencesFromDependency(typeof(Rhetos.IService)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.IEntity)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Logging.ILogger)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Logging.LoggerHelper)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.OData.DefaultCommands.ODataQueryCommand)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Processing.IProcessingEngine)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.Claim)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.UserException)); codeBuilder.AddReference(Path.Combine(_rootPath, "ServerDom.dll")); codeBuilder.AddReference(Path.Combine(_rootPath, "Autofac.dll")); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ModuleInfo)conceptInfo; codeBuilder.InsertCode(GenerateNamespaceSnippet(info)); // Default .NET framework asseblies: codeBuilder.AddReferencesFromDependency(typeof(int)); // Includes reference to mscorlib.dll codeBuilder.AddReferencesFromDependency(typeof(Enumerable)); // Includes reference to System.Core. codeBuilder.AddReferencesFromDependency(typeof(ISet<>)); // Includes reference to System. codeBuilder.AddReferencesFromDependency(typeof(RuntimeBinderException)); // Includes reference to Microsoft.CSharp. codeBuilder.AddReferencesFromDependency(typeof(System.Data.Common.DbDataReader)); // Includes reference to System.Data. codeBuilder.AddReferencesFromDependency(typeof(System.Data.DataRowExtensions)); // Includes reference to System.Data.DataSetExtensions. codeBuilder.AddReferencesFromDependency(typeof(System.Xml.Serialization.XmlSerializer)); // Includes reference to System.Xml. codeBuilder.AddReferencesFromDependency(typeof(System.Xml.Linq.XElement)); // Includes reference to System.Xml.Linq. // Commonly used Rhetos classes: codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.FilterAll)); // Includes reference to Rhetos.Dom.DefaultConcepts.dll // Other classes used in domain object model: codeBuilder.AddReferencesFromDependency(typeof(NHibernate.Linq.LinqExtensionMethods)); // Includes reference to NHibernate.dll. codeBuilder.AddReferencesFromDependency(typeof(System.Runtime.Serialization.DataContractAttribute)); // Includes reference to System.Runtime.Serialization.dll. codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceTransaction)); codeBuilder.InsertCode(ModuleRepositoryInCommonRepositorySnippet(info), CommonDomRepositoryMembersTag); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (InitializationConcept)conceptInfo; codeBuilder.InsertCode(GenerateCommonClassesSnippet()); // Types used in the preceding code snippet: codeBuilder.AddReferencesFromDependency(typeof(Autofac.Module)); // Includes a reference to Autofac.dll. codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Extensibility.INamedPlugins<>)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.IUserInfo)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Utilities.ISqlExecuter)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.IAuthorizationManager)); codeBuilder.AddReferencesFromDependency(typeof(System.ComponentModel.Composition.ExportAttribute)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Dom.DefaultConcepts.GenericRepositories)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Logging.ILogProvider)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Security.IWindowsSecurity)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.DbContext)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.SqlServer.SqlProviderServices)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Core.EntityClient.EntityConnection)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Infrastructure.IObjectContextAdapter)); codeBuilder.AddReferencesFromDependency(typeof(System.Data.Entity.Core.Objects.ObjectStateEntry)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceCache)); codeBuilder.AddReferencesFromDependency(typeof(Rhetos.Persistence.IPersistenceTransaction)); }