コード例 #1
0
        /// <summary>
        /// Exports the User Configuration to the specified file path.
        /// </summary>
        /// <param name="generatorParams">GeneratorManagerParams containing necessary information.</param>
        /// <param name="filePath">File path to export.</param>
        public static void Export(GeneratorManagerParams generatorParams, string filePath)
        {
            if (filePath.EndsWith(Resources.GenConfigFileExtension) == false)
            {
                filePath += Resources.GenConfigFileExtension;
            }

            var exportDoc = new XDocument();
            exportDoc.Add(
                new XElement(ConfigNodes.Root,
                    new XElement(ConfigNodes.GenerateAssemblers, generatorParams.GenerateAssemblers),
                    new XElement(ConfigNodes.DTOsConfig,
                        new XElement(ConfigNodes.Target,
                            new XAttribute(ConfigNodes.TargetAttrProject, generatorParams.DTOsParams.TargetProject.Name),
                            new XAttribute(ConfigNodes.TargetAttrName, ConfigurationHelper.GetTargetName(generatorParams.DTOsParams)),
                            new XAttribute(ConfigNodes.TargetAttrType, generatorParams.DTOsParams.TargetType.ToString())),
                        new XElement(ConfigNodes.EDMXName, generatorParams.DTOsParams.EDMXProjectItem.Name),
                        new XElement(ConfigNodes.GenerateFilter,
                            new XAttribute(ConfigNodes.GenerateFilterAttrAll, generatorParams.DTOsParams.GenerateAllTypes),
                            new XAttribute(ConfigNodes.GenerateFilterAttrComplex, generatorParams.DTOsParams.GenerateAllComplexTypes),
                            new XAttribute(ConfigNodes.GenerateFilterAttrEntities, generatorParams.DTOsParams.GenerateAllEntityTypes)),
                        new XElement(ConfigNodes.SourceFileHeaderComment, generatorParams.DTOsParams.SourceFileHeaderComment),
                        new XElement(ConfigNodes.UseProjectDefaultNamespace, generatorParams.DTOsParams.UseProjectDefaultNamespace),
                        new XElement(ConfigNodes.SourceNamespace, generatorParams.DTOsParams.SourceNamespace),
                        new XElement(ConfigNodes.DTOsServiceReady, generatorParams.DTOsParams.DTOsServiceReady),
                        new XElement(ConfigNodes.SourceFileGenerationType, generatorParams.DTOsParams.SourceFileGenerationType.ToString()),
                        new XElement(ConfigNodes.SourceFileName, generatorParams.DTOsParams.SourceFileName),
                        new XElement(ConfigNodes.AssociationType, generatorParams.DTOsParams.AssociationType.ToString()),
                        new XElement(ConfigNodes.GenerateDTOConstructors, generatorParams.DTOsParams.GenerateDTOConstructors),
                        new XElement(ConfigNodes.ClassIdentifier,
                            new XAttribute(ConfigNodes.ClassIdentifierAttrUse, generatorParams.DTOsParams.ClassIdentifierUse.ToString()),
                            new XAttribute(ConfigNodes.ClassIdentifierAttrWord, generatorParams.DTOsParams.ClassIdentifierWord)))));

            XElement generateFilterNode = exportDoc.Descendants(ConfigNodes.GenerateFilter).First();
            foreach (string typeName in generatorParams.DTOsParams.TypesToGenerateFilter)
            {
                generateFilterNode.Add(new XElement(ConfigNodes.GenerateType,
                    new XAttribute(ConfigNodes.GenerateTypeAttrName, typeName))
                );
            }

            if (generatorParams.GenerateAssemblers)
            {
                exportDoc.Descendants(ConfigNodes.Root).First().Add(
                    new XElement(ConfigNodes.AssemblersConfig,
                        new XElement(ConfigNodes.Target,
                            new XAttribute(ConfigNodes.TargetAttrProject, generatorParams.AssemblersParams.TargetProject.Name),
                            new XAttribute(ConfigNodes.TargetAttrName, ConfigurationHelper.GetTargetName(generatorParams.AssemblersParams)),
                            new XAttribute(ConfigNodes.TargetAttrType, generatorParams.AssemblersParams.TargetType.ToString())),
                        new XElement(ConfigNodes.SourceFileHeaderComment, generatorParams.AssemblersParams.SourceFileHeaderComment),
                        new XElement(ConfigNodes.UseProjectDefaultNamespace, generatorParams.AssemblersParams.UseProjectDefaultNamespace),
                        new XElement(ConfigNodes.SourceNamespace, generatorParams.AssemblersParams.SourceNamespace),
                        new XElement(ConfigNodes.SourceFileGenerationType, generatorParams.AssemblersParams.SourceFileGenerationType.ToString()),
                        new XElement(ConfigNodes.SourceFileName, generatorParams.AssemblersParams.SourceFileName),
                        new XElement(ConfigNodes.IsServiceReady, generatorParams.AssemblersParams.IsServiceReady),
                        new XElement(ConfigNodes.ClassIdentifier,
                            new XAttribute(ConfigNodes.ClassIdentifierAttrUse, generatorParams.AssemblersParams.ClassIdentifierUse.ToString()),
                            new XAttribute(ConfigNodes.ClassIdentifierAttrWord, generatorParams.AssemblersParams.ClassIdentifierWord))));
            }

            exportDoc.Save(filePath);
        }
