root / tags / v1_0_2_Build_914 / install / launcher / izpack-launcher-1.3_linux / src / launcher.cpp @ 12200
History | View | Annotate | Download (18.7 KB)
1 |
/* Copyright (c) 2004 Julien Ponge - All rights reserved.
|
---|---|
2 |
* Some windows 98 debugging done by Dustin Sacks.
|
3 |
*
|
4 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
* of this software and associated documentation files (the "Software"), to
|
6 |
* deal in the Software without restriction, including without limitation the
|
7 |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
8 |
* sell copies of the Software, and to permit persons to whom the Software is
|
9 |
* furnished to do so, subject to the following conditions:
|
10 |
*
|
11 |
* The above copyright notice and this permission notice shall be included in
|
12 |
* all copies or substantial portions of the Software.
|
13 |
*
|
14 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
19 |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
20 |
* IN THE SOFTWARE.
|
21 |
*/
|
22 |
#include <wx/string.h> |
23 |
#include <wx/file.h> |
24 |
#include <wx/filename.h> |
25 |
#include <wx/url.h> |
26 |
|
27 |
#include "launcher.h" |
28 |
|
29 |
#ifdef __UNIX__
|
30 |
#include <stdlib.h> |
31 |
#include <stdio.h> |
32 |
#include <map> |
33 |
#include <list> |
34 |
#endif
|
35 |
|
36 |
|
37 |
/*
|
38 |
* Helper function to run an external program. It takes care of the subtule
|
39 |
* differences between the OS-specific implementations.
|
40 |
*
|
41 |
* @param cmd The command to run.
|
42 |
* @return <code>true</code> in case of a success, <code>false</code> otherwise.
|
43 |
*/
|
44 |
bool run_external(wxString cmd)
|
45 |
{ |
46 |
//int code = wxExecute(cmd);
|
47 |
int code = system(cmd );
|
48 |
return (code == 0); |
49 |
|
50 |
} |
51 |
|
52 |
bool run_external_async(wxString cmd)
|
53 |
{ |
54 |
return (wxExecute(cmd, wxEXEC_ASYNC) != 0); |
55 |
} |
56 |
|
57 |
bool run_external_withOut(wxString cmd,wxArrayString& out, wxArrayString& errors){
|
58 |
//printf(" run_external_withOut **%s**\n",cmd.c_str());
|
59 |
int exitCode =wxExecute(cmd, out,errors);
|
60 |
//printf("\texitCode= %i, out.Count = %i, error.Count= %i\n",exitCode,out.Count(),errors.Count());
|
61 |
|
62 |
/*
|
63 |
int i;
|
64 |
for (i=0;i<out.Count();i++){
|
65 |
printf("\t\tout: %s\n",out[i].c_str());
|
66 |
}
|
67 |
for (i=0;i<errors.Count();i++){
|
68 |
printf("\t\terrors: %s\n",errors[i].c_str());
|
69 |
}
|
70 |
*/
|
71 |
|
72 |
return ( exitCode == 0); |
73 |
} |
74 |
|
75 |
|
76 |
bool string_to_bool(wxString value, bool defaultValue){ |
77 |
bool returnValue = defaultValue;
|
78 |
if (value != wxEmptyString)
|
79 |
if (
|
80 |
value.CmpNoCase("s") == 0 || |
81 |
value.CmpNoCase("si") == 0 || |
82 |
value.CmpNoCase("1") == 0 || |
83 |
value.CmpNoCase("y") == 0 || |
84 |
value.CmpNoCase("yes") == 0 |
85 |
) |
86 |
{ |
87 |
returnValue = true;
|
88 |
} else {
|
89 |
returnValue = false;
|
90 |
} |
91 |
return returnValue;
|
92 |
} |
93 |
|
94 |
|
95 |
void applyFont(wxWindow *dlg, wxFont font){
|
96 |
puts("0");
|
97 |
dlg->SetFont(font); |
98 |
//bool tmp = win->IsKindOf(CLASSINFO(wxFrame));
|
99 |
puts("1");
|
100 |
wxWindowList childs =dlg->GetChildren(); |
101 |
puts("2");
|
102 |
if (childs.GetCount() < 1) { |
103 |
return;
|
104 |
} |
105 |
puts("3");
|
106 |
wxWindowListNode *node = childs.GetFirst(); |
107 |
while (node)
|
108 |
{ |
109 |
puts("4");
|
110 |
wxWindow * win = node->GetData(); |
111 |
try {
|
112 |
applyFont(win,font); |
113 |
} catch ( ... ) {
|
114 |
|
115 |
} |
116 |
puts("5");
|
117 |
node = node->GetNext(); |
118 |
puts("6");
|
119 |
} |
120 |
puts("7");
|
121 |
} |
122 |
|
123 |
/*
|
124 |
class MyWxFileDialog : public wxDialog {
|
125 |
public:
|
126 |
|
127 |
MyWxFileDialog(wxWindow* parent, const wxString& message = "Choose a file", const wxString& defaultDir = "", const wxString& defaultFile = "", const wxString& wildcard = "*.*", long style = 0, const wxPoint& pos = wxDefaultPosition);
|
128 |
|
129 |
virtual ~MyWxFileDialog();
|
130 |
}
|
131 |
|
132 |
MyWxFileDialog::MyWxFileDialog(): wxDialog() {
|
133 |
|
134 |
}
|
135 |
*/
|
136 |
long LAUNCHAPP_TIMER_ID = wxNewId();
|
137 |
|
138 |
BEGIN_EVENT_TABLE(LauncherApp, wxApp) |
139 |
EVT_TIMER(LAUNCHAPP_TIMER_ID, LauncherApp::OnTimer) |
140 |
END_EVENT_TABLE() |
141 |
|
142 |
|
143 |
/* Main Application $Revision: 12200 $
|
144 |
*
|
145 |
* $Id: launcher.cpp 12200 2007-06-18 12:53:21Z $
|
146 |
*/
|
147 |
LauncherApp::LauncherApp() |
148 |
: wxApp() |
149 |
{ |
150 |
APPLICATION_NAME = wxString(_("gvSIG Install-Launcher"));
|
151 |
|
152 |
|
153 |
SetAppName(_( APPLICATION_NAME )); |
154 |
loadParams(); |
155 |
/*
|
156 |
wxFont font;
|
157 |
font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT);
|
158 |
puts("Fuente de sistema");
|
159 |
printf("face: %s\n",font.GetFaceName().c_str());
|
160 |
printf("native: %s\n",font.GetNativeFontInfoDesc().c_str());
|
161 |
printf("size: %i\n",font.GetPointSize());
|
162 |
printf("ok: %i\n",font.Ok());
|
163 |
puts("/Fuente de sistema");
|
164 |
*/
|
165 |
} |
166 |
|
167 |
void LauncherApp::echo(const wxString &msg) |
168 |
{ |
169 |
wxMessageDialog dlg(0, msg, _(APPLICATION_NAME), wxOK);
|
170 |
//applyFont(&dlg,font);
|
171 |
dlg.ShowModal(); |
172 |
//wxString m="%s";
|
173 |
///m.Printf(msg);
|
174 |
} |
175 |
|
176 |
void LauncherApp::notifyToUser(const wxString &msg) |
177 |
{ |
178 |
wxMessageDialog dlg(0, msg, _(APPLICATION_NAME), wxOK | wxICON_INFORMATION);
|
179 |
//applyFont(&dlg,font);
|
180 |
dlg.ShowModal(); |
181 |
} |
182 |
|
183 |
void LauncherApp::notifyErrorToUser(const wxString &msg) |
184 |
{ |
185 |
wxMessageDialog dlg(0, msg, _(APPLICATION_NAME), wxOK | wxICON_ERROR);
|
186 |
//applyFont(&dlg,font);
|
187 |
dlg.ShowModal(); |
188 |
} |
189 |
|
190 |
|
191 |
LauncherApp::~LauncherApp() |
192 |
{ |
193 |
|
194 |
} |
195 |
|
196 |
void LauncherApp::loadParams()
|
197 |
{ |
198 |
cfgName = wxString( "launcher.ini" );
|
199 |
|
200 |
wxFileInputStream in( cfgName ); |
201 |
wxFileConfig cfg( in ); |
202 |
wxString downloadEnabled; |
203 |
wxString launchJarAsync; |
204 |
wxString askForCheckingProcess; |
205 |
|
206 |
cfg.Read( "jar", ¶msJar, wxEmptyString);
|
207 |
cfg.Read( "jre", ¶msJre, wxEmptyString);
|
208 |
cfg.Read( "downloadJre", ¶msJreDownload, wxEmptyString);
|
209 |
cfg.Read( "installJreCmd", ¶msJreInstallCmd, wxEmptyString);
|
210 |
cfg.Read( "installedJreJavaFile", ¶msJreInstalledJavaFile, wxEmptyString);
|
211 |
cfg.Read( "installedJreRootDirectory", ¶msJreInstalledRootDirectory, wxEmptyString);
|
212 |
cfg.Read( "jre_version", ¶msJreVersion, wxEmptyString);
|
213 |
cfg.Read( "jre_version_prefered", ¶msJreVersionPrefered, wxEmptyString);
|
214 |
cfg.Read( "jarParams", ¶msJarParams, wxEmptyString);
|
215 |
cfg.Read( "downloadEnabled", &downloadEnabled, wxEmptyString);
|
216 |
cfg.Read( "launchJarAsync", &launchJarAsync, wxEmptyString);
|
217 |
|
218 |
//procesamos el parametro booleano 'downloadEnabled'
|
219 |
paramsEnabledDownload =string_to_bool(downloadEnabled,false);
|
220 |
//procesamos el parametro booleano 'launchJarAsync'
|
221 |
paramsLaunchJarAsync =string_to_bool(launchJarAsync,false);
|
222 |
|
223 |
if (paramsJar == wxEmptyString )
|
224 |
{ |
225 |
error(_("The configuration file '") + cfgName + _("' does not contain a jar file entry.")); |
226 |
} |
227 |
if (paramsJreVersionPrefered == wxEmptyString ) {
|
228 |
paramsJreVersionPrefered = wxString(paramsJreVersion); |
229 |
} |
230 |
} |
231 |
|
232 |
void LauncherApp::error(const wxString &msg) |
233 |
{ |
234 |
wxMessageDialog dlg(0, msg, _(APPLICATION_NAME), wxOK | wxICON_ERROR);
|
235 |
//applyFont(&dlg,font);
|
236 |
dlg.ShowModal(); |
237 |
exit(1);
|
238 |
} |
239 |
|
240 |
void LauncherApp::confirm(const wxString &msg) |
241 |
{ |
242 |
int response;
|
243 |
wxMessageDialog dlg(0, msg, _(APPLICATION_NAME), wxOK | wxCANCEL | wxICON_QUESTION );
|
244 |
//applyFont(&dlg,font);
|
245 |
response = dlg.ShowModal(); |
246 |
if (response != wxID_OK) {
|
247 |
notifyToUser(_("Canceled by user"));
|
248 |
exit(1);
|
249 |
} |
250 |
} |
251 |
bool LauncherApp::confirmYesNoCancel(const wxString &msg,const int yesDefault = true) |
252 |
{ |
253 |
int response;
|
254 |
long maskDefault;
|
255 |
if (yesDefault) {
|
256 |
maskDefault = wxYES_DEFAULT | wxYES_NO | wxCANCEL | wxICON_QUESTION; |
257 |
} else {
|
258 |
maskDefault = wxNO_DEFAULT | wxYES_NO | wxCANCEL | wxICON_QUESTION; |
259 |
} |
260 |
wxMessageDialog dlg(0, msg, _(APPLICATION_NAME), maskDefault);
|
261 |
//applyFont(&dlg,font);
|
262 |
response = dlg.ShowModal(); |
263 |
if (response != wxID_YES && response != wxID_NO) {
|
264 |
notifyToUser(_("Canceled by user"));
|
265 |
exit(1);
|
266 |
} |
267 |
return (response == wxID_YES);
|
268 |
|
269 |
} |
270 |
|
271 |
|
272 |
|
273 |
bool LauncherApp::OnInit()
|
274 |
{ |
275 |
wxFont myFont; |
276 |
myFont.SetFamily(wxDECORATIVE); |
277 |
myFont.SetPointSize(12);
|
278 |
isStatusDialogVisible = false;
|
279 |
locale.Init(); |
280 |
locale.AddCatalog("launcher");
|
281 |
|
282 |
statusDialog = new StatusDialog( APPLICATION_NAME );
|
283 |
|
284 |
//applyFont(statusDialog,font);
|
285 |
statusDialog->Centre(); |
286 |
statusDialog->Show(TRUE); |
287 |
isStatusDialogVisible = true;
|
288 |
|
289 |
showStatusMsg(_("Intializing..."));
|
290 |
|
291 |
myTimer = new wxTimer(this,LAUNCHAPP_TIMER_ID); |
292 |
myTimer->Start(150,true); |
293 |
this->MainLoop();
|
294 |
return true; |
295 |
} |
296 |
|
297 |
bool LauncherApp::compareVersions(const wxString localVersion, const wxString requireVersion) |
298 |
{ |
299 |
bool result = (localVersion.Cmp(requireVersion) == 0); |
300 |
/*
|
301 |
if (requireVersion.Len() > localVersion.Len() ) {
|
302 |
|
303 |
result = (localVersion.Find(requireVersion) == 0);
|
304 |
}
|
305 |
else
|
306 |
{
|
307 |
result = (requireVersion.Find(localVersion) == 0);
|
308 |
}
|
309 |
*/
|
310 |
|
311 |
/*
|
312 |
if (result) {
|
313 |
echo("localversion = '" + localVersion +"' requireVersion = '"+ requireVersion +"' ==> true");
|
314 |
} else {
|
315 |
echo("localversion = '" + localVersion +"' requireVersion = '"+ requireVersion +"' ==> false");
|
316 |
}
|
317 |
*/
|
318 |
|
319 |
return result;
|
320 |
} |
321 |
|
322 |
|
323 |
void LauncherApp::runJRE()
|
324 |
{ |
325 |
showStatusMsg(_("Launching installation..."));
|
326 |
if (!wxFile::Exists(paramsJar))
|
327 |
{ |
328 |
error(_("The jar-file in the configuration file ") + cfgName + _(" does not exist.")); |
329 |
} |
330 |
|
331 |
wxString cmd = "export JAVA_HOME=\"" +
|
332 |
getJavaExecFileHome(javaExecPath) + "\"; unset LD_LIBRARY_PATH ; exec " +
|
333 |
javaExecPath + paramsJarParams + wxString(" -jar ") + paramsJar;
|
334 |
//echo(cmd);
|
335 |
if (paramsLaunchJarAsync) {
|
336 |
if (!run_external_async(cmd))
|
337 |
{ |
338 |
error(_("The jar-file ") + paramsJar + _(" could not be executed." )); |
339 |
} |
340 |
} else {
|
341 |
if (!run_external(cmd))
|
342 |
{ |
343 |
error(_("The jar-file ") + paramsJar + _(" could not be executed." )); |
344 |
} |
345 |
} |
346 |
|
347 |
} |
348 |
|
349 |
wxString LauncherApp::installJRE(){ |
350 |
showStatusMsg(_("Preparing to install JRE..."));
|
351 |
|
352 |
if (!checkInstallerFile(paramsJre, paramsJreDownload,_("Java JRE version ")+paramsJreVersion)) |
353 |
{ |
354 |
notifyErrorToUser(_("The JRE could not be setup."));
|
355 |
return ""; |
356 |
} |
357 |
|
358 |
showStatusMsg(_("Installing JRE..."));
|
359 |
|
360 |
if (!run_external(paramsJreInstallCmd))
|
361 |
{ |
362 |
notifyErrorToUser(_("The JRE could not be setup."));
|
363 |
return ""; |
364 |
} |
365 |
|
366 |
if (!wxFileExists(paramsJreInstalledJavaFile)){
|
367 |
notifyErrorToUser(wxString::Format(_("The file %s does not exist."),paramsJreInstalledJavaFile.c_str()));
|
368 |
return ""; |
369 |
} |
370 |
|
371 |
return paramsJreInstalledJavaFile;
|
372 |
|
373 |
} |
374 |
|
375 |
IMPLEMENT_APP(LauncherApp) |
376 |
|
377 |
bool LauncherApp::downloadFileHttp(const wxString urlOfFile, const wxString filePath, const wxString msg){ |
378 |
|
379 |
bool isOk;
|
380 |
//echo(urlOfFile);
|
381 |
if (urlOfFile == wxEmptyString) {
|
382 |
return false; |
383 |
} |
384 |
|
385 |
if (filePath == wxEmptyString) {
|
386 |
return false; |
387 |
} |
388 |
|
389 |
showStatusMsg(msg); |
390 |
wxURL url(urlOfFile); |
391 |
//echo("url open");
|
392 |
wxInputStream *in_stream; |
393 |
|
394 |
in_stream = url.GetInputStream(); |
395 |
//echo("in_stream open");
|
396 |
if (!in_stream){
|
397 |
return false; |
398 |
} |
399 |
if (!in_stream->IsOk()) {
|
400 |
//echo("in_stream.IsOk == false");
|
401 |
return false; |
402 |
} |
403 |
//echo("in_stream.IsOk == true");
|
404 |
//echo("filePath =" + filePath);
|
405 |
wxFileName fileName(filePath); |
406 |
wxFileName fileDir(fileName.GetPath()); |
407 |
if (!fileDir.DirExists()) {
|
408 |
if (!fileDir.Mkdir(0777,wxPATH_MKDIR_FULL )) { |
409 |
return false; |
410 |
} |
411 |
} |
412 |
/*
|
413 |
// Preparamos la ruta para el fichero destino
|
414 |
wxArrayString dirs;
|
415 |
|
416 |
dirs = fileName.GetDirs();
|
417 |
wxString dir;
|
418 |
wxFileName curDir(".");
|
419 |
for (size_t i=0; i < dirs.GetCount(); i++) {
|
420 |
dir = dirs.Item(i);
|
421 |
curDir.AppendDir(dir);
|
422 |
//echo("dir " + curDir.GetPath());
|
423 |
if (!curDir.DirExists()) {
|
424 |
//echo("creating dir");
|
425 |
isOk = curDir.Mkdir();
|
426 |
if (!isOk) {
|
427 |
//echo("dir create no ok");
|
428 |
return false;
|
429 |
}
|
430 |
|
431 |
//echo("dir create ok");
|
432 |
}
|
433 |
}
|
434 |
*/
|
435 |
|
436 |
wxFileOutputStream out_stream = wxFileOutputStream(filePath); |
437 |
//echo("out_stream open");
|
438 |
|
439 |
//in_stream->Read(out_stream);
|
440 |
size_t nbytes = 10240;
|
441 |
char buffer[nbytes];
|
442 |
|
443 |
|
444 |
while (!in_stream->Eof()) {
|
445 |
in_stream->Read(&buffer,nbytes); |
446 |
if (in_stream->LastError() != wxSTREAM_NO_ERROR && in_stream->LastError() != wxSTREAM_EOF) {
|
447 |
return false; |
448 |
} |
449 |
out_stream.Write(&buffer,in_stream->LastRead()); |
450 |
if (out_stream.LastError() != wxSTREAM_NO_ERROR) {
|
451 |
return false; |
452 |
} |
453 |
int totalKb = out_stream.GetSize() / 1024; |
454 |
wxString totalMsg =wxString::Format("%i",totalKb);
|
455 |
showStatusMsg(msg+" "+ totalMsg + " Kb"); |
456 |
|
457 |
} |
458 |
|
459 |
|
460 |
isOk = true;
|
461 |
/*
|
462 |
if (isOk) {
|
463 |
echo("isOk = true");
|
464 |
} else {
|
465 |
echo("isOk = false");
|
466 |
}
|
467 |
*/
|
468 |
delete in_stream;
|
469 |
|
470 |
//echo("end");
|
471 |
return isOk;
|
472 |
|
473 |
} |
474 |
|
475 |
bool LauncherApp::checkInstallerFile(const wxString filePath, const wxString urlDownload, const wxString fileDescription) { |
476 |
if (!wxFile::Exists(filePath))
|
477 |
{ |
478 |
if (paramsEnabledDownload)
|
479 |
{ |
480 |
wxString msg; |
481 |
msg = wxString::Format(_("The installation requires to download this file:\n%s\nDo you want to continue?"),fileDescription.c_str());
|
482 |
confirm(msg); |
483 |
msg = wxString::Format(_("Downloading %s..."),fileDescription.c_str());
|
484 |
if (!downloadFileHttp(urlDownload,filePath,msg))
|
485 |
{ |
486 |
//FIXME: Falta msgError
|
487 |
return false; |
488 |
} |
489 |
} |
490 |
else
|
491 |
{ |
492 |
return false; |
493 |
} |
494 |
|
495 |
} |
496 |
return true; |
497 |
} |
498 |
|
499 |
void LauncherApp::showStatusMsg(const wxString msg) { |
500 |
if (isStatusDialogVisible) {
|
501 |
while (this->Pending()) { |
502 |
this->Dispatch();
|
503 |
} |
504 |
if (statusDialog->IsCanceled()) {
|
505 |
int response;
|
506 |
wxMessageDialog dlg(0, _("Are you sure you want to cancel installation?"), _(APPLICATION_NAME), wxYES_NO | wxICON_QUESTION ); |
507 |
response = dlg.ShowModal(); |
508 |
if (response == wxID_YES) {
|
509 |
notifyToUser(_("Canceled by the user"));
|
510 |
exit(1);
|
511 |
} |
512 |
statusDialog->DoNotCancel(); |
513 |
} |
514 |
statusDialog->showStatus(msg); |
515 |
} |
516 |
} |
517 |
|
518 |
void LauncherApp::run(){
|
519 |
bool ok = false; |
520 |
|
521 |
wxString mJavaFileName; |
522 |
wxString errorMsg; |
523 |
SelectionDialog dlg( checkPreviousJRE(),checkEnvironmentJRE() ,_(APPLICATION_NAME)); |
524 |
while (!ok) {
|
525 |
//applyFont(&dlg,font);
|
526 |
if (dlg.ShowModal() != wxID_OK){
|
527 |
notifyToUser(_("Canceled by the user"));
|
528 |
exit(1);
|
529 |
} |
530 |
switch (dlg.getUserAction())
|
531 |
{ |
532 |
case PREVIOUS_GVSIG: mJavaFileName = previousJRE(); break; |
533 |
case PROVIDED: mJavaFileName = installJRE(); break; |
534 |
case SELECT_MANUALY: mJavaFileName = selectJavaExecFileManualy(); break; |
535 |
case ENVIRON: mJavaFileName = useEnvironJRE(); break; |
536 |
default: break; |
537 |
} |
538 |
if (mJavaFileName.Cmp("") == 0) { |
539 |
wxString msg =wxString::Format(_("Error executing this installation option. Do you want to try another one?"),errorMsg.c_str());
|
540 |
confirm(msg); |
541 |
} else {
|
542 |
//echo("checking..." + mJavaFileName);
|
543 |
errorMsg = checkJava(mJavaFileName); |
544 |
//echo("check result: *"+errorMsg+"*");
|
545 |
if (errorMsg.Cmp("") == 0) { |
546 |
javaExecPath=mJavaFileName; |
547 |
ok=true;
|
548 |
} else {
|
549 |
wxString msg =wxString::Format(_("Problems found in the selected JRE:\n%s\n\nDo you want to continue?"),errorMsg.c_str());
|
550 |
if (confirmYesNoCancel(msg,false)) { |
551 |
javaExecPath=mJavaFileName; |
552 |
ok=true;
|
553 |
} |
554 |
} |
555 |
} |
556 |
} |
557 |
runJRE(); |
558 |
|
559 |
exit(0);
|
560 |
|
561 |
} |
562 |
|
563 |
void LauncherApp::OnTimer(wxTimerEvent& event) {
|
564 |
run(); |
565 |
} |
566 |
|
567 |
wxString LauncherApp::selectJavaExecFileManualy() { |
568 |
wxString msgDir = _("Manually select the Java VM");
|
569 |
wxFileDialog dlg( |
570 |
0,
|
571 |
msgDir, |
572 |
wxEmptyString, |
573 |
wxString("java"),
|
574 |
wxString( wxString(_("Java VM executable file")) + " (java)|java"), |
575 |
wxOPEN | wxFILE_MUST_EXIST, |
576 |
wxDefaultPosition |
577 |
); |
578 |
//applyFont(&dlg,font);
|
579 |
|
580 |
|
581 |
int response = dlg.ShowModal();
|
582 |
if (response != wxID_OK) {
|
583 |
notifyToUser(_("Canceled by the user"));
|
584 |
exit(1);
|
585 |
} |
586 |
return dlg.GetPath();
|
587 |
} |
588 |
|
589 |
|
590 |
wxString LauncherApp::getJavaExecFileVersion(wxString javaFileName) { |
591 |
wxArrayString output, errors; |
592 |
wxString cmd =javaFileName + " GetJavaSystemProperties java.version";
|
593 |
//echo(cmd);
|
594 |
if (!run_external_withOut(cmd,output, errors)) {
|
595 |
return ""; |
596 |
} |
597 |
if (output.Count() == 0){ |
598 |
return ""; |
599 |
} |
600 |
return output[0]; |
601 |
|
602 |
} |
603 |
|
604 |
wxString LauncherApp::getJavaExecFileHome(wxString javaFileName) { |
605 |
wxArrayString output, errors; |
606 |
wxString cmd =javaFileName + " GetJavaSystemProperties java.home";
|
607 |
if (!run_external_withOut(cmd,output, errors)) {
|
608 |
return ""; |
609 |
} |
610 |
if (output.Count() == 0){ |
611 |
return ""; |
612 |
} |
613 |
return output[0]; |
614 |
|
615 |
} |
616 |
|
617 |
|
618 |
wxString LauncherApp::checkJava(const wxString aJavaFileName) {
|
619 |
wxString msg = "";
|
620 |
wxString version; |
621 |
wxString home; |
622 |
|
623 |
|
624 |
if (!wxFileExists(aJavaFileName)){
|
625 |
return wxString::Format(_("File %s not found."),aJavaFileName.c_str());//_("File %s not found."), javaFileName); |
626 |
}; |
627 |
|
628 |
|
629 |
version = getJavaExecFileVersion(aJavaFileName); |
630 |
|
631 |
if (version.Cmp("") == 0){ |
632 |
return wxString::Format(_("Can't identify version of %s."), aJavaFileName.c_str()); |
633 |
} |
634 |
|
635 |
version = version.Left(5);
|
636 |
if (!compareVersions(version,paramsJreVersion)) {
|
637 |
msg = "\n" + wxString::Format(_("Java version %s is not the required %s"),version.c_str(),paramsJreVersion.c_str()); |
638 |
} |
639 |
|
640 |
home = getJavaExecFileHome(aJavaFileName); |
641 |
if (home.Cmp("") == 0){ |
642 |
return wxString::Format(_("Can't identify java_home of %s."), aJavaFileName.c_str()); |
643 |
} |
644 |
// comprobamos JAI
|
645 |
if (!wxFileExists(home + "/lib/ext/jai_core.jar")) { |
646 |
msg = msg +"\n" + _("The JAI library is not installed"); |
647 |
} |
648 |
// comprobamos JAI i/o
|
649 |
if (!wxFileExists(home + "/lib/ext/jai_imageio.jar")) { |
650 |
msg = msg +"\n" + _("The JAI I/O library is not installed"); |
651 |
} |
652 |
|
653 |
return msg;
|
654 |
} |
655 |
|
656 |
bool LauncherApp::checkEnvironmentJRE() {
|
657 |
return (useEnvironJRE().Cmp("") != 0); |
658 |
} |
659 |
|
660 |
wxString LauncherApp::useEnvironJRE() { |
661 |
wxString envJavaHome; |
662 |
if (wxGetEnv("JAVA_HOME",&envJavaHome)){ |
663 |
//echo("no Java Home get");
|
664 |
if (!envJavaHome.Cmp("") == 0) { |
665 |
return envJavaHome + "/bin/java"; |
666 |
} |
667 |
//echo("no Java Home blank");
|
668 |
} |
669 |
//echo("no Java Home");
|
670 |
|
671 |
wxArrayString output, errors; |
672 |
if (run_external_withOut("/bin/sh -c 'type -p java'",output, errors)) { |
673 |
//printf("ouput.Count() = %i",output.Count());
|
674 |
//printf("errors.Count() = %i",errors.Count());
|
675 |
if (output.Count() != 0){ |
676 |
return output[0]; |
677 |
} |
678 |
//echo("no Java in path count=0");
|
679 |
} |
680 |
//echo("no Java in path");
|
681 |
return ""; |
682 |
|
683 |
} |
684 |
|
685 |
|
686 |
bool LauncherApp::checkPreviousJRE() {
|
687 |
wxFileName appHomeJre = paramsJreInstalledRootDirectory; |
688 |
|
689 |
appHomeJre.MakeAbsolute(); |
690 |
|
691 |
if (!appHomeJre.DirExists()) {
|
692 |
return false; |
693 |
} |
694 |
|
695 |
|
696 |
|
697 |
return (!wxFindFirstFile(appHomeJre.GetFullPath()+"/"+paramsJreVersion+"*",wxDIR).IsEmpty()); |
698 |
} |
699 |
|
700 |
wxString LauncherApp::previousJRE() { |
701 |
if (paramsJreVersionPrefered.IsEmpty()) {
|
702 |
wxFileName prefered = paramsJreInstalledRootDirectory+"/"+paramsJreVersionPrefered+"/bin/java"; |
703 |
prefered.Normalize(); |
704 |
if (prefered.FileExists()){
|
705 |
return prefered.GetFullPath();
|
706 |
} |
707 |
} |
708 |
wxString mask = paramsJreInstalledRootDirectory+"/" + paramsJreVersion + "_%02d/bin/java"; |
709 |
for(unsigned i=20;i>1;i--) { |
710 |
wxFileName current; |
711 |
current = wxString::Format(mask,i); |
712 |
if (current.FileExists()) {
|
713 |
return current.GetFullPath();
|
714 |
} |
715 |
} |
716 |
return ""; |
717 |
} |
718 |
|
719 |
/**
|
720 |
wxArrayString getDirectoriesFromPath(wxString path){
|
721 |
wxArrayString directories;
|
722 |
if (appHome.DirExists()) {
|
723 |
wxString f = wxFindFirstFile(appHomeJre+"*",wxDIR);
|
724 |
while ( !f.IsEmpty() )
|
725 |
{
|
726 |
wxArrayString.Add(f);
|
727 |
f = wxFindNextFile();
|
728 |
}
|
729 |
}
|
730 |
return directories;
|
731 |
}
|
732 |
**/
|
733 |
|
734 |
|
735 |
|