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 54 TString javaHome = FilePath::ExtractFilePath(package.GetJVMLibraryFileName()); 55 macros.AddMacro(_T("$JREHOME"), javaHome); 56 57 // Private macros. 58 TString javaVMLibraryName = FilePath::ExtractFileName(javaHome); 59 macros.AddMacro(_T("$JAVAVMLIBRARYNAME"), javaVMLibraryName); 60 } 61 62 Macros& Macros::GetInstance() { 63 static Macros instance; 64 return instance; 65 } 66 67 TString Macros::ExpandMacros(TString Value) { 68 TString result = Value; 69 70 for (std::map<TString, TString>::iterator iterator = FData.begin(); 71 iterator != FData.end(); 72 iterator++) { 73 74 TString name = iterator->first; 75 76 if (Value.find(name) != TString::npos) { 77 TString lvalue = iterator->second; 78 result = Helpers::ReplaceString(Value, name, lvalue); 79 result = ExpandMacros(result); 80 break; 81 } 82 } 83 84 return result; 85 } 86 87 void Macros::AddMacro(TString Key, TString Value) { 88 FData.insert(std::map<TString, TString>::value_type(Key, Value)); 89 }