Пример #1
0
        // -----------------------------------------------------------------------------------------
        public int GenerateIdeaFiles(Idea SourceIdea, IEnumerable <Idea> ExcludedIdeas, double ProgressPercentageStart, double ProgressPercentageEnd,
                                     string WorkingDirectory, ref bool WorkingDirExists, bool CreateContentDir = true)
        {
            // Generate file, if selected
            var FilesGenerated = 0;
            var FileName       = SourceIdea.TechName;

            if (!(SourceIdea.IsIn(ExcludedIdeas) || ((SourceIdea is Relationship) && !this.Configuration.GenerateFilesForRelationships)))
            {
                // Determine compiled-template to use
                Template CompiledTemplate = null;

                if (SourceIdea is Composition)
                {
                    CompiledTemplate = this.CompositionTemplate;
                }
                else
                if (this.CompiledTemplates.ContainsKey(SourceIdea.IdeaDefinitor))
                {
                    CompiledTemplate = this.CompiledTemplates[SourceIdea.IdeaDefinitor];
                }
                else
                {
                    var TemplateText = SourceIdea.IdeaDefinitor.GetGenerationFinalTemplate(this.Language);
                    if (!TemplateText.IsAbsent())
                    {
                        CompiledTemplate = CreateCompiledTemplate(SourceIdea.IdeaDefinitor.ToString(), TemplateText, true).Result;
                        this.CompiledTemplates.Add(SourceIdea.IdeaDefinitor, CompiledTemplate);
                    }
                }

                // Apply template to source Idea
                if (CompiledTemplate != null)
                {
                    var GeneratedOutput = CompiledTemplate.Render(DotLiquid.Hash.FromAnonymousObject(SourceIdea));
                    var GeneratedResult = new GenerationResult((this.Configuration.UseIdeaTechNameForFileNaming
                                                                ? SourceIdea.TechName : SourceIdea.Name) +
                                                               GenerationManager.DEFAULT_GEN_EXT, GeneratedOutput);

                    // Create directory and save file, if needed
                    if (!WorkingDirExists)
                    {
                        if (!Directory.Exists(WorkingDirectory))
                        {
                            Directory.CreateDirectory(WorkingDirectory);
                        }

                        WorkingDirExists = true;
                    }

                    FileName = GeneratedResult.FileName;
                    var GenerationPath = Path.Combine(WorkingDirectory, FileName);
                    General.StringToFile(GenerationPath, GeneratedResult.GeneratedText);

                    FilesGenerated = 1;
                }
            }

            // Determine Ideas to generate
            if (SourceIdea.CompositeIdeas.Count > 0)
            {
                var SelectedIdeas = SourceIdea.CompositeIdeas.Where(ideasel => !ideasel.IsIn(ExcludedIdeas) || ideasel.CompositeIdeas.Count > 0 ||
                                                                    (this.Configuration.GenerateFilesForRelationships && ideasel is Relationship)).ToList();

                // Create content directory
                var ContentDirectory = (CreateContentDir
                                        ? Path.Combine(WorkingDirectory, Path.GetFileNameWithoutExtension(FileName) + this.Configuration.CompositeContentSubdirSuffix.Trim())
                                        : WorkingDirectory);
                var ContentDirExists = !CreateContentDir;

                // Determine progress
                var ProgressStep       = ((ProgressPercentageEnd - ProgressPercentageStart) / (double)SelectedIdeas.Count);
                var ProgressPercentage = ProgressPercentageStart;

                // Travel composites
                foreach (var SelectedIdea in SelectedIdeas)
                {
                    ProgressPercentage += ProgressStep;
                    FilesGenerated     += GenerateIdeaFiles(SelectedIdea, ExcludedIdeas, ProgressPercentage, (ProgressPercentage + ProgressStep),
                                                            ContentDirectory, ref ContentDirExists);
                }
            }

            return(FilesGenerated);
        }