コード例 #1
0
        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");
        }
コード例 #2
0
        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);
                        }
                    }
                }
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }