Example #1
0
        static void Main(string[] args)
        {
            try
            {
                SetLoggerSettings();
                logger.Info("qlik-engineapi-generator");
                logger.Info("Load options...");
                var config = GetConfig();
                if (!File.Exists(config.SourceFile))
                {
                    logger.Warn("No source file found. Please check the args.");
                    return;
                }

                var origJsonObject = GetJsonObject(config.SourceFile);
                var workDir        = Path.GetDirectoryName(config.SourceFile);
                if (string.IsNullOrEmpty(config.OutputFolder))
                {
                    config.OutputFolder = workDir;
                }
                Directory.CreateDirectory(config.OutputFolder);

                var files          = Directory.GetFiles(workDir, "*.json", SearchOption.TopDirectoryOnly);
                var changeJsonFile = config.GetChangeFile();
                if (File.Exists(changeJsonFile))
                {
                    var changeJsonObject = GetJsonObject(changeJsonFile);
                    origJsonObject.Merge(changeJsonObject);

                    var parameters = origJsonObject.SelectTokens("$...parameters").ToList();
                    var jArray     = new JArray();
                    for (int i = 0; i < parameters.Count; i++)
                    {
                        jArray = parameters[i].ToObject <JArray>();
                        parameters[i].Replace(origJsonObject.MergeArray(jArray));
                    }

                    var responses = origJsonObject.SelectTokens("$...responses").ToList();
                    for (int i = 0; i < responses.Count; i++)
                    {
                        jArray = responses[i].ToObject <JArray>();
                        responses[i].Replace(origJsonObject.MergeArray(jArray));
                    }
                }

                logger.Info("Start parsing...");
                var qlikApiGenerator = new QlikApiGenerator(config, ScriptLanguage.CSharp);
                var engineObjects    = qlikApiGenerator.ReadJson(origJsonObject);
                WriteCSharp(engineObjects, config, qlikApiGenerator);

                qlikApiGenerator = new QlikApiGenerator(config, ScriptLanguage.TypeScript);
                engineObjects    = qlikApiGenerator.ReadJson(origJsonObject);
                WriteTypeScript(engineObjects, config, qlikApiGenerator);

                Environment.ExitCode = 0;
                logger.Info("Finish");
                logger.Factory.Flush();
            }
            catch (Exception ex)
            {
                logger.Error(ex, "The Application has an Error.");
                logger.Factory.Flush();
                Environment.ExitCode = 1;
            }
        }
Example #2
0
        private static void WriteCSharp(List <IEngineObject> engineObjects, QlikApiConfig config, QlikApiGenerator qlikApiGenerator)
        {
            //pragmas for compiler warnings
            var pragmas = new List <string>()
            {
                "#pragma warning disable IDE1006",
                "#pragma warning disable CS1591"
            };

            logger.Info("Write Enums...");
            var objectResults = engineObjects.Where(o => o.EngType == EngineType.ENUM).ToList();
            var savePath      = Path.Combine(config.OutputFolder, "Enums.cs");

            qlikApiGenerator.SaveTo(config, objectResults, savePath, pragmas);

            logger.Info("Write Interfaces...");
            objectResults = engineObjects.Where(o => o.EngType == EngineType.INTERFACE).ToList();
            savePath      = Path.Combine(config.OutputFolder, "Interfaces.cs");
            qlikApiGenerator.SaveTo(config, objectResults, savePath);

            logger.Info("Write Classes...");
            objectResults = engineObjects.Where(o => o.EngType == EngineType.CLASS).ToList();
            foreach (var classResult in objectResults)
            {
                savePath = Path.Combine(config.OutputFolder, $"{classResult.Name}.cs");
                qlikApiGenerator.SaveTo(config, new List <IEngineObject>()
                {
                    classResult
                }, savePath);
            }
        }
