Statistics
| Revision:

svn-gvsig-desktop / tags / v1_0_RELEASE / install / launcher / izpack-launcher-1.3_linux / src / launcher.cpp @ 9167

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: 9167 $
144
 *
145
 * $Id: launcher.cpp 9167 2006-12-04 16:01:24Z  $
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",                    &paramsJar,                wxEmptyString);
207
  cfg.Read( "jre",                    &paramsJre,                wxEmptyString);
208
  cfg.Read( "downloadJre",            &paramsJreDownload,        wxEmptyString);
209
  cfg.Read( "installJreCmd",            &paramsJreInstallCmd,        wxEmptyString);
210
  cfg.Read( "installedJreJavaFile",            &paramsJreInstalledJavaFile,        wxEmptyString);
211
  cfg.Read( "installedJreRootDirectory",            &paramsJreInstalledRootDirectory,        wxEmptyString);
212
  cfg.Read( "jre_version",            &paramsJreVersion,         wxEmptyString);
213
  cfg.Read( "jre_version_prefered",   &paramsJreVersionPrefered, wxEmptyString);
214
  cfg.Read( "jarParams",              &paramsJarParams,          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