예제 #1
0
        internal static Result<CodeNamespace> Process(string xsdFile, string targetNamespace,
                                                      GenerationLanguage language,
                                                      CollectionType collectionType, bool enableDataBinding,
                                                      bool hidePrivate,
                                                      bool enableSummaryComment, List<NamespaceParam> customUsings,
                                                      string collectionBase, bool includeSerializeMethod,
                                                      string serializeMethodName, string deserializeMethodName,
                                                      string saveToFileMethodName, string loadFromFileMethodName,
                                                      bool generateCloneMethod, TargetFramework targetFramework)
        {
            var generatorParams = new GeneratorParams
                                      {
                                          CollectionObjectType = collectionType,
                                          EnableDataBinding = enableDataBinding,
                                          Language = language,
                                          CustomUsings = customUsings,
                                          CollectionBase = collectionBase,
                                          GenerateCloneMethod = generateCloneMethod,
                                          TargetFramework = targetFramework
                                      };

            generatorParams.Miscellaneous.HidePrivateFieldInIde = hidePrivate;
            generatorParams.Miscellaneous.EnableSummaryComment = enableSummaryComment;
            generatorParams.Serialization.Enabled = includeSerializeMethod;
            generatorParams.Serialization.SerializeMethodName = serializeMethodName;
            generatorParams.Serialization.DeserializeMethodName = deserializeMethodName;
            generatorParams.Serialization.SaveToFileMethodName = saveToFileMethodName;
            generatorParams.Serialization.LoadFromFileMethodName = loadFromFileMethodName;

            return Process(generatorParams);
        }
예제 #2
0
        internal static Result <CodeNamespace> Process(string xsdFile, string targetNamespace,
                                                       GenerationLanguage language,
                                                       CollectionType collectionType, bool enableDataBinding,
                                                       bool hidePrivate,
                                                       bool enableSummaryComment, List <NamespaceParam> customUsings,
                                                       string collectionBase, bool includeSerializeMethod,
                                                       string serializeMethodName, string deserializeMethodName,
                                                       string saveToFileMethodName, string loadFromFileMethodName,
                                                       bool generateCloneMethod, TargetFramework targetFramework)
        {
            var generatorParams = new GeneratorParams
            {
                CollectionObjectType = collectionType,
                EnableDataBinding    = enableDataBinding,
                Language             = language,
                CustomUsings         = customUsings,
                CollectionBase       = collectionBase,
                GenerateCloneMethod  = generateCloneMethod,
                TargetFramework      = targetFramework
            };

            generatorParams.Miscellaneous.HidePrivateFieldInIde = hidePrivate;
            generatorParams.Miscellaneous.EnableSummaryComment  = enableSummaryComment;
            generatorParams.Serialization.Enabled                = includeSerializeMethod;
            generatorParams.Serialization.SerializeMethodName    = serializeMethodName;
            generatorParams.Serialization.DeserializeMethodName  = deserializeMethodName;
            generatorParams.Serialization.SaveToFileMethodName   = saveToFileMethodName;
            generatorParams.Serialization.LoadFromFileMethodName = loadFromFileMethodName;

            return(Process(generatorParams));
        }
예제 #3
0
        /// <summary>
        /// Get Code DOM provider
        /// </summary>
        /// <returns></returns>
        public static CodeDomProvider GetProvider(GenerationLanguage language)
        {
            switch (language)
            {
            case GenerationLanguage.CSharp:
                return(new CSharpCodeProvider());

            case GenerationLanguage.VisualBasic:
                return(new VBCodeProvider());

            default:
                throw new NotImplementedException(string.Format("Code provider for language {0} is not supported", Utility.GetEnumDescription(language)));
            }
        }
        /// <summary>
        /// Get Code DOM provider
        /// </summary>
        /// <returns></returns>
        public static CodeDomProvider GetProvider(GenerationLanguage language)
        {
            switch (language)
            {
                case GenerationLanguage.CSharp:
                    return new CSharpCodeProvider();

                case GenerationLanguage.VisualBasic:
                    return new VBCodeProvider();

                default:
                    throw new NotImplementedException(string.Format("Code provider for language {0} is not supported", Utility.GetEnumDescription(language)));
            }
        }
