Skip to content

Commit 084c0dd

Browse files
committed
JBDS-4007 Need a new check for existing OpenJDK installed as an msi package
Fix implements: 1. Check if OpenJDK MSI package installed, using the same query used by uninstall.ps1. It sets flag openJdkMsi on JdkInstall instance. This flag blocks OpenJDK selection for installation to avoid possible installation errors in case msi cannot update already installed OpenJDK; 2. Disabling for Back ad Next buttons on Confirmation page until detection is finished.
1 parent abb0804 commit 084c0dd

3 files changed

Lines changed: 39 additions & 6 deletions

File tree

browser/model/helpers/util.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Util {
2121
});
2222
}
2323

24-
static executeFile(file, args, outputCode) {
24+
static executeFile(file, args, outputCode=1) {
2525
return new Promise((resolve, reject) => {
2626
child_process.execFile(file, args, (error, stdout, stderr) => {
2727
if (error) {
@@ -37,6 +37,18 @@ class Util {
3737
});
3838
}
3939

40+
static writeFile(key, file, data) {
41+
return new Promise((resolve, reject) => {
42+
fs.writeFile(file, data, (err) => {
43+
if (err) {
44+
reject(err);
45+
} else {
46+
resolve(true);
47+
}
48+
});
49+
});
50+
}
51+
4052
static folderContains(folder, fileNames) {
4153
return new Promise((resolve, reject) => {
4254
fs.readdir(folder, (err, files) => {

browser/model/jdk-install.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ class JdkInstall extends InstallableItem {
2727
this.jdkSha256 = jdkSha256;
2828
this.bundledFile = path.join(this.downloadFolder, this.downloadedFileName);
2929
this.downloadedFile = path.join(this.installerDataSvc.tempDir(), this.downloadedFileName);
30+
this.msiSearchScript = path.join(this.installerDataSvc.tempDir(), 'search-openjdk-msi.ps1');
3031
this.existingVersion = '';
3132
this.minimumVersion = '1.8.0';
3233
this.jdkZipEntryPrefix = prefix;
34+
this.openJdkMsi = false;
3335
//this.addOption('install',this.version,this.installerDataSvc.jdkDir());
3436
//this.addOption('detected', this.minimumVersion, '', true);
3537
}
@@ -59,9 +61,26 @@ class JdkInstall extends InstallableItem {
5961
} else {
6062
command = 'which java';
6163
}
64+
6265
this.addOption('install',this.version,'',true);
63-
Util.executeCommand('java -version', 2)
64-
.then((output) => {
66+
67+
let data = [
68+
"$vbox = Get-WmiObject Win32_Product | where {$_.Name -like '*OpenJDK*'};",
69+
"echo $vbox.IdentifyingNumber"
70+
].join('\r\n');
71+
let args = [
72+
'-ExecutionPolicy',
73+
'ByPass',
74+
'-File',
75+
this.msiSearchScript
76+
];
77+
Util.writeFile(JdkInstall.key(),this.msiSearchScript, data)
78+
.then(() => {
79+
return Util.executeFile('powershell', args);
80+
}).then((output)=>{
81+
this.openJdkMsi = output.length>0;
82+
return Util.executeCommand('java -version', 2);
83+
}).then((output) => {
6584
return new Promise((resolve, reject) => {
6685
let version = versionRegex.exec(output);
6786
if (version && version.length > 1) {
@@ -83,7 +102,8 @@ class JdkInstall extends InstallableItem {
83102
}).then((result) => {
84103
return Util.executeCommand(command, 2);
85104
}).then((output) => {
86-
var locationRegex = /java.home*\s=*\s(.*)[\s\S]/;
105+
var locationRegex = /java\.home*\s=*\s(.*)[\s\S]/;
106+
this.openJdk = output.includes("OpenJDK");
87107
var t = locationRegex.exec(output);
88108
if(t.length > 1) {
89109
this.option['detected'].location = t[1];

browser/pages/confirm/confirm.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@
362362
ng-class="{'dotted-panel':checkboxModel.jdk.hasOption('detected')&&checkboxModel.jdk.selectedOption === 'detected'}">
363363
<!--ng-click="checkboxModel.jdk.changeIsCollapsed()">-->
364364
<div class="checkbox-container verticalLine">
365-
<input type="checkbox" ng-disabled="!checkboxModel.jdk.hasOption('detected') && checkboxModel.jbds.selectedOption === 'install' || checkboxModel.jdk.hasOption('detected') && !checkboxModel.jdk.option.detected.valid && checkboxModel.jbds.selectedOption === 'install'" ng-model="checkboxModel.jdk.selectedOption" aria-label="Toggle ngHide" class="vallign-middle" ng-true-value="'install'" ng-false-value="'detected'">
365+
<input type="checkbox" ng-disabled="!checkboxModel.jdk.hasOption('detected') && checkboxModel.jbds.selectedOption === 'install' || checkboxModel.jdk.hasOption('detected') && !checkboxModel.jdk.option.detected.valid && checkboxModel.jbds.selectedOption === 'install' || checkboxModel.jdk.hasOption('detected') && checkboxModel.jdk.option.detected.valid && checkboxModel.jdk.openJdkMsi" ng-model="checkboxModel.jdk.selectedOption" aria-label="Toggle ngHide" class="vallign-middle" ng-true-value="'install'" ng-false-value="'detected'">
366366
</div>
367367
<div class="checkbox-container" ng-show="false">
368368
<div id="arrow-jdk" class="arrow" ng-class="{'arrow-down':!checkboxModel.jdk.isCollapsed}" aria-label="Toggle ngHide"></div>
@@ -520,7 +520,8 @@
520520
<button type="button" id="confirm-cancel-btn" class="cancel-btn footer-btns btn-plain btn-med-size btn btn-lg pull-left" form="confirmForm"
521521
ng-click="confCtrl.exit()">Cancel</button>
522522
<button type="button" id="confirm-back-btn" class="back-btn-spacer footer-btns btn-plain btn-med-size btn btn-lg" form="confirmForm"
523+
ng-disabled="confCtrl.isDisabled"
523524
ng-click="confCtrl.back()">Back</button>
524525
<button type="submit" id="confirm-install-btn" class="go-btn footer-btns btn btn-primary btn-lg" form="confirmForm"
525-
ng-disabled="!confCtrl.isConfigurationValid()" autofocus>Download & Install</button>
526+
ng-disabled="!confCtrl.isConfigurationValid() || confCtrl.isDisabled" autofocus>Download & Install</button>
526527
</footer>

0 commit comments

Comments
 (0)