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