예제 #5
0
        /// <summary>
        /// Get Code DOM provider
        /// </summary>
        /// <param name="language">The language.</param>
        /// <returns>CodeDom provider according language.</returns>
        public static CodeDomProvider GetProvider(GenerationLanguage language)
        {
            switch (language)
            {
                case GenerationLanguage.CSharp:
                    return new CSharpCodeProvider();

                case GenerationLanguage.VisualBasic:
                    return new VBCodeProvider();

                default:
                    throw new NotImplementedException(
                        string.Format(Properties.Resources.UnsupportedLanguageCodeDomProvider, Utility.GetEnumDescription(language)));
            }
        }
예제 #6
0
        /// <summary>
        /// Get Code DOM provider
        /// </summary>
        /// <param name="language">The language.</param>
        /// <returns>CodeDom provider according language.</returns>
        public static CodeDomProvider GetProvider(GenerationLanguage language)
        {
            switch (language)
            {
            case GenerationLanguage.CSharp:
                return(new CSharpCodeProvider());

            case GenerationLanguage.VisualBasic:
                return(new VBCodeProvider());

            default:
                throw new NotImplementedException(
                          string.Format(Properties.Resources.UnsupportedLanguageCodeDomProvider, Utility.GetEnumDescription(language)));
            }
        }
예제 #7
0
    public async Task GeneratesResponseWithMultipleReturnFormats(GenerationLanguage language, bool backingStore)
    {
        var logger = LoggerFactory.Create((builder) => {
        }).CreateLogger <KiotaBuilder>();

        var backingStoreSuffix = backingStore ? "BackingStore" : string.Empty;
        var configuration      = new GenerationConfiguration
        {
            Language         = language,
            OpenAPIFilePath  = "ResponseWithMultipleReturnFormats.yaml",
            OutputPath       = $".\\Generated\\ResponseWithMultipleReturnFormats\\{language}{backingStoreSuffix}",
            UsesBackingStore = backingStore,
        };

        await new KiotaBuilder(logger, configuration).GenerateSDK(new());
    }
예제 #8
0
    public async Task GeneratesTodo(GenerationLanguage language, bool backingStore)
    {
        var logger = LoggerFactory.Create((builder) => {
        }).CreateLogger <KiotaBuilder>();

        var backingStoreSuffix = backingStore ? string.Empty : "BackingStore";
        var configuration      = new GenerationConfiguration
        {
            Language         = language,
            OpenAPIFilePath  = "ToDoApi.yaml",
            OutputPath       = $".\\Generated\\Todo\\{language}{backingStoreSuffix}",
            UsesBackingStore = backingStore,
        };

        await new KiotaBuilder(logger, configuration).GenerateSDK(new());
    }
예제 #9
0
        /// <summary>
        /// Get output file path
        /// </summary>
        /// <param name="xsdFilePath">Input file path</param>
        /// <param name="language">Generation language</param>
        /// <returns>Generated file output path</returns>
        public static string GetOutputFilePath(string xsdFilePath, GenerationLanguage language)
        {
            return(GetOutputFilePath(xsdFilePath, CodeDomProviderFactory.GetProvider(language)));

            /* DCM REMOVED CodeDom Provider has FileExtension
             * switch (language)
             * {
             *  case GenerationLanguage.VisualBasic:
             *      return Path.ChangeExtension(xsdFilePath, ".Designer.vb");
             *  case GenerationLanguage.VisualCpp:
             *      return Path.ChangeExtension(xsdFilePath, ".Designer.cpp");
             *  default:
             *      return Path.ChangeExtension(xsdFilePath, ".Designer.cs");
             * }
             */
        }
