예제 #1
0
        /// <summary>
        ///     Creates a Typescript type union
        /// </summary>
        /// <param name="name">The name used for the type</param>
        /// <param name="directory">The <see cref="TsDir" /> where the resulting file should be placed.</param>
        /// <param name="filters">The filters used to find the types used in the union.</param>
        /// <returns></returns>
        public UnionTypeDefinition UnionType(string name, TsDir directory = null, params Func <Type, bool>[] filters)
        {
            var typesForUnion = new List <TypedFile>();

            foreach (var type in _allTypes.Where(t => filters.Any(f => f(t))))
            {
                TypedFile typeForUnion;

                if (InterfaceFiles.ContainsKey(type))
                {
                    typeForUnion = Interface(type);
                }
                else if (ClassFiles.ContainsKey(type))
                {
                    typeForUnion = Class(type);
                }
                else if (type.IsInterface)
                {
                    typeForUnion = Interface(type);
                }
                else
                {
                    typeForUnion = Class(type);
                }

                typesForUnion.Add(typeForUnion);
            }

            return(UnionType(name, directory, typesForUnion.ToArray()));
        }
예제 #2
0
        public ClassFile Class(Type type)
        {
            var t = type.UnderlyingType();

            if (!ClassFiles.ContainsKey(t))
            {
                ClassFiles[t] = new ClassFile(this, t, RootDir);
            }

            return(ClassFiles[t]);
        }
