From 45fbdfbf7c0ef9e1fd66c5e531aeff6f9e7f064e Mon Sep 17 00:00:00 2001 From: endolf Date: Fri, 14 Nov 2008 22:09:05 +0000 Subject: *** empty log message *** git-svn-id: file:///home/sven/projects/JOGL/git-svn/svn-server-sync/jinput/trunk@212 e343933a-64c8-49c5-92b1-88f2ce3e89e8 --- applet/build.xml | 34 ++++ applet/jinput.html | 18 ++ .../input/applet/JInputAppletResourceLoader.java | 221 +++++++++++++++++++++ .../applet/test/ControllerReadTestApplet.java | 45 +++++ 4 files changed, 318 insertions(+) create mode 100644 applet/build.xml create mode 100644 applet/jinput.html create mode 100644 applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java create mode 100644 applet/src/net/java/games/input/applet/test/ControllerReadTestApplet.java (limited to 'applet') diff --git a/applet/build.xml b/applet/build.xml new file mode 100644 index 0000000..562a19f --- /dev/null +++ b/applet/build.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/applet/jinput.html b/applet/jinput.html new file mode 100644 index 0000000..5700f4c --- /dev/null +++ b/applet/jinput.html @@ -0,0 +1,18 @@ + + + + + Introducing Java SE 6 Update 10 + + + + + + \ No newline at end of file diff --git a/applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java b/applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java new file mode 100644 index 0000000..63a18b5 --- /dev/null +++ b/applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java @@ -0,0 +1,221 @@ +/** + * Copyright (C) 2003 Jeremy Booth (jeremy@newdawnsoftware.com) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. Redistributions in binary + * form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided + * with the distribution. + * The name of the author may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + */ +package net.java.games.input.applet; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.ArrayList; +import java.util.Date; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class JInputAppletResourceLoader { + + private static final Logger diagnosticLog = Logger.getLogger(JInputAppletResourceLoader.class.getName()); + private int percentageDone = 0; + + private String getPrivilegedProperty(final String property) { + return (String) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return System.getProperty(property); + } + }); + } + + private String setPrivilegedProperty(final String property, final String value) { + return (String) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return System.setProperty(property, value); + } + }); + } + + public void loadResources(URL codeBase) throws IOException { + downloadNativesJar(codeBase); + extractNativesJar(codeBase); + setJInputClasspath(codeBase); + } + + public int getPercentageDone() { + return percentageDone; + } + + private void setJInputClasspath(URL codeBase) { + setPrivilegedProperty("net.java.games.input.librarypath", getTempDir(codeBase) + File.separator + "natives" + File.separator); + } + + private void extractNativesJar(URL codeBase) throws IOException { + File tempDir = new File(getTempDir(codeBase)); + String osName = getPrivilegedProperty("os.name"); + String nativeJar = null; + if (osName.startsWith("Win")) { + nativeJar = "jinput-windows-native.jar"; + } else if (osName.startsWith("Linux") || osName.startsWith("FreeBSD")) { + nativeJar = "jinput-linux-native.jar"; + } else if (osName.startsWith("Mac")) { + nativeJar = "jinput-osx-native.jar"; + } else { + } + + JarFile localJarFile = new JarFile(new File(tempDir, nativeJar), true); + + Enumeration jarEntries = localJarFile.entries(); + int totalUncompressedBytes = 0; + int totalUncompressedBytesWritten = 0; + List entriesToUse = new ArrayList(); + + while(jarEntries.hasMoreElements()) { + JarEntry jarEntry = (JarEntry)jarEntries.nextElement(); + String entryName = jarEntry.getName(); + if(!entryName.startsWith("META-INF")) { + totalUncompressedBytes+=jarEntry.getSize(); + entriesToUse.add(jarEntry); + diagnosticLog.log(Level.INFO, "Got entry " + entryName + " " + jarEntry.getSize() + " big, total of " + totalUncompressedBytes); + } + } + + File tempNativesDir = new File(tempDir, "natives"); + if(!tempNativesDir.exists()) { + tempNativesDir.mkdirs(); + tempNativesDir.deleteOnExit(); + } + + for(int i=0;i