1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski package installer; 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski import java.io.*; 25*b1cdbd2cSJim Jagielski import java.util.*; 26*b1cdbd2cSJim Jagielski import java.util.jar.*; 27*b1cdbd2cSJim Jagielski //import org.xml.sax.*; 28*b1cdbd2cSJim Jagielski //import org.w3c.dom.*; 29*b1cdbd2cSJim Jagielski //import javax.xml.parsers.*; 30*b1cdbd2cSJim Jagielski import java.net.URL; 31*b1cdbd2cSJim Jagielski import java.net.JarURLConnection; 32*b1cdbd2cSJim Jagielski //import javax.xml.parsers.*; 33*b1cdbd2cSJim Jagielski import javax.swing.*; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski /** 36*b1cdbd2cSJim Jagielski * The <code>XmlUpdater</code> pulls a META-INF/converter.xml 37*b1cdbd2cSJim Jagielski * file out of a jar file and parses it, providing access to this 38*b1cdbd2cSJim Jagielski * information in a <code>Vector</code> of <code>ConverterInfo</code> 39*b1cdbd2cSJim Jagielski * objects. 40*b1cdbd2cSJim Jagielski * 41*b1cdbd2cSJim Jagielski * @author Aidan Butler 42*b1cdbd2cSJim Jagielski */ 43*b1cdbd2cSJim Jagielski public class IdeUpdater extends Thread { 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski private String classesPath = null; 46*b1cdbd2cSJim Jagielski private String jarfilename; 47*b1cdbd2cSJim Jagielski private String installPath; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski private JLabel statusLabel; 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski private Vector listeners; 52*b1cdbd2cSJim Jagielski private Thread internalThread; 53*b1cdbd2cSJim Jagielski private boolean threadSuspended; 54*b1cdbd2cSJim Jagielski private JProgressBar progressBar; 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski private boolean isNetbeansPath = false; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski IdeUpdater(String installPath, JLabel statusLabel, JProgressBar pBar)59*b1cdbd2cSJim Jagielski public IdeUpdater(String installPath, JLabel statusLabel, JProgressBar pBar) { 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski if (installPath.endsWith(File.separator) == false) 62*b1cdbd2cSJim Jagielski installPath += File.separator; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski //File jeditLauncher = new File( installPath + "jedit.jar" ); 65*b1cdbd2cSJim Jagielski File netbeansLauncher = new File( installPath + "bin" ); 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski if( netbeansLauncher.isDirectory() ) { 68*b1cdbd2cSJim Jagielski isNetbeansPath = true; 69*b1cdbd2cSJim Jagielski installPath = installPath +"modules" + File.separator; 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski /* 72*b1cdbd2cSJim Jagielski else if( jeditLauncher.isFile() ){ 73*b1cdbd2cSJim Jagielski isNetbeansPath = false; 74*b1cdbd2cSJim Jagielski installPath = installPath + "jars" + File.separator; 75*b1cdbd2cSJim Jagielski } 76*b1cdbd2cSJim Jagielski */ 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski System.out.println( "IdeUpdater installPath is " + installPath + " isNetbeansPath is " + isNetbeansPath ); 79*b1cdbd2cSJim Jagielski this.installPath = installPath; 80*b1cdbd2cSJim Jagielski this.statusLabel = statusLabel; 81*b1cdbd2cSJim Jagielski listeners = new Vector(); 82*b1cdbd2cSJim Jagielski threadSuspended = false; 83*b1cdbd2cSJim Jagielski progressBar=pBar; 84*b1cdbd2cSJim Jagielski progressBar.setStringPainted(true); 85*b1cdbd2cSJim Jagielski }// XmlUpdater 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski checkStop()88*b1cdbd2cSJim Jagielski public boolean checkStop() 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski if (internalThread == Thread.currentThread()) 91*b1cdbd2cSJim Jagielski return false; 92*b1cdbd2cSJim Jagielski return true; 93*b1cdbd2cSJim Jagielski }// checkStop 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski checkSuspend()96*b1cdbd2cSJim Jagielski public void checkSuspend() 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski if (threadSuspended) 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski synchronized(this) 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski while (threadSuspended) 103*b1cdbd2cSJim Jagielski { 104*b1cdbd2cSJim Jagielski try { 105*b1cdbd2cSJim Jagielski wait(); 106*b1cdbd2cSJim Jagielski } catch (InterruptedException eInt) { 107*b1cdbd2cSJim Jagielski //... 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski }// checkSuspend 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski setSuspend()115*b1cdbd2cSJim Jagielski public void setSuspend() 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski threadSuspended = true; 118*b1cdbd2cSJim Jagielski }// setSuspend 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski setResume()121*b1cdbd2cSJim Jagielski public void setResume() 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski threadSuspended = false; 124*b1cdbd2cSJim Jagielski notify(); 125*b1cdbd2cSJim Jagielski }// setResume 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski setStop()128*b1cdbd2cSJim Jagielski public void setStop() 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski internalThread = null; 131*b1cdbd2cSJim Jagielski }// setStop 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski run()134*b1cdbd2cSJim Jagielski public void run() { 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski //InputStream istream; 137*b1cdbd2cSJim Jagielski //URL url; 138*b1cdbd2cSJim Jagielski //String fileName = null; 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski internalThread = Thread.currentThread(); 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski progressBar.setString("Unzipping Required Files"); 143*b1cdbd2cSJim Jagielski ZipData zd = new ZipData("SFrameworkInstall.jar"); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski // Adding IDE support 146*b1cdbd2cSJim Jagielski if( isNetbeansPath ) { 147*b1cdbd2cSJim Jagielski if (!zd.extractEntry("ide/office.jar",installPath, statusLabel)) 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski onInstallComplete(); 150*b1cdbd2cSJim Jagielski return; 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski else { 154*b1cdbd2cSJim Jagielski if (!zd.extractEntry("ide/idesupport.jar",installPath, statusLabel)) 155*b1cdbd2cSJim Jagielski { 156*b1cdbd2cSJim Jagielski onInstallComplete(); 157*b1cdbd2cSJim Jagielski return; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski if (!zd.extractEntry("ide/OfficeScripting.jar",installPath, statusLabel)) 160*b1cdbd2cSJim Jagielski { 161*b1cdbd2cSJim Jagielski onInstallComplete(); 162*b1cdbd2cSJim Jagielski return; 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski //System.out.println("About to call register"); 167*b1cdbd2cSJim Jagielski //Register.register(installPath+File.separator, statusLabel, progressBar); 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski statusLabel.setText("Installation Complete"); 170*b1cdbd2cSJim Jagielski progressBar.setString("Installation Complete"); 171*b1cdbd2cSJim Jagielski progressBar.setValue(10); 172*b1cdbd2cSJim Jagielski onInstallComplete(); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski }// run 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski addInstallListener(InstallListener listener)177*b1cdbd2cSJim Jagielski public void addInstallListener(InstallListener listener) 178*b1cdbd2cSJim Jagielski { 179*b1cdbd2cSJim Jagielski listeners.addElement(listener); 180*b1cdbd2cSJim Jagielski }// addInstallListener 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski onInstallComplete()183*b1cdbd2cSJim Jagielski private void onInstallComplete() 184*b1cdbd2cSJim Jagielski { 185*b1cdbd2cSJim Jagielski Enumeration e = listeners.elements(); 186*b1cdbd2cSJim Jagielski while (e.hasMoreElements()) 187*b1cdbd2cSJim Jagielski { 188*b1cdbd2cSJim Jagielski InstallListener listener = (InstallListener)e.nextElement(); 189*b1cdbd2cSJim Jagielski listener.installationComplete(null); 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski }// onInstallComplete 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski }// XmlUpdater class 194