xref: /AOO41X/main/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/SolarisInstaller.java (revision 67e470dafe1997e73f56ff7ff4878983707e3e07)
1*9a1eeea9SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*9a1eeea9SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*9a1eeea9SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*9a1eeea9SAndrew Rist  * distributed with this work for additional information
6*9a1eeea9SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*9a1eeea9SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*9a1eeea9SAndrew Rist  * "License"); you may not use this file except in compliance
9*9a1eeea9SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*9a1eeea9SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*9a1eeea9SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*9a1eeea9SAndrew Rist  * software distributed under the License is distributed on an
15*9a1eeea9SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9a1eeea9SAndrew Rist  * KIND, either express or implied.  See the License for the
17*9a1eeea9SAndrew Rist  * specific language governing permissions and limitations
18*9a1eeea9SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*9a1eeea9SAndrew Rist  *************************************************************/
21*9a1eeea9SAndrew Rist 
22*9a1eeea9SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package org.openoffice.setup.Installer;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import org.openoffice.setup.InstallData;
27cdf0e10cSrcweir import org.openoffice.setup.InstallerHelper.SolarisHelper;
28cdf0e10cSrcweir import org.openoffice.setup.ResourceManager;
29cdf0e10cSrcweir import org.openoffice.setup.SetupData.PackageDescription;
30cdf0e10cSrcweir import org.openoffice.setup.Util.Converter;
31cdf0e10cSrcweir import org.openoffice.setup.Util.ExecuteProcess;
32cdf0e10cSrcweir import org.openoffice.setup.Util.Informer;
33cdf0e10cSrcweir import org.openoffice.setup.Util.LogManager;
34cdf0e10cSrcweir import org.openoffice.setup.Util.SystemManager;
35cdf0e10cSrcweir import java.io.File;
36cdf0e10cSrcweir import java.util.HashMap;
37cdf0e10cSrcweir import java.util.Vector;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir public class SolarisInstaller extends Installer {
40cdf0e10cSrcweir 
41cdf0e10cSrcweir     SolarisHelper helper = new SolarisHelper();
42cdf0e10cSrcweir 
SolarisInstaller()43cdf0e10cSrcweir     public SolarisInstaller() {
44cdf0e10cSrcweir         super();
45cdf0e10cSrcweir     }
46cdf0e10cSrcweir 
defineDatabasePath()47cdf0e10cSrcweir     public void defineDatabasePath() {
48cdf0e10cSrcweir 
49cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
50cdf0e10cSrcweir         String oldDatabasePath = data.getDatabasePath();
51cdf0e10cSrcweir         data.setDatabasePath(null);
52cdf0e10cSrcweir 
53cdf0e10cSrcweir         // Determining the database path (only for user installation).
54cdf0e10cSrcweir         // Important if a user installation is done into an existing
55cdf0e10cSrcweir         // user installation -> this methode can only be called after
56cdf0e10cSrcweir         // determination of installation directory.
57cdf0e10cSrcweir 
58cdf0e10cSrcweir         if ( data.isUserInstallation() ) {
59cdf0e10cSrcweir             String databasePath = helper.getSolarisDatabasePath(data); // the file does not need to exist!
60cdf0e10cSrcweir             data.setDatabasePath(databasePath);
61cdf0e10cSrcweir 
62cdf0e10cSrcweir             // If this is a new path to the database, then this database was
63cdf0e10cSrcweir             // not analyzed before (when going back in installation wizard)
64cdf0e10cSrcweir             if ( ! databasePath.equals(oldDatabasePath) ) {
65cdf0e10cSrcweir                 data.setDatabaseAnalyzed(false);
66cdf0e10cSrcweir                 data.setDatabaseQueried(false);
67cdf0e10cSrcweir             }
68cdf0e10cSrcweir         }
69cdf0e10cSrcweir     }
70cdf0e10cSrcweir 
preInstallationOngoing()71cdf0e10cSrcweir     public void preInstallationOngoing() {
72cdf0e10cSrcweir         // an admin file has to be created for user and for root installation
73cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
74cdf0e10cSrcweir 
75cdf0e10cSrcweir         if ( data.isInstallationMode()) {
76cdf0e10cSrcweir             boolean makeRelocatableAdminFile = true;
77cdf0e10cSrcweir             boolean removeDepends = true;
78cdf0e10cSrcweir             helper.createAdminFile(makeRelocatableAdminFile, removeDepends);
79cdf0e10cSrcweir             helper.createAdminFile(makeRelocatableAdminFile, ! removeDepends);
80cdf0e10cSrcweir             helper.createAdminFile(! makeRelocatableAdminFile, removeDepends);
81cdf0e10cSrcweir             helper.createAdminFile(! makeRelocatableAdminFile, ! removeDepends);
82cdf0e10cSrcweir         }
83cdf0e10cSrcweir 
84cdf0e10cSrcweir         if ( data.isUserInstallation() ) {
85cdf0e10cSrcweir             // LD_PRELOAD_32 needs to be set for user installation
86cdf0e10cSrcweir             helper.setEnvironmentForUserInstall();
87cdf0e10cSrcweir             // Solaris 10 needs to have local temp directory for pkgadd
88cdf0e10cSrcweir             // createLocalTempDir();
89cdf0e10cSrcweir         }
90cdf0e10cSrcweir     }
91cdf0e10cSrcweir 
postInstallationOngoing()92cdf0e10cSrcweir     public void postInstallationOngoing() {
93cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
94cdf0e10cSrcweir         // if ( data.isUserInstallation() ) {
95cdf0e10cSrcweir             // Solaris 10 needs to have local temp directory for pkgadd
96cdf0e10cSrcweir             // removeLocalTempDir();
97cdf0e10cSrcweir         // }
98cdf0e10cSrcweir 
99cdf0e10cSrcweir         helper.removeSolarisLockFile();
100cdf0e10cSrcweir     }
101cdf0e10cSrcweir 
postInstall(PackageDescription packageData)102cdf0e10cSrcweir     public void postInstall(PackageDescription packageData) {
103cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
104cdf0e10cSrcweir 
105cdf0e10cSrcweir         if ( ! data.isAbortedInstallation() ) {
106cdf0e10cSrcweir             data.setStillRunning(true);
107cdf0e10cSrcweir             // Collecting information about installed packages
108cdf0e10cSrcweir             // Creating a list containing pairs of package names and rpm file names
109cdf0e10cSrcweir             // that has to be used during uninstallation.
110cdf0e10cSrcweir             helper.saveModulesLogFile(data);
111cdf0e10cSrcweir             data.setStillRunning(false);
112cdf0e10cSrcweir         }
113cdf0e10cSrcweir     }
114cdf0e10cSrcweir 
postUninstallationOngoing()115cdf0e10cSrcweir     public void postUninstallationOngoing() {
116cdf0e10cSrcweir         helper.removeSolarisLockFile();
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir 
getChangeInstallDir(PackageDescription packageData)119cdf0e10cSrcweir     public String getChangeInstallDir(PackageDescription packageData) {
120cdf0e10cSrcweir         String installDir = null;
121cdf0e10cSrcweir         String packageName = packageData.getPackageName();
122cdf0e10cSrcweir 
123cdf0e10cSrcweir         if ( packageName != null ) {
124cdf0e10cSrcweir             String pkgCommand = "pkginfo -r" + " " + packageName;
125cdf0e10cSrcweir             String[] pkgCommandArray = new String[3];
126cdf0e10cSrcweir             pkgCommandArray[0] = "pkginfo";
127cdf0e10cSrcweir             pkgCommandArray[1] = "-r";
128cdf0e10cSrcweir             pkgCommandArray[2] = packageName;
129cdf0e10cSrcweir             Vector returnVector = new Vector();
130cdf0e10cSrcweir             Vector returnErrorVector = new Vector();
131cdf0e10cSrcweir             int returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector);
132cdf0e10cSrcweir             String returnString = (String) returnVector.get(0);
133cdf0e10cSrcweir 
134cdf0e10cSrcweir             String log = pkgCommand + "<br><b>Returns: " + returnString + "</b><br>";
135cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir             installDir = returnString;
138cdf0e10cSrcweir         }
139cdf0e10cSrcweir 
140cdf0e10cSrcweir         return installDir;
141cdf0e10cSrcweir     }
142cdf0e10cSrcweir 
installPackage(PackageDescription packageData)143cdf0e10cSrcweir     public void installPackage(PackageDescription packageData) {
144cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
145cdf0e10cSrcweir 
146cdf0e10cSrcweir         String log = "<br><b>Package: " + packageData.getName() + "</b>";
147cdf0e10cSrcweir         LogManager.addCommandsLogfileComment(log);
148cdf0e10cSrcweir 
149cdf0e10cSrcweir         String rootDir = data.getInstallDir();
150cdf0e10cSrcweir         String packagePath = data.getPackagePath();
151cdf0e10cSrcweir 
152cdf0e10cSrcweir         if (( packageData.getPkgSubdir() != null ) && ( ! packageData.getPkgSubdir().equals("") )) {
153cdf0e10cSrcweir             File completePackageFile = new File(packagePath, packageData.getPkgSubdir());
154cdf0e10cSrcweir             packagePath = completePackageFile.getPath();
155cdf0e10cSrcweir         }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir         String packageName = packageData.getPackageName();
158cdf0e10cSrcweir 
159cdf0e10cSrcweir         if (( packageName.equals("")) || ( packageName == null )) {
160cdf0e10cSrcweir             log = "<b>No package name specified. Nothing to do</b>";
161cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
162cdf0e10cSrcweir         } else {
163cdf0e10cSrcweir             log = "<b>Package Name: " + packageName + "</b>";
164cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
165cdf0e10cSrcweir 
166cdf0e10cSrcweir             File completePackage = new File(packagePath, packageName);
167cdf0e10cSrcweir 
168cdf0e10cSrcweir             if ( completePackage.exists() ) {
169cdf0e10cSrcweir 
170cdf0e10cSrcweir                 String pkgCommand = "";
171cdf0e10cSrcweir                 String[] pkgCommandArray;
172cdf0e10cSrcweir                 String adminFileName = "";
173cdf0e10cSrcweir                 Vector returnVector = new Vector();
174cdf0e10cSrcweir                 Vector returnErrorVector = new Vector();
175cdf0e10cSrcweir                 int returnValue;
176cdf0e10cSrcweir 
177cdf0e10cSrcweir                 // is package relocatable or not?
178cdf0e10cSrcweir                 if ( packageData.isRelocatable() ) {
179cdf0e10cSrcweir                     adminFileName = data.getAdminFileNameReloc();
180cdf0e10cSrcweir                 } else {
181cdf0e10cSrcweir                     adminFileName = data.getAdminFileNameNoReloc();
182cdf0e10cSrcweir                 }
183cdf0e10cSrcweir 
184cdf0e10cSrcweir                 if ( data.isUserInstallation() ) {
185cdf0e10cSrcweir                     HashMap env = data.getShellEnvironment();
186cdf0e10cSrcweir                     String[] envStringArray = Converter.convertHashmapToStringArray(env);
187cdf0e10cSrcweir                     pkgCommand = "/usr/sbin/pkgadd -n -d " + packagePath + " -R " +
188cdf0e10cSrcweir                             rootDir + " -a " + adminFileName + " " + packageName;
189cdf0e10cSrcweir                     pkgCommandArray = new String[9];
190cdf0e10cSrcweir                     pkgCommandArray[0] = "/usr/sbin/pkgadd";
191cdf0e10cSrcweir                     pkgCommandArray[1] = "-n";
192cdf0e10cSrcweir                     pkgCommandArray[2] = "-d";
193cdf0e10cSrcweir                     pkgCommandArray[3] = packagePath;
194cdf0e10cSrcweir                     pkgCommandArray[4] = "-R";
195cdf0e10cSrcweir                     pkgCommandArray[5] = rootDir;
196cdf0e10cSrcweir                     pkgCommandArray[6] = "-a";
197cdf0e10cSrcweir                     pkgCommandArray[7] = adminFileName;
198cdf0e10cSrcweir                     pkgCommandArray[8] = packageName;
199cdf0e10cSrcweir                     returnValue = ExecuteProcess.executeProcessReturnVectorEnv(pkgCommandArray, envStringArray, returnVector, returnErrorVector);
200cdf0e10cSrcweir                 } else {
201cdf0e10cSrcweir                     // shifting of the installation root (-R) is only wanted for user installation
202cdf0e10cSrcweir                     pkgCommand = "/usr/sbin/pkgadd -n -d " + packagePath +
203cdf0e10cSrcweir                             " -a " + adminFileName + " " + packageName;
204cdf0e10cSrcweir                     pkgCommandArray = new String[7];
205cdf0e10cSrcweir                     pkgCommandArray[0] = "/usr/sbin/pkgadd";
206cdf0e10cSrcweir                     pkgCommandArray[1] = "-n";
207cdf0e10cSrcweir                     pkgCommandArray[2] = "-d";
208cdf0e10cSrcweir                     pkgCommandArray[3] = packagePath;
209cdf0e10cSrcweir                     pkgCommandArray[4] = "-a";
210cdf0e10cSrcweir                     pkgCommandArray[5] = adminFileName;
211cdf0e10cSrcweir                     pkgCommandArray[6] = packageName;
212cdf0e10cSrcweir                     returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector);
213cdf0e10cSrcweir                 }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir                 if ( returnValue == 0 ) {
216cdf0e10cSrcweir                     log = pkgCommand + "<br><b>Returns: " + returnValue + " Successful installation</b><br>";
217cdf0e10cSrcweir                     LogManager.addCommandsLogfileComment(log);
218cdf0e10cSrcweir                 } else {    // an error occured during installation
219cdf0e10cSrcweir                     if ( packageData.installCanFail() ) {
220cdf0e10cSrcweir                         log = pkgCommand + "<br><b>Returns: " + returnValue + " Problem during installation. Can be ignored.</b><br>";
221cdf0e10cSrcweir                         LogManager.addCommandsLogfileComment(log);
222cdf0e10cSrcweir                     } else {
223cdf0e10cSrcweir                         log = pkgCommand + "<br><b>Returns: " + returnValue + " Error during installation</b><br>";
224cdf0e10cSrcweir                         LogManager.addCommandsLogfileComment(log);
225cdf0e10cSrcweir                         System.err.println("Error during installation:");
226cdf0e10cSrcweir                         for (int i = 0; i < returnErrorVector.size(); i++) {
227cdf0e10cSrcweir                             LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i));
228cdf0e10cSrcweir                             System.err.println(returnErrorVector.get(i));
229cdf0e10cSrcweir                         }
230cdf0e10cSrcweir                         data.setIsErrorInstallation(true);
231cdf0e10cSrcweir                     }
232cdf0e10cSrcweir                 }
233cdf0e10cSrcweir             }
234cdf0e10cSrcweir             else {
235cdf0e10cSrcweir                 log = "<b>Error: Did not find package " + packageName + "</b><br>";
236cdf0e10cSrcweir                 System.err.println(log);
237cdf0e10cSrcweir                 String message = ResourceManager.getString("String_File_Not_Found") + ": " + packageName;
238cdf0e10cSrcweir                 String title = ResourceManager.getString("String_Error");
239cdf0e10cSrcweir                 Informer.showErrorMessage(message, title);
240cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
241cdf0e10cSrcweir                 data.setIsErrorInstallation(true);
242cdf0e10cSrcweir             }
243cdf0e10cSrcweir         }
244cdf0e10cSrcweir     }
245cdf0e10cSrcweir 
uninstallPackage(PackageDescription packageData)246cdf0e10cSrcweir     public void uninstallPackage(PackageDescription packageData) {
247cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
248cdf0e10cSrcweir 
249cdf0e10cSrcweir         String log = "<br><b>Package: " + packageData.getName() + "</b>";
250cdf0e10cSrcweir         LogManager.addCommandsLogfileComment(log);
251cdf0e10cSrcweir 
252cdf0e10cSrcweir         String installRoot = data.getInstallDir();
253cdf0e10cSrcweir         String packageName = packageData.getPackageName();
254cdf0e10cSrcweir         String adminFileName = "";
255cdf0e10cSrcweir 
256cdf0e10cSrcweir         // is package relocatable or not?
257cdf0e10cSrcweir         if ( packageData.isRelocatable() ) {
258cdf0e10cSrcweir         	if ( packageData.ignoreDependsForUninstall() ) {    // Force removal of older packages during installation
259cdf0e10cSrcweir                 adminFileName = data.getAdminFileNameRelocNoDepends();
260cdf0e10cSrcweir             } else {
261cdf0e10cSrcweir                 adminFileName = data.getAdminFileNameReloc();
262cdf0e10cSrcweir             }
263cdf0e10cSrcweir         } else {
264cdf0e10cSrcweir         	if ( packageData.ignoreDependsForUninstall() ) {    // Force removal of older packages during installation
265cdf0e10cSrcweir                 adminFileName = data.getAdminFileNameNoRelocNoDepends();
266cdf0e10cSrcweir             } else {
267cdf0e10cSrcweir                 adminFileName = data.getAdminFileNameNoReloc();
268cdf0e10cSrcweir             }
269cdf0e10cSrcweir         }
270cdf0e10cSrcweir 
271cdf0e10cSrcweir         String pkgCommand = "";
272cdf0e10cSrcweir         String[] pkgCommandArray;
273cdf0e10cSrcweir         int returnValue;
274cdf0e10cSrcweir         Vector returnVector = new Vector();
275cdf0e10cSrcweir         Vector returnErrorVector = new Vector();
276cdf0e10cSrcweir 
277cdf0e10cSrcweir         if ( data.isUserInstallation() ) {
278cdf0e10cSrcweir             pkgCommand = "/usr/sbin/pkgrm -n " + "-R " + installRoot + " -a " + adminFileName + " " + packageName;
279cdf0e10cSrcweir             pkgCommandArray = new String[7];
280cdf0e10cSrcweir             pkgCommandArray[0] = "/usr/sbin/pkgrm";
281cdf0e10cSrcweir             pkgCommandArray[1] = "-n";
282cdf0e10cSrcweir             pkgCommandArray[2] = "-R";
283cdf0e10cSrcweir             pkgCommandArray[3] = installRoot;
284cdf0e10cSrcweir             pkgCommandArray[4] = "-a";
285cdf0e10cSrcweir             pkgCommandArray[5] = adminFileName;
286cdf0e10cSrcweir             pkgCommandArray[6] = packageName;
287cdf0e10cSrcweir             HashMap env = data.getShellEnvironment();
288cdf0e10cSrcweir             String[] envStringArray = Converter.convertHashmapToStringArray(env);
289cdf0e10cSrcweir             // SystemManager.dumpStringArray(envStringArray);
290cdf0e10cSrcweir             returnValue = ExecuteProcess.executeProcessReturnVectorEnv(pkgCommandArray, envStringArray, returnVector, returnErrorVector);
291cdf0e10cSrcweir         } else {
292cdf0e10cSrcweir             // shifting of the installation root (-R) is only wanted for user installation
293cdf0e10cSrcweir             pkgCommand = "/usr/sbin/pkgrm -n " + "-a " + adminFileName + " " + packageName;
294cdf0e10cSrcweir             pkgCommandArray = new String[5];
295cdf0e10cSrcweir             pkgCommandArray[0] = "/usr/sbin/pkgrm";
296cdf0e10cSrcweir             pkgCommandArray[1] = "-n";
297cdf0e10cSrcweir             pkgCommandArray[2] = "-a";
298cdf0e10cSrcweir             pkgCommandArray[3] = adminFileName;
299cdf0e10cSrcweir             pkgCommandArray[4] = packageName;
300cdf0e10cSrcweir             returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector);
301cdf0e10cSrcweir         }
302cdf0e10cSrcweir 
303cdf0e10cSrcweir         if ( returnValue == 0 ) {
304cdf0e10cSrcweir             log = pkgCommand + "<br><b>Returns: " + returnValue + " Successful uninstallation</b><br>";
305cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
306cdf0e10cSrcweir         } else {    // an error occured during installation
307cdf0e10cSrcweir             if ( packageData.uninstallCanFail() ) {
308cdf0e10cSrcweir                 log = pkgCommand + "<br><b>Returns: " + returnValue + " Problem during uninstallation. Can be ignored.</b><br>";
309cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
310cdf0e10cSrcweir             } else {
311cdf0e10cSrcweir                 log = pkgCommand + "<br><b>Returns: " + returnValue + " Error during uninstallation</b><br>";
312cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
313cdf0e10cSrcweir                 System.err.println("Error during uninstallation:");
314cdf0e10cSrcweir                 for (int i = 0; i < returnErrorVector.size(); i++) {
315cdf0e10cSrcweir                     LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i));
316cdf0e10cSrcweir                     System.err.println(returnErrorVector.get(i));
317cdf0e10cSrcweir                 }
318cdf0e10cSrcweir                 data.setIsErrorInstallation(true);
319cdf0e10cSrcweir             }
320cdf0e10cSrcweir         }
321cdf0e10cSrcweir     }
322cdf0e10cSrcweir 
isPackageNameInstalledClassic(String packageName, InstallData installData)323cdf0e10cSrcweir     public boolean isPackageNameInstalledClassic(String packageName, InstallData installData) {
324cdf0e10cSrcweir         String rootString = "";
325cdf0e10cSrcweir         String rootPath = null;
326cdf0e10cSrcweir         String pkgCommand;
327cdf0e10cSrcweir         String[] pkgCommandArray;
328cdf0e10cSrcweir         boolean useLocalRoot = false;
329cdf0e10cSrcweir         boolean isInstalled = false;
330cdf0e10cSrcweir 
331cdf0e10cSrcweir         if (installData.isUserInstallation()) {
332cdf0e10cSrcweir             rootPath = installData.getDatabasePath();
333cdf0e10cSrcweir         }
334cdf0e10cSrcweir 
335cdf0e10cSrcweir         if (( rootPath != null ) && (! rootPath.equals("null"))) {
336cdf0e10cSrcweir             rootString = "-R";
337cdf0e10cSrcweir             useLocalRoot = true;
338cdf0e10cSrcweir         }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir         if (useLocalRoot) {
341cdf0e10cSrcweir             pkgCommand = "pkginfo " + rootString + " " + rootPath + " " + packageName;
342cdf0e10cSrcweir             pkgCommandArray = new String[4];
343cdf0e10cSrcweir             pkgCommandArray[0] = "pkginfo";
344cdf0e10cSrcweir             pkgCommandArray[1] = rootString;
345cdf0e10cSrcweir             pkgCommandArray[2] = rootPath;
346cdf0e10cSrcweir             pkgCommandArray[3] = packageName;
347cdf0e10cSrcweir         } else {
348cdf0e10cSrcweir             pkgCommand = "pkginfo " + packageName;
349cdf0e10cSrcweir             pkgCommandArray = new String[2];
350cdf0e10cSrcweir             pkgCommandArray[0] = "pkginfo";
351cdf0e10cSrcweir             pkgCommandArray[1] = packageName;
352cdf0e10cSrcweir         }
353cdf0e10cSrcweir 
354cdf0e10cSrcweir         // Vector returnVector = new Vector();
355cdf0e10cSrcweir         int returnValue = ExecuteProcess.executeProcessReturnValue(pkgCommandArray);
356cdf0e10cSrcweir 
357cdf0e10cSrcweir         if ( returnValue == 0 ) {
358cdf0e10cSrcweir             isInstalled = true;
359cdf0e10cSrcweir             String log = pkgCommand + "<br><b>Returns: " + returnValue + " Package is installed" + "</b><br>";
360cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
361cdf0e10cSrcweir         } else {
362cdf0e10cSrcweir             String log = pkgCommand + "<br><b>Returns: " + returnValue + " Package is not installed" + "</b><br>";
363cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
364cdf0e10cSrcweir         }
365cdf0e10cSrcweir 
366cdf0e10cSrcweir         return isInstalled;
367cdf0e10cSrcweir     }
368cdf0e10cSrcweir 
queryAllDatabase(InstallData installData)369cdf0e10cSrcweir     private void queryAllDatabase(InstallData installData) {
370cdf0e10cSrcweir 
371cdf0e10cSrcweir         String rootString = "";
372cdf0e10cSrcweir         String rootPath = null;
373cdf0e10cSrcweir         String pkgCommand;
374cdf0e10cSrcweir         String[] pkgCommandArray;
375cdf0e10cSrcweir         boolean useLocalRoot = false;
376cdf0e10cSrcweir         HashMap map = new HashMap();;
377cdf0e10cSrcweir 
378cdf0e10cSrcweir         if (installData.isUserInstallation()) {
379cdf0e10cSrcweir             rootPath = installData.getDatabasePath();
380cdf0e10cSrcweir         }
381cdf0e10cSrcweir 
382cdf0e10cSrcweir         if (( rootPath != null ) && (! rootPath.equals("null"))) {
383cdf0e10cSrcweir             rootString = "-R";
384cdf0e10cSrcweir             useLocalRoot = true;
385cdf0e10cSrcweir         }
386cdf0e10cSrcweir 
387cdf0e10cSrcweir         if (useLocalRoot) {
388cdf0e10cSrcweir             pkgCommand = "pkginfo " + rootString + " " + rootPath;
389cdf0e10cSrcweir             pkgCommandArray = new String[4];
390cdf0e10cSrcweir             pkgCommandArray[0] = "pkginfo";
391cdf0e10cSrcweir             pkgCommandArray[1] = "-x";
392cdf0e10cSrcweir             pkgCommandArray[2] = rootString;
393cdf0e10cSrcweir             pkgCommandArray[3] = rootPath;
394cdf0e10cSrcweir         } else {
395cdf0e10cSrcweir             pkgCommand = "pkginfo -x";
396cdf0e10cSrcweir             pkgCommandArray = new String[2];
397cdf0e10cSrcweir             pkgCommandArray[0] = "pkginfo";
398cdf0e10cSrcweir             pkgCommandArray[1] = "-x";
399cdf0e10cSrcweir         }
400cdf0e10cSrcweir 
401cdf0e10cSrcweir         Vector returnVector = new Vector();
402cdf0e10cSrcweir         Vector returnErrorVector = new Vector();
403cdf0e10cSrcweir         int returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector);
404cdf0e10cSrcweir 
405cdf0e10cSrcweir         String log = pkgCommand + "<br><b>Returns: " + returnValue + "</b><br>";
406cdf0e10cSrcweir         LogManager.addCommandsLogfileComment(log);
407cdf0e10cSrcweir         String value = "1";
408cdf0e10cSrcweir 
409cdf0e10cSrcweir         if ( ! returnVector.isEmpty()) {
410cdf0e10cSrcweir             for (int i = 0; i < returnVector.size(); i++) {
411cdf0e10cSrcweir                 String onePackage = (String)returnVector.get(i);
412cdf0e10cSrcweir                 int pos1 = onePackage.indexOf(" ");
413cdf0e10cSrcweir                 String key = onePackage.substring(0, pos1);
414cdf0e10cSrcweir                 map.put(key, value);
415cdf0e10cSrcweir             }
416cdf0e10cSrcweir         }
417cdf0e10cSrcweir 
418cdf0e10cSrcweir         installData.setDatabaseQueried(true);
419cdf0e10cSrcweir         installData.setDatabaseMap(map);
420cdf0e10cSrcweir 
421cdf0e10cSrcweir     }
422cdf0e10cSrcweir 
isPackageNameInstalled(String packageName, InstallData installData)423cdf0e10cSrcweir     public boolean isPackageNameInstalled(String packageName, InstallData installData) {
424cdf0e10cSrcweir 
425cdf0e10cSrcweir         boolean isInstalled = false;
426cdf0e10cSrcweir 
427cdf0e10cSrcweir         HashMap map = null;
428cdf0e10cSrcweir         if ( ! installData.databaseQueried() ) {
429cdf0e10cSrcweir             queryAllDatabase(installData);
430cdf0e10cSrcweir         }
431cdf0e10cSrcweir 
432cdf0e10cSrcweir         map = installData.getDatabaseMap();
433cdf0e10cSrcweir 
434cdf0e10cSrcweir         if ( map.containsKey(packageName)) {
435cdf0e10cSrcweir             isInstalled = true;
436cdf0e10cSrcweir         }
437cdf0e10cSrcweir 
438cdf0e10cSrcweir         return isInstalled;
439cdf0e10cSrcweir     }
440cdf0e10cSrcweir 
isPackageInstalled(PackageDescription packageData, InstallData installData)441cdf0e10cSrcweir     public boolean isPackageInstalled(PackageDescription packageData, InstallData installData) {
442cdf0e10cSrcweir         boolean isInstalled = false;
443cdf0e10cSrcweir 
444cdf0e10cSrcweir         String packageName = packageData.getPackageName();
445cdf0e10cSrcweir 
446cdf0e10cSrcweir         if ( packageName.equals("")) {
447cdf0e10cSrcweir             packageName = null;
448cdf0e10cSrcweir         }
449cdf0e10cSrcweir 
450cdf0e10cSrcweir         if ( packageName != null ) {
451cdf0e10cSrcweir         	isInstalled = isPackageNameInstalled(packageName, installData);
452cdf0e10cSrcweir         }
453cdf0e10cSrcweir 
454cdf0e10cSrcweir         return isInstalled;
455cdf0e10cSrcweir     }
456cdf0e10cSrcweir 
isInstallSetPackageOlder(PackageDescription packageData, InstallData installData)457cdf0e10cSrcweir     public boolean isInstallSetPackageOlder(PackageDescription packageData, InstallData installData) {
458cdf0e10cSrcweir         boolean installSetPackageIsOlder = false;
459cdf0e10cSrcweir         boolean checkIfInstalledIsOlder = false;
460cdf0e10cSrcweir         installSetPackageIsOlder = findOlderPackage(packageData, installData, checkIfInstalledIsOlder);
461cdf0e10cSrcweir         return installSetPackageIsOlder;
462cdf0e10cSrcweir     }
463cdf0e10cSrcweir 
isInstalledPackageOlder(PackageDescription packageData, InstallData installData)464cdf0e10cSrcweir     public boolean isInstalledPackageOlder(PackageDescription packageData, InstallData installData) {
465cdf0e10cSrcweir         boolean installedPackageIsOlder = false;
466cdf0e10cSrcweir         boolean checkIfInstalledIsOlder = true;
467cdf0e10cSrcweir         installedPackageIsOlder = findOlderPackage(packageData, installData, checkIfInstalledIsOlder);
468cdf0e10cSrcweir         return installedPackageIsOlder;
469cdf0e10cSrcweir     }
470cdf0e10cSrcweir 
findOlderPackage(PackageDescription packageData, InstallData installData, boolean checkIfInstalledIsOlder)471cdf0e10cSrcweir     private boolean findOlderPackage(PackageDescription packageData, InstallData installData, boolean checkIfInstalledIsOlder) {
472cdf0e10cSrcweir 
473cdf0e10cSrcweir         boolean firstPackageIsOlder = false;
474cdf0e10cSrcweir         String packageName = packageData.getPackageName();
475cdf0e10cSrcweir         String log;
476cdf0e10cSrcweir 
477cdf0e10cSrcweir         if ( packageName.equals("")) {
478cdf0e10cSrcweir             packageName = null;
479cdf0e10cSrcweir         }
480cdf0e10cSrcweir 
481cdf0e10cSrcweir         if ( packageName != null ) {
482cdf0e10cSrcweir             String rootString = "";
483cdf0e10cSrcweir             String rootPath = null;
484cdf0e10cSrcweir             String pkgCommand;
485cdf0e10cSrcweir             String[] pkgCommandArray;
486cdf0e10cSrcweir             boolean useLocalRoot = false;
487cdf0e10cSrcweir 
488cdf0e10cSrcweir             if (installData.isUserInstallation()) {
489cdf0e10cSrcweir                 rootPath = installData.getDatabasePath();
490cdf0e10cSrcweir             }
491cdf0e10cSrcweir 
492cdf0e10cSrcweir             if (( rootPath != null ) && (! rootPath.equals("null"))) {
493cdf0e10cSrcweir                 rootString = "-R";
494cdf0e10cSrcweir                 useLocalRoot = true;
495cdf0e10cSrcweir             }
496cdf0e10cSrcweir 
497cdf0e10cSrcweir             if (useLocalRoot) {
498cdf0e10cSrcweir                 // String pkgCommand = "pkginfo -l" + rootString + " " + rootPath + " " + packageName + " | grep VERSION:";
499cdf0e10cSrcweir                 pkgCommand = "pkginfo -x " + rootString + " " + rootPath + " " + packageName;
500cdf0e10cSrcweir                 pkgCommandArray = new String[5];
501cdf0e10cSrcweir                 pkgCommandArray[0] = "pkginfo";
502cdf0e10cSrcweir                 pkgCommandArray[1] = "-x";
503cdf0e10cSrcweir                 pkgCommandArray[2] = rootString;
504cdf0e10cSrcweir                 pkgCommandArray[3] = rootPath;
505cdf0e10cSrcweir                 pkgCommandArray[4] = packageName;
506cdf0e10cSrcweir 
507cdf0e10cSrcweir             } else {
508cdf0e10cSrcweir                 // String pkgCommand = "pkginfo -l" + rootString + " " + rootPath + " " + packageName + " | grep VERSION:";
509cdf0e10cSrcweir                 pkgCommand = "pkginfo -x " + packageName;
510cdf0e10cSrcweir                 pkgCommandArray = new String[3];
511cdf0e10cSrcweir                 pkgCommandArray[0] = "pkginfo";
512cdf0e10cSrcweir                 pkgCommandArray[1] = "-x";
513cdf0e10cSrcweir                 pkgCommandArray[2] = packageName;
514cdf0e10cSrcweir             }
515cdf0e10cSrcweir 
516cdf0e10cSrcweir             Vector returnVector = new Vector();
517cdf0e10cSrcweir             Vector returnErrorVector = new Vector();
518cdf0e10cSrcweir 
519cdf0e10cSrcweir             int returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector);
520cdf0e10cSrcweir 
521cdf0e10cSrcweir             log = pkgCommand + "<br><b>Returns:</b>";
522cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
523cdf0e10cSrcweir             for (int i = 0; i < returnVector.size(); i++) {
524cdf0e10cSrcweir                 log = "<b>" + returnVector.get(i) + "</b>";
525cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
526cdf0e10cSrcweir             }
527cdf0e10cSrcweir 
528cdf0e10cSrcweir             // log = "<br>";
529cdf0e10cSrcweir             // LogManager.addCommandsLogfileComment(log);
530cdf0e10cSrcweir 
531cdf0e10cSrcweir             String installedPackageVersion = helper.getVersionString(returnVector);
532cdf0e10cSrcweir             String newPackageVersion = packageData.getPkgVersion();
533cdf0e10cSrcweir 
534cdf0e10cSrcweir             if ( ! installData.installedProductMinorSet() ) {
535cdf0e10cSrcweir                 int productMinor = helper.getInstalledMinor(installedPackageVersion);
536cdf0e10cSrcweir                 installData.setInstalledProductMinor(productMinor);
537cdf0e10cSrcweir                 installData.setInstalledProductMinorSet(true);
538cdf0e10cSrcweir             }
539cdf0e10cSrcweir 
540cdf0e10cSrcweir             if (( installedPackageVersion != null ) && ( newPackageVersion != null )) {
541cdf0e10cSrcweir             	if ( checkIfInstalledIsOlder ) {
542cdf0e10cSrcweir                     firstPackageIsOlder = helper.comparePackageVersions(installedPackageVersion, newPackageVersion);
543cdf0e10cSrcweir                 } else {
544cdf0e10cSrcweir                     firstPackageIsOlder = helper.comparePackageVersions(newPackageVersion, installedPackageVersion);
545cdf0e10cSrcweir                 }
546cdf0e10cSrcweir             }
547cdf0e10cSrcweir         }
548cdf0e10cSrcweir 
549cdf0e10cSrcweir         if ( checkIfInstalledIsOlder ) {
550cdf0e10cSrcweir             if ( firstPackageIsOlder ) {
551cdf0e10cSrcweir                 log = "<b>-> Installed package is older</b><br>";
552cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
553cdf0e10cSrcweir             } else {
554cdf0e10cSrcweir                 log = "<b>-> Installed package is not older</b><br>";
555cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
556cdf0e10cSrcweir             }
557cdf0e10cSrcweir         } else {
558cdf0e10cSrcweir             if ( firstPackageIsOlder ) {
559cdf0e10cSrcweir                 log = "<b>-> Package in installation set is older</b><br>";
560cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
561cdf0e10cSrcweir             } else {
562cdf0e10cSrcweir                 log = "<b>-> Package in installation set is not older</b><br>";
563cdf0e10cSrcweir                 LogManager.addCommandsLogfileComment(log);
564cdf0e10cSrcweir             }
565cdf0e10cSrcweir         }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir         return firstPackageIsOlder;
568cdf0e10cSrcweir     }
569cdf0e10cSrcweir 
570cdf0e10cSrcweir }
571