|
1 /* |
|
2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Implementation of JavaVersionBackupUtil |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <javaenvinfo.h> |
|
20 #include "javaversionbackuputil.h" |
|
21 #include "logger.h" |
|
22 |
|
23 |
|
24 #include <s32mem.h> |
|
25 #include <e32base.h> |
|
26 |
|
27 #define KOMJIdentifier 0x20000F3D |
|
28 |
|
29 using namespace Java; |
|
30 using namespace java::backup; |
|
31 |
|
32 // ======== MEMBER FUNCTIONS ======== |
|
33 |
|
34 void JavaVersionBackupUtil::WriteJavaVersionL(RDesWriteStream& aStream) |
|
35 { |
|
36 JELOG2(EBackup); |
|
37 |
|
38 // Get the Java version number from the environment API's |
|
39 |
|
40 TVersion version = Java::JavaEnvInfo::Version(); |
|
41 |
|
42 PLOG3(EBackup, "JavaEnvInfo::Version: major = %d, minor = %d, build = %d", |
|
43 version.iMajor, version.iMinor, version.iBuild); |
|
44 |
|
45 /* Put OMJ Package UID in the front indicating that it is an |
|
46 OMJ environment from which backup was taken. */ |
|
47 aStream.WriteInt32L(KOMJIdentifier); |
|
48 |
|
49 // write the version numbers to the stream |
|
50 aStream.WriteInt8L(version.iMajor); |
|
51 aStream.WriteInt8L(version.iMinor); |
|
52 aStream.WriteInt16L(version.iBuild); |
|
53 |
|
54 ILOG(EBackup, "Version information written to stream"); |
|
55 } |
|
56 |
|
57 TUint JavaVersionBackupUtil::CheckJavaVersionL(RDesReadStream& aStream, TDriveNumber aDrive, TBool versionCheck) |
|
58 { |
|
59 JELOG2(EBackup); |
|
60 TInt32 omjID = 0; |
|
61 if (versionCheck) |
|
62 { |
|
63 // Read the OMJSpecific ID only on first call |
|
64 omjID = aStream.ReadInt32L(); |
|
65 } |
|
66 |
|
67 if (omjID != KOMJIdentifier) |
|
68 { |
|
69 _LIT(KJavaRestoreConverterExe, "javarestoreconverter.exe"); |
|
70 |
|
71 RProcess rProcess; |
|
72 |
|
73 TChar targetDrive; |
|
74 _LIT(KText , ""); |
|
75 TBuf<15> commandLine(KText); |
|
76 RFs session; |
|
77 TInt err = session.Connect(); |
|
78 if (KErrNone != err) |
|
79 { |
|
80 ELOG1(EBackup, |
|
81 "JavaVersionBackupUtil::CheckJavaVersionL: Session Connection failed, error %d", err); |
|
82 CleanupStack::PopAndDestroy(&aStream); |
|
83 User::Leave(err); |
|
84 } |
|
85 |
|
86 err = session.DriveToChar(aDrive, targetDrive); |
|
87 if (KErrNone == err) |
|
88 { |
|
89 _LIT(KDrive, " -drive"); |
|
90 commandLine.Append(KDrive); |
|
91 commandLine.Append(targetDrive); |
|
92 } |
|
93 |
|
94 err = rProcess.Create(KJavaRestoreConverterExe, commandLine); |
|
95 if (KErrNone == err) |
|
96 { |
|
97 TRequestStatus status; |
|
98 rProcess.Logon(status); |
|
99 rProcess.Resume(); |
|
100 |
|
101 // now wait until javarestoreconverter exits |
|
102 User::WaitForRequest(status); |
|
103 if (status.Int() != KErrNone) |
|
104 { |
|
105 // Installing old JRT 1.x MIDlets to JRT 2.x failed |
|
106 err = status.Int(); |
|
107 ELOG1(EBackup, |
|
108 "JavaVersionBackupUtil::CheckJavaVersionL: Installation failed, error %d", err); |
|
109 CleanupStack::PopAndDestroy(&aStream); |
|
110 User::Leave(err); |
|
111 } |
|
112 else |
|
113 { |
|
114 LOG(EBackup,EInfo, |
|
115 "JavaVersionBackupUtil::CheckJavaVersionL: Installing Midlets successful"); |
|
116 } |
|
117 } |
|
118 else |
|
119 { |
|
120 // Cannot even start javarestoreconverter |
|
121 ELOG1(EBackup, |
|
122 "JavaVersionBackupUtil::CheckJavaVersionL: Cannot start Installer, error %d", err); |
|
123 CleanupStack::PopAndDestroy(&aStream); |
|
124 User::Leave(err); |
|
125 } |
|
126 rProcess.Close(); |
|
127 return 1; |
|
128 |
|
129 } |
|
130 else |
|
131 { |
|
132 TInt8 major = aStream.ReadInt8L(); |
|
133 TInt8 minor = aStream.ReadInt8L(); |
|
134 TInt16 build = aStream.ReadInt16L(); |
|
135 |
|
136 TVersion version(major, minor, build); |
|
137 |
|
138 PLOG3(EBackup, "JavaVersion read from Stream: major = %d, minor = %d, build = %d", |
|
139 version.iMajor, version.iMinor, version.iBuild); |
|
140 |
|
141 // read current version and compare it with the read version |
|
142 TVersion curVersion = Java::JavaEnvInfo::Version(); |
|
143 |
|
144 PLOG3(EBackup," Current JavaVersion: major = %d, minor = %d, build = %d", |
|
145 curVersion.iMajor, curVersion.iMinor, curVersion.iBuild); |
|
146 return 0; |
|
147 |
|
148 } |
|
149 } |
|
150 |