package tk.eclipse.plugin.jseditor.launch; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import tk.eclipse.plugin.htmleditor.HTMLPlugin; /** * Provides utility methods for JavaScript launching. * * @author Naoki Takezoe */ public class JavaScriptLaunchUtil { private static File[] _files; public static File[] getClassPaths(){ if(_files!=null){ return _files; } File dir = HTMLPlugin.getDefault().getStateLocation().toFile(); _files = new File[]{ new File(dir, "js.jar"), new File(dir, "JavaScriptExecutor.jar"), }; return _files; } public static String[] getClassPathAsStringArray(){ File[] files = getClassPaths(); String[] paths = new String[files.length]; for(int i=0;i<files.length;i++){ paths[i] = files[i].getAbsolutePath(); } return paths; } public static void copyLibraries() throws CoreException { File[] files = getClassPaths(); for(int i=0;i<files.length;i++){ if(!files[i].exists()){ copyFile(HTMLPlugin.getDefault().getBundle().getEntry("/" + files[i].getName()), files[i]); } } } public static void removeLibraries() throws CoreException { File[] files = getClassPaths(); for(int i=0;i<files.length;i++){ if(files[i].exists()){ files[i].delete(); } } } private static void copyFile(URL url, File file) throws CoreException { try { InputStream in = url.openStream(); OutputStream out = new FileOutputStream(file); try { byte[] buf = new byte[1024 * 8]; int length = 0; while((length = in.read(buf))!=-1){ out.write(buf, 0, length); } } finally { in.close(); out.close(); } } catch(Exception ex){ IStatus status = new Status( IStatus.ERROR, HTMLPlugin.getDefault().getPluginId(), 0, ex.toString(), ex); throw new CoreException(status); } } }