diff options
Diffstat (limited to 'pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils')
-rw-r--r-- | pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java new file mode 100644 index 00000000..f966bb71 --- /dev/null +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java @@ -0,0 +1,89 @@ +/* + * Copyright 2012 by A-SIT, Secure Information Technology Center Austria + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + */ +package at.asit.pdfover.gui.utils; + +// Imports +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.asit.pdfover.gui.exceptions.InitializationException; + +/** + * + */ +@SuppressWarnings("nls") +public class SWTLoader { + /** + * SLF4J Logger instance + **/ + private static final Logger log = LoggerFactory.getLogger(SWTLoader.class); + + /** + * Load the SWT library for this OS + * @throws InitializationException Loading failed + */ + public static void loadSWT() throws InitializationException { + try { + log.debug("loading " + getSwtJarName()); + URLClassLoader cl = (URLClassLoader)SWTLoader.class.getClassLoader(); + Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + addUrlMethod.setAccessible(true); + + String swtLibPath = "lib-swt/" + getSwtJarName(); + File swtLib = new File(swtLibPath); + if (!swtLib.isFile()) + throw new SWTLoadFailedException("Library " + swtLibPath + " not found"); + log.debug("Adding " + swtLib + " to ClassLoader..."); + addUrlMethod.invoke(cl, swtLib.toURI().toURL()); + log.debug("Success."); + } catch (Exception e) { + throw new InitializationException("SWT loading failed", e); + } + } + + private static int getArchBits() { + String arch = System.getProperty("os.arch"); + return arch.contains("64") ? 64 : 32; + } + + private 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 { + log.error("Unknown OS: " + os); + throw new SWTLoadFailedException("Unknown OS: " + os); + } + return "swt-" + os + "-" + getArchBits() + ".jar"; + } + + private static class SWTLoadFailedException extends Exception { + private static final long serialVersionUID = 1L; + + SWTLoadFailedException(String msg) { + super(msg); + } + } +} |