예제 #3
0
        private void Scan()
        {
            List <Image> images = scan2.start();

            if (images.Count < 1)
            {
                return;
            }

            TreeNode      treeNode      = classTree.TreeViewDialog("Выберите папку", "Выбрать");
            ClassFiles    classFiles    = new ClassFiles();
            int           idFolder      = Convert.ToInt32(treeNode.Name.Split('_')[1]);
            ClassTypeCard classTypeCard = new ClassTypeCard();
            int           idCard        = classTypeCard.getIdByName(ClassTypeCard.EMPTY_CARD);
            string        pathSave      = treeNode.FullPath;
            string        tmpPath       = classSettings.GetProperties().generalsSttings.programPath + @"\tmp";

            Directory.CreateDirectory(tmpPath);

            int iterator = 0;

            foreach (Image image in images)
            {
                PictureBox pictureBox = new PictureBox
                {
                    Size     = new System.Drawing.Size(800, 600),
                    SizeMode = PictureBoxSizeMode.Zoom,
                    Image    = image
                };

                if (pictureBox.Image == null)
                {
                    pictureBox.Dispose();
                    continue;
                }

                string fileName = "image_" + DateTime.UtcNow.ToString().Replace(":", "-") + "_" + iterator + ".jpg";
                pictureBox.Image.Save(tmpPath + @"\" + fileName);
                classFiles.Create(idFolder, idCard, fileName, tmpPath + @"\" + fileName, pathSave);
                classTree.InitTreeView(treeView1);

                iterator++;
            }
        }
        public void CreateDummyClass(ConfigurationFile file)
        {
            string className     = NameGeneratorHelper.GetDummyClassName();
            string namespaceName = file.GeneratedNamespace;

            EmptyGenerator generator = new EmptyGenerator
            {
                ClassName      = className,
                IsPartialClass = false,
                NamespaceName  = namespaceName,
                BaseClassType  = null,
                Configuration  = file,
            };
            string outputFile             = Path.Combine(file.ClassLocation, string.Format("{0}.{1}.cs", namespaceName, className));
            string outputFileRelativePath = PathHelper.GetRelativePath(outputFile);

            generator.Generate(outputFile);

            ClassFiles.Add(outputFileRelativePath);
        }
        public void Process(ConfigurationFile configurationFile)
        {
            Dictionary <string, string> aliases = configurationFile.Aliases.ToDictionary(x => x.Alias, x => x.FullClassName);
            ViewFileReader    viewFileReader    = new ViewFileReader(aliases);
            ViewFileProcessor viewFileProcessor = new ViewFileProcessor();
            ViewFileWriter    viewFileWriter    = new ViewFileWriter();

            DataTemplateProcessor dataTemplateProcessor = new DataTemplateProcessor(viewFileProcessor, viewFileWriter);

            List <Resource>             globalResources             = new List <Resource>();
            List <StyleResource>        globalStyleResources        = new List <StyleResource>();
            List <DataTemplateResource> globalDataTemplateResources = new List <DataTemplateResource>();

            foreach (string resourceFile in configurationFile.GlobalResourceFiles)
            {
                string resourceRelativePath = PathHelper.GetRelativePath(resourceFile);

                Log.LogMessage(MessageImportance.High, "\t# Preprocessing resource file {0}", resourceRelativePath);

                List <Resource>      resources      = viewFileProcessor.ExtractGlobalResources(viewFileReader.Read(resourceFile));
                List <StyleResource> styleResources = resources.Where(x => ParsingHelper.IsStyleTag(x.ResourceElement)).Select(x => new StyleResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsStyleTag(x.ResourceElement));
                List <DataTemplateResource> dataTemplatesResources = resources.Where(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement)).Select(x => new DataTemplateResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement));

                //assign an id to all data template before processing it (could be loop or just unordered things)
                string viewName = Path.GetFileNameWithoutExtension(resourceFile);
                foreach (DataTemplateResource dataTemplate in dataTemplatesResources)
                {
                    dataTemplate.ViewId = string.Format("G_{0}_DT_{1}", viewName, dataTemplate.Key);
                    dataTemplate.ViewHolderClassName = NameGeneratorHelper.GetViewHolderName();
                }

                globalResources.AddRange(resources);
                globalStyleResources.AddRange(styleResources);
                globalDataTemplateResources.AddRange(dataTemplatesResources);
            }
            //process each data template
            foreach (DataTemplateResource dataTemplate in globalDataTemplateResources)
            {
                dataTemplateProcessor.Process(dataTemplate, globalResources, globalStyleResources, globalDataTemplateResources, configurationFile);
            }


            foreach (FileBindingDescription fileBindingDescription in configurationFile.FileDescriptions)
            {
                string viewInputRelativePath  = PathHelper.GetRelativePath(fileBindingDescription.View.InputFile);
                string viewOutputRelativePath = PathHelper.GetRelativePath(fileBindingDescription.View.OutputFile);

                Log.LogMessage(MessageImportance.High, "\t# Preprocessing activity {0}.{1} with view {2}", fileBindingDescription.Activity.NamespaceName, fileBindingDescription.Activity.ClassName, viewInputRelativePath);

                XmlElement rootViewElement = viewFileReader.Read(fileBindingDescription.View.InputFile);
                //Parse expression, Extract resources and simplify the view file
                var expressionParsingResult              = viewFileProcessor.ExtractExpressions(rootViewElement);
                List <IdViewObject> viewObjects          = expressionParsingResult.Item2;
                List <XmlAttribute> expressionAttributes = expressionParsingResult.Item1;
                List <Resource>     resources            = viewFileProcessor.ExtractResources(rootViewElement);
                //filter resources for DataTemplate
                List <DataTemplateResource> dataTemplatesResources = resources.Where(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement)).Select(x => new DataTemplateResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement));
                //filter resources for Style
                List <StyleResource> styleResources = resources.Where(x => ParsingHelper.IsStyleTag(x.ResourceElement)).Select(x => new StyleResource(x)).ToList();
                resources.RemoveAll(x => ParsingHelper.IsStyleTag(x.ResourceElement));


                List <StyleResource> totalStyleResources = new List <StyleResource>(styleResources);
                totalStyleResources.AddRange(globalStyleResources);

                //Write the view file for Android (axml format)
                Log.LogMessage(MessageImportance.High, "\t\t Generating view file {0}", viewOutputRelativePath);
                viewFileWriter.Write(rootViewElement, fileBindingDescription.View.OutputFile, totalStyleResources);
                ResourceFiles.Add(viewOutputRelativePath);


                //assign an id to all data template before processing it (could be loop or just unordered things)
                string viewName = Path.GetFileNameWithoutExtension(fileBindingDescription.View.OutputFile);
                foreach (DataTemplateResource dataTemplate in dataTemplatesResources)
                {
                    dataTemplate.ViewId = string.Format("{0}_DT_{1}", viewName, dataTemplate.Key);
                    dataTemplate.ViewHolderClassName = NameGeneratorHelper.GetViewHolderName();
                }

                List <Resource> totalResources = new List <Resource>(resources);
                totalResources.AddRange(globalResources);
                List <DataTemplateResource> totalDataTemplateResources = new List <DataTemplateResource>(dataTemplatesResources);
                totalDataTemplateResources.AddRange(globalDataTemplateResources);

                //process each data template
                foreach (DataTemplateResource dataTemplate in dataTemplatesResources)
                {
                    dataTemplateProcessor.Process(dataTemplate, totalResources, totalStyleResources, totalDataTemplateResources, configurationFile);
                }

                string classOutputFile         = fileBindingDescription.Activity.OutputFile;
                string classOutputRelativePath = PathHelper.GetRelativePath(classOutputFile);

                List <Resource> mergedResources = new List <Resource>(totalResources);
                mergedResources.AddRange(totalDataTemplateResources);
                AbstractBindingHandlerClassGenerator generator;
                if (fileBindingDescription.Activity.IsFragment)
                {
                    Log.LogMessage(MessageImportance.High, "\t\t Generating class file for Fragment to {0}", classOutputRelativePath);

                    generator = new FragmentGenerator
                    {
                        BaseClassType  = null,
                        ClassName      = fileBindingDescription.Activity.ClassName,
                        Configuration  = configurationFile,
                        IsPartialClass = true,
                        NamespaceName  = fileBindingDescription.Activity.NamespaceName,
                    };
                }
                else
                {
                    Log.LogMessage(MessageImportance.High, "\t\t Generating class file for Activity to {0}", classOutputRelativePath);

                    generator = new ActivityGenerator
                    {
                        BaseClassType  = null,
                        ClassName      = fileBindingDescription.Activity.ClassName,
                        Configuration  = configurationFile,
                        IsPartialClass = true,
                        NamespaceName  = fileBindingDescription.Activity.NamespaceName,
                    };
                }

                generator.Preprocess(expressionAttributes, mergedResources, viewObjects);
                generator.Generate(classOutputFile);

                ClassFiles.Add(classOutputRelativePath);
            }

            ClassFiles.AddRange(dataTemplateProcessor.ClassFiles);
            ResourceFiles.AddRange(dataTemplateProcessor.ResourceFiles);

            CreateDummyClass(configurationFile);
        }
