Example #1
0
 private static void WriteHeader(RunLogger.RunInfo runInfo, int returnCode, DateTime startTime, DateTime endTime,
                                 List <KeyValuePair <string, string> > em2Config, Dictionary <string, string> em3Config,
                                 Dictionary <string, string> modifiedExtensionSwitches)
 {
     try
     {
         runInfo.duration     = new RunLogger.Duration(startTime, endTime);
         runInfo.finishStatus = returnCode == 0 ? RunLogger.RunInfo.FINISH_STATUS.finished : RunLogger.RunInfo.FINISH_STATUS.aborted;
         runInfo.systemName   = em3Config[TAGS.CONFIG_ID_SYSTEM]; // if a config-file is used
         runInfo.databaseName = em3Config[TAGS.CONFIG_ID_DATA];   // these may be the ids instead of the names
         runInfo.ExtractAddonSystemNames(em3Config, TAGS.CONFIG_ADDON);
         if (em2Config != null)
         {
             runInfo.ExtractExtensionSwitches(em2Config, TAGS.EM2CONFIG_POLICY_SWITCH);                    // user-interface generated config: full extension-switch-info available
         }
         else if (modifiedExtensionSwitches.Count == 0)
         {
             runInfo.extensionSwitches.Add("All Extension Switches", "default-settings");
         }
         else
         {
             runInfo.extensionSwitches.AddRange(modifiedExtensionSwitches);
             runInfo.extensionSwitches.Add("Any other Extension Switches", "default-settings");
         }
         new RunLogger(DefPar.Value.NA, new List <RunLogger.RunInfo>()
         {
             runInfo
         }).TxtWriteEMLog(em3Config[TAGS.CONFIG_PATH_OUTPUT]);
     }
     catch (Exception exception) { Console.WriteLine($"Failed writing log-file: '{exception.Message}'"); }
 }
Example #2
0
        private void RunEM3_Lib(string configurationFile)
        {
            em3RunInfo = new RunLogger.RunInfo(); DateTime startTime = DateTime.Now;

            if (!TransformEMConfig.Transform(configurationFile, out Dictionary <string, string> em3Config,
                                             new Action <string>(err => { ErrorLogHandler(err); })))
            {
                return;
            }

            bool success = new EM_Executable.Control().Run(em3Config,
                                                           progressInfo =>
            {
                if (em3Cancel)
                {
                    return(false);
                }
                RunLogHandler(progressInfo.message, progressInfo.detailedInfo); return(true);
            },
                                                           errorInfo => { ErrorLogHandler((errorInfo.isWarning ? "warning: " : "error: ") + errorInfo.message, errorInfo); });

            em3RunInfo.finishStatus = success ? RunLogger.RunInfo.FINISH_STATUS.finished : RunLogger.RunInfo.FINISH_STATUS.aborted;
            em3RunInfo.duration     = new RunLogger.Duration(startTime, DateTime.Now);
        }
