Example #1
0
        public void Save(RhetosBuildEnvironment rhetosBuildEnvironment, RhetosTargetEnvironment rhetosTargetEnvironment, RhetosProjectAssets rhetosProjectAssets)
        {
            var rhetosProjectContent = new RhetosProjectContent
            {
                RhetosBuildEnvironment  = rhetosBuildEnvironment,
                RhetosTargetEnvironment = rhetosTargetEnvironment,
                RhetosProjectAssets     = rhetosProjectAssets
            };
            string serialized        = JsonConvert.SerializeObject(rhetosProjectContent, _serializerSettings);
            string oldSerializedData = File.Exists(ProjectAssetsFilePath) ? File.ReadAllText(ProjectAssetsFilePath, Encoding.UTF8) : "";

            if (!Directory.Exists(Path.GetDirectoryName(ProjectAssetsFilePath)))
            {
                _filesUtility.SafeCreateDirectory(Path.GetDirectoryName(ProjectAssetsFilePath));
            }

            if (oldSerializedData != serialized)
            {
                File.WriteAllText(ProjectAssetsFilePath, serialized, Encoding.UTF8);
                _logger.Info($"{nameof(RhetosProjectAssets)} updated.");
            }
            else
            {
                _logger.Info($"{nameof(RhetosProjectAssets)} is already up-to-date.");
            }
        }
Example #2
0
 public InitialDomCodeGenerator(
     PluginInfoCollection plugins,
     DatabaseSettings databaseSettings,
     RhetosBuildEnvironment rhetosBuildEnvironment)
 {
     _plugins                = plugins;
     _databaseSettings       = databaseSettings;
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
 }
Example #3
0
        public override bool Execute()
        {
            var resolvedProjectContentFiles = ProjectContentFiles.Select(x => new { x.ItemSpec, FullPath = x.GetMetadata("FullPath") });
            var invalidProjectContentFiles  = resolvedProjectContentFiles.Where(x => string.IsNullOrEmpty(x.FullPath));

            if (invalidProjectContentFiles.Any())
            {
                throw new FrameworkException("Could not resolve the full path for the Rhetos input files " + string.Join(", ", invalidProjectContentFiles.Select(x => x.ItemSpec)).Limit(1000));
            }

            var assembliesInReferencedProjects        = Assemblies.Where(x => !string.IsNullOrEmpty(x.GetMetadata("Project"))).Select(x => new { x.ItemSpec, FullPath = x.GetMetadata("FullPath") });
            var invalidAssembliesInReferencedProjects = assembliesInReferencedProjects.Where(x => string.IsNullOrEmpty(x.FullPath));

            if (invalidAssembliesInReferencedProjects.Any())
            {
                throw new FrameworkException("Could not resolve the full path for the referenced assemblies " + string.Join(", ", invalidAssembliesInReferencedProjects.Select(x => x.ItemSpec)).Limit(1000));
            }

            var nuget = new NuGetUtilities(ProjectDirectory, resolvedProjectContentFiles.Select(x => x.FullPath), new NuGetLogger(Log), null);
            var packagesAssemblies = nuget.GetRuntimeAssembliesFromPackages();

            var rhetosBuildEnvironment = new RhetosBuildEnvironment
            {
                ProjectFolder         = Path.GetFullPath(ProjectDirectory),
                OutputAssemblyName    = AssemblyName,
                CacheFolder           = Path.GetFullPath(Path.Combine(ProjectDirectory, IntermediateOutputFolder)),
                GeneratedAssetsFolder = Path.GetFullPath(Path.Combine(ProjectDirectory, GeneratedAssetsFolder)),
                GeneratedSourceFolder = Path.GetFullPath(Path.Combine(ProjectDirectory, IntermediateOutputFolder, "Source")),
            };

            var rhetosTargetEnvironment = new RhetosTargetEnvironment
            {
                TargetPath         = Path.GetFullPath(Path.Combine(ProjectDirectory, TargetPath)),
                TargetAssetsFolder = Path.GetFullPath(Path.Combine(ProjectDirectory, TargetAssetsFolder)),
            };

            var rhetosProjectAssets = new RhetosProjectAssets
            {
                InstalledPackages = new InstalledPackages {
                    Packages = nuget.GetInstalledPackages()
                },
                Assemblies = packagesAssemblies.Union(assembliesInReferencedProjects.Select(x => x.FullPath)),
            };

            var rhetosProjectAssetsFileProvider = new RhetosProjectContentProvider(ProjectDirectory, new VSLogProvider(Log));

            rhetosProjectAssetsFileProvider.Save(rhetosBuildEnvironment, rhetosTargetEnvironment, rhetosProjectAssets);
            //The file touch is added to notify the language server that something has happened even if the file has not been changed.
            //This is a problem when in a referenced project we implement a new concept, the RhetosProjectAssetsFile remains the same but the language server
            //must be restarted to take into account the new concept
            FilesUtility.SafeTouch(rhetosProjectAssetsFileProvider.ProjectAssetsFilePath);

            return(true);
        }