コード例 #2
0
        /// <summary>
        /// Imports a User Configuration from the specified file path.
        /// </summary>
        /// <param name="filePath">File path from where to read the User Configuration.</param>
        /// <returns></returns>
        public static GeneratorManagerParams Import(string filePath)
        {
            // Prepare result
            var result = new GeneratorManagerParams();
            result.DTOsParams = new GenerateDTOsParams();
            result.AssemblersParams = new GenerateAssemblersParams();

            // Load the config file
            var configXML = XDocument.Load(filePath);

            // Get general config
            result.GenerateAssemblers = (configXML.Descendants(ConfigNodes.GenerateAssemblers).First().Value == Resources.XmlBoolTrue);

            #region DTOs
            // Get the DTOs config node
            XElement dtosConfigNode = configXML.Descendants(ConfigNodes.DTOsConfig).First();
            result.DTOsParams.EDMXName = dtosConfigNode.Descendants(ConfigNodes.EDMXName).First().Value;
            result.DTOsParams.SourceFileHeaderComment = dtosConfigNode.Descendants(ConfigNodes.SourceFileHeaderComment).First().Value;
            result.DTOsParams.UseProjectDefaultNamespace = (dtosConfigNode.Descendants(ConfigNodes.UseProjectDefaultNamespace).First().Value == Resources.XmlBoolTrue);
            result.DTOsParams.SourceNamespace = dtosConfigNode.Descendants(ConfigNodes.SourceNamespace).First().Value;
            result.DTOsParams.DTOsServiceReady = (dtosConfigNode.Descendants(ConfigNodes.DTOsServiceReady).First().Value == Resources.XmlBoolTrue);
            result.DTOsParams.SourceFileName = dtosConfigNode.Descendants(ConfigNodes.SourceFileName).First().Value;
            result.DTOsParams.GenerateDTOConstructors = (dtosConfigNode.Descendants(ConfigNodes.GenerateDTOConstructors).First().Value == Resources.XmlBoolTrue);

            // Source file generation type
            XElement sourceFileGenerationTypeNodeDTOs = dtosConfigNode.Descendants(ConfigNodes.SourceFileGenerationType).First();
            if (sourceFileGenerationTypeNodeDTOs.Value == SourceFileGenerationType.SourceFilePerClass.ToString())
            {
                result.DTOsParams.SourceFileGenerationType = SourceFileGenerationType.SourceFilePerClass;
            }
            else
            {
                result.DTOsParams.SourceFileGenerationType = SourceFileGenerationType.OneSourceFile;
            }

            // Association type
            XElement associationTypeNode = dtosConfigNode.Descendants(ConfigNodes.AssociationType).First();
            if (associationTypeNode.Value == AssociationType.KeyProperty.ToString())
            {
                result.DTOsParams.AssociationType = AssociationType.KeyProperty;
            }
            else
            {
                result.DTOsParams.AssociationType = AssociationType.ClassType;
            }

            // Set generate filter defaults
            result.DTOsParams.GenerateAllTypes = true;
            result.DTOsParams.GenerateAllComplexTypes = true;
            result.DTOsParams.GenerateAllEntityTypes = true;
            result.DTOsParams.TypesToGenerateFilter = new List<string>();

            // Generate filter node exists?
            XElement genFilterNode = dtosConfigNode.Descendants(ConfigNodes.GenerateFilter).FirstOrDefault();
            if (genFilterNode != null)
            {
                // Get generation flags
                result.DTOsParams.GenerateAllTypes =
                    (genFilterNode.Attribute(ConfigNodes.GenerateFilterAttrAll).Value == Resources.XmlBoolTrue);

                result.DTOsParams.GenerateAllComplexTypes =
                    (genFilterNode.Attribute(ConfigNodes.GenerateFilterAttrComplex).Value == Resources.XmlBoolTrue);

                result.DTOsParams.GenerateAllEntityTypes =
                    (genFilterNode.Attribute(ConfigNodes.GenerateFilterAttrEntities).Value == Resources.XmlBoolTrue);

                // Get filter types
                foreach (XElement generateTypeNode in genFilterNode.Descendants(ConfigNodes.GenerateType))
                {
                    result.DTOsParams.TypesToGenerateFilter.Add(
                        generateTypeNode.Attribute(ConfigNodes.GenerateTypeAttrName).Value
                    );
                }
            }

            // Set DTOs identifier defaults
            result.DTOsParams.ClassIdentifierUse = ClassIdentifierUse.Suffix;
            result.DTOsParams.ClassIdentifierWord = "DTO";

            // DTO identifier node exists?
            XElement dtosIdentifierNode = dtosConfigNode.Descendants(ConfigNodes.ClassIdentifier).FirstOrDefault();
            if (dtosIdentifierNode != null)
            {
                string dtoIdentifierUseValue = dtosIdentifierNode.Attribute(ConfigNodes.ClassIdentifierAttrUse).Value;

                if (dtoIdentifierUseValue == ClassIdentifierUse.None.ToString())
                {
                    result.DTOsParams.ClassIdentifierUse = ClassIdentifierUse.None;
                }
                else if (dtoIdentifierUseValue == ClassIdentifierUse.Prefix.ToString())
                {
                    result.DTOsParams.ClassIdentifierUse = ClassIdentifierUse.Prefix;
                }

                result.DTOsParams.ClassIdentifierWord = dtosIdentifierNode.Attribute(ConfigNodes.ClassIdentifierAttrWord).Value;
            }

            // Get target info
            XElement targetNodeDTOs = dtosConfigNode.Descendants(ConfigNodes.Target).FirstOrDefault();
            if (targetNodeDTOs == null)
            {
                // Legacy config (v2.* and older)
                targetNodeDTOs = dtosConfigNode.Descendants(ConfigNodes.TargetProjectName).First();
                result.DTOsParams.TargetType = TargetType.Project;
                result.DTOsParams.TargetProjectName = targetNodeDTOs.Value;
                result.DTOsParams.TargetName = targetNodeDTOs.Value;
            }
            else
            {
                if (targetNodeDTOs.Attribute(ConfigNodes.TargetAttrType).Value == TargetType.Project.ToString())
                {
                    result.DTOsParams.TargetType = TargetType.Project;
                }
                else
                {
                    result.DTOsParams.TargetType = TargetType.ProjectFolder;
                }

                result.DTOsParams.TargetProjectName = targetNodeDTOs.Attribute(ConfigNodes.TargetAttrProject).Value;
                result.DTOsParams.TargetName = targetNodeDTOs.Attribute(ConfigNodes.TargetAttrName).Value;
            }
            #endregion DTOs

            #region Assemblers
            if (result.GenerateAssemblers)
            {
                // Get the Assemblers config node
                XElement assemblersConfigNode = configXML.Descendants(ConfigNodes.AssemblersConfig).First();
                result.AssemblersParams.SourceFileHeaderComment = assemblersConfigNode.Descendants(ConfigNodes.SourceFileHeaderComment).First().Value;
                result.AssemblersParams.UseProjectDefaultNamespace = (assemblersConfigNode.Descendants(ConfigNodes.UseProjectDefaultNamespace).First().Value == Resources.XmlBoolTrue);
                result.AssemblersParams.SourceNamespace = assemblersConfigNode.Descendants(ConfigNodes.SourceNamespace).First().Value;
                result.AssemblersParams.SourceFileName = assemblersConfigNode.Descendants(ConfigNodes.SourceFileName).First().Value;
                result.AssemblersParams.IsServiceReady = (assemblersConfigNode.Descendants(ConfigNodes.IsServiceReady).First().Value == Resources.XmlBoolTrue);

                // Source file generation type
                XElement sourceFileGenerationTypeNodeAssemblers = assemblersConfigNode.Descendants(ConfigNodes.SourceFileGenerationType).First();
                if (sourceFileGenerationTypeNodeAssemblers.Value == SourceFileGenerationType.SourceFilePerClass.ToString())
                {
                    result.AssemblersParams.SourceFileGenerationType = SourceFileGenerationType.SourceFilePerClass;
                }
                else
                {
                    result.AssemblersParams.SourceFileGenerationType = SourceFileGenerationType.OneSourceFile;
                }

                // Set Assemblers identifier defaults
                result.AssemblersParams.ClassIdentifierUse = ClassIdentifierUse.Suffix;
                result.AssemblersParams.ClassIdentifierWord = "Assembler";

                // Assembler identifier node exists?
                XElement assemblersIdentifierNode = assemblersConfigNode.Descendants(ConfigNodes.ClassIdentifier).FirstOrDefault();
                if (assemblersIdentifierNode != null)
                {
                    string assemblersIdentifierUseValue = assemblersIdentifierNode.Attribute(ConfigNodes.ClassIdentifierAttrUse).Value;

                    if (assemblersIdentifierUseValue == ClassIdentifierUse.None.ToString())
                    {
                        result.AssemblersParams.ClassIdentifierUse = ClassIdentifierUse.None;
                    }
                    else if (assemblersIdentifierUseValue == ClassIdentifierUse.Prefix.ToString())
                    {
                        result.AssemblersParams.ClassIdentifierUse = ClassIdentifierUse.Prefix;
                    }

                    result.AssemblersParams.ClassIdentifierWord = assemblersIdentifierNode.Attribute(ConfigNodes.ClassIdentifierAttrWord).Value;
                }

                // Get target info
                XElement targetNodeAssemblers = assemblersConfigNode.Descendants(ConfigNodes.Target).FirstOrDefault();
                if (targetNodeAssemblers == null)
                {
                    // Legacy config (v2.* and older)
                    targetNodeAssemblers = assemblersConfigNode.Descendants(ConfigNodes.TargetProjectName).First();
                    result.AssemblersParams.TargetType = TargetType.Project;
                    result.AssemblersParams.TargetProjectName = targetNodeAssemblers.Value;
                    result.AssemblersParams.TargetName = targetNodeAssemblers.Value;
                }
                else
                {
                    if (targetNodeAssemblers.Attribute(ConfigNodes.TargetAttrType).Value == TargetType.Project.ToString())
                    {
                        result.AssemblersParams.TargetType = TargetType.Project;
                    }
                    else
                    {
                        result.AssemblersParams.TargetType = TargetType.ProjectFolder;
                    }

                    result.AssemblersParams.TargetProjectName = targetNodeAssemblers.Attribute(ConfigNodes.TargetAttrProject).Value;
                    result.AssemblersParams.TargetName = targetNodeAssemblers.Attribute(ConfigNodes.TargetAttrName).Value;
                }
            }
            #endregion Assemblers

            // Return the configuration
            return result;
        }