package uk.co.mmscomputing.application.install; import java.io.*; import java.util.*; import java.awt.*; import javax.swing.*; public class Setup extends JPanel{ private Log log; // private String java; private Vector javacs; private JComboBox ljavac; private String osname; private JCheckBox extractit; private JCheckBox compileit; private JCheckBox startAnswerphone; private JCheckBox startImageViewer; public Setup(Log log){ this.log=log; osname=System.getProperty("os.name"); if(osname.startsWith("Linux")){ javacs=search("/javac"); try{ String jre=System.getProperty("java.home"); if(jre!=null){ String jc=jre.replaceAll("/jre","/bin/javac"); File f=new File(jc); if(f.exists() && f.isFile()){ javacs.add(f.getCanonicalPath()); } } }catch(Exception e){ log.msg(e.getMessage()); } }else if(osname.startsWith("Windows")){ log.msg("java.home "+System.getProperty("java.home")); javacs=search("\\javac.exe"); }else{ javacs.add("javac"); } JPanel p=new JPanel(); p.setLayout(new GridLayout(0,1)); JPanel q=new JPanel(); q.setLayout(new GridLayout(0,2)); q.add(new JLabel(" Installation directory")); q.add(new JLabel(getUserdir())); q.add(new JLabel(" Java compiler")); ljavac=new JComboBox(javacs); ljavac.setEditable(true); q.add(ljavac); p.add(q); q=new JPanel(); q.setLayout(new GridLayout(0,2)); extractit=new JCheckBox(" Extract package",true); q.add(extractit); compileit=new JCheckBox(" Compile java files",true); q.add(compileit); startAnswerphone=new JCheckBox(" Start answerphone application",true); q.add(startAnswerphone); startImageViewer=new JCheckBox(" Start imageviewer application",true); q.add(startImageViewer); p.add(q); setLayout(new BorderLayout()); add(p,BorderLayout.NORTH); } public boolean getExtractIt(){ return extractit.isSelected(); } public boolean getCompileIt(){ return compileit.isSelected(); } public boolean getStartAnswerphone(){ return startAnswerphone.isSelected(); } public boolean getStartImageViewer(){ return startImageViewer.isSelected(); } public String getJavac(){ String javac="javac"; if(javacs.size()>0){ javac=(String)ljavac.getSelectedItem(); }else{ javac = request(javac); // ljavac.setText(javac); } return javac; } public String getUserdir(){ return System.getProperty("user.dir"); } public String request(String pn){ File f=new File(pn); while(!f.exists() /*|| !fn.endsWith(pn)*/){ String msg="Cannot find program '"+pn+"'.\n"; msg+="Please select a valid path with the upcoming file chooser."; try{ JOptionPane.showMessageDialog(null, msg, "Exception", JOptionPane.ERROR_MESSAGE); JFileChooser fc=new JFileChooser(System.getProperty("user.home")); int res=fc.showOpenDialog(null); if(res==JFileChooser.APPROVE_OPTION){ pn=fc.getSelectedFile().getPath(); f=new File(pn); }else{ return ""; } }catch(Exception e){ log.msg(e.getMessage()); } } return pn; } String[] list={ "/usr/java/jdk1.5", "/usr/java/j2sdk1.4", "/usr/lib/java", "/usr/lib/jvm", "/usr/lib/SunJava", // "/etc/alternatives/java", "c:\\j2sdk1.4", "c:\\Program Files\\java\\jdk1.5", "c:\\Program Files\\java\\jdk1.6", // "c:\\jdk1.3" }; public Vector search(String javac){ Vector v = new Vector(); try{ for(int i=0;i<list.length;i++){ File dir = new File(list[i]); File parent = dir.getParentFile(); if(parent.exists()&&parent.isDirectory()){ String name = dir.getName(); String[] fns = parent.list(); for(int j=0;j<fns.length;j++){ if(fns[j].startsWith(name)){ String fn=fns[j]+File.separator+"bin"+javac; System.err.println(parent+"/"+fn); File file=new File(parent,fn); if(file.exists()&&file.isFile()){ v.add(file.getCanonicalPath()); } } } } } }catch(Exception e){} return v; } }