Example #4
0
 public EntityFrameworkMappingGenerator(
     ICodeGenerator codeGenerator,
     IPluginsContainer <IConceptMapping> plugins,
     RhetosBuildEnvironment rhetosBuildEnvironment,
     ILogProvider logProvider)
 {
     _plugins                = plugins;
     _codeGenerator          = codeGenerator;
     _performanceLogger      = logProvider.GetLogger("Performance." + GetType().Name);
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
 }
 public MvcModelGenerator(
     IPluginsContainer <IMvcModelGeneratorPlugin> plugins,
     ICodeGenerator codeGenerator,
     ILogProvider logProvider,
     RhetosBuildEnvironment rhetosBuildEnvironment
     )
 {
     _plugins                = plugins;
     _codeGenerator          = codeGenerator;
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
     _performanceLogger      = logProvider.GetLogger("Performance");
 }
Example #6
0
 public ConceptDataMigrationGenerator(
     ILogProvider logProvider,
     IDslModel dslModel,
     RhetosBuildEnvironment rhetosBuildEnvironment,
     IPluginsContainer <IConceptDataMigration> plugins)
 {
     _performanceLogger      = logProvider.GetLogger("Performance." + GetType().Name);
     _logger                 = logProvider.GetLogger(GetType().Name);
     _dslModel               = dslModel;
     _plugins                = plugins;
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
 }
Example #7
0
 public AssemblyGenerator(ILogProvider logProvider,
                          BuildOptions buildOptions, RhetosBuildEnvironment buildEnvironment,
                          FilesUtility filesUtility, ISourceWriter sourceWriter)
 {
     _performanceLogger = logProvider.GetLogger("Performance." + GetType().Name);
     _logger            = logProvider.GetLogger("AssemblyGenerator");
     _buildOptions      = buildOptions;
     _errorReportLimit  = buildOptions.AssemblyGeneratorErrorReportLimit;
     _buildEnvironment  = buildEnvironment;
     _sourceWriter      = sourceWriter;
     _cacheUtility      = new CacheUtility(typeof(AssemblyGenerator), buildEnvironment, filesUtility);
 }
Example #8
0
 public AppSettingsGenerator(
     RhetosBuildEnvironment rhetosBuildEnvironment,
     RhetosTargetEnvironment rhetosTargetEnvironment,
     LegacyPathsOptions legacyPathsOptions,
     ILogProvider logProvider,
     BuildOptions buildOptions)
 {
     _rhetosBuildEnvironment  = rhetosBuildEnvironment;
     _rhetosTargetEnvironment = rhetosTargetEnvironment;
     _legacyPathsOptions      = legacyPathsOptions;
     _logger       = logProvider.GetLogger(GetType().Name);
     _buildOptions = buildOptions;
 }
