[jinput] Require java-headless instead of java (bz 1068289). Add 005_jinput_leak.patch and 006_jinput_java5.p

Jerry James jjames at fedoraproject.org
Mon Feb 24 19:37:10 UTC 2014


commit b78ad2df55b9a88b58df893a1c719387b1ed9256
Author: Jerry James <jamesjer at betterlinux.com>
Date:   Mon Feb 24 12:36:55 2014 -0700

    Require java-headless instead of java (bz 1068289).
    Add 005_jinput_leak.patch and 006_jinput_java5.patch.
    Link the plugin with Fedora LDFLAGS.
    Preserve timestamp when updating the POMs.
    Prevent jutils.jar from being included in jinput.jar.

 001_jinput_build.patch         |    2 +-
 003_jinput_usesystemload.patch |    2 +-
 005_jinput_leak.patch          |   12 +
 006_jinput_java5.patch         | 1123 ++++++++++++++++++++++++++++++++++++++++
 jinput.spec                    |   43 ++-
 5 files changed, 1170 insertions(+), 12 deletions(-)
---
diff --git a/001_jinput_build.patch b/001_jinput_build.patch
index 18d3edb..771041b 100644
--- a/001_jinput_build.patch
+++ b/001_jinput_build.patch
@@ -1,4 +1,4 @@
---- build.xml.orig	2011-03-23 12:33:26.374177000 -0600
+--- build.xml.orig	2011-03-23 12:33:26.000000000 -0600
 +++ build.xml	2012-02-02 11:46:43.419456439 -0700
 @@ -3,7 +3,7 @@
  <project name="Sun Games Initiative Client Technologies" basedir="." default="all" xmlns:artifact="urn:maven-artifact-ant">
diff --git a/003_jinput_usesystemload.patch b/003_jinput_usesystemload.patch
index 8d91796..efc26ba 100644
--- a/003_jinput_usesystemload.patch
+++ b/003_jinput_usesystemload.patch
@@ -1,4 +1,4 @@
---- plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java.orig	2011-02-20 15:11:41.234377000 +0100
+--- plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java.orig	2011-02-20 15:11:41.000000000 +0100
 +++ plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java	2011-07-20 08:20:17.725039445 +0200
 @@ -42,7 +42,7 @@
   * @author Jeremy Booth (jeremy at newdawnsoftware.com)
