void Package::MergeJVMDefaultsWithOverrides() { // Merge jvmuserarg defaults and jvmuserarg overrides to populate FJVMUserArgs. // 1. If the key is in the config file and not the java.user.preferences the default value is used, // the one from the config file. // 2. If the key is in the java.user.preferences then the value from the java.user.preferences is used and // the config file value is ignored. // 3. If the key is not in the config file but it is in the java.user.preferences then it is added anyway. // And if it is removed it won't show back up. FJVMUserArgs.Clear(); FJVMUserArgs.Append(FDefaultJVMUserArgs); OrderedMap<TString, TString> overrides = GetJVMUserArgOverrides(); // 1. Iterate over all elements in overrides to see if any items // override a default value. std::vector<TString> keys = GetKeysThatAreNotOverridesOfDefaultValues(FJVMUserArgs, overrides); // 2. All remaining items in overrides are appended to the end. for (unsigned int index = 0; index< keys.size(); index++) { TString key = keys[index]; TString value; if (overrides.GetValue(key, value) == true) { FJVMUserArgs.Append(key, value); } } }
std::vector<TString> GetKeysThatAreNotDuplicates(OrderedMap<TString, TString> &Defaults, OrderedMap<TString, TString> &Overrides) { std::vector<TString> result; std::vector<TString> overrideKeys = Overrides.GetKeys(); for (size_t index = 0; index < overrideKeys.size(); index++) { TString overridesKey = overrideKeys[index]; TString overridesValue; TString defaultValue; if ((Defaults.ContainsKey(overridesKey) == false) || (Defaults.GetValue(overridesKey, defaultValue) == true && Overrides.GetValue(overridesKey, overridesValue) == true && defaultValue != overridesValue)) { result.push_back(overridesKey); } } return result; }
OrderedMap<TString, TString> CreateOrderedMapFromKeyList(OrderedMap<TString, TString> &Map, std::vector<TString> &Keys) { OrderedMap<TString, TString> result; for (size_t index = 0; index < Keys.size(); index++) { TString key = Keys[index]; TString value; if (Map.GetValue(key, value) == true) { result.Append(key, value); } } return result; }