예제 #10
0
        public GeneratorFacade(string inputFile,
            string nameSpace,
            GenerationLanguage language,
            CollectionType collectionType,
            bool enableDataBinding, bool hidePrivate, bool enableSummaryComment,
            List<NamespaceParam> customUsings, string collectionBase, bool includeSerializeMethod,
            string serializeMethodName, string deserializeMethodName, string saveToFileMethodName,
            string loadFromFileMethodName, bool disableDebug, bool implementCloneMethod,
            TargetFramework targetFramework)
        {
            var provider = CodeDomProviderFactory.GetProvider(language);

            this.Init(inputFile, nameSpace, provider, collectionType, enableDataBinding, hidePrivate,
                      enableSummaryComment, customUsings, collectionBase, includeSerializeMethod, serializeMethodName,
                      deserializeMethodName, saveToFileMethodName, loadFromFileMethodName, disableDebug,
                      implementCloneMethod, targetFramework);
        }
예제 #11
0
        /// <summary>
        /// Creates a new CodeBuilder.
        /// </summary>
        /// <param name="xmlPath">The path to the DTML file</param>
        /// <param name="lang">The language to generate with.</param>
        /// <returns></returns>
        public static ClassGenerator CreateBuilder(string xmlPath, string ns, GenerationLanguage lang)
        {
            var args = new ClassGeneratorArgs()
            {
                DtmlPath = xmlPath,
                Namespace = ns,
            };
            switch (lang)
            {
                case GenerationLanguage.VB:
                    args.Provider = new VBCodeProvider();
                    break;

                case GenerationLanguage.CSharp:
                default:
                    args.Provider = new CSharpCodeProvider();
                    break;
            }

            return new ClassGenerator(args);
        }
예제 #12
0
        /// <summary>
        /// Creates a new CodeBuilder.
        /// </summary>
        /// <param name="xmlPath">The path to the DTML file</param>
        /// <param name="lang">The language to generate with.</param>
        /// <returns></returns>
        public static ClassGenerator CreateBuilder(string xmlPath, string ns, GenerationLanguage lang)
        {
            var args = new ClassGeneratorArgs()
            {
                DtmlPath  = xmlPath,
                Namespace = ns,
            };

            switch (lang)
            {
            case GenerationLanguage.VB:
                args.Provider = new VBCodeProvider();
                break;

            case GenerationLanguage.CSharp:
            default:
                args.Provider = new CSharpCodeProvider();
                break;
            }

            return(new ClassGenerator(args));
        }
예제 #13
0
        public static ClassGenerator CreateBuilder(string ns, GenerationLanguage lang, XDocument dtml, bool isInterface, bool interfaceInheritance)
        {
            var args = new ClassGeneratorArgs()
            {
                Dtml = dtml,
                Namespace = ns,
                IsInterface = isInterface,
                GenerateInterfaceInheritance = interfaceInheritance
            };
            switch (lang)
            {
                case GenerationLanguage.VB:
                    args.Provider = new VBCodeProvider();
                    break;

                case GenerationLanguage.CSharp:
                default:
                    args.Provider = new CSharpCodeProvider();
                    break;
            }

            return new ClassGenerator(args);
        }
예제 #14
0
        public static ClassGenerator CreateBuilder(string ns, GenerationLanguage lang, XDocument dtml, bool isInterface, bool interfaceInheritance)
        {
            var args = new ClassGeneratorArgs()
            {
                Dtml        = dtml,
                Namespace   = ns,
                IsInterface = isInterface,
                GenerateInterfaceInheritance = interfaceInheritance
            };

            switch (lang)
            {
            case GenerationLanguage.VB:
                args.Provider = new VBCodeProvider();
                break;

            case GenerationLanguage.CSharp:
            default:
                args.Provider = new CSharpCodeProvider();
                break;
            }

            return(new ClassGenerator(args));
        }