diff --git a/005_jinput_leak.patch b/005_jinput_leak.patch
new file mode 100644
index 0000000..c6176c9
--- /dev/null
+++ b/005_jinput_leak.patch
@@ -0,0 +1,12 @@
+Index: coreAPI/src/java/net/java/games/input/PluginClassLoader.java
+===================================================================
+--- coreAPI/src/java/net/java/games/input/PluginClassLoader.java	(revision 252)
++++ coreAPI/src/java/net/java/games/input/PluginClassLoader.java	(working copy)
+@@ -128,6 +128,7 @@
+         int length = (int)file.length();
+         byte[] bytes = new byte[length];
+         int length2 = fileInputStream.read(bytes);
++        fileInputStream.close();
+         assert length == length2;
+         return bytes;
+     }
diff --git a/006_jinput_java5.patch b/006_jinput_java5.patch
new file mode 100644
index 0000000..bd22e27
--- /dev/null
+++ b/006_jinput_java5.patch
@@ -0,0 +1,1123 @@
+--- ./applet/build.xml.orig	2009-03-22 15:27:59.000000000 -0600
++++ ./applet/build.xml	2014-02-22 14:00:00.000000000 -0700
+@@ -12,7 +12,7 @@
+ 	</target>
+ 	
+     <target name="compile" depends="init">
+-        <javac srcdir="src" destdir="classes" debug="true" deprecation="true" source="1.4" target="1.4">
++        <javac srcdir="src" destdir="classes" debug="true" deprecation="true" source="1.5" target="1.5">
+             <classpath>
+ 				<pathelement location="../dist/jinput.jar"/>
+ 				<pathelement location="../dist/jinput-test.jar"/>
+--- ./applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java.orig	2008-11-14 15:09:05.000000000 -0700
++++ ./applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java	2014-02-22 14:00:00.000000000 -0700
+@@ -50,16 +50,16 @@ public class JInputAppletResourceLoader
+ 	private int percentageDone = 0;
+ 
+ 	private String getPrivilegedProperty(final String property) {
+-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
+-			public Object run() {
++		return AccessController.doPrivileged(new PrivilegedAction<String>() {
++			public String run() {
+ 				return System.getProperty(property);
+ 			}
+ 		});
+ 	}
+ 
+ 	private String setPrivilegedProperty(final String property, final String value) {
+-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
+-			public Object run() {
++		return AccessController.doPrivileged(new PrivilegedAction<String>() {
++			public String run() {
+ 				return System.setProperty(property, value);
+ 			}
+ 		});
+@@ -94,13 +94,13 @@ public class JInputAppletResourceLoader
+ 		
+ 		JarFile localJarFile = new JarFile(new File(tempDir, nativeJar), true);
+ 		
+-		Enumeration jarEntries = localJarFile.entries();
++		Enumeration<JarEntry> jarEntries = localJarFile.entries();
+ 		int totalUncompressedBytes = 0;
+ 		int totalUncompressedBytesWritten = 0;
+-		List entriesToUse = new ArrayList();
++		List<JarEntry> entriesToUse = new ArrayList<JarEntry>();
+ 		
+ 		while(jarEntries.hasMoreElements()) {
+-			JarEntry jarEntry = (JarEntry)jarEntries.nextElement();
++			JarEntry jarEntry = jarEntries.nextElement();
+ 			String entryName = jarEntry.getName();
+ 			if(!entryName.startsWith("META-INF")) {
+ 				totalUncompressedBytes+=jarEntry.getSize();
+@@ -116,7 +116,7 @@ public class JInputAppletResourceLoader
+ 		}
+ 		
+ 		for(int i=0;i<entriesToUse.size();i++) {
+-			JarEntry jarEntry = (JarEntry) entriesToUse.get(i);
++			JarEntry jarEntry = entriesToUse.get(i);
+ 			InputStream inStream = localJarFile.getInputStream(localJarFile.getEntry(jarEntry.getName()));
+ 			File nativeFile = new File(tempNativesDir, jarEntry.getName());
+ 			FileOutputStream fos = new FileOutputStream(nativeFile);
+@@ -190,7 +190,6 @@ public class JInputAppletResourceLoader
+ 		byte[] dataBuffer = new byte[65535];
+ 		int bytesRead = 0;
+ 		int totalRead = 0;
+-		int totalWritten = 0;
+ 		
+ 		// Read the first block
+ 		bytesRead = inStream.read(dataBuffer, 0, dataBuffer.length);
+@@ -200,8 +199,6 @@ public class JInputAppletResourceLoader
+ 			
+ 			outStream.write(dataBuffer, 0, bytesRead);
+ 			
+-			totalWritten+=bytesRead;
+-			
+ 			int thisFilePercent = (int)((((float)totalRead)/contentLength)*100);
+ 			percentageDone = thisFilePercent/2; //Reading the file is only 1/2 the job
+ 			diagnosticLog.log(Level.INFO, "Written " + totalRead + " out of " + contentLength + " " + thisFilePercent + "%, (" + percentageDone + "% total)");
+--- ./coreAPI/build.xml.orig	2011-03-23 12:11:22.000000000 -0600
++++ ./coreAPI/build.xml	2014-02-22 14:00:00.000000000 -0700
+@@ -10,7 +10,7 @@
+     </target>
+ 
+     <target name="compile" depends="init">
+-		<javac srcdir="src/java" destdir="classes" debug="true" deprecation="true" source="1.4" target="1.4">
++		<javac srcdir="src/java" destdir="classes" debug="true" deprecation="true" source="1.5" target="1.5">
+ 			<include name="net/**"/>
+ 			<exclude name="**/Version.java"/>
+ 			<!-- To add something to the classpath: -->
+@@ -26,7 +26,7 @@
+ 				<filter token="API_VERSION" value="${api.version}"/>
+ 			</filterset>
+ 		</copy>
+-		<javac srcdir="build/src/java" destdir="classes" debug="true" deprecation="true" source="1.4" target="1.4">
++		<javac srcdir="build/src/java" destdir="classes" debug="true" deprecation="true" source="1.5" target="1.5">
+ 			<include name="net/**" />
+ 		</javac>
+     	<echo message="Build version class for ${api.version} build ${build.number}"/>
+@@ -44,7 +44,7 @@
+     <target name="javadoc" depends="init" description="Javadoc for my API.">
+         <javadoc packagenames="net.java.games.input.*" 
+                  destdir="apidocs" 
+-                 additionalparam="-source 1.4"
++                 additionalparam="-source 1.5"
+ 	        	 excludepackagenames="net.java.games.input.example.*,net.java.games.input.test.*">
+             <sourcepath>
+                 <pathelement location="src/java"/>
+--- ./coreAPI/src/java/net/java/games/input/AbstractController.java.orig	2007-04-19 05:59:23.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/AbstractController.java	2014-02-22 14:00:00.000000000 -0700
+@@ -39,9 +39,7 @@
+ package net.java.games.input;
+ 
+ import java.util.Map;
+-import java.util.List;
+ import java.util.HashMap;
+-import java.util.ArrayList;
+ 
+ import java.io.IOException;
+ 
+@@ -77,7 +75,7 @@ public abstract class AbstractController
+ 	/**
+ 	 * Map from Component.Identifiers to Components
+ 	 */
+-	private final Map id_to_components = new HashMap();
++	private final Map<Component.Identifier, Component> id_to_components = new HashMap<Component.Identifier, Component>();
+ 
+ 	private EventQueue event_queue = new EventQueue(EVENT_QUEUE_DEPTH);
+     
+@@ -128,7 +126,7 @@ public abstract class AbstractController
+      * if no component with the specified type could be found.
+      */
+     public final Component getComponent(Component.Identifier id) {
+-		return (Component)id_to_components.get(id);
++		return id_to_components.get(id);
+     }
+ 
+     /**
+--- ./coreAPI/src/java/net/java/games/input/ControllerEnvironment.java.orig	2009-10-31 05:06:12.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/ControllerEnvironment.java	2014-02-22 14:00:00.000000000 -0700
+@@ -38,9 +38,6 @@
+  *****************************************************************************/
+ package net.java.games.input;
+ 
+-import java.io.File;
+-import java.security.AccessController;
+-import java.security.PrivilegedAction;
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.logging.Logger;
+@@ -87,7 +84,7 @@ public abstract class ControllerEnvironm
+     /**
+      * List of controller listeners
+      */
+-    protected final ArrayList controllerListeners = new ArrayList();
++    protected final ArrayList<ControllerListener> controllerListeners = new ArrayList<ControllerListener>();
+     
+     /**
+      * Protected constructor for subclassing.
+@@ -130,9 +127,9 @@ public abstract class ControllerEnvironm
+      */
+     protected void fireControllerAdded(Controller c) {
+         ControllerEvent ev = new ControllerEvent(c);
+-        Iterator it = controllerListeners.iterator();
++        Iterator<ControllerListener> it = controllerListeners.iterator();
+         while (it.hasNext()) {
+-            ((ControllerListener)it.next()).controllerAdded(ev);
++            it.next().controllerAdded(ev);
+         }
+     }
+     
+@@ -142,9 +139,9 @@ public abstract class ControllerEnvironm
+      */
+     protected void fireControllerRemoved(Controller c) {
+         ControllerEvent ev = new ControllerEvent(c);
+-        Iterator it = controllerListeners.iterator();
++        Iterator<ControllerListener> it = controllerListeners.iterator();
+         while (it.hasNext()) {
+-            ((ControllerListener)it.next()).controllerRemoved(ev);
++            it.next().controllerRemoved(ev);
+         }
+     }
+     
+--- ./coreAPI/src/java/net/java/games/input/DefaultControllerEnvironment.java.orig	2011-03-23 12:54:48.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/DefaultControllerEnvironment.java	2014-02-22 14:00:00.000000000 -0700
+@@ -39,15 +39,10 @@
+ package net.java.games.input;
+ 
+ import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.IOException;
+-import java.lang.reflect.Method;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+ import java.util.ArrayList;
+ import java.util.Collection;
+-import java.util.Iterator;
+-import java.util.Properties;
+ import java.util.StringTokenizer;
+ import java.util.logging.Logger;
+ 
+@@ -73,7 +68,7 @@ class DefaultControllerEnvironment exten
+ 	 */
+ 	static void loadLibrary(final String lib_name) {
+ 		AccessController.doPrivileged(
+-				new PrivilegedAction() {
++				new PrivilegedAction<Object>() {
+ 					public final Object run() {
+ 						String lib_path = System.getProperty("net.java.games.input.librarypath");
+ 						if (lib_path != null)
+@@ -86,8 +81,8 @@ class DefaultControllerEnvironment exten
+ 	}
+     
+ 	static String getPrivilegedProperty(final String property) {
+-	       return (String)AccessController.doPrivileged(new PrivilegedAction() {
+-	                public Object run() {
++	       return AccessController.doPrivileged(new PrivilegedAction<String>() {
++	                public String run() {
+ 	                    return System.getProperty(property);
+ 	                }
+ 	            });
+@@ -95,8 +90,8 @@ class DefaultControllerEnvironment exten
+ 		
+ 
+ 	static String getPrivilegedProperty(final String property, final String default_value) {
+-       return (String)AccessController.doPrivileged(new PrivilegedAction() {
+-                public Object run() {
++       return AccessController.doPrivileged(new PrivilegedAction<String>() {
++                public String run() {
+                     return System.getProperty(property, default_value);
+                 }
+             });
+@@ -105,9 +100,9 @@ class DefaultControllerEnvironment exten
+     /**
+      * List of all controllers in this environment
+      */
+-    private ArrayList controllers;
++    private ArrayList<Controller> controllers;
+     
+-	private Collection loadedPlugins = new ArrayList();
++	private Collection<String> loadedPlugins = new ArrayList<String>();
+ 
+     /**
+      * Public no-arg constructor.
+@@ -122,8 +117,8 @@ class DefaultControllerEnvironment exten
+     public Controller[] getControllers() {
+         if (controllers == null) {
+             // Controller list has not been scanned.
+-            controllers = new ArrayList();
+-            AccessController.doPrivileged(new PrivilegedAction() {
++            controllers = new ArrayList<Controller>();
++            AccessController.doPrivileged(new PrivilegedAction<Object>() {
+                 public Object run() {
+                     scanControllers();
+                     return null;
+@@ -156,8 +151,8 @@ class DefaultControllerEnvironment exten
+ 				try {
+ 					if(!loadedPlugins.contains(className)) {
+ 						log.fine("Loading: " + className);
+-						Class ceClass = Class.forName(className);						
+-						ControllerEnvironment ce = (ControllerEnvironment) ceClass.newInstance();
++						Class<?> ceClass = Class.forName(className);						
++						ControllerEnvironment ce = ControllerEnvironment.class.cast(ceClass.newInstance());
+ 						if(ce.isSupported()) {
+ 							addControllers(ce.getControllers());
+ 							loadedPlugins.add(ce.getClass().getName());
+@@ -171,13 +166,7 @@ class DefaultControllerEnvironment exten
+ 			}
+         }
+         Controller[] ret = new Controller[controllers.size()];
+-        Iterator it = controllers.iterator();
+-        int i = 0;
+-        while (it.hasNext()) {
+-            ret[i] = (Controller)it.next();
+-            i++;
+-        }
+-        return ret;
++	return controllers.toArray(ret);
+     }
+     
+     /* This is jeff's new plugin code using Jeff's Plugin manager */
+@@ -200,14 +189,14 @@ class DefaultControllerEnvironment exten
+         }
+         try {
+             Plugins plugins = new Plugins(file);
+-            Class[] envClasses = plugins.getExtends(ControllerEnvironment.class);
++            Class<?>[] envClasses = plugins.getExtends(ControllerEnvironment.class);
+             for(int i=0;i<envClasses.length;i++){
+                 try {
+ 					ControllerEnvironment.logln("ControllerEnvironment "+
+                             envClasses[i].getName()
+                             +" loaded by "+envClasses[i].getClassLoader());
+-                    ControllerEnvironment ce = (ControllerEnvironment)
+-                    	envClasses[i].newInstance();
++                    ControllerEnvironment ce =
++                        ControllerEnvironment.class.cast(envClasses[i].newInstance());
+ 					if(ce.isSupported()) {
+ 	                    addControllers(ce.getControllers());
+ 						loadedPlugins.add(ce.getClass().getName());
+--- ./coreAPI/src/java/net/java/games/input/example/ReadFirstMouse.java.orig	2007-06-10 04:51:31.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/example/ReadFirstMouse.java	2014-02-22 14:00:00.000000000 -0700
+@@ -3,7 +3,6 @@ package net.java.games.input.example;
+ import net.java.games.input.Component;
+ import net.java.games.input.Controller;
+ import net.java.games.input.ControllerEnvironment;
+-import net.java.games.input.test.ControllerTextTest;
+ 
+ /**
+  * This class shows how to read the values in a polling loop for the first mouse
+--- ./coreAPI/src/java/net/java/games/input/Mouse.java.orig	2007-06-28 14:37:24.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/Mouse.java	2014-02-22 14:00:00.000000000 -0700
+@@ -38,9 +38,6 @@
+  *****************************************************************************/
+ package net.java.games.input;
+ 
+-import java.util.List;
+-import java.util.ArrayList;
+-
+ /**
+  * A Mouse is a type of controller consisting of two child controllers,
+  * a ball and a button pad.  This includes devices such as touch pads,
+--- ./coreAPI/src/java/net/java/games/input/PluginClassLoader.java.orig	2014-02-24 12:07:29.915047993 -0700
++++ ./coreAPI/src/java/net/java/games/input/PluginClassLoader.java	2014-02-24 12:07:33.990044413 -0700
+@@ -77,7 +77,7 @@ class PluginClassLoader extends ClassLoa
+      * Overrides findClass to first look in the parent class loader,
+      * then try loading the class from the plugin file system.
+      */
+-    protected Class findClass(String name)
++    protected Class<?> findClass(String name)
+         throws ClassNotFoundException {
+         // Try loading the class from the file system.
+         byte[] b = loadClassData(name);
+--- ./coreAPI/src/java/net/java/games/input/test/ControllerEventTest.java.orig	2011-03-25 17:09:25.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/test/ControllerEventTest.java	2014-02-22 14:00:00.000000000 -0700
+@@ -165,7 +165,7 @@ public class ControllerEventTest extends
+ 
+ 	private static class ControllerWindow extends JFrame {
+ 		Controller ca;
+-		Map axes_to_panels = new HashMap();
++		Map<Component, AxisPanel> axes_to_panels = new HashMap<Component, AxisPanel>();
+ 		boolean disabled = false;
+ 
+ 		public ControllerWindow(JFrame frame,Controller ca){
+@@ -207,7 +207,7 @@ public class ControllerEventTest extends
+ 		}
+ 
+ 		private void addAxis(JPanel p, Component ax){
+-			JPanel p2;
++			AxisPanel p2;
+ 			if (ax.isAnalog()) {
+ 				p2 = new AnalogAxisPanel(ax);
+ 			} else {
+@@ -234,14 +234,14 @@ public class ControllerEventTest extends
+ 			EventQueue event_queue = ca.getEventQueue();
+ 			Event event = new Event();
+ 			while (event_queue.getNextEvent(event)) {
+-				AxisPanel panel = (AxisPanel)axes_to_panels.get(event.getComponent());
++				AxisPanel panel = axes_to_panels.get(event.getComponent());
+ 				panel.setPollData(event.getValue());
+ 			}
+ 		}
+ 	}
+ 
+ 	static final long HEARTBEATMS =100; // 10th of a second
+-	List controllers = new ArrayList();
++	List<ControllerWindow> controllers = new ArrayList<ControllerWindow>();
+ 
+ 	public ControllerEventTest() {
+ 		super("Controller Event Test. Version: " + Version.getVersion());
+@@ -255,9 +255,9 @@ public class ControllerEventTest extends
+ 			public void run(){
+ 				try {
+ 					while(true){
+-						for(Iterator i=controllers.iterator();i.hasNext();){
++						for(Iterator<ControllerWindow> i=controllers.iterator();i.hasNext();){
+ 							try {
+-								ControllerWindow cw = (ControllerWindow)i.next();
++								ControllerWindow cw = i.next();
+ 								cw.poll();
+ 							} catch (Exception e) {
+ 								e.printStackTrace();
+--- ./coreAPI/src/java/net/java/games/input/test/ControllerReadTest.java.orig	2011-03-25 17:09:25.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/test/ControllerReadTest.java	2014-02-22 14:00:00.000000000 -0700
+@@ -166,7 +166,7 @@ public class ControllerReadTest extends
+ 
+ 	private static class ControllerWindow extends JFrame {
+ 		Controller ca;
+-		List axisList = new ArrayList();
++		List<AxisPanel> axisList = new ArrayList<AxisPanel>();
+ 		boolean disabled = false;
+ 
+ 		public ControllerWindow(JFrame frame,Controller ca){
+@@ -208,7 +208,7 @@ public class ControllerReadTest extends
+ 		}
+ 
+ 		private void addAxis(JPanel p, Component ax){
+-			JPanel p2;
++			AxisPanel p2;
+ 			if (ax.isAnalog()) {
+ 				p2 = new AnalogAxisPanel(ax);
+ 			} else {
+@@ -234,9 +234,9 @@ public class ControllerReadTest extends
+ 				setDisabled(false);
+ 			}
+ 			//System.out.println("Polled "+ca.getName());
+-			for(Iterator i =axisList.iterator();i.hasNext();){
++			for(Iterator<AxisPanel> i =axisList.iterator();i.hasNext();){
+ 				try {
+-					((AxisPanel)i.next()).poll();
++					i.next().poll();
+ 				}catch (Exception e) {
+ 					e.printStackTrace();
+ 				}
+@@ -245,7 +245,7 @@ public class ControllerReadTest extends
+ 	}
+ 
+ 	static final long HEARTBEATMS =100; // 10th of a second
+-	List controllers = new ArrayList();
++	List<ControllerWindow> controllers = new ArrayList<ControllerWindow>();
+ 
+ 	public ControllerReadTest() {
+ 		super("Controller Read Test. Version: " + Version.getVersion());
+@@ -259,9 +259,9 @@ public class ControllerReadTest extends
+ 			public void run(){
+ 				try {
+ 					while(true){
+-						for(Iterator i=controllers.iterator();i.hasNext();){
++						for(Iterator<ControllerWindow> i=controllers.iterator();i.hasNext();){
+ 							try {
+-								ControllerWindow cw = (ControllerWindow)i.next();
++								ControllerWindow cw = i.next();
+ 								cw.poll();
+ 							} catch (Exception e) {
+ 								e.printStackTrace();
+--- ./coreAPI/src/java/net/java/games/input/test/RumbleTest.java.orig	2011-03-25 17:09:25.000000000 -0600
++++ ./coreAPI/src/java/net/java/games/input/test/RumbleTest.java	2014-02-22 14:00:00.000000000 -0700
+@@ -47,7 +47,7 @@ public class RumbleTest {
+                         Thread.sleep(1);
+                     } catch (InterruptedException e) {
+                     }
+-                    k-=((float)(System.currentTimeMillis() - startTime))/1000f;
++                    k-=(System.currentTimeMillis() - startTime)/1000f;
+                 }
+                 try {
+                     Thread.sleep(1000);
+--- ./plugins/awt/build.xml.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/awt/build.xml	2014-02-22 14:00:00.000000000 -0700
+@@ -7,7 +7,7 @@
+     </target>
+ 
+     <target depends="init" name="compile">
+-        <javac debug="true" deprecation="true" destdir="classes" source="1.4" target="1.4" srcdir="src">
++        <javac debug="true" deprecation="true" destdir="classes" source="1.5" target="1.5" srcdir="src">
+             <classpath>
+                 <pathelement location="../../coreAPI/bin/jinput-core.jar"/>
+                 <pathelement location="../../lib/jutils.jar"/>
+@@ -28,7 +28,7 @@
+         <mkdir dir="apidocs"/>
+         <javadoc packagenames="net.java.games.input.*" 
+                  destdir="apidocs"
+-                 additionalparam="-source 1.4"
++                 additionalparam="-source 1.5"
+                  link="../../../coreAPI/apidocs">
+             <sourcepath>
+                 <pathelement location="src"/>
+--- ./plugins/awt/src/net/java/games/input/AWTKeyboard.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/awt/src/net/java/games/input/AWTKeyboard.java	2014-02-22 14:00:00.000000000 -0700
+@@ -43,7 +43,7 @@ import java.lang.reflect.Modifier;
+  * @author elias
+  */
+ final class AWTKeyboard extends Keyboard implements AWTEventListener {
+-	private final List awt_events = new ArrayList();
++	private final List<KeyEvent> awt_events = new ArrayList<KeyEvent>();
+ 	private Event[] processed_events;
+ 	private int processed_events_index;
+     
+@@ -54,7 +54,7 @@ final class AWTKeyboard extends Keyboard
+ 	}
+ 
+ 	private final static Component[] createComponents() {
+-		List components = new ArrayList();
++		List<Component> components = new ArrayList<Component>();
+ 		Field[] vkey_fields = KeyEvent.class.getFields();
+ 		for (int i = 0; i < vkey_fields.length; i++) {
+ 			Field vkey_field = vkey_fields[i];
+@@ -80,7 +80,7 @@ final class AWTKeyboard extends Keyboard
+ 		components.add(new Key(Component.Identifier.Key.RETURN));
+ 		components.add(new Key(Component.Identifier.Key.NUMPADCOMMA));
+ 		components.add(new Key(Component.Identifier.Key.COMMA));
+-		return (Component[])components.toArray(new Component[]{});
++		return components.toArray(new Component[]{});
+ 	}
+ 
+ 	private final void resizeEventQueue(int size) {
+@@ -96,12 +96,12 @@ final class AWTKeyboard extends Keyboard
+ 
+     public final synchronized void eventDispatched(AWTEvent event) {
+         if (event instanceof KeyEvent)
+-			awt_events.add(event);
++			awt_events.add((KeyEvent)event);
+ 	}
+ 
+ 	public final synchronized void pollDevice() throws IOException {
+ 		for (int i = 0; i < awt_events.size(); i++) {
+-			KeyEvent event = (KeyEvent)awt_events.get(i);
++			KeyEvent event = awt_events.get(i);
+ 			processEvent(event);
+         }
+ 		awt_events.clear();
+--- ./plugins/awt/src/net/java/games/input/AWTMouse.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/awt/src/net/java/games/input/AWTMouse.java	2014-02-22 14:00:00.000000000 -0700
+@@ -27,7 +27,6 @@
+ package net.java.games.input;
+ 
+ import java.awt.AWTEvent;
+-import java.awt.Point;
+ import java.awt.Toolkit;
+ import java.awt.event.AWTEventListener;
+ import java.awt.event.MouseEvent;
+@@ -47,8 +46,8 @@ final class AWTMouse extends Mouse imple
+ 	private final static int EVENT_Y = 2;
+ 	private final static int EVENT_BUTTON = 4;
+ 
+-	private final List awt_events = new ArrayList();
+-	private final List processed_awt_events = new ArrayList();
++	private final List<AWTEvent> awt_events = new ArrayList<AWTEvent>();
++	private final List<AWTEvent> processed_awt_events = new ArrayList<AWTEvent>();
+ 
+ 	private int event_state = EVENT_X;
+ 
+@@ -115,7 +114,7 @@ final class AWTMouse extends Mouse imple
+ 		Axis wheel = (Axis)getWheel();
+ 		wheel.setValue(0);
+ 		for (int i = 0; i < awt_events.size(); i++) {
+-			AWTEvent event = (AWTEvent)awt_events.get(i);
++			AWTEvent event = awt_events.get(i);
+ 			processEvent(event);
+ 			processed_awt_events.add(event);
+         }
+@@ -126,7 +125,7 @@ final class AWTMouse extends Mouse imple
+ 		while (true) {
+ 			if (processed_awt_events.isEmpty())
+ 				return false;
+-			AWTEvent awt_event = (AWTEvent)processed_awt_events.get(0);
++			AWTEvent awt_event = processed_awt_events.get(0);
+ 			if (awt_event instanceof MouseWheelEvent) {
+ 				MouseWheelEvent awt_wheel_event = (MouseWheelEvent)awt_event;
+ 				long nanos = awt_wheel_event.getWhen()*1000000L;
+--- ./plugins/linux/build.xml.orig	2012-02-02 08:57:51.545209862 -0700
++++ ./plugins/linux/build.xml	2014-02-22 14:00:00.000000000 -0700
+@@ -12,7 +12,7 @@
+ 
+     <target depends="init" name="compile">
+ 		<!--		<ant dir="src/native" target="createNativeDefinitions.java"/>-->
+-        <javac debug="true" deprecation="true" destdir="classes" source="1.4" target="1.4" srcdir="src/java">
++        <javac debug="true" deprecation="true" destdir="classes" source="1.5" target="1.5" srcdir="src/java">
+             <classpath>
+ 				<pathelement location="../../coreAPI/bin/jinput-core.jar"/>
+                 <pathelement location="../../lib/jutils.jar"/>
+@@ -33,7 +33,7 @@
+         <mkdir dir="apidocs"/>
+         <javadoc packagenames="net.java.games.input.*" 
+                  destdir="apidocs"
+-                 additionalparam="-source 1.4"
++                 additionalparam="-source 1.5"
+                  link="../../../coreAPI/apidocs">
+             <sourcepath>
+                 <pathelement location="src/java"/>
+--- ./plugins/linux/src/java/net/java/games/input/LinuxAbstractController.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxAbstractController.java	2014-02-22 14:00:00.000000000 -0700
+@@ -49,7 +49,7 @@ final class LinuxAbstractController exte
+ 	private final LinuxEventDevice device;
+ 	private final Type type;
+ 	
+-	protected LinuxAbstractController(LinuxEventDevice device, Component[] components, Controller[] children, Rumbler[] rumblers, Type type) throws IOException {
++	protected LinuxAbstractController(LinuxEventDevice device, Component[] components, Controller[] children, Rumbler[] rumblers, Type type) {
+ 		super(device.getName(), components, children, rumblers);
+ 		this.device = device;
+ 		this.port = device.getPortType();
+--- ./plugins/linux/src/java/net/java/games/input/LinuxDevice.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxDevice.java	2014-02-22 14:00:00.000000000 -0700
+@@ -26,10 +26,6 @@
+ package net.java.games.input;
+ 
+ import java.io.IOException;
+-import java.util.Map;
+-import java.util.HashMap;
+-import java.util.List;
+-import java.util.ArrayList;
+ 
+ /**
+  * @author elias
+--- ./plugins/linux/src/java/net/java/games/input/LinuxDeviceThread.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxDeviceThread.java	2014-02-22 14:00:00.000000000 -0700
+@@ -40,7 +40,7 @@ import java.util.ArrayList;
+  * is run on a single thread.
+  */
+ final class LinuxDeviceThread extends Thread {
+-	private final List tasks = new ArrayList();
++	private final List<LinuxDeviceTask> tasks = new ArrayList<LinuxDeviceTask>();
+ 	
+ 	public LinuxDeviceThread() {
+ 		setDaemon(true);
+@@ -50,7 +50,7 @@ final class LinuxDeviceThread extends Th
+ 	public synchronized final void run() {
+ 		while (true) {
+ 			if (!tasks.isEmpty()) {
+-				LinuxDeviceTask task = (LinuxDeviceTask)tasks.remove(0);
++				LinuxDeviceTask task = tasks.remove(0);
+ 				task.doExecute();
+ 				synchronized (task) {
+ 					task.notify();
+--- ./plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java.orig	2011-07-20 00:20:17.725039445 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java	2014-02-22 14:00:00.000000000 -0700
+@@ -43,11 +43,10 @@ import java.security.PrivilegedAction;
+  */
+ public final class LinuxEnvironmentPlugin extends ControllerEnvironment implements Plugin {
+ 	private final static String LIBNAME = "jinput";
+-	private final static String POSTFIX64BIT = "64";
+ 	private static boolean supported = false;
+ 	
+     private final Controller[] controllers;
+-	private final List devices = new ArrayList();
++	private final List<LinuxDevice> devices = new ArrayList<LinuxDevice>();
+ 	private final static LinuxDeviceThread device_thread = new LinuxDeviceThread();
+     
+ 	/**
+@@ -59,7 +58,7 @@ public final class LinuxEnvironmentPlugi
+ 	 */
+ 	static void loadLibrary(final String lib_name) {
+ 		AccessController.doPrivileged(
+-				new PrivilegedAction() {
++				new PrivilegedAction<Object>() {
+ 					public final Object run() {
+ 						String lib_path = System.getProperty("java.library.path");
+ 						try {
+@@ -78,8 +77,8 @@ public final class LinuxEnvironmentPlugi
+ 	}
+     
+ 	static String getPrivilegedProperty(final String property) {
+-	       return (String)AccessController.doPrivileged(new PrivilegedAction() {
+-	                public Object run() {
++	       return AccessController.doPrivileged(new PrivilegedAction<String>() {
++	                public String run() {
+ 	                    return System.getProperty(property);
+ 	                }
+ 	            });
+@@ -87,8 +86,8 @@ public final class LinuxEnvironmentPlugi
+ 		
+ 
+ 	static String getPrivilegedProperty(final String property, final String default_value) {
+-       return (String)AccessController.doPrivileged(new PrivilegedAction() {
+-                public Object run() {
++       return AccessController.doPrivileged(new PrivilegedAction<String>() {
++                public String run() {
+                     return System.getProperty(property, default_value);
+                 }
+             });
+@@ -111,7 +110,7 @@ public final class LinuxEnvironmentPlugi
+ 			this.controllers = enumerateControllers();
+ 	        logln("Linux plugin claims to have found " + controllers.length + " controllers");
+ 			AccessController.doPrivileged(
+-					new PrivilegedAction() {
++					new PrivilegedAction<Object>() {
+ 						public final Object run() {
+ 							Runtime.getRuntime().addShutdownHook(new ShutdownHook());
+ 							return null;
+@@ -131,11 +130,11 @@ public final class LinuxEnvironmentPlugi
+         return controllers;
+     }
+     
+-	private final static Component[] createComponents(List event_components, LinuxEventDevice device) {
++	private final static Component[] createComponents(List<LinuxEventComponent> event_components, LinuxEventDevice device) {
+ 		LinuxEventComponent[][] povs = new LinuxEventComponent[4][2];
+-		List components = new ArrayList();
++		List<LinuxComponent> components = new ArrayList<LinuxComponent>();
+ 		for (int i = 0; i < event_components.size(); i++) {
+-			LinuxEventComponent event_component = (LinuxEventComponent)event_components.get(i);
++			LinuxEventComponent event_component = event_components.get(i);
+ 			Component.Identifier identifier = event_component.getIdentifier();
+ 			
+ 			if (identifier == Component.Identifier.Axis.POV) {
+@@ -190,7 +189,7 @@ public final class LinuxEnvironmentPlugi
+ 		return components_array;
+ 	}
+ 	
+-	private final static Mouse createMouseFromDevice(LinuxEventDevice device, Component[] components) throws IOException {
++	private final static Mouse createMouseFromDevice(LinuxEventDevice device, Component[] components) {
+ 		Mouse mouse = new LinuxMouse(device, components, new Controller[]{}, device.getRumblers());
+ 		if (mouse.getX() != null && mouse.getY() != null && mouse.getPrimaryButton() != null)
+ 			return mouse;
+@@ -198,18 +197,18 @@ public final class LinuxEnvironmentPlugi
+ 			return null;
+ 	}
+ 	
+-	private final static Keyboard createKeyboardFromDevice(LinuxEventDevice device, Component[] components) throws IOException {
++	private final static Keyboard createKeyboardFromDevice(LinuxEventDevice device, Component[] components) {
+ 		Keyboard keyboard = new LinuxKeyboard(device, components, new Controller[]{}, device.getRumblers());
+ 		return keyboard;
+ 	}
+ 	
+-	private final static Controller createJoystickFromDevice(LinuxEventDevice device, Component[] components, Controller.Type type) throws IOException {
++	private final static Controller createJoystickFromDevice(LinuxEventDevice device, Component[] components, Controller.Type type) {
+ 		Controller joystick = new LinuxAbstractController(device, components, new Controller[]{}, device.getRumblers(), type);
+ 		return joystick;
+ 	}
+ 	
+-	private final static Controller createControllerFromDevice(LinuxEventDevice device) throws IOException {
+-		List event_components = device.getComponents();
++	private final static Controller createControllerFromDevice(LinuxEventDevice device) {
++		List<LinuxEventComponent> event_components = device.getComponents();
+ 		Component[] components = createComponents(event_components, device);
+ 		Controller.Type type = device.getType();
+ 		
+@@ -224,16 +223,16 @@ public final class LinuxEnvironmentPlugi
+ 	}
+ 	
+     private final Controller[] enumerateControllers() {
+-		List controllers = new ArrayList();
+-		List eventControllers = new ArrayList();
+-		List jsControllers = new ArrayList();
++		List<Controller> controllers = new ArrayList<Controller>();
++		List<Controller> eventControllers = new ArrayList<Controller>();
++		List<Controller> jsControllers = new ArrayList<Controller>();
+ 		enumerateEventControllers(eventControllers);
+ 		enumerateJoystickControllers(jsControllers);
+ 
+ 		for(int i=0;i<eventControllers.size();i++) {
+ 			for(int j=0;j<jsControllers.size();j++) {
+-				Controller evController = (Controller) eventControllers.get(i);
+-				Controller jsController = (Controller) jsControllers.get(j);
++				Controller evController = eventControllers.get(i);
++				Controller jsController = jsControllers.get(j);
+ 
+ 				// compare
+ 				// Check if the nodes have the same name
+@@ -269,85 +268,14 @@ public final class LinuxEnvironmentPlugi
+ 		return controllers_array;
+ 	}
+ 
+-	private final static Component.Identifier.Button getButtonIdentifier(int index) {
+-		switch (index) {
+-			case 0:
+-				return Component.Identifier.Button._0;
+-			case 1:
+-				return Component.Identifier.Button._1;
+-			case 2:
+-				return Component.Identifier.Button._2;
+-			case 3:
+-				return Component.Identifier.Button._3;
+-			case 4:
+-				return Component.Identifier.Button._4;
+-			case 5:
+-				return Component.Identifier.Button._5;
+-			case 6:
+-				return Component.Identifier.Button._6;
+-			case 7:
+-				return Component.Identifier.Button._7;
+-			case 8:
+-				return Component.Identifier.Button._8;
+-			case 9:
+-				return Component.Identifier.Button._9;
+-			case 10:
+-				return Component.Identifier.Button._10;
+-			case 11:
+-				return Component.Identifier.Button._11;
+-			case 12:
+-				return Component.Identifier.Button._12;
+-			case 13:
+-				return Component.Identifier.Button._13;
+-			case 14:
+-				return Component.Identifier.Button._14;
+-			case 15:
+-				return Component.Identifier.Button._15;
+-			case 16:
+-				return Component.Identifier.Button._16;
+-			case 17:
+-				return Component.Identifier.Button._17;
+-			case 18:
+-				return Component.Identifier.Button._18;
+-			case 19:
+-				return Component.Identifier.Button._19;
+-			case 20:
+-				return Component.Identifier.Button._20;
+-			case 21:
+-				return Component.Identifier.Button._21;
+-			case 22:
+-				return Component.Identifier.Button._22;
+-			case 23:
+-				return Component.Identifier.Button._23;
+-			case 24:
+-				return Component.Identifier.Button._24;
+-			case 25:
+-				return Component.Identifier.Button._25;
+-			case 26:
+-				return Component.Identifier.Button._26;
+-			case 27:
+-				return Component.Identifier.Button._27;
+-			case 28:
+-				return Component.Identifier.Button._28;
+-			case 29:
+-				return Component.Identifier.Button._29;
+-			case 30:
+-				return Component.Identifier.Button._30;
+-			case 31:
+-				return Component.Identifier.Button._31;
+-			default:
+-				return null;
+-		}
+-	}
+-
+ 	private final static Controller createJoystickFromJoystickDevice(LinuxJoystickDevice device) {
+-		List components = new ArrayList();
++		List<Component> components = new ArrayList<Component>();
+ 		byte[] axisMap = device.getAxisMap();
+ 		char[] buttonMap = device.getButtonMap();
+ 		LinuxJoystickAxis[] hatBits = new LinuxJoystickAxis[6];
+ 		
+ 		for (int i = 0; i < device.getNumButtons(); i++) {
+-			Component.Identifier button_id = (Component.Identifier)LinuxNativeTypesMap.getButtonID(buttonMap[i]);
++			Component.Identifier button_id = LinuxNativeTypesMap.getButtonID(buttonMap[i]);
+ 			if (button_id != null) {
+ 				LinuxJoystickButton button = new LinuxJoystickButton(button_id);
+ 				device.registerButton(i, button);
+@@ -387,10 +315,10 @@ public final class LinuxEnvironmentPlugi
+ 			}
+ 		}
+ 		
+-		return new LinuxJoystickAbstractController(device, (Component[])components.toArray(new Component[]{}), new Controller[]{}, new Rumbler[]{});
++		return new LinuxJoystickAbstractController(device, components.toArray(new Component[]{}), new Controller[]{}, new Rumbler[]{});
+ 	}
+ 
+-    private final void enumerateJoystickControllers(List controllers) {
++    private final void enumerateJoystickControllers(List<Controller> controllers) {
+ 		File[] joystick_device_files = enumerateJoystickDeviceFiles("/dev/input");
+ 		if (joystick_device_files == null || joystick_device_files.length == 0) {
+ 			joystick_device_files = enumerateJoystickDeviceFiles("/dev");
+@@ -424,20 +352,20 @@ public final class LinuxEnvironmentPlugi
+ 	}
+ 
+ 	private static String getAbsolutePathPrivileged(final File file) {
+-		return (String)AccessController.doPrivileged(new PrivilegedAction() {
+-			public Object run() {
++		return AccessController.doPrivileged(new PrivilegedAction<String>() {
++			public String run() {
+ 				return file.getAbsolutePath();
+ 			}
+ 		});
+ 	}
+ 
+ 	private static File[] listFilesPrivileged(final File dir, final FilenameFilter filter) {
+-		return (File[])AccessController.doPrivileged(new PrivilegedAction() {
+-			public Object run() {
++		return AccessController.doPrivileged(new PrivilegedAction<File[]>() {
++			public File[] run() {
+ 				File[] files = dir.listFiles(filter);
+-				Arrays.sort(files, new Comparator(){
+-					public int compare(Object f1, Object f2) {
+-						return ((File)f1).getName().compareTo(((File)f2).getName());
++				Arrays.sort(files, new Comparator<File>(){
++					public int compare(File f1, File f2) {
++						return f1.getName().compareTo(f2.getName());
+ 					}
+ 				});
+ 				return files;
+@@ -445,7 +373,7 @@ public final class LinuxEnvironmentPlugi
+ 		});
+ 	}
+ 
+-    private final void enumerateEventControllers(List controllers) {
++    private final void enumerateEventControllers(List<Controller> controllers) {
+ 		final File dev = new File("/dev/input");
+ 		File[] event_device_files = listFilesPrivileged(dev, new FilenameFilter() {
+ 			public final boolean accept(File dir, String name) {
+@@ -480,7 +408,7 @@ public final class LinuxEnvironmentPlugi
+ 		public final void run() {
+ 			for (int i = 0; i < devices.size(); i++) {
+ 				try {
+-					LinuxDevice device = (LinuxDevice)devices.get(i);
++					LinuxDevice device = devices.get(i);
+ 					device.close();
+ 				} catch (IOException e) {
+ 					logln("Failed to close device: " + e.getMessage());
+--- ./plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java.orig	2012-02-02 09:08:54.380920130 -0700
++++ ./plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java	2014-02-22 14:00:00.000000000 -0700
+@@ -35,12 +35,12 @@ import java.util.ArrayList;
+  * @author elias
+  */
+ final class LinuxEventDevice implements LinuxDevice {
+-	private final Map component_map = new HashMap();
++	private final Map<LinuxAxisDescriptor, LinuxComponent> component_map = new HashMap<LinuxAxisDescriptor, LinuxComponent>();
+ 	private final Rumbler[] rumblers;
+ 	private final long fd;
+ 	private final String name;
+ 	private final LinuxInputID input_id;
+-	private final List components;
++	private final List<LinuxEventComponent> components;
+ 	private final Controller.Type type;
+ 
+ 	/* Closed state variable that protects the validity of the file descriptor.
+@@ -83,23 +83,22 @@ final class LinuxEventDevice implements
+ 		return type;
+ 	}
+ 
+-	private final static int countComponents(List components, Class id_type, boolean relative) {
++	private final static int countComponents(List<LinuxEventComponent> components, Class<?> id_type, boolean relative) {
+ 		int count = 0;
+ 		for (int i = 0; i < components.size(); i++) {
+-			LinuxEventComponent component = (LinuxEventComponent)components.get(i);
++			LinuxEventComponent component = components.get(i);
+ 			if (id_type.isInstance(component.getIdentifier()) && relative == component.isRelative())
+ 				count++;
+ 		}
+ 		return count;
+ 	}
+ 
+-	private final Controller.Type guessType() throws IOException {
+-		List components = getComponents();
++	private final Controller.Type guessType() {
++		List<LinuxEventComponent> components = getComponents();
+ 		if (components.size() == 0)
+ 			return Controller.Type.UNKNOWN;
+ 		int num_rel_axes = countComponents(components, Component.Identifier.Axis.class, true);
+ 		int num_abs_axes = countComponents(components, Component.Identifier.Axis.class, false);
+-		int num_keys = countComponents(components, Component.Identifier.Key.class, false);
+ 		int mouse_traits = 0;
+ 		int keyboard_traits = 0;
+ 		int joystick_traits = 0;
+@@ -118,7 +117,7 @@ final class LinuxEventDevice implements
+ 		int num_gamepad_button_traits = 0;
+ 		// count button traits
+ 		for (int i = 0; i < components.size(); i++) {
+-			LinuxEventComponent component = (LinuxEventComponent)components.get(i);
++			LinuxEventComponent component = components.get(i);
+ 			if (component.getButtonTrait() == Controller.Type.MOUSE)
+ 				num_mouse_button_traits++;
+ 			else if (component.getButtonTrait() == Controller.Type.KEYBOARD)
+@@ -158,19 +157,19 @@ final class LinuxEventDevice implements
+ 	}
+ 
+ 	private final Rumbler[] enumerateRumblers() {
+-		List rumblers = new ArrayList();
++		List<Rumbler> rumblers = new ArrayList<Rumbler>();
+ 		try {
+ 			int num_effects = getNumEffects();
+ 			if (num_effects <= 0)
+-				return (Rumbler[])rumblers.toArray(new Rumbler[]{});
++				return rumblers.toArray(new Rumbler[]{});
+ 			byte[] ff_bits = getForceFeedbackBits();
+ 			if (isBitSet(ff_bits, NativeDefinitions.FF_RUMBLE) && num_effects > rumblers.size()) {
+ 				rumblers.add(new LinuxRumbleFF(this));
+ 			}
+ 		} catch (IOException e) {
+-			LinuxEnvironmentPlugin.logln("Failed to enumerate rumblers: " + e.getMessage());
++			ControllerEnvironment.logln("Failed to enumerate rumblers: " + e.getMessage());
+ 		}
+-		return (Rumbler[])rumblers.toArray(new Rumbler[]{});
++		return rumblers.toArray(new Rumbler[]{});
+ 	}
+ 
+ 	public final Rumbler[] getRumblers() {
+@@ -205,10 +204,10 @@ final class LinuxEventDevice implements
+ 	}
+ 
+ 	public final LinuxComponent mapDescriptor(LinuxAxisDescriptor desc) {
+-		return (LinuxComponent)component_map.get(desc);
++		return component_map.get(desc);
+ 	}
+ 
+-	public final Controller.PortType getPortType() throws IOException {
++	public final Controller.PortType getPortType() {
+ 		return input_id.getPortType();
+ 	}
+ 	
+@@ -243,7 +242,7 @@ final class LinuxEventDevice implements
+ 	}
+ 	private final static native void nGetAbsInfo(long fd, int abs_axis, LinuxAbsInfo abs_info) throws IOException;
+ 
+-	private final void addKeys(List components) throws IOException {
++	private final void addKeys(List<LinuxEventComponent> components) throws IOException {
+ 		byte[] bits = getKeysBits();
+ 		for (int i = 0; i < bits.length*8; i++) {
+ 			if (isBitSet(bits, i)) {
+@@ -253,7 +252,7 @@ final class LinuxEventDevice implements
+ 		}
+ 	}
+ 	
+-	private final void addAbsoluteAxes(List components) throws IOException {
++	private final void addAbsoluteAxes(List<LinuxEventComponent> components) throws IOException {
+ 		byte[] bits = getAbsoluteAxesBits();
+ 		for (int i = 0; i < bits.length*8; i++) {
+ 			if (isBitSet(bits, i)) {
+@@ -263,7 +262,7 @@ final class LinuxEventDevice implements
+ 		}
+ 	}
+ 
+-	private final void addRelativeAxes(List components) throws IOException {
++	private final void addRelativeAxes(List<LinuxEventComponent> components) throws IOException {
+ 		byte[] bits = getRelativeAxesBits();
+ 		for (int i = 0; i < bits.length*8; i++) {
+ 			if (isBitSet(bits, i)) {
+@@ -273,12 +272,12 @@ final class LinuxEventDevice implements
+ 		}
+ 	}
+ 
+-	public final List getComponents() {
++	public final List<LinuxEventComponent> getComponents() {
+ 		return components;
+ 	}
+ 
+-	private final List getDeviceComponents() throws IOException {
+-		List components = new ArrayList();
++	private final List<LinuxEventComponent> getDeviceComponents() throws IOException {
++		List<LinuxEventComponent> components = new ArrayList<LinuxEventComponent>();
+ 		byte[] evtype_bits = getEventTypeBits();
+ 		if (isBitSet(evtype_bits, NativeDefinitions.EV_KEY))
+ 			addKeys(components);
+--- ./plugins/linux/src/java/net/java/games/input/LinuxForceFeedbackEffect.java.orig	2007-06-10 09:03:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxForceFeedbackEffect.java	2014-02-22 14:00:00.000000000 -0700
+@@ -56,7 +56,7 @@ abstract class LinuxForceFeedbackEffect
+ 				write_task.write(0);
+ 			}
+ 		} catch (IOException e) {
+-			LinuxEnvironmentPlugin.logln("Failed to rumble: " + e);
++			ControllerEnvironment.logln("Failed to rumble: " + e);
+ 		}
+ 	}
+ 
+--- ./plugins/linux/src/java/net/java/games/input/LinuxJoystickDevice.java.orig	2007-08-12 14:09:14.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxJoystickDevice.java	2014-02-22 14:00:00.000000000 -0700
+@@ -28,8 +28,6 @@ package net.java.games.input;
+ import java.io.IOException;
+ import java.util.Map;
+ import java.util.HashMap;
+-import java.util.List;
+-import java.util.ArrayList;
+ 
+ /**
+  * @author elias
+@@ -48,8 +46,8 @@ final class LinuxJoystickDevice implemen
+ 	private final Event event = new Event();
+ 	private final LinuxJoystickButton[] buttons;
+ 	private final LinuxJoystickAxis[] axes;
+-	private final Map povXs = new HashMap(); 
+-	private final Map povYs = new HashMap(); 
++	private final Map<Integer, LinuxJoystickPOV> povXs = new HashMap<Integer, LinuxJoystickPOV>();
++	private final Map<Integer, LinuxJoystickPOV> povYs = new HashMap<Integer, LinuxJoystickPOV>();
+ 	private final byte[] axisMap;
+ 	private final char[] buttonMap;
+ 
+@@ -103,11 +101,11 @@ final class LinuxJoystickDevice implemen
+ 						float value = (float)joystick_event.getValue()/AXIS_MAX_VALUE;
+ 						axis.setValue(value);
+ 						if(povXs.containsKey(new Integer(index))) {
+-							LinuxJoystickPOV pov = (LinuxJoystickPOV)(povXs.get(new Integer(index)));
++							LinuxJoystickPOV pov = povXs.get(new Integer(index));
+ 							pov.updateValue();
+ 							event.set(pov, pov.getPollData(), joystick_event.getNanos());
+ 						} else if(povYs.containsKey(new Integer(index))) {
+-							LinuxJoystickPOV pov = (LinuxJoystickPOV)(povYs.get(new Integer(index)));
++							LinuxJoystickPOV pov = povYs.get(new Integer(index));
+ 							pov.updateValue();
+ 							event.set(pov, pov.getPollData(), joystick_event.getNanos());
+ 						} else {
+@@ -154,7 +152,7 @@ final class LinuxJoystickDevice implemen
+ 		povYs.put(new Integer(yIndex),pov);
+ 	}
+ 
+-	public final synchronized boolean getNextEvent(Event event) throws IOException {
++	public final synchronized boolean getNextEvent(Event event) {
+ 		return event_queue.getNextEvent(event);
+ 	}
+ 
+--- ./plugins/linux/src/java/net/java/games/input/LinuxJoystickPOV.java.orig	2007-08-12 15:59:25.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxJoystickPOV.java	2014-02-22 14:00:00.000000000 -0700
+@@ -1,7 +1,5 @@
+ package net.java.games.input;
+ 
+-import java.io.IOException;
+-
+ public class LinuxJoystickPOV extends LinuxJoystickAxis {
+ 
+ 	private LinuxJoystickAxis hatX;
+@@ -47,7 +45,7 @@ public class LinuxJoystickPOV extends Li
+ 		else if (last_x == 1 && last_y == 1)
+ 			setValue(Component.POV.DOWN_RIGHT);
+ 		else {
+-			LinuxEnvironmentPlugin.logln("Unknown values x = " + last_x + " | y = " + last_y);
++			ControllerEnvironment.logln("Unknown values x = " + last_x + " | y = " + last_y);
+ 			setValue(Component.POV.OFF);
+ 		}
+ 	}
+--- ./plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java	2014-02-22 14:00:00.000000000 -0700
+@@ -48,7 +48,7 @@ final class LinuxKeyboard extends Keyboa
+ 	private final PortType port;
+ 	private final LinuxEventDevice device;
+ 	
+-	protected LinuxKeyboard(LinuxEventDevice device, Component[] components, Controller[] children, Rumbler[] rumblers) throws IOException {
++	protected LinuxKeyboard(LinuxEventDevice device, Component[] components, Controller[] children, Rumbler[] rumblers) {
+ 		super(device.getName(), components, children, rumblers);
+ 		this.device = device;
+ 		this.port = device.getPortType();
+--- ./plugins/linux/src/java/net/java/games/input/LinuxMouse.java.orig	2006-04-29 16:29:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxMouse.java	2014-02-22 14:00:00.000000000 -0700
+@@ -48,7 +48,7 @@ final class LinuxMouse extends Mouse {
+ 	private final PortType port;
+ 	private final LinuxEventDevice device;
+ 	
+-	protected LinuxMouse(LinuxEventDevice device, Component[] components, Controller[] children, Rumbler[] rumblers) throws IOException {
++	protected LinuxMouse(LinuxEventDevice device, Component[] components, Controller[] children, Rumbler[] rumblers) {
+ 		super(device.getName(), components, children, rumblers);
+ 		this.device = device;
+ 		this.port = device.getPortType();
+--- ./plugins/linux/src/java/net/java/games/input/LinuxPOV.java.orig	2007-06-10 09:03:27.000000000 -0600
++++ ./plugins/linux/src/java/net/java/games/input/LinuxPOV.java	2014-02-22 14:00:00.000000000 -0700
+@@ -88,7 +88,7 @@ final class LinuxPOV extends LinuxCompon
+ 		else if (last_x == 1 && last_y == 1)
+ 			return Component.POV.DOWN_RIGHT;
+ 		else {
+-			LinuxEnvironmentPlugin.logln("Unknown values x = " + last_x + " | y = " + last_y);
++			ControllerEnvironment.logln("Unknown values x = " + last_x + " | y = " + last_y);
+ 			return Component.POV.OFF;
+ 		}
+ 	}
diff --git a/jinput.spec b/jinput.spec
index 1765ae0..432c355 100644
--- a/jinput.spec
+++ b/jinput.spec
@@ -1,6 +1,6 @@
 Name:           jinput
 Version:        2.0.6
-Release:        6.20130309svn%{?dist}
+Release:        7.20130309svn%{?dist}
 Summary:        Java Game Controller API
 
 Group:          Development/Libraries
@@ -23,17 +23,22 @@ Patch1:         002_jinput_dontstripso.patch
 # Fedora-specific patch: will not be sent upstream.  Load the shared library
 # from the Fedora-mandated location.
 Patch2:         003_jinput_usesystemload.patch
-# Patch from http://java.net/jira/browse/JINPUT-44 to not access usage bits,
+# Patch from https://java.net/jira/browse/JINPUT-44 to not access usage bits,
 # which are not supported in current Linux kernels
 Patch3:         004_jinput_usagebits.patch
+# Patch from https://java.net/jira/browse/JINPUT-51 to fix a resource leak
+Patch4:         005_jinput_leak.patch
+# Patch to be sent upstream to migrate to Java 5 (Java generics)
+Patch5:         006_jinput_java5.patch
 
 BuildRequires:  ant
-BuildRequires:  java-devel
+BuildRequires:  java-devel >= 1:1.6.0
+BuildRequires:  java-javadoc >= 1:1.6.0
 BuildRequires:  jpackage-utils
 BuildRequires:  jutils
 BuildRequires:  jutils-javadoc
 
-Requires:       java 
+Requires:       java-headless
 Requires:       jpackage-utils
 Requires:       jutils
 
@@ -63,16 +68,26 @@ This package contains the API documentation for %{name}.
 %patch1
 %patch2
 %patch3
+%patch4
+%patch5
 
 # Don't use prebuilt jars
 rm -f lib/*.jar
 build-jar-repository -s -p lib jutils
 
 # Fix the version string in the POMs
-sed -i 's/@VERSION@/%{version}/' jinput.pom jinput-platform.pom
+for fil in jinput.pom jinput-platform.pom; do
+  sed -i.orig 's/@VERSION@/%{version}/' $fil
+  touch -r $fil.orig $fil
+  rm -f $fil.orig
+done
 
-# Use Fedora's CFLAGS
-sed -i "s/-O2 -Wall/$RPM_OPT_FLAGS/" plugins/linux/src/native/build.xml
+# Use Fedora's CFLAGS and LDFLAGS
+sed -i "s/-O2 -Wall/$RPM_OPT_FLAGS/;s/-shared/& $RPM_LD_FLAGS/" \
+    plugins/linux/src/native/build.xml
+
+# Prevent jutils.jar from being included in jinput.jar
+sed -i '\@zipfileset.*/>@d' build.xml
 
 %build
 # Get the latest definitions from <linux/input.h>
@@ -91,7 +106,8 @@ ant dist
 # Therefore, we throw up our hands in despair and do this instead:
 javadoc -d javadoc -classpath lib/jutils.jar:dist/jinput.jar -package \
   -sourcepath plugins/awt/src:plugins/linux/src/java:coreAPI/src/java \
-  -link %{_javadocdir}/jutils net.java.games.input
+  -link file://%{_javadocdir}/jutils -link file://%{_javadocdir}/java \
+  -source 1.5 net.java.games.input
 
 %install
 # jar
@@ -123,12 +139,19 @@ ant versiontest
 %{_jnidir}/%{name}.jar
 %{_mavenpomdir}/*
 %{_mavendepmapfragdir}/*
-%{_libdir}/%{name}
+%{_libdir}/%{name}/
 
 %files javadoc
-%{_javadocdir}/%{name}
+%{_javadocdir}/%{name}/
 
 %changelog
+* Mon Feb 24 2014 Jerry James <loganjerry at gmail.com> - 2.0.6-7.20130309svn
+- Require java-headless instead of java (bz 1068289)
+- Add 005_jinput_leak.patch and 006_jinput_java5.patch
+- Link the plugin with Fedora LDFLAGS
+- Preserve timestamp when updating the POMs
+- Prevent jutils.jar from being included in jinput.jar
+
 * Sat Aug 03 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.0.6-6.20130309svn
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
 


More information about the scm-commits mailing list