Start conversion to generics, please review and give feedback

git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/trunk/pool@1851054 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b6d4c63..ad37d4e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,7 +24,12 @@
   </properties>
 
   <body>
-    <release version="1.0.5" date="in SVN">
+    <release version="1.0.6" date="in SVN">
+       <action dev="painter" type="update">
+         Move to generics
+       </action>
+    </release>
+    <release version="1.0.5" date="2019-01-11">
        <action dev="painter" type="update">
          Update test to use junit 5
        </action>
diff --git a/src/java/org/apache/fulcrum/pool/BoundedBuffer.java b/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
index 56bfbed..d75a268 100644
--- a/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
@@ -133,12 +133,13 @@
      *
      * @return the oldest item from the buffer, or null if the buffer is empty.
      */
-    public synchronized Object poll()
+    public synchronized <T> T poll()
     {
         if (usedSlots_ > 0)
         {
             --usedSlots_;
-            Object old = array_[takePtr_];
+            @SuppressWarnings("unchecked")
+			T old = (T) array_[takePtr_];
             array_[takePtr_] = null;
             if (++takePtr_ >= array_.length)
                 takePtr_ = 0;
diff --git a/src/java/org/apache/fulcrum/pool/DefaultPoolService.java b/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
index f713bda..6e8e0f9 100644
--- a/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
+++ b/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
@@ -78,11 +78,11 @@
 	 * @return the instance.
 	 * @throws PoolException if recycling fails.
 	 */
-	public Object getInstance(String className) throws PoolException 
+	public <T> T getInstance(String className) throws PoolException 
 	{
 		try 
 		{
-			Object instance = pollInstance(className, null, null);
+			T instance = pollInstance(className, null, null);
 			return instance == null ? getFactory().getInstance(className) : instance;
 		} 
 		catch (FactoryException fe) 
@@ -183,17 +183,18 @@
 	 * Gets an instance of a specified class either from the pool or by instatiating
 	 * from the class if the pool is empty.
 	 *
+	 * @param <T> type of the class
 	 * @param clazz the class.
 	 * @return the instance.
 	 * @throws PoolException if recycling fails.
 	 */
 	@SuppressWarnings("unchecked")
-	public Object getInstance(Class clazz) throws PoolException 
+	public <T> T getInstance(Class<?> clazz) throws PoolException 
 	{
 		try 
 		{
-			Object instance = pollInstance(clazz.getName(), null, null);
-			return instance == null ? factoryService.getInstance(clazz) : instance;
+			T instance = pollInstance(clazz.getName(), null, null);
+			return instance == null ? (T) factoryService.getInstance(clazz) : instance;
 		} 
 		catch (FactoryException fe) 
 		{
@@ -211,11 +212,11 @@
 	 * @return the instance.
 	 * @throws PoolException if recycling fails.
 	 */
-	public Object getInstance(Class clazz, Object params[], String signature[]) throws PoolException 
+	public <T> T getInstance(Class<?> clazz, Object params[], String signature[]) throws PoolException 
 	{
 		try 
 		{
-			Object instance = pollInstance(clazz.getName(), params, signature);
+			T instance = pollInstance(clazz.getName(), params, signature);
 			
 			// TODO There is a whacky .toString() on the clazz object, 
 			// but otherwise it won't compile
@@ -349,7 +350,7 @@
 	 * @return the object or null.
 	 * @throws PoolException if recycling fails.
 	 */
-	private Object pollInstance(String className, Object[] params, String[] signature) throws PoolException 
+	private <T> T pollInstance(String className, Object[] params, String[] signature) throws PoolException 
 	{
 		PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
 		return pool != null ? pool.poll(params, signature, factoryService) : null;
diff --git a/src/java/org/apache/fulcrum/pool/PoolBuffer.java b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
index 7b36d94..4cb732c 100644
--- a/src/java/org/apache/fulcrum/pool/PoolBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
@@ -46,7 +46,7 @@
 	private ArrayList<Recycler> recyclers;
 
 	/**
-	 * Contructs a new pool buffer with a specific capacity.
+	 * Constructs a new pool buffer with a specific capacity.
 	 *
 	 * @param capacity a capacity.
 	 */
@@ -70,15 +70,15 @@
 	 * Polls for an instance from the pool.
 	 * 
 	 * 
-	 * @param params         object paramaters
+	 * @param params         object parameters
 	 * @param signature      signature of the class
 	 * @param factoryService service to add
 	 * @throws PoolException if service failed to be found
 	 * @return an instance or null.
 	 */
-	public Object poll(Object[] params, String[] signature, FactoryService factoryService) throws PoolException 
+	public <T> T poll(Object[] params, String[] signature, FactoryService factoryService) throws PoolException 
 	{
-		Object instance = pool.poll();
+		T instance = pool.poll();
 		if (instance != null) 
 		{
 			if (arrayCtorRecyclable) 
diff --git a/src/java/org/apache/fulcrum/pool/PoolService.java b/src/java/org/apache/fulcrum/pool/PoolService.java
index 7f3f755..a61b298 100644
--- a/src/java/org/apache/fulcrum/pool/PoolService.java
+++ b/src/java/org/apache/fulcrum/pool/PoolService.java
@@ -50,23 +50,25 @@
 	 * Gets an instance of a specified class either from the pool or by
 	 * instantiating from the class if the pool is empty.
 	 *
+	 * @param <T> type of the instance
 	 * @param clazz the class.
 	 * @return the instance.
 	 * @throws PoolException if recycling fails.
 	 */
-	public Object getInstance(Class clazz) throws PoolException;
+	public <T> T getInstance(Class<?> clazz) throws PoolException;
 
 	/**
 	 * Gets an instance of a specified class either from the pool or by
 	 * instantiating from the class if the pool is empty.
 	 *
+	 * @param <T>       type of the instance class
 	 * @param clazz     the class.
 	 * @param params    an array containing the parameters of the constructor.
 	 * @param signature an array containing the signature of the constructor.
 	 * @return the instance.
 	 * @throws PoolException if recycling fails.
 	 */
-	public Object getInstance(Class clazz, Object params[], String signature[]) throws PoolException;
+	public <T> T getInstance(Class<?> clazz, Object params[], String signature[]) throws PoolException;
 
 	/**
 	 * Puts a used object back to the pool. Objects implementing the Recyclable