예제 #6
0
        public void Process(DataTemplateResource dataTemplate, List <Resource> resources, List <StyleResource> styleResources, List <DataTemplateResource> dataTemplatesResources, ConfigurationFile configurationFile)
        {
            string viewOutputFile         = Path.Combine(configurationFile.ResourceLocation, string.Format("{0}.axml", dataTemplate.ViewId));
            string viewOutputRelativePath = PathHelper.GetRelativePath(viewOutputFile);

            Log.LogMessage(MessageImportance.High, "\t\t Preprocessing DataTemplate {0}", dataTemplate.Key);

            // Extract informations from xml
            Tuple <List <XmlAttribute>, List <IdViewObject> > expressionResult = _viewFileProcessor.ExtractExpressions(dataTemplate.ResourceElement);
            List <XmlAttribute> expressionAttributes = expressionResult.Item1;
            List <IdViewObject> viewObjects          = expressionResult.Item2;
            List <Resource>     localResources       = _viewFileProcessor.ExtractResources(dataTemplate.ResourceElement);
            // filter resources to find any dataTemplate in it
            List <DataTemplateResource> localDataTemplatesResources = localResources.Where(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement)).Select(x => new DataTemplateResource(x)).ToList();

            localResources.RemoveAll(x => ParsingHelper.IsDataTemplateTag(x.ResourceElement));
            //filter resources for Style
            List <StyleResource> localStyleResources = resources.Where(x => ParsingHelper.IsStyleTag(x.ResourceElement)).Select(x => new StyleResource(x)).ToList();

            localStyleResources.AddRange(styleResources);
            resources.RemoveAll(x => ParsingHelper.IsStyleTag(x.ResourceElement));

            // now write a file for this data template
            Log.LogMessage(MessageImportance.High, "\t\t\t Generating view file for DataTemplate to {0}", viewOutputRelativePath);
            _viewFileWriter.Write(dataTemplate.ResourceElement, viewOutputFile, localStyleResources);
            ResourceFiles.Add(viewOutputRelativePath);



            // assign an id to all data template before processing it
            string viewName = dataTemplate.ViewId;

            foreach (DataTemplateResource localDataTemplate in localDataTemplatesResources)
            {
                localDataTemplate.ViewId = string.Format("{0}_DT_{1}", viewName, localDataTemplate.Key);
                localDataTemplate.ViewHolderClassName = NameGeneratorHelper.GetViewHolderName();
            }

            // process each one
            List <Resource> mergedResources = new List <Resource>(resources);

            mergedResources.AddRange(localResources);
            List <DataTemplateResource> mergedDataTemplatesResources = new List <DataTemplateResource>(dataTemplatesResources);

            mergedDataTemplatesResources.AddRange(localDataTemplatesResources);

            foreach (DataTemplateResource localDataTemplate in localDataTemplatesResources)
            {
                Process(localDataTemplate, mergedResources, localStyleResources, mergedDataTemplatesResources, configurationFile);
            }

            string classOutputFile         = Path.Combine(configurationFile.ClassLocation, string.Format("{0}.ui.cs", dataTemplate.ViewHolderClassName));
            string classOutputRelativePath = PathHelper.GetRelativePath(classOutputFile);

            Log.LogMessage(MessageImportance.High, "\t\t\t Generating class file for DataTemplate to {0}", classOutputRelativePath);

            List <Resource> totalResources = new List <Resource>(mergedResources);

            totalResources.AddRange(mergedDataTemplatesResources);

            ViewHolderGenerator generator = new ViewHolderGenerator()
            {
                BaseClassType  = "Storm.Mvvm.BaseViewHolder",
                ClassName      = dataTemplate.ViewHolderClassName,
                Configuration  = configurationFile,
                IsPartialClass = false,
                NamespaceName  = configurationFile.GeneratedNamespace,
            };

            generator.Preprocess(expressionAttributes, totalResources, viewObjects);
            generator.Generate(classOutputFile);

            ClassFiles.Add(classOutputRelativePath);
        }