Example #3
0
        private static void WriteTypeScript(List <IEngineObject> engineObjects, QlikApiConfig config, QlikApiGenerator qlikApiGenerator)
        {
            logger.Info("Write Enums...");
            var objectResults = engineObjects.Where(o => o.EngType == EngineType.ENUM).ToList();
            var enumFile      = Path.Combine(config.TypeScriptFolder, "Enums.d.ts");

            qlikApiGenerator.SaveTo(config, objectResults, enumFile, null);

            logger.Info("Write Interfaces...");
            objectResults = engineObjects.Where(o => o.EngType == EngineType.INTERFACE).ToList();
            var interfaceFile = Path.Combine(config.TypeScriptFolder, "Interfaces.d.ts");

            qlikApiGenerator.SaveTo(config, objectResults, interfaceFile, null);

            logger.Info("Write Classes...");
            objectResults = engineObjects.Where(o => o.EngType == EngineType.CLASS).ToList();
            var classFile = Path.Combine(config.TypeScriptFolder, $"Class.d.ts");

            qlikApiGenerator.SaveTo(config, objectResults, classFile, null);

            logger.Info("Write Index file...");
            var indexBuilder = new StringBuilder();

            indexBuilder.AppendLine("// Type definitions for qlik-engineapi 12.67");
            indexBuilder.AppendLine("// Project: https://help.qlik.com/en-US/sense-developer/February2019/Subsystems/EngineAPI/Content/Sense_EngineAPI/introducing-engine-API.htm");
            indexBuilder.AppendLine("// Definitions by: Konrad Mattheis <https://github.com/konne>");
            indexBuilder.AppendLine("// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped");
            indexBuilder.AppendLine();
            indexBuilder.Append($"declare namespace {config.NamespaceName.Replace("Qlik.","")} {{");
            var content = File.ReadAllText(enumFile);

            indexBuilder.AppendLine($"\n    {content}");
            content = File.ReadAllText(interfaceFile);
            indexBuilder.AppendLine($"\n    {content}");
            content = File.ReadAllText(classFile);
            indexBuilder.AppendLine($"\n    {content}");
            indexBuilder.AppendLine("}");

            indexBuilder.AppendLine("");
            indexBuilder.AppendLine("declare namespace enigmaJS {");
            indexBuilder.AppendLine("    interface IGeneratedAPI {");
            indexBuilder.AppendLine("    }");
            indexBuilder.AppendLine("}");

            File.WriteAllText(Path.Combine(config.TypeScriptFolder, "index.d.ts"), indexBuilder.ToString());

            File.Delete(enumFile);
            File.Delete(interfaceFile);
            File.Delete(classFile);
        }
Example #4
0
        static void Main(string[] args)
        {
            try
            {
                SetLoggerSettings();
                logger.Info("qlik-engineapi-generator");
                logger.Info("Load options...");
                var config = GetConfig();
                if (!File.Exists(config.SourceFile))
                {
                    logger.Warn("No source file found. Please check the args.");
                    return;
                }

                var origJsonObject = GetJsonObject(config.SourceFile);
                var workDir        = Path.GetDirectoryName(config.SourceFile);
                if (string.IsNullOrEmpty(config.OutputFolder))
                {
                    config.OutputFolder = workDir;
                }
                Directory.CreateDirectory(config.OutputFolder);

                var files          = Directory.GetFiles(workDir, "*.json", SearchOption.TopDirectoryOnly);
                var changeJsonFile = config.GetChangeFile();
                if (File.Exists(changeJsonFile))
                {
                    var changeJsonObject = GetJsonObject(changeJsonFile);
                    origJsonObject.Merge(changeJsonObject);
                    var keyNames = new List <string>()
                    {
                        "qMode", "qType", "qFieldSelectionMode", "qState", "qGrouping", "qSortIndicator",
                        "qDimensionType", "qExportState", "qReductionMode", "qMatchingFieldMode",
                        "qGroup"
                    };
                    var parameters = origJsonObject.SelectTokens("$...parameters").ToList();
                    var jArray     = new JArray();
                    for (int i = 0; i < parameters.Count; i++)
                    {
                        jArray = parameters[i].ToObject <JArray>();
                        parameters[i].Replace(origJsonObject.MergeArray(jArray, keyNames));
                    }
                    keyNames = new List <string>()
                    {
                        "qReturn"
                    };
                    var responses = origJsonObject.SelectTokens("$...responses").ToList();
                    for (int i = 0; i < responses.Count; i++)
                    {
                        jArray = responses[i].ToObject <JArray>();
                        responses[i].Replace(origJsonObject.MergeArray(jArray, keyNames));
                    }
                }

                logger.Info("Start parsing...");
                var qlikApiGenerator = new QlikApiGenerator(config);
                var engineObjects    = qlikApiGenerator.ReadJson(origJsonObject);

                logger.Info("Write Enums...");
                var objectResults = engineObjects.Where(o => o.EngType == EngineType.ENUM).ToList();
                var savePath      = Path.Combine(config.OutputFolder, "Enums.cs");
                qlikApiGenerator.SaveToCSharp(config, objectResults, savePath);

                logger.Info("Write Interfaces...");
                objectResults = engineObjects.Where(o => o.EngType == EngineType.INTERFACE).ToList();
                savePath      = Path.Combine(config.OutputFolder, "Interfaces.cs");
                qlikApiGenerator.SaveToCSharp(config, objectResults, savePath);

                logger.Info("Write Classes...");
                objectResults = engineObjects.Where(o => o.EngType == EngineType.CLASS).ToList();
                foreach (var classResult in objectResults)
                {
                    savePath = Path.Combine(config.OutputFolder, $"{classResult.Name}.cs");
                    qlikApiGenerator.SaveToCSharp(config, new List <IEngineObject>()
                    {
                        classResult
                    }, savePath);
                }

                Environment.ExitCode = 0;
                logger.Info("Finish");
                logger.Factory.Flush();
            }
            catch (Exception ex)
            {
                logger.Error(ex, "The Application has an Error.");
                logger.Factory.Flush();
                Environment.ExitCode = 1;
            }
        }