TString GenericPlatform::GetConfigFileName() { TString result; TString basedir = GetPackageAppDirectory(); if (basedir.empty() == false) { basedir = FilePath::IncludeTrailingSlash(basedir); TString appConfig = basedir + GetAppName() + _T(".cfg"); if (FilePath::FileExists(appConfig) == true) { result = appConfig; } else { result = basedir + _T("package.cfg"); if (FilePath::FileExists(result) == false) { result = _T(""); } } } return result; }
void Package::Initialize() { if (FInitialized == true) { return; } Platform& platform = Platform::GetInstance(); FBootFields = new PackageBootFields(); FDebugging = dsNone; FBootFields->FPackageRootDirectory = platform.GetPackageRootDirectory(); FBootFields->FPackageAppDirectory = platform.GetPackageAppDirectory(); FBootFields->FPackageLauncherDirectory = platform.GetPackageLauncherDirectory(); FBootFields->FAppDataDirectory = platform.GetAppDataDirectory(); std::map<TString, TString> keys = platform.GetKeys(); // Read from configure.cfg/Info.plist AutoFreePtr<ISectionalPropertyContainer> config = platform.GetConfigFile(platform.GetConfigFileName()); config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[CONFIG_APP_ID_KEY], FBootFields->FAppID); config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[PACKAGER_APP_DATA_DIR], FBootFields->FPackageAppDataDirectory); FBootFields->FPackageAppDataDirectory = FilePath::FixPathForPlatform(FBootFields->FPackageAppDataDirectory); // Main JAR. config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[CONFIG_MAINJAR_KEY], FBootFields->FMainJar); FBootFields->FMainJar = FilePath::IncludeTrailingSeparater(GetPackageAppDirectory()) + FilePath::FixPathForPlatform(FBootFields->FMainJar); // Classpath. // 1. If the provided class path contains main jar then only use provided class path. // 2. If class path provided by config file is empty then add main jar. // 3. If main jar is not in provided class path then add it. config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[CONFIG_CLASSPATH_KEY], FBootFields->FClassPath); FBootFields->FClassPath = FilePath::FixPathSeparatorForPlatform(FBootFields->FClassPath); if (FBootFields->FClassPath.empty() == true) { FBootFields->FClassPath = GetMainJar(); } else if (FBootFields->FClassPath.find(GetMainJar()) == TString::npos) { FBootFields->FClassPath = GetMainJar() + FilePath::PathSeparator() + FBootFields->FClassPath; } // Main Class. config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[CONFIG_MAINCLASSNAME_KEY], FBootFields->FMainClassName); // Splash Screen. if (config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[CONFIG_SPLASH_KEY], FBootFields->FSplashScreenFileName) == true) { FBootFields->FSplashScreenFileName = FilePath::IncludeTrailingSeparater(GetPackageAppDirectory()) + FilePath::FixPathForPlatform(FBootFields->FSplashScreenFileName); if (FilePath::FileExists(FBootFields->FSplashScreenFileName) == false) { FBootFields->FSplashScreenFileName = _T(""); } } // Runtime. FBootFields->FIsRuntimeBundled = true; config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[JVM_RUNTIME_KEY], FBootFields->FJVMRuntimeDirectory); if (FBootFields->FJVMRuntimeDirectory.empty()) { FBootFields->FIsRuntimeBundled = false; FBootFields->FJVMRuntimeDirectory = platform.GetSystemJRE(); } // Read jvmargs. PromoteAppCDSState(config); ReadJVMArgs(config); // Read args if none were passed in. if (FBootFields->FArgs.size() == 0) { OrderedMap<TString, TString> args; if (config->GetSection(keys[CONFIG_SECTION_ARGOPTIONS], args) == true) { FBootFields->FArgs = Helpers::MapToNameValueList(args); } } // Read jvmuserarg defaults. config->GetSection(keys[CONFIG_SECTION_JVMUSEROPTIONS], FDefaultJVMUserArgs); // Load JVM user overrides. TString jvmUserArgsConfigFileName = GetJVMUserArgsConfigFileName(); if (FilePath::FileExists(jvmUserArgsConfigFileName) == true) { // Load new location for user VM overrides. IniFile userConfig; if (userConfig.LoadFromFile(jvmUserArgsConfigFileName) == false) { // New property file format was not found, attempt to load old property file format. userConfig.GetSection(keys[CONFIG_SECTION_JVMUSEROVERRIDESOPTIONS], FJVMUserArgsOverrides); } userConfig.GetSection(keys[CONFIG_SECTION_JVMUSEROVERRIDESOPTIONS], FJVMUserArgsOverrides); } else { // Attemp to load java.util.prefs for legacy JVM user overrides. AutoFreePtr<JavaUserPreferences> javaPreferences(JavaUserPreferences::CreateInstance()); if (javaPreferences->Load(GetAppID()) == true) { FJVMUserArgsOverrides = javaPreferences->GetData(); } } // Auto Memory. TString autoMemory; if (config->GetValue(keys[CONFIG_SECTION_APPLICATION], keys[CONFIG_APP_MEMORY], autoMemory) == true) { if (autoMemory == _T("auto") || autoMemory == _T("100%")) { FBootFields->FMemoryState = PackageBootFields::msAuto; FBootFields->FMemorySize = platform.GetMemorySize(); } else if (autoMemory.length() == 2 && isdigit(autoMemory[0]) && autoMemory[1] == '%') { FBootFields->FMemoryState = PackageBootFields::msAuto; FBootFields->FMemorySize = StringToPercentageOfNumber(autoMemory.substr(0, 1), platform.GetMemorySize()); } else if (autoMemory.length() == 3 && isdigit(autoMemory[0]) && isdigit(autoMemory[1]) && autoMemory[2] == '%') { FBootFields->FMemoryState = PackageBootFields::msAuto; FBootFields->FMemorySize = StringToPercentageOfNumber(autoMemory.substr(0, 2), platform.GetMemorySize()); } else { FBootFields->FMemoryState = PackageBootFields::msManual; FBootFields->FMemorySize = 0; } } MergeJVMDefaultsWithOverrides(); }