예제 #15
0
    public async Task <int> InvokeAsync(InvocationContext context)
    {
        string             output             = context.ParseResult.GetValueForOption(OutputOption);
        GenerationLanguage language           = context.ParseResult.GetValueForOption(LanguageOption);
        string             openapi            = context.ParseResult.GetValueForOption(DescriptionOption);
        bool              backingStore        = context.ParseResult.GetValueForOption(BackingStoreOption);
        string            className           = context.ParseResult.GetValueForOption(ClassOption);
        LogLevel          logLevel            = context.ParseResult.GetValueForOption(LogLevelOption);
        string            namespaceName       = context.ParseResult.GetValueForOption(NamespaceOption);
        List <string>     serializer          = context.ParseResult.GetValueForOption(SerializerOption);
        List <string>     deserializer        = context.ParseResult.GetValueForOption(DeserializerOption);
        bool              cleanOutput         = context.ParseResult.GetValueForOption(CleanOutputOption);
        List <string>     structuredMimeTypes = context.ParseResult.GetValueForOption(StructuredMimeTypesOption);
        CancellationToken cancellationToken   = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken));

        AssignIfNotNullOrEmpty(output, (c, s) => c.OutputPath                 = s);
        AssignIfNotNullOrEmpty(openapi, (c, s) => c.OpenAPIFilePath           = s);
        AssignIfNotNullOrEmpty(className, (c, s) => c.ClientClassName         = s);
        AssignIfNotNullOrEmpty(namespaceName, (c, s) => c.ClientNamespaceName = s);
        Configuration.UsesBackingStore = backingStore;
        Configuration.Language         = language;
        if (serializer?.Any() ?? false)
        {
            Configuration.Serializers = serializer.Select(x => x.TrimQuotes()).ToHashSet(StringComparer.OrdinalIgnoreCase);
        }
        if (deserializer?.Any() ?? false)
        {
            Configuration.Deserializers = deserializer.Select(x => x.TrimQuotes()).ToHashSet(StringComparer.OrdinalIgnoreCase);
        }
        if (structuredMimeTypes?.Any() ?? false)
        {
            Configuration.StructuredMimeTypes = structuredMimeTypes.SelectMany(x => x.Split(new char[] { ' ' }))
                                                .Select(x => x.TrimQuotes())
                                                .ToHashSet(StringComparer.OrdinalIgnoreCase);
        }

#if DEBUG
        logLevel = logLevel > LogLevel.Debug ? LogLevel.Debug : logLevel;
#endif

        Configuration.OpenAPIFilePath = GetAbsolutePath(Configuration.OpenAPIFilePath);
        Configuration.OutputPath      = GetAbsolutePath(Configuration.OutputPath);
        Configuration.CleanOutput     = cleanOutput;

        using var loggerFactory = LoggerFactory.Create((builder) => {
            builder
            .AddConsole()
#if DEBUG
            .AddDebug()
#endif
            .SetMinimumLevel(logLevel);
        });
        var logger = loggerFactory.CreateLogger <KiotaBuilder>();

        logger.LogTrace("configuration: {configuration}", JsonSerializer.Serialize(Configuration));

        try {
            await new KiotaBuilder(logger, Configuration).GenerateSDK(cancellationToken);
            return(0);
        } catch (Exception ex) {
#if DEBUG
            logger.LogCritical(ex, "error generating the SDK: {exceptionMessage}", ex.Message);
            throw; // so debug tools go straight to the source of the exception when attached
#else
            logger.LogCritical("error generating the SDK: {exceptionMessage}", ex.Message);
            return(1);
#endif
        }
    }
예제 #16
0
 /// <summary>
 /// Gets the language extension based on the Passed language.
 /// </summary>
 /// <param name="language">The language.</param>
 /// <returns></returns>
 public static string GetLanguageExtension(GenerationLanguage language)
 {
     return(CodeDomProviderFactory.GetProvider(language).FileExtension);
 }