1 package installer; 2 3 import java.io.*; 4 import java.util.*; 5 import java.util.jar.*; 6 //import org.xml.sax.*; 7 //import org.w3c.dom.*; 8 //import javax.xml.parsers.*; 9 import java.net.URL; 10 import java.net.JarURLConnection; 11 //import javax.xml.parsers.*; 12 import javax.swing.*; 13 14 /** 15 * The <code>XmlUpdater</code> pulls a META-INF/converter.xml 16 * file out of a jar file and parses it, providing access to this 17 * information in a <code>Vector</code> of <code>ConverterInfo</code> 18 * objects. 19 * 20 * @author Aidan Butler 21 */ 22 public class IdeUpdater extends Thread { 23 24 private String classesPath = null; 25 private String jarfilename; 26 private String installPath; 27 28 private JLabel statusLabel; 29 30 private Vector listeners; 31 private Thread internalThread; 32 private boolean threadSuspended; 33 private JProgressBar progressBar; 34 35 private boolean isNetbeansPath = false; 36 37 38 public IdeUpdater(String installPath, JLabel statusLabel, JProgressBar pBar) { 39 40 if (installPath.endsWith(File.separator) == false) 41 installPath += File.separator; 42 43 //File jeditLauncher = new File( installPath + "jedit.jar" ); 44 File netbeansLauncher = new File( installPath + "bin" ); 45 46 if( netbeansLauncher.isDirectory() ) { 47 isNetbeansPath = true; 48 installPath = installPath +"modules" + File.separator; 49 } 50 /* 51 else if( jeditLauncher.isFile() ){ 52 isNetbeansPath = false; 53 installPath = installPath + "jars" + File.separator; 54 } 55 */ 56 57 System.out.println( "IdeUpdater installPath is " + installPath + " isNetbeansPath is " + isNetbeansPath ); 58 this.installPath = installPath; 59 this.statusLabel = statusLabel; 60 listeners = new Vector(); 61 threadSuspended = false; 62 progressBar=pBar; 63 progressBar.setStringPainted(true); 64 }// XmlUpdater 65 66 67 public boolean checkStop() 68 { 69 if (internalThread == Thread.currentThread()) 70 return false; 71 return true; 72 }// checkStop 73 74 75 public void checkSuspend() 76 { 77 if (threadSuspended) 78 { 79 synchronized(this) 80 { 81 while (threadSuspended) 82 { 83 try { 84 wait(); 85 } catch (InterruptedException eInt) { 86 //... 87 } 88 } 89 } 90 } 91 }// checkSuspend 92 93 94 public void setSuspend() 95 { 96 threadSuspended = true; 97 }// setSuspend 98 99 100 public void setResume() 101 { 102 threadSuspended = false; 103 notify(); 104 }// setResume 105 106 107 public void setStop() 108 { 109 internalThread = null; 110 }// setStop 111 112 113 public void run() { 114 115 //InputStream istream; 116 //URL url; 117 //String fileName = null; 118 119 internalThread = Thread.currentThread(); 120 121 progressBar.setString("Unzipping Required Files"); 122 ZipData zd = new ZipData("SFrameworkInstall.jar"); 123 124 // Adding IDE support 125 if( isNetbeansPath ) { 126 if (!zd.extractEntry("ide/office.jar",installPath, statusLabel)) 127 { 128 onInstallComplete(); 129 return; 130 } 131 } 132 else { 133 if (!zd.extractEntry("ide/idesupport.jar",installPath, statusLabel)) 134 { 135 onInstallComplete(); 136 return; 137 } 138 if (!zd.extractEntry("ide/OfficeScripting.jar",installPath, statusLabel)) 139 { 140 onInstallComplete(); 141 return; 142 } 143 } 144 145 //System.out.println("About to call register"); 146 //Register.register(installPath+File.separator, statusLabel, progressBar); 147 148 statusLabel.setText("Installation Complete"); 149 progressBar.setString("Installation Complete"); 150 progressBar.setValue(10); 151 onInstallComplete(); 152 153 }// run 154 155 156 public void addInstallListener(InstallListener listener) 157 { 158 listeners.addElement(listener); 159 }// addInstallListener 160 161 162 private void onInstallComplete() 163 { 164 Enumeration e = listeners.elements(); 165 while (e.hasMoreElements()) 166 { 167 InstallListener listener = (InstallListener)e.nextElement(); 168 listener.installationComplete(null); 169 } 170 }// onInstallComplete 171 172 }// XmlUpdater class 173