package at.asit.helper; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import org.apache.commons.io.FileUtils; /*** * * @author aabraham * * @version 1.0.0 * * The created jar is used as helper library when installing pdf-over. * Basically, the helper determines the java version used including architecture and * appends afterwards the right swt library since this swt is platform dependend. * */ public class Main { private final static String SWT_VERSION = "4.8"; public static void main(String[] args) { System.out.println("start post install task"); copyLib(); } public static int getArchBits() { String arch = System.getProperty("sun.arch.data.model"); return arch.contains("64") ? 64 : 32; } public static String getSwtJarName() throws SWTLoadFailedException { String os = System.getProperty("os.name").toLowerCase(); if (os.contains("win")) os = "windows"; else if (os.contains("mac")) os = "mac"; else if (os.contains("linux") || os.contains("nix")) os = "linux"; else { throw new SWTLoadFailedException("Unknown OS: " + os); } return "swt-" + os + "-" + getArchBits() + ".jar"; } public static String getSwtJarPath() { String path = ""; try { path = URLDecoder.decode(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8"); int idx = path.lastIndexOf('/'); idx = path.lastIndexOf('/', idx - 1); path = path.substring(0, idx + 1); } catch (UnsupportedEncodingException e) { // Ignore System.err.println("Unsuported Encoding Exception " + e.getMessage()); } return path + "lib-swt/"; } private static class SWTLoadFailedException extends Exception { private static final long serialVersionUID = 1L; SWTLoadFailedException(String msg) { super(msg); } } private static String getSwtTargetLibName() throws SWTLoadFailedException { String os = System.getProperty("os.name").toLowerCase(); System.out.println("OS " + os + " detected!"); String swtTargetLibName; if (os.contains("win")) { swtTargetLibName = "org.eclipse.swt.win32.win32.x86-" + SWT_VERSION + ".jar"; } else if (os.contains("mac")) { swtTargetLibName = "org.eclipse.swt.cocoa.macosx-" + SWT_VERSION + ".jar"; } else if (os.contains("linux") || os.contains("nix")) { swtTargetLibName = "org.eclipse.swt.gtk.linux.x86-" + SWT_VERSION + ".jar"; } else { throw new SWTLoadFailedException("Unknown OS: " + os); } return swtTargetLibName; } private static void copyLib() { try { String swtLibPath = Main.getSwtJarPath() + Main.getSwtJarName(); File swtLib = new File(swtLibPath); if (!swtLib.isFile()) { System.err.println("not found "); throw new SWTLoadFailedException("Library " + swtLibPath + " not found"); } String newPath = swtLibPath.replace("lib-swt", "lib"); newPath = newPath.replace(Main.getSwtJarName(), getSwtTargetLibName()); File newFile = new File(newPath); System.out.println("Source Lib " + swtLibPath.toString()); System.out.println("Target Lib " + newFile.toString()); FileUtils.copyFile(swtLib, newFile); if (!newFile.isFile()) { System.err.println("not found "); throw new SWTLoadFailedException("Library " + swtLibPath + " not found"); } System.out.println("success "); return; } catch(Exception e){ e.printStackTrace(); } } }