Example #3
0
        internal static int Go(string[] args)
        {
            try
            {
                args = Test.TPlay();

                if (args.Length == 0)
                {
                    return(WrongUseError());
                }

                // get arguments into a dictionary
                List <string> _args = (from a in args select a.Trim()).ToList();
                Dictionary <string, string> arguments = args[0].Trim().StartsWith("-") ? GetArgsEM3Style(_args) : GetArgsEM2Style(_args);
                if (arguments == null)
                {
                    return(WrongUseError());
                }

                // prepare logging
                RunLogger.RunInfo runInfo = new RunLogger.RunInfo();

                // translate or create config
                Dictionary <string, string> em3Config = null; List <KeyValuePair <string, string> > em2Config = null;
                if (arguments.ContainsKey(ARG_CONFIG))
                {
                    if (!TransformEMConfig.Transform(arguments[ARG_CONFIG], out em2Config, out em3Config,
                                                     err => { WriteErr($"EM3 CONFIG-TRANSFORMER", err); }))
                    {
                        return(1);
                    }
                    arguments.Remove(ARG_CONFIG);
                }
                else
                {
                    if (!arguments.ContainsKey(ARG_EMPATH) || !arguments.ContainsKey(ARG_SYS) || !arguments.ContainsKey(ARG_DATA))
                    {
                        return(WrongUseError("Compulsory argument missing."));
                    }
                    CreateConfig(arguments[ARG_EMPATH], arguments[ARG_SYS], arguments[ARG_DATA], out em3Config); // create a minimal-config
                    arguments.Remove(ARG_EMPATH); arguments.Remove(ARG_SYS); arguments.ContainsKey(ARG_DATA);
                }

                // handle optional parameters
                int addOnCnt = 0, extCnt = 0;
                foreach (var optArg in arguments)
                {
                    if (optArg.Key.ToLower() == ARG_OUTPATH.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_PATH_OUTPUT, optArg.Value);
                    }
                    else if (optArg.Key.ToLower() == ARG_DATAPATH.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_PATH_DATA, optArg.Value);
                    }
                    else if (optArg.Key.ToLower() == ARG_GLOBALPATH.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_PATH_GLOBAL, optArg.Value);
                    }
                    else if (optArg.Key.ToLower() == ARG_SEQUENTIAL_RUN.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_FORCE_SEQUENTIAL_RUN, DefPar.Value.YES);
                    }
                    else if (optArg.Key.ToLower() == ARG_SEQUENTIAL_OUTPUT.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_FORCE_SEQUENTIAL_OUTPUT, DefPar.Value.YES);
                    }
                    else if (optArg.Key.ToLower() == ARG_OUTPUT_IN_EURO.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_FORCE_OUTPUT_EURO, DefPar.Value.YES);
                    }
                    else if (optArg.Key.ToLower().StartsWith(ARG_ADDON.ToLower()))
                    {
                        if (optArg.Value.Split("|").Count() != 2)
                        {
                            return(WrongUseError($"Invalid {ARG_ADDON} argument '{optArg.Value}' (correct: add-on-name|add-on-system, e.g. MTR|MTR_EL)"));
                        }
                        em3Config.Add($"{TAGS.CONFIG_ADDON}{addOnCnt++}", optArg.Value);
                    }
                    else if (optArg.Key.ToLower().StartsWith(ARG_EXTENSION_SWITCH.ToLower()))
                    {
                        if (optArg.Value.Split("=").Count() != 2)
                        {
                            return(WrongUseError($"Invalid {ARG_EXTENSION_SWITCH} argument '{optArg.Value}' (correct: extension-name=switch, e.g. BTA_??=off)"));
                        }
                        em3Config.Add($"{TAGS.EXTENSION_SWITCH}{extCnt++}", optArg.Value); // still extension-name needs to be replaced by id, see below
                    }
                    else if (optArg.Key.ToLower() == ARG_PATH_PAR_MODIFICATIONS.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_PATH_PAR_MODIFICATIONS, optArg.Value);
                    }
                    else if (optArg.Key.ToLower() == ARG_INPUT_PASSWORD.ToLower())
                    {
                        em3Config.AddOrReplace(TAGS.CONFIG_INPUT_PASSWORD, optArg.Value);
                    }
                    // more to come ...
                }

                if (!arguments.ContainsKey(ARG_NOTRANSLATE))
                {
                    // translate country and global files (but do not stop on error - maybe still works ...)
                    if (!em3Config.ContainsKey(TAGS.CONFIG_COUNTRY))
                    {
                        return(WrongUseError($"Configuration file does not contain tag {TAGS.CONFIG_COUNTRY}"));
                    }
                    if (!em3Config.ContainsKey(TAGS.CONFIG_PATH_EUROMODFILES))
                    {
                        return(WrongUseError($"Configuration file does not contain tag {TAGS.CONFIG_PATH_EUROMODFILES}"));
                    }
                    EM3Country.Transform(em3Config[TAGS.CONFIG_PATH_EUROMODFILES], em3Config[TAGS.CONFIG_COUNTRY], out List <string> errors);
                    foreach (string err in errors)
                    {
                        WriteErr("EM3 COUNTRY-TRANSFORMER", err);
                    }
                    EM3Global.Transform(em3Config[TAGS.CONFIG_PATH_EUROMODFILES], out errors);
                    foreach (string err in errors)
                    {
                        WriteErr("EM3 GLOBAL-FILE-TRANSFORMER", err);
                    }
                    EM3Variables.Transform(em3Config[TAGS.CONFIG_PATH_EUROMODFILES], out errors);
                    foreach (string err in errors)
                    {
                        WriteErr("EM3 VARIABLES-TRANSFORMER", err);
                    }

                    // translate possible add-ons
                    foreach (var entry in em3Config)
                    {
                        if (!entry.Key.StartsWith(TAGS.CONFIG_ADDON))
                        {
                            continue;
                        }
                        EM3Country.TransformAddOn(em3Config[TAGS.CONFIG_PATH_EUROMODFILES], entry.Value.Split('|').First(), out errors);
                        foreach (string err in errors)
                        {
                            WriteErr("EM3 ADD-ON-TRANSFORMER", err);
                        }
                    }
                }

                // replace extension-name by id in config, if necessary
                if (!HandleExtensionSwitches(em3Config, out Dictionary <string, string> modifiedExtensionSwitches))
                {
                    return(1);
                }

                // finally run
                DateTime startTime = DateTime.Now;
                int      returnCode = new EM_Executable.Control().Run(em3Config,
                                                                      prog =>
                {
                    Console.WriteLine(prog.message);
                    runInfo.ExtractOutputFiles(prog.detailedInfo);
                    return(true);
                },
                                                                      err => { WriteError(err); }) ? 0 : 1;

                WriteHeader(runInfo, returnCode, startTime, DateTime.Now, em2Config, em3Config, modifiedExtensionSwitches);

                if (returnCode == 1)
                {
                    Console.WriteLine($"{DefGeneral.BRAND_TITLE} run aborted with errors!");
                }
                return(returnCode);

                void WriteErr(string guiltyProgramme, string err)
                {
                    WriteError(new Communicator.ErrorInfo()
                    {
                        message = $"{guiltyProgramme}: {err}", isWarning = true
                    });
                }
                void WriteError(Communicator.ErrorInfo err)
                {
                    Console.Error.WriteLine((err.isWarning ? "warning: " : "error: ") + err.message);
                    runInfo.errorInfo.Add(err);
                }
            }
            catch (Exception exception) { return(WrongUseError(exception.Message)); }
        }