summaryrefslogtreecommitdiff
path: root/trunk/pdf-over-gui/src/main/java/at
diff options
context:
space:
mode:
authorTobias Kellner <tobias.kellner@iaik.tugraz.at>2012-11-08 20:07:55 +0100
committerTobias Kellner <tobias.kellner@iaik.tugraz.at>2012-11-08 20:07:55 +0100
commit01692d8e696807881a533d4a4f8fa1b0394de5e4 (patch)
tree32344bc4a24ed9348503167c7057de14814e26a9 /trunk/pdf-over-gui/src/main/java/at
parent4626780495948c96a1aa343c46c062c1635c33ef (diff)
downloadpdf-over-01692d8e696807881a533d4a4f8fa1b0394de5e4.tar.gz
pdf-over-01692d8e696807881a533d4a4f8fa1b0394de5e4.tar.bz2
pdf-over-01692d8e696807881a533d4a4f8fa1b0394de5e4.zip
Only build 1 pkg per OS, load SWT libs @ runtime
Diffstat (limited to 'trunk/pdf-over-gui/src/main/java/at')
-rw-r--r--trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java21
-rw-r--r--trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java89
2 files changed, 102 insertions, 8 deletions
diff --git a/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java
index e650cfc4..42a811be 100644
--- a/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java
+++ b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java
@@ -21,6 +21,8 @@ import java.io.File;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import at.asit.pdfover.gui.exceptions.InitializationException;
+import at.asit.pdfover.gui.utils.SWTLoader;
import at.asit.pdfover.gui.workflow.StateMachineImpl;
/**
@@ -37,20 +39,23 @@ public class Main {
* @param args
*/
public static void main(String[] args) {
- StateMachineImpl stateMachine = new StateMachineImpl(args);
-
+ log.debug("Loading SWT libraries"); //$NON-NLS-1$
+ try {
+ SWTLoader.loadSWT();
+ } catch (InitializationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
File configDir = new File(System.getProperty("user.home")+"/.pdfover"); //$NON-NLS-1$//$NON-NLS-2$
-
if(!configDir.exists()) {
configDir.mkdir();
-
}
-
+
+ StateMachineImpl stateMachine = new StateMachineImpl(args);
+
log.debug("Starting stateMachine ..."); //$NON-NLS-1$
-
stateMachine.start();
-
log.debug("Ended stateMachine ..."); //$NON-NLS-1$
}
-
}
diff --git a/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java
new file mode 100644
index 00000000..f966bb71
--- /dev/null
+++ b/trunk/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);
+ }
+ }
+}