Example #9
0
 /// <summary>
 /// If assemblyName is not null, the assembly will be saved on disk.
 /// If assemblyName is null, the assembly will be generated in memory.
 /// </summary>
 public DomGenerator(
     IPluginsContainer <IConceptCodeGenerator> plugins,
     ICodeGenerator codeGenerator,
     IAssemblyGenerator assemblyGenerator,
     RhetosBuildEnvironment buildEnvironment,
     ISourceWriter sourceWriter)
 {
     _pluginRepository  = plugins;
     _codeGenerator     = codeGenerator;
     _assemblyGenerator = assemblyGenerator;
     _buildEnvironment  = buildEnvironment;
     _sourceWriter      = sourceWriter;
 }
 public ResourcesGenerator(
     InstalledPackages installedPackages,
     ILogProvider logProvider,
     BuildOptions buildOptions,
     RhetosBuildEnvironment rhetosBuildEnvironment)
 {
     _installedPackages      = installedPackages;
     _logProvider            = logProvider;
     _buildOptions           = buildOptions;
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
     _logger            = logProvider.GetLogger(GetType().Name);
     _performanceLogger = logProvider.GetLogger("Performance." + GetType().Name);
 }
Example #11
0
        public DslSyntax Load()
        {
            if (!IsValidProjectRootPath(ProjectRootPath))
            {
                throw new InvalidOperationException($"Can't load {nameof(DslSyntax)} from '{ProjectRootPath}', because it is not a valid project root path.");
            }

            var rhetosBuildEnvironment = new RhetosBuildEnvironment()
            {
                CacheFolder = BuildCacheFolder(ProjectRootPath)
            };

            return(new DslSyntaxFile(rhetosBuildEnvironment, logProvider).Load());
        }
Example #12
0
        /// <summary>
        /// It searches for type implementations in the provided list of assemblies.
        /// </summary>
        /// <param name="pluginAssemblies">List of DLL file paths that will be searched for plugins when invoking the method <see cref="FindPlugins"/>.</param>
        public PluginScanner(IEnumerable <string> pluginAssemblies, RhetosBuildEnvironment buildEnvironment, ILogProvider logProvider, PluginScannerOptions pluginScannerOptions)
        {
            if (string.IsNullOrEmpty(buildEnvironment.CacheFolder))
            {
                throw new ArgumentException($"Configuration setting '{OptionsAttribute.GetConfigurationPath<RhetosBuildEnvironment>()}:{nameof(RhetosBuildEnvironment.CacheFolder)}' in not provided.");
            }

            _pluginsByExport    = new Lazy <MultiDictionary <string, PluginInfo> >(() => GetPluginsByExport(pluginAssemblies), LazyThreadSafetyMode.ExecutionAndPublication);
            _pluginScannerCache = new PluginScannerCache(buildEnvironment.CacheFolder, logProvider, new FilesUtility(logProvider));
            _performanceLogger  = logProvider.GetLogger("Performance." + GetType().Name);
            _logger             = logProvider.GetLogger(GetType().Name);

            var ignoreList = pluginScannerOptions.PredefinedIgnoreAssemblyFiles.Concat(pluginScannerOptions.IgnoreAssemblyFiles ?? Array.Empty <string>()).Distinct().ToList();

            _ignoreAssemblyFiles    = new HashSet <string>(ignoreList.Where(name => !name.EndsWith("*")), StringComparer.OrdinalIgnoreCase);
            _ignoreAssemblyPrefixes = ignoreList.Where(name => name.EndsWith("*")).Select(name => name.Trim('*')).ToArray();
        }
Example #13
0
 public CaptionsResourceGenerator(
     IPluginsContainer <ICaptionsResourceGeneratorPlugin> plugins,
     CaptionsInitialCodePlugin initialCodePlugin,
     ICodeGenerator codeGenerator,
     ILogProvider logProvider,
     RhetosBuildEnvironment rhetosBuildEnvironment,
     FilesUtility filesUtility,
     MvcModelGeneratorOptions options)
 {
     _plugins                = plugins;
     _initialCodePlugin      = initialCodePlugin;
     _codeGenerator          = codeGenerator;
     _logger                 = logProvider.GetLogger("CaptionsResourceGenerator");
     _performanceLogger      = logProvider.GetLogger($"Performance.{nameof(CaptionsResourceGenerator)}");
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
     _options                = options;
     _cacheUtility           = new CacheUtility(typeof(CaptionsResourceGenerator), rhetosBuildEnvironment, filesUtility);
 }
