internal void RunTransfomer(List <string> countries, out List <string> errors) { errors = new List <string>(); foreach (string country in countries) { EM3Country.Transform(UISessionInfo.GetEuromodFilesFolder(), country, out errors); } EM3Global.Transform(UISessionInfo.GetEuromodFilesFolder(), out List <string> gErrors); errors.AddRange(gErrors); EM3Variables.Transform(UISessionInfo.GetEuromodFilesFolder(), out List <string> vErrors); errors.AddRange(vErrors); }
private bool EM3_Transform() { try { lock (transformLock) { string transformerErrors = string.Empty; foreach (string country in countriesToTransform) { EM3Country.Transform(EM_AppContext.FolderEuromodFiles, country, out List <string> errors); foreach (string error in errors) { transformerErrors += error + Environment.NewLine; } } foreach (string addOn in addOnsToTransform) { EM3Country.TransformAddOn(EM_AppContext.FolderEuromodFiles, addOn, out List <string> errors); foreach (string error in errors) { transformerErrors += error + Environment.NewLine; } } EM3Global.Transform(EM_AppContext.FolderEuromodFiles, out List <string> gErrors); foreach (string error in gErrors) { transformerErrors += error + Environment.NewLine; } EM3Variables.Transform(EM_AppContext.FolderEuromodFiles, out List <string> vErrors); foreach (string error in vErrors) { transformerErrors += error + Environment.NewLine; } if (transformerErrors == string.Empty) { return(true); } return(UserInfoHandler.GetInfo("Errors on transforming to EM3 structure:" + Environment.NewLine + transformerErrors + Environment.NewLine + "Do you want to continue?", MessageBoxButtons.YesNo) == DialogResult.Yes); } } catch (Exception exception) { return(UserInfoHandler.GetInfo("Errors on transforming to EM3 structure:" + Environment.NewLine + exception.Message + Environment.NewLine + Environment.NewLine + "Do you want to continue?", MessageBoxButtons.YesNo) == DialogResult.Yes); } }
private void EM3_Transform(string country, string addOn) { try { EMPath emPath = new EMPath(EM_AppContext.FolderEuromodFiles); lock (transformLock) { bool success = TransformCountry() && TransformAddOn() && (em3_transformGlobals == false || (TransformGlobals() && TransformVariables())); } bool TransformCountry() { bool ok = EM3Country.Transform(emPath.GetFolderEuromodFiles(), country, out List <string> transErrors); AddErrorRange(transErrors); return(ok); } bool TransformGlobals() { bool ok = EM3Global.Transform(emPath.GetFolderEuromodFiles(), out List <string> transErrors); AddErrorRange(transErrors); return(ok); } bool TransformVariables() { bool ok = EM3Variables.Transform(emPath.GetFolderEuromodFiles(), out List <string> transErrors); AddErrorRange(transErrors); return(ok); } bool TransformAddOn() { if (string.IsNullOrEmpty(addOn)) { return(true); } bool ok = EM3Country.TransformAddOn(emPath.GetFolderEuromodFiles(), addOn, out List <string> transErrors); AddErrorRange(transErrors); return(ok); } } catch (Exception exception) { em3_petInfo.AddSystemIndependentError(exception.Message); } void AddErrorRange(List <string> errors) { foreach (string error in errors) { em3_petInfo.AddSystemIndependentError(error); } } }
internal static int GoUI(string[] args) { try { if (args.Length < 2) { return(WrongArgumentError()); } string emPath = EM_Helpers.RemoveQuotes(args[0].Trim()); string cc = args[1], ao = args.Length > 2 ? args[2] : string.Empty; foreach (string country in cc.Split('|', StringSplitOptions.RemoveEmptyEntries)) { EM3Country.Transform(emPath, country, out List <string> errors); foreach (string error in errors) { Console.Error.WriteLine(error); } } foreach (string addOn in ao.Split('|', StringSplitOptions.RemoveEmptyEntries)) { EM3Country.TransformAddOn(emPath, addOn, out List <string> errors); foreach (string error in errors) { Console.Error.WriteLine(error); } } EM3Global.Transform(emPath, out List <string> gErrors); foreach (string error in gErrors) { Console.Error.WriteLine(error); } EM3Variables.Transform(emPath, out List <string> vErrors); foreach (string error in vErrors) { Console.Error.WriteLine(error); } return(0); // as it is unlikely that one can run (with useful results) if there are errors, the UI shows the errors and asks the user } catch (Exception exception) { Console.Error.WriteLine("EUROMOD3 TRANSFORM: " + exception.Message); return(1); } int WrongArgumentError() { string actArgs = string.Empty; foreach (string arg in args) { actArgs += arg + " "; } Console.Error.WriteLine("EUROMOD3 TRANSFORM: invalid use. Correct: EM_ExecutableCaller UI_TRANSFORM emPath cc1[|cc2|...|ccN] [ao1[|ao2|...|aoN]]" + Environment.NewLine + $"Acutal use: EM_ExecutableCaller TRANSFORM {actArgs}"); return(1); } }
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)); } }
internal static int GoPet(string[] args) { try { if (args.Length < 2) { return(WrongArgumentError()); } string emPath = EM_Helpers.RemoveQuotes(args[0].Trim()); string country = args[1]; bool? transformGlobal = EM_Helpers.GetBool(args[2]); // other than for the UI-call, the country-files are saved in the temp-folder, thus we cannot call the standard EM3Country.Transform, etc. // as a solution (which is considered to be temporary and therefore should touch other code as less as possible) // we do "by hand read-write" (see below) and create an EM3Translation-folder in the temp-folder from where we start the PET-runs // here we have the information: EM2 country-file (in temp-folder) and global-files (in config-folder) EMPath em2PathHandler = new EMPath(emPath); // here we write the EM3 files in a structure the EM3-exe can process, i.e. we create EM3Translation-folder in temp-folder EMPath transPathHandler = new EMPath(em2PathHandler.GetFolderTemp()); List <string> errors = new List <string>(); bool success = TransformCountry() && (transformGlobal == false || (TransformGlobals() && TransformVariables())); foreach (string error in errors) { Console.Error.WriteLine(error); } return(success ? 0 : 1); bool TransformCountry() { // read EM2-files string ccPath = Path.Combine(em2PathHandler.GetFolderTemp(), EMPath.GetCountryFileName(country)); string dcPath = Path.Combine(em2PathHandler.GetFolderTemp(), EMPath.GetEM2DataConfigFileName(country)); EM2Country.Content ctryContent = EM2Country.Read(ccPath, out List <string> _errors); errors.AddRange(_errors); EM2Data.Content dataContent = EM2Data.Read(dcPath, out _errors); errors.AddRange(_errors); List <List <MultiProp> > extensions = EM2Global.ReadSwitchPol(em2PathHandler.GetFolderConfig(em2: true), out _errors); errors.AddRange(_errors); if (ctryContent == null || dataContent == null || extensions == null) { return(false); } // write EM3-file DirectoryInfo di = Directory.CreateDirectory(transPathHandler.GetCountryFolderPath(country)); string em3CountryFile = transPathHandler.GetCountryFilePath(country); bool ok = EM3Country.Write(ctryContent, dataContent, extensions, em3CountryFile, out _errors); errors.AddRange(_errors); return(ok); } bool TransformGlobals() { // read EM2-files List <List <MultiProp> > exRates = EM2Global.ReadExRates(em2PathHandler.GetFolderConfig(em2: true), out List <string> _errors); errors.AddRange(_errors); List <List <MultiProp> > hicp = EM2Global.ReadHICP(em2PathHandler.GetFolderConfig(em2: true), out _errors); errors.AddRange(_errors); List <List <MultiProp> > switches = EM2Global.ReadSwitchPol(em2PathHandler.GetFolderConfig(em2: true), out _errors); errors.AddRange(_errors); // transfer to EM3-structure bool ok = true; try { DirectoryInfo di = Directory.CreateDirectory(transPathHandler.GetFolderConfig()); if (!EM3Global.WriteExRates(exRates, transPathHandler.GetFolderEuromodFiles(), out _errors)) { ok = false; } errors.AddRange(_errors); if (!EM3Global.WriteHICP(hicp, transPathHandler.GetFolderEuromodFiles(), out _errors)) { ok = false; } errors.AddRange(_errors); if (!EM3Global.WriteExtensions(switches, transPathHandler.GetFolderEuromodFiles(), out _errors)) { ok = false; } errors.AddRange(_errors); } catch { } // this is a primitive way for provide thread-security, as more than one PETs may be started return(ok); } bool TransformVariables() { // read EM2-file EM2Variables.Content content = EM2Variables.Read(em2PathHandler.GetFolderConfig(em2: true), out List <string> _errors); errors.AddRange(_errors); if (content == null) { return(false); } // transfer to EM3-structure try { DirectoryInfo di = Directory.CreateDirectory(transPathHandler.GetFolderConfig()); bool ok = EM3Variables.Write(content, transPathHandler.GetFolderEuromodFiles(), out _errors); errors.AddRange(_errors); return(ok); } catch { return(true); } // see above } } catch (Exception exception) { Console.Error.WriteLine("EUROMOD3 TRANSFORM: " + exception.Message); return(1); } int WrongArgumentError() { string actArgs = string.Empty; foreach (string arg in args) { actArgs += arg + " "; } Console.Error.WriteLine("EUROMOD3 TRANSFORM: invalid use. Correct: EM_ExecutableCaller UI_TRANSFORM_PET emPath 0/1 cc [ao1[|ao2|...|aoN]]" + Environment.NewLine + $"Acutal use: EM_ExecutableCaller TRANSFORM {actArgs}"); return(1); } }