|
|
|
@ -35,11 +35,14 @@ import java.io.BufferedInputStream; |
|
|
|
|
import java.io.BufferedOutputStream; |
|
|
|
|
import java.io.BufferedReader; |
|
|
|
|
import java.io.File; |
|
|
|
|
import java.io.FileInputStream; |
|
|
|
|
import java.io.FileOutputStream; |
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.io.InputStream; |
|
|
|
|
import java.io.InputStreamReader; |
|
|
|
|
import java.io.OutputStream; |
|
|
|
|
import java.net.URL; |
|
|
|
|
import java.util.Properties; |
|
|
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
|
import java.util.logging.Level; |
|
|
|
|
import java.util.logging.Logger; |
|
|
|
@ -69,28 +72,38 @@ public class ZipExtensionTool { |
|
|
|
|
public String SUFFIX_WIN = "windows"; |
|
|
|
|
public String SUFFIX_LINUX = "linux"; |
|
|
|
|
public String SUFFIX_OSX = "mac"; |
|
|
|
|
private final String packageName; |
|
|
|
|
private final String packageFolder; |
|
|
|
|
private final String extensionName; |
|
|
|
|
private ProgressHandle progress; |
|
|
|
|
private final String version; |
|
|
|
|
|
|
|
|
|
public ZipExtensionTool(String packageName, String extensionName) { |
|
|
|
|
this.packageName = "/" + packageName.replace('.', '/'); |
|
|
|
|
public ZipExtensionTool(String packageName, String extensionName, String version) { |
|
|
|
|
this.packageFolder = "/" + packageName.replace('.', '/'); |
|
|
|
|
this.extensionName = extensionName; |
|
|
|
|
this.version = version; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void install() { |
|
|
|
|
if (new File(settingsFolder + File.separator + extensionName).exists()) { |
|
|
|
|
return; |
|
|
|
|
File folder = new File(settingsFolder + File.separator + extensionName); |
|
|
|
|
File versionFile = new File(settingsFolder + File.separator + extensionName + File.separator + ".zipextversion"); |
|
|
|
|
if (folder.exists()) { |
|
|
|
|
if (versionFile.exists()) { |
|
|
|
|
if (version.equals(getVersion(versionFile))) { |
|
|
|
|
return; |
|
|
|
|
} else { |
|
|
|
|
folder.delete(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ProgressHandle progressHandle = ProgressHandleFactory.createHandle("Installing " + extensionName + " data"); |
|
|
|
|
progressHandle.start(); |
|
|
|
|
if (Utilities.isWindows()) { |
|
|
|
|
extractToolsJava(packageName + "/" + extensionName + "-" + SUFFIX_WIN + ".zip", settingsFolder + File.separator + extensionName); |
|
|
|
|
extractToolsJava(packageFolder + "/" + extensionName + "-" + SUFFIX_WIN + ".zip", settingsFolder + File.separator + extensionName); |
|
|
|
|
} else if (Utilities.isMac()) { |
|
|
|
|
extractToolsShell(packageName + "/" + extensionName + "-" + SUFFIX_OSX + ".zip", settingsFolder + File.separator + extensionName); |
|
|
|
|
extractToolsShell(packageFolder + "/" + extensionName + "-" + SUFFIX_OSX + ".zip", settingsFolder + File.separator + extensionName); |
|
|
|
|
} else if (Utilities.isUnix()) { |
|
|
|
|
extractToolsShell(packageName + "/" + extensionName + "-" + SUFFIX_LINUX + ".zip", settingsFolder + File.separator + extensionName); |
|
|
|
|
extractToolsShell(packageFolder + "/" + extensionName + "-" + SUFFIX_LINUX + ".zip", settingsFolder + File.separator + extensionName); |
|
|
|
|
} |
|
|
|
|
setVersion(versionFile, version); |
|
|
|
|
progressHandle.finish(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -109,6 +122,46 @@ public class ZipExtensionTool { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getVersion(File path) { |
|
|
|
|
Properties props = new Properties(); |
|
|
|
|
InputStream in = null; |
|
|
|
|
try { |
|
|
|
|
in = new BufferedInputStream(new FileInputStream(path)); |
|
|
|
|
props.load(in); |
|
|
|
|
} catch (Exception ex) { |
|
|
|
|
Exceptions.printStackTrace(ex); |
|
|
|
|
} finally { |
|
|
|
|
if (in != null) { |
|
|
|
|
try { |
|
|
|
|
in.close(); |
|
|
|
|
} catch (IOException ex) { |
|
|
|
|
Exceptions.printStackTrace(ex); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return props.getProperty("version"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void setVersion(File path, String version) { |
|
|
|
|
Properties props = new Properties(); |
|
|
|
|
props.setProperty("version", version); |
|
|
|
|
OutputStream out = null; |
|
|
|
|
try { |
|
|
|
|
out = new BufferedOutputStream(new FileOutputStream(path)); |
|
|
|
|
props.store(out, "extension properties"); |
|
|
|
|
} catch (Exception ex) { |
|
|
|
|
Exceptions.printStackTrace(ex); |
|
|
|
|
} finally { |
|
|
|
|
if (out != null) { |
|
|
|
|
try { |
|
|
|
|
out.close(); |
|
|
|
|
} catch (IOException ex) { |
|
|
|
|
Exceptions.printStackTrace(ex); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean extractToolsShell(String zipPath, String extractionPath) { |
|
|
|
|
File path = new File(extractionPath); |
|
|
|
|
if (!path.exists()) { |
|
|
|
@ -229,13 +282,6 @@ public class ZipExtensionTool { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param progress the progress to set |
|
|
|
|
*/ |
|
|
|
|
public void setProgress(ProgressHandle progress) { |
|
|
|
|
this.progress = progress; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public class OutputReader implements Runnable { |
|
|
|
|
|
|
|
|
|
private Thread thread; |
|
|
|
@ -259,11 +305,7 @@ public class ZipExtensionTool { |
|
|
|
|
String line; |
|
|
|
|
while ((line = in.readLine()) != null) { |
|
|
|
|
if (line.trim().length() > 0) { |
|
|
|
|
if (progress != null) { |
|
|
|
|
progress.progress(line); |
|
|
|
|
} else { |
|
|
|
|
Logger.getLogger(this.getClass().getName()).log(Level.INFO, line); |
|
|
|
|
} |
|
|
|
|
Logger.getLogger(this.getClass().getName()).log(Level.INFO, line); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|