1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. 3 * All rights reserved. Use is subject to license terms. 4 * 5 * This file is available and licensed under the following license: 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * - Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * - Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the distribution. 16 * - Neither the name of Oracle Corporation nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 34 #include "Macros.h" 35 #include "Package.h" 36 #include "Helpers.h" 37 38 39 Macros::Macros(void) { 40 } 41 42 Macros::~Macros(void) { 43 } 44 45 void Macros::Initialize() { 46 Package& package = Package::GetInstance(); 47 Macros& macros = Macros::GetInstance(); 48 49 // Public macros. 50 macros.AddMacro(_T("$APPDIR"), package.GetPackageRootDirectory()); 51 macros.AddMacro(_T("$PACKAGEDIR"), package.GetPackageAppDirectory()); 52 macros.AddMacro(_T("$LAUNCHERDIR"), package.GetPackageLauncherDirectory()); 53 macros.AddMacro(_T("$APPDATADIR"), package.GetAppDataDirectory()); 54 55 TString javaHome = FilePath::ExtractFilePath(package.GetJVMLibraryFileName()); 56 macros.AddMacro(_T("$JREHOME"), javaHome); 57 58 // App CDS Macros 59 macros.AddMacro(_T("$CACHEDIR"), package.GetAppCDSCacheDirectory()); 60 61 // Private macros. 62 TString javaVMLibraryName = FilePath::ExtractFileName(javaHome); 63 macros.AddMacro(_T("$JAVAVMLIBRARYNAME"), javaVMLibraryName); 64 } 65 66 Macros& Macros::GetInstance() { 67 static Macros instance; 68 return instance; 69 } 70 71 TString Macros::ExpandMacros(TString Value) { 72 TString result = Value; 73 74 for (std::map<TString, TString>::iterator iterator = FData.begin(); 75 iterator != FData.end(); 76 iterator++) { 77 78 TString name = iterator->first; 79 80 if (Value.find(name) != TString::npos) { 81 TString lvalue = iterator->second; 82 result = Helpers::ReplaceString(Value, name, lvalue); 83 result = ExpandMacros(result); 84 break; 85 } 86 } 87 88 return result; 89 } 90 91 void Macros::AddMacro(TString Key, TString Value) { 92 FData.insert(std::map<TString, TString>::value_type(Key, Value)); 93 }