Example #14
0
 public ApplicationGenerator(
     ILogProvider logProvider,
     IDslModel dslModel,
     IPluginsContainer <IGenerator> generatorsContainer,
     RhetosBuildEnvironment buildEnvironment,
     FilesUtility filesUtility,
     ISourceWriter sourceWriter,
     BuildOptions buildOptions)
 {
     _logProvider         = logProvider;
     _logger              = logProvider.GetLogger(GetType().Name);
     _performanceLogger   = logProvider.GetLogger("Performance." + GetType().Name);
     _dslModel            = dslModel;
     _generatorsContainer = generatorsContainer;
     _buildEnvironment    = buildEnvironment;
     _filesUtility        = filesUtility;
     _sourceWriter        = sourceWriter;
     _buildOptions        = buildOptions;
 }
Example #15
0
        public DslDocumentation LoadDocumentation()
        {
            if (!IsValidProjectRootPath(ProjectRootPath))
            {
                throw new InvalidOperationException($"Can't load {nameof(DslDocumentation)} from '{ProjectRootPath}', because it is not a valid project root path.");
            }

            // for now we are not sure if documentation file is a mandatory output file for Rhetos build process
            // we assume it is not and in case of failure we silently return null
            try
            {
                var rhetosBuildEnvironment = new RhetosBuildEnvironment()
                {
                    CacheFolder = BuildCacheFolder(ProjectRootPath)
                };
                return(new DslDocumentationFile(rhetosBuildEnvironment).Load());
            }
            catch (Exception)
            {
                return(null);
            }
        }
 public MacroOrderRepository(RhetosBuildEnvironment buildEnvironment)
 {
     _cacheFilePath = Path.Combine(buildEnvironment.CacheFolder, "MacroOrder.json");
 }
 public DataStructureEdmxCodeGenerator(RhetosBuildEnvironment rhetosBuildEnvironment)
 {
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
 }
 public SourceWriter(RhetosBuildEnvironment buildEnvironment, ILogProvider logProvider, FilesUtility filesUtility)
 {
     _logger           = logProvider.GetLogger(GetType().Name);
     _buildEnvironment = buildEnvironment;
     _filesUtility     = filesUtility;
 }
Example #19
0
 public DomInitializationCodeGenerator(RhetosBuildEnvironment buildEnvironment, CommonConceptsOptions commonConceptsOptions, CommonConceptsDatabaseSettings databaseSettings)
 {
     _buildEnvironment      = buildEnvironment;
     _commonConceptsOptions = commonConceptsOptions;
     _databaseSettings      = databaseSettings;
 }
Example #20
0
 public DslSyntaxFile(RhetosBuildEnvironment rhetosBuildEnvironment)
 {
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
 }
Example #21
0
 public AfterDeployGenerator(InstalledPackages installedPackages, ILogProvider logProvider, RhetosBuildEnvironment rhetosBuildEnvironment, FilesUtility filesUtility)
 {
     _installedPackages          = installedPackages;
     _afterDeployScriptsProvider = new AfterDeployScriptsProvider(logProvider, rhetosBuildEnvironment);
     _filesUtility = filesUtility;
 }
Example #22
0
 public CacheUtility(Type generatorType, RhetosBuildEnvironment buildEnvironment, FilesUtility filesUtility)
 {
     _filesUtility   = filesUtility;
     _sha256         = SHA256.Create();
     _cacheDirectory = Path.Combine(buildEnvironment.CacheFolder, generatorType.Name);
 }
 public DslDocumentationFile(RhetosBuildEnvironment rhetosBuildEnvironment)
 {
     _rhetosBuildEnvironment = rhetosBuildEnvironment;
 }