xref: /AOO41X/main/javainstaller2/src/JavaSetup/org/openoffice/setup/InstallerHelper/SolarisHelper.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.InstallerHelper;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import org.openoffice.setup.InstallData;
27cdf0e10cSrcweir import org.openoffice.setup.ResourceManager;
28cdf0e10cSrcweir import org.openoffice.setup.SetupData.PackageDescription;
29cdf0e10cSrcweir import org.openoffice.setup.Util.Controller;
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 SolarisHelper {
40cdf0e10cSrcweir 
SolarisHelper()41cdf0e10cSrcweir     public SolarisHelper() {
42cdf0e10cSrcweir     }
43cdf0e10cSrcweir 
createLocalTempDir()44cdf0e10cSrcweir     private void createLocalTempDir() {
45cdf0e10cSrcweir         String mktempString = "/usr/bin/mktemp";
46cdf0e10cSrcweir         File mktemp = new File(mktempString);
47cdf0e10cSrcweir         if ( mktemp.exists() ) {
48cdf0e10cSrcweir             // this is Solaris 10
49cdf0e10cSrcweir             LogManager.setCommandsHeaderLine("Preparing Solaris 10 user installation");
50cdf0e10cSrcweir             InstallData data = InstallData.getInstance();
51cdf0e10cSrcweir             String mktempCommand = mktempString + " -d";
52cdf0e10cSrcweir             String[] mktempCommandArray = new String[2];
53cdf0e10cSrcweir             mktempCommandArray[0] = mktempString;
54cdf0e10cSrcweir             mktempCommandArray[1] = "-d";
55cdf0e10cSrcweir             Vector returnVector = new Vector();
56cdf0e10cSrcweir             Vector returnErrorVector = new Vector();
57cdf0e10cSrcweir             int returnValue = ExecuteProcess.executeProcessReturnVector(mktempCommandArray, returnVector, returnErrorVector);
58cdf0e10cSrcweir             String uniqueLocalDir = (String) returnVector.get(0);
59cdf0e10cSrcweir 
60cdf0e10cSrcweir             data.setLocalTempPath(uniqueLocalDir);
61cdf0e10cSrcweir 
62cdf0e10cSrcweir             String log = mktempCommand + "<br><b>Returns: " + uniqueLocalDir + "</b><br>";
63cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
64cdf0e10cSrcweir 
65cdf0e10cSrcweir             String installRoot = data.getInstallDir();
66cdf0e10cSrcweir             File installRootTemp = new File(installRoot, "tmp");
67cdf0e10cSrcweir 
68cdf0e10cSrcweir             if ( installRootTemp.exists() ) {
69cdf0e10cSrcweir                 SystemManager.removeDirectory(installRootTemp);
70cdf0e10cSrcweir             }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir             String linkCommand = "ln -s " + uniqueLocalDir + " " + installRootTemp.getPath();
73cdf0e10cSrcweir             String[] linkCommandArray = new String[4];
74cdf0e10cSrcweir             linkCommandArray[0] = "ln";
75cdf0e10cSrcweir             linkCommandArray[1] = "-s";
76cdf0e10cSrcweir             linkCommandArray[2] = uniqueLocalDir;
77cdf0e10cSrcweir             linkCommandArray[3] = installRootTemp.getPath();
78cdf0e10cSrcweir 
79cdf0e10cSrcweir             // Vector returnVector = new Vector();
80cdf0e10cSrcweir             returnValue = ExecuteProcess.executeProcessReturnValue(linkCommandArray);
81cdf0e10cSrcweir 
82cdf0e10cSrcweir             log = linkCommand + "<br><b>Returns: " + returnValue + "</b><br>";
83cdf0e10cSrcweir             LogManager.addCommandsLogfileComment(log);
84cdf0e10cSrcweir         }
85cdf0e10cSrcweir     }
86cdf0e10cSrcweir 
removeLocalTempDir()87cdf0e10cSrcweir     private void removeLocalTempDir() {
88cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
89cdf0e10cSrcweir 
90cdf0e10cSrcweir         if ( data.getLocalTempPath() != null ) {
91cdf0e10cSrcweir             File installRootTemp = new File(data.getInstallDir(), "tmp");
92cdf0e10cSrcweir             if ( installRootTemp.exists() ) {
93cdf0e10cSrcweir                 installRootTemp.delete(); // removing the link
94cdf0e10cSrcweir                 SystemManager.createDirectory(installRootTemp);
95cdf0e10cSrcweir             }
96cdf0e10cSrcweir 
97cdf0e10cSrcweir             File localTemp = new File(data.getLocalTempPath());
98cdf0e10cSrcweir             if ( localTemp.exists() ) {
99cdf0e10cSrcweir                 SystemManager.removeDirectory(localTemp);
100cdf0e10cSrcweir             }
101cdf0e10cSrcweir         }
102cdf0e10cSrcweir     }
103cdf0e10cSrcweir 
getAdminFileContent(boolean relocatable, boolean rdepends)104cdf0e10cSrcweir     private Vector getAdminFileContent(boolean relocatable, boolean rdepends) {
105cdf0e10cSrcweir 
106cdf0e10cSrcweir         Vector adminFile = new Vector();
107cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
108cdf0e10cSrcweir 
109cdf0e10cSrcweir         // if ( relocatable ) {
110cdf0e10cSrcweir         //     String installDir =  data.getInstallDir();
111cdf0e10cSrcweir         //     // installDir = installDir.replace(" ", "\\ ");
112cdf0e10cSrcweir         //     String baseDirLine = "basedir=" + installDir;
113cdf0e10cSrcweir         //     adminFile.add(baseDirLine);
114cdf0e10cSrcweir         // }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir         String mailLine = "mail=";
117cdf0e10cSrcweir         adminFile.add(mailLine);
118cdf0e10cSrcweir 
119cdf0e10cSrcweir         String conflictLine = "conflict=nochange";
120cdf0e10cSrcweir         if ( data.isUserInstallation() ) { conflictLine = "conflict=nochange"; }
121cdf0e10cSrcweir         adminFile.add(conflictLine);
122cdf0e10cSrcweir 
123cdf0e10cSrcweir         String runlevelLine = "runlevel=nocheck";
124cdf0e10cSrcweir         adminFile.add(runlevelLine);
125cdf0e10cSrcweir 
126cdf0e10cSrcweir         String setuidLine = "setuid=quit";
127cdf0e10cSrcweir         if ( data.isUserInstallation() ) { setuidLine = "setuid=nocheck"; }
128cdf0e10cSrcweir         adminFile.add(setuidLine);
129cdf0e10cSrcweir 
130cdf0e10cSrcweir         String actionLine = "action=nocheck";
131cdf0e10cSrcweir         adminFile.add(actionLine);
132cdf0e10cSrcweir 
133cdf0e10cSrcweir         String partialLine = "partial=quit";
134cdf0e10cSrcweir         if ( data.isUserInstallation() ) { partialLine = "partial=nocheck"; }
135cdf0e10cSrcweir         adminFile.add(partialLine);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir         String instanceLine = "instance=unique";
138cdf0e10cSrcweir         adminFile.add(instanceLine);
139cdf0e10cSrcweir 
140cdf0e10cSrcweir         // String idependLine = "idepend=quit";
141cdf0e10cSrcweir         String idependLine = "idepend=nocheck";
142cdf0e10cSrcweir         // if ( data.isUserInstallation() ) { idependLine = "idepend=nocheck"; }
143cdf0e10cSrcweir         adminFile.add(idependLine);
144cdf0e10cSrcweir 
145cdf0e10cSrcweir         // String rdependLine = "rdepend=nocheck";
146cdf0e10cSrcweir         String rdependLine = "rdepend=quit";
147cdf0e10cSrcweir         if ( ! rdepends ) { rdependLine = "rdepend=nocheck"; }
148cdf0e10cSrcweir         if ( data.isUserInstallation() ) { rdependLine = "rdepend=nocheck"; }
149cdf0e10cSrcweir         adminFile.add(rdependLine);
150cdf0e10cSrcweir 
151cdf0e10cSrcweir         String spaceLine = "space=quit";
152cdf0e10cSrcweir         if ( data.isUserInstallation() ) { spaceLine = "space=nocheck"; }
153cdf0e10cSrcweir         adminFile.add(spaceLine);
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         return adminFile;
156cdf0e10cSrcweir     }
157cdf0e10cSrcweir 
getMainVersion(String version)158cdf0e10cSrcweir     private String getMainVersion (String version) {
159cdf0e10cSrcweir         String mainVersion = null;
160cdf0e10cSrcweir 
161cdf0e10cSrcweir         int pos = version.indexOf(",");
162cdf0e10cSrcweir         if ( pos > -1 ) {
163cdf0e10cSrcweir             mainVersion = version.substring(0, pos);
164cdf0e10cSrcweir         }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir         return mainVersion;
167cdf0e10cSrcweir     }
168cdf0e10cSrcweir 
getPackageRevision(String version)169cdf0e10cSrcweir     private String getPackageRevision(String version) {
170cdf0e10cSrcweir         String revision = null;
171cdf0e10cSrcweir 
172cdf0e10cSrcweir         int pos = version.indexOf("=");
173cdf0e10cSrcweir         if ( pos > -1 ) {
174cdf0e10cSrcweir             revision = version.substring(pos + 1, version.length() );
175cdf0e10cSrcweir         }
176cdf0e10cSrcweir 
177cdf0e10cSrcweir         return revision;
178cdf0e10cSrcweir     }
179cdf0e10cSrcweir 
getVectorOfNumbers(String version)180cdf0e10cSrcweir     private Vector getVectorOfNumbers(String version) {
181cdf0e10cSrcweir         Vector numbers = new Vector();
182cdf0e10cSrcweir         int pos = -1;
183cdf0e10cSrcweir         // getting number from a string in format 2.0.0
184cdf0e10cSrcweir         do {
185cdf0e10cSrcweir             pos = version.indexOf(".");
186cdf0e10cSrcweir             if ( pos > -1 ) {
187cdf0e10cSrcweir                 String number = version.substring(0, pos);
188cdf0e10cSrcweir                 version = version.substring(pos + 1, version.length());
189cdf0e10cSrcweir                 numbers.add(number);
190cdf0e10cSrcweir             }
191cdf0e10cSrcweir         } while ( pos > -1 );
192cdf0e10cSrcweir 
193cdf0e10cSrcweir         numbers.add(version);
194cdf0e10cSrcweir         return numbers;
195cdf0e10cSrcweir     }
196cdf0e10cSrcweir 
getMinimum(int a, int b)197cdf0e10cSrcweir     private int getMinimum(int a, int b) {
198cdf0e10cSrcweir         int minimum;
199cdf0e10cSrcweir 
200cdf0e10cSrcweir         if ( a < b ) {
201cdf0e10cSrcweir              minimum = a;
202cdf0e10cSrcweir         } else {
203cdf0e10cSrcweir             minimum = b;
204cdf0e10cSrcweir         }
205cdf0e10cSrcweir 
206cdf0e10cSrcweir         return minimum;
207cdf0e10cSrcweir     }
208cdf0e10cSrcweir 
compareVersion(String firstVersion, String secondVersion)209cdf0e10cSrcweir     private String compareVersion(String firstVersion, String secondVersion) {
210cdf0e10cSrcweir         // comparing strings with syntax 2.0.0
211cdf0e10cSrcweir         String comparison = "bothPackagesAreEqual";
212cdf0e10cSrcweir         Vector firstVector = getVectorOfNumbers(firstVersion);
213cdf0e10cSrcweir         Vector secondVector = getVectorOfNumbers(secondVersion);
214cdf0e10cSrcweir 
215cdf0e10cSrcweir         int firstLength = firstVector.size();
216cdf0e10cSrcweir         int secondLength = secondVector.size();
217cdf0e10cSrcweir         int minimum = getMinimum(firstLength, secondLength);
218cdf0e10cSrcweir 
219cdf0e10cSrcweir         for (int i = 0; i < minimum; i++) {
220cdf0e10cSrcweir             String firstS = (String)firstVector.get(i);
221cdf0e10cSrcweir             String secondS = (String)secondVector.get(i);
222cdf0e10cSrcweir 
223cdf0e10cSrcweir             int first = Integer.parseInt(firstS);
224cdf0e10cSrcweir             int second_ = Integer.parseInt(secondS);
225cdf0e10cSrcweir 
226cdf0e10cSrcweir             if ( second_ > first ) {
227cdf0e10cSrcweir                 comparison = "firstPackageIsOlder";
228cdf0e10cSrcweir                 break;
229cdf0e10cSrcweir             } else if ( second_ < first ) {
230cdf0e10cSrcweir                 comparison = "secondPackageIsOlder";
231cdf0e10cSrcweir                 break;
232cdf0e10cSrcweir             }
233cdf0e10cSrcweir         }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir         return comparison;
236cdf0e10cSrcweir     }
237cdf0e10cSrcweir 
saveModulesLogFile(InstallData data)238cdf0e10cSrcweir     public void saveModulesLogFile(InstallData data) {
239cdf0e10cSrcweir         if ( data.logModuleStates() ) {
240cdf0e10cSrcweir             Vector logContent = LogManager.getModulesLogFile();
241cdf0e10cSrcweir             File baseDir = new File(data.getInstallDefaultDir(), data.getProductDir());
242cdf0e10cSrcweir             File uninstallDir = new File(baseDir, data.getUninstallDirName());
243cdf0e10cSrcweir             File modulesLogFile = new File(uninstallDir, "moduleSettingsLog.txt");
244cdf0e10cSrcweir             // System.err.println("Saving file: " + modulesLogFile.getPath());
245cdf0e10cSrcweir             SystemManager.saveCharFileVector(modulesLogFile.getPath(), logContent);
246cdf0e10cSrcweir         }
247cdf0e10cSrcweir     }
248cdf0e10cSrcweir 
removeSolarisLockFile()249cdf0e10cSrcweir     public void removeSolarisLockFile() {
250cdf0e10cSrcweir         String lockFileName = "/tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e";
251cdf0e10cSrcweir         File lockFile = new File(lockFileName);
252cdf0e10cSrcweir 
253cdf0e10cSrcweir         if ( lockFile.exists() ) {
254cdf0e10cSrcweir             // System.err.println("Found file: " + lockFileName);
255cdf0e10cSrcweir             boolean deleted = lockFile.delete();
256cdf0e10cSrcweir         }
257cdf0e10cSrcweir     }
258cdf0e10cSrcweir 
getSolarisDatabasePath(InstallData data)259cdf0e10cSrcweir     public String getSolarisDatabasePath(InstallData data) {
260cdf0e10cSrcweir         String databasePath = null;
261cdf0e10cSrcweir         databasePath = data.getInstallDir();
262cdf0e10cSrcweir         return databasePath;
263cdf0e10cSrcweir     }
264cdf0e10cSrcweir 
createAdminFile(boolean relocatable, boolean rdepends)265cdf0e10cSrcweir     public void createAdminFile(boolean relocatable, boolean rdepends) {
266cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
267cdf0e10cSrcweir         Vector removeFiles = data.getRemoveFiles();
268cdf0e10cSrcweir         String adminFileName = "";
269cdf0e10cSrcweir 
270cdf0e10cSrcweir         if ( relocatable ) {
271cdf0e10cSrcweir         	if ( rdepends ) {
272cdf0e10cSrcweir                 adminFileName = "adminFileReloc";
273cdf0e10cSrcweir             } else {
274cdf0e10cSrcweir                 adminFileName = "adminFileRelocNoDepends";
275cdf0e10cSrcweir             }
276cdf0e10cSrcweir         } else {
277cdf0e10cSrcweir         	if ( rdepends ) {
278cdf0e10cSrcweir                 adminFileName = "adminFileNoReloc";
279cdf0e10cSrcweir             } else {
280cdf0e10cSrcweir                 adminFileName = "adminFileNoRelocNoDepends";
281cdf0e10cSrcweir             }
282cdf0e10cSrcweir         }
283cdf0e10cSrcweir 
284cdf0e10cSrcweir         Vector fileContent = getAdminFileContent(relocatable, rdepends);
285cdf0e10cSrcweir         File adminFile = new File(data.getInstallDir(), adminFileName);
286cdf0e10cSrcweir         String completeAdminFileName = adminFile.getPath();
287cdf0e10cSrcweir 
288cdf0e10cSrcweir         if ( relocatable ) {
289cdf0e10cSrcweir         	if ( rdepends ) {
290cdf0e10cSrcweir                 data.setAdminFileNameReloc(completeAdminFileName);
291cdf0e10cSrcweir             } else {
292cdf0e10cSrcweir                 data.setAdminFileNameRelocNoDepends(completeAdminFileName);
293cdf0e10cSrcweir             }
294cdf0e10cSrcweir         } else {
295cdf0e10cSrcweir         	if ( rdepends ) {
296cdf0e10cSrcweir                 data.setAdminFileNameNoReloc(completeAdminFileName);
297cdf0e10cSrcweir             } else {
298cdf0e10cSrcweir                 data.setAdminFileNameNoRelocNoDepends(completeAdminFileName);
299cdf0e10cSrcweir             }
300cdf0e10cSrcweir         }
301cdf0e10cSrcweir 
302cdf0e10cSrcweir         if ( ! adminFile.exists() ) {
303cdf0e10cSrcweir             // only saving, if it did not exist
304cdf0e10cSrcweir             SystemManager.saveCharFileVector(completeAdminFileName, fileContent);
305cdf0e10cSrcweir             // only removing file in aborted installation, if it was created before
306cdf0e10cSrcweir             removeFiles.add(completeAdminFileName);
307cdf0e10cSrcweir         }
308cdf0e10cSrcweir 
309cdf0e10cSrcweir         // File dumpFile = new File(data.getInstallDir(), "dumpFile");
310cdf0e10cSrcweir         // String dumpFileName = dumpFile.getPath();
311cdf0e10cSrcweir         // SystemManager.dumpFile(adminFileName, dumpFileName);
312cdf0e10cSrcweir     }
313cdf0e10cSrcweir 
314cdf0e10cSrcweir     // for user installations an environment hashmap is used
setEnvironmentForUserInstall()315cdf0e10cSrcweir     public void setEnvironmentForUserInstall() {
316cdf0e10cSrcweir         InstallData data = InstallData.getInstance();
317cdf0e10cSrcweir         HashMap env = SystemManager.getEnvironmentHashMap();
318cdf0e10cSrcweir         env.put("LD_PRELOAD_32", data.getGetUidPath());
319cdf0e10cSrcweir         data.setShellEnvironment(env);
320cdf0e10cSrcweir     }
321cdf0e10cSrcweir 
getVersionString(Vector returnVector)322cdf0e10cSrcweir     public String getVersionString(Vector returnVector) {
323cdf0e10cSrcweir         String versionString = null;
324cdf0e10cSrcweir         String versionLine = null;
325cdf0e10cSrcweir 
326cdf0e10cSrcweir         for (int i = 0; i < returnVector.size(); i++) {
327cdf0e10cSrcweir             String line = (String) returnVector.get(i);
328cdf0e10cSrcweir             int pos = line.indexOf("REV=");
329cdf0e10cSrcweir             if ( pos > -1 ) {
330cdf0e10cSrcweir                 versionLine = line;
331cdf0e10cSrcweir                 break;
332cdf0e10cSrcweir             }
333cdf0e10cSrcweir         }
334cdf0e10cSrcweir 
335cdf0e10cSrcweir         if ( versionLine != null ) {
336cdf0e10cSrcweir             versionLine = versionLine.trim();
337cdf0e10cSrcweir             int pos = versionLine.lastIndexOf(" ");
338cdf0e10cSrcweir             versionString = versionLine.substring(pos + 1, versionLine.length());
339cdf0e10cSrcweir         }
340cdf0e10cSrcweir 
341cdf0e10cSrcweir         return versionString;
342cdf0e10cSrcweir     }
343cdf0e10cSrcweir 
getInstalledMinor(String version)344cdf0e10cSrcweir     public int getInstalledMinor(String version) {
345cdf0e10cSrcweir 
346cdf0e10cSrcweir         int minor = 0;
347cdf0e10cSrcweir 
348cdf0e10cSrcweir         int pos = version.indexOf(".");
349cdf0e10cSrcweir         if ( pos > -1 ) {
350cdf0e10cSrcweir             String reduced = version.substring(pos + 1, version.length());
351cdf0e10cSrcweir 
352cdf0e10cSrcweir             pos = reduced.indexOf(".");
353cdf0e10cSrcweir             if ( pos > -1 ) {
354cdf0e10cSrcweir                 reduced = reduced.substring(0, pos);
355cdf0e10cSrcweir                 minor = Integer.parseInt(reduced);
356cdf0e10cSrcweir             }
357cdf0e10cSrcweir         }
358cdf0e10cSrcweir 
359cdf0e10cSrcweir     	return minor;
360cdf0e10cSrcweir     }
361cdf0e10cSrcweir 
comparePackageVersions(String firstPackageVersion, String secondPackageVersion)362cdf0e10cSrcweir     public boolean comparePackageVersions(String firstPackageVersion, String secondPackageVersion) {
363cdf0e10cSrcweir        // Analyzing strings: version, 2.0.0,REV=106.2005.05.26
364cdf0e10cSrcweir 
365cdf0e10cSrcweir         boolean firstPackageIsOlder = false;
366cdf0e10cSrcweir         String comparison = null;
367cdf0e10cSrcweir 
368cdf0e10cSrcweir         String firstPackageMainVersion = getMainVersion(firstPackageVersion); // 2.0.0
369cdf0e10cSrcweir         String secondPackageMainVersion = getMainVersion(secondPackageVersion); // 2.0.0
370cdf0e10cSrcweir 
371cdf0e10cSrcweir         if (( firstPackageMainVersion != null ) && ( secondPackageMainVersion != null )) {
372cdf0e10cSrcweir             comparison = compareVersion(firstPackageMainVersion, secondPackageMainVersion);
373cdf0e10cSrcweir         }
374cdf0e10cSrcweir 
375cdf0e10cSrcweir         if ( comparison.equals("firstPackageIsOlder") ) {
376cdf0e10cSrcweir             firstPackageIsOlder = true;
377cdf0e10cSrcweir         } else if ( comparison.equals("secondPackageIsOlder") ) {
378cdf0e10cSrcweir             firstPackageIsOlder = false;
379cdf0e10cSrcweir         } else if ( comparison.equals("bothPackagesAreEqual") ) {
380cdf0e10cSrcweir             String firstPackageRevision = getPackageRevision(firstPackageVersion); // 106.2005.05.26
381cdf0e10cSrcweir             String secondPackageRevision = getPackageRevision(secondPackageVersion); // 106.2005.05.26
382cdf0e10cSrcweir 
383cdf0e10cSrcweir             if (( firstPackageRevision != null ) && ( secondPackageRevision != null )) {
384cdf0e10cSrcweir                 comparison = compareVersion(firstPackageRevision, secondPackageRevision);
385cdf0e10cSrcweir                 if ( comparison.equals("firstPackageIsOlder") ) {
386cdf0e10cSrcweir                     firstPackageIsOlder = true;
387cdf0e10cSrcweir                 } else {
388cdf0e10cSrcweir                     firstPackageIsOlder = false;
389cdf0e10cSrcweir                 }
390cdf0e10cSrcweir             }
391cdf0e10cSrcweir         }
392cdf0e10cSrcweir 
393cdf0e10cSrcweir         // If version is equal, the patchlevel has to be analyzed
394cdf0e10cSrcweir         // -> pkginfo does not offer this information
395cdf0e10cSrcweir         // -> looking into file <root>/opt/var/sadm/pkg/<package>/pkginfo?
396cdf0e10cSrcweir 
397cdf0e10cSrcweir         return firstPackageIsOlder;
398cdf0e10cSrcweir     }
399cdf0e10cSrcweir 
400cdf0e10cSrcweir }
401