private static async Task GenerateMainFile(FeatureModel model, string classTemplate, string classForGeneration, string pathToDirectoryWithFeatures) { Console.WriteLine("Start generate file"); var engine = new RazorLightEngineBuilder() .UseFilesystemProject(AppDomain.CurrentDomain.BaseDirectory + "../../../") .UseMemoryCachingProvider() .Build(); var result = engine.CompileRenderAsync(classTemplate, model).Result; File.WriteAllText(Path.Combine(pathToDirectoryWithFeatures, classForGeneration), result); Console.WriteLine("File generated"); }
private static void FindFeatureFilesThatShouldNotBeLoad(string path, FeatureModel model) { string[] filePaths = Directory.GetFiles(path, "*.java", SearchOption.AllDirectories); string patternFeature = @"\s*@AnnotationList.Feature\w*"; string patternAnyway = @"\s*@AnnotationList.NeededAnywayFeatureFile\w*"; // string patternFeatureConnected = @"\s*@AnnotationList.ConnectedToFeature\w*"; foreach (var filePath in filePaths) { if (filePath.Contains("AnnotationList.java")) { continue; } using (var reader = new StreamReader(filePath)) { string featureName = null; string neededAnyway = null; string fileName = filePath.Split("/").Last(); while (!reader.EndOfStream) { var line = reader.ReadLine(); if (Regex.Match(line, patternFeature).Success) { featureName = line.Split("Feature")[1].Split("\"")[1]; if (!model.Features[featureName]) { shouldNotBeLoadedFileList.Add(fileName); } } if (Regex.Match(line, patternAnyway).Success) { shouldNotBeLoadedFileList.Remove(fileName); } } } } }
private static void CopyAll(DirectoryInfo source, DirectoryInfo target, FeatureModel model) { Directory.CreateDirectory(target.FullName); foreach (FileInfo fileInfo in source.GetFiles()) { if (shouldNotBeLoadedFileList.Contains(fileInfo.Name)) { continue; } Console.WriteLine(@"Copying {0}\{1}", target.FullName, fileInfo.Name); fileInfo.CopyTo(Path.Combine(target.FullName, fileInfo.Name), true); } foreach (DirectoryInfo dirInfoSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(dirInfoSourceSubDir.Name); CopyAll(dirInfoSourceSubDir, nextTargetSubDir, model); } }
private static FeatureModel LoadModel(string modelFileName) { XmlDocument xDoc = new XmlDocument(); xDoc.Load(modelFileName); XmlElement model = xDoc.DocumentElement; FeatureModel featureModel = new FeatureModel(); foreach (XmlNode abstractNode in model) { if (abstractNode.Attributes.Count > 0) { XmlNode attr = abstractNode.Attributes.GetNamedItem("name"); Console.WriteLine("---" + attr?.Value); } foreach (XmlNode concreteNodes in abstractNode.ChildNodes) { foreach (XmlNode concreteNode in concreteNodes.ChildNodes) { String concreteNodeName = concreteNode.Attributes.GetNamedItem("name").Value; Console.WriteLine("------" + concreteNodeName); foreach (XmlNode concreteNodeItem in concreteNode.ChildNodes) { if (concreteNodeItem.Name.Equals("selected")) { featureModel.addFeatureWithSelectFlag(concreteNodeName, Boolean.Parse(concreteNodeItem.InnerText)); } // if (concreteNodeItem.Name.Equals("required")) // { // featureModel.addFeatureWithSelectFlag(concreteNodeName, Boolean.Parse(concreteNodeItem.InnerText)); // } } } } } return(featureModel); }
private static void CopyAppDirectoryToEnvironment(string sourceDirectory, string targetDirectory, FeatureModel model) { DirectoryInfo dirSource = new DirectoryInfo(sourceDirectory); DirectoryInfo dirTarget = new DirectoryInfo(Path.Combine(targetDirectory, sourceDirectory.Split("/").Last())); FindFeatureFilesThatShouldNotBeLoad(sourceDirectory, model); CopyAll(dirSource, dirTarget, model); }