You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ph...@apache.org on 2013/01/25 13:26:58 UTC

svn commit: r1438469 - in /qpid/proton/branches/jni-binding: proton-j/proton-api/src/main/java/org/apache/qpid/proton/ tests/src/test/java/org/apache/qpid/proton/systemtests/

Author: philharveyonline
Date: Fri Jan 25 12:26:58 2013
New Revision: 1438469

URL: http://svn.apache.org/viewvc?rev=1438469&view=rev
Log:
PROTON-192: added convenience methods to ProtonFactoryLoader so it is useful in both our Java and our Python test code. Updated tests accordingly.

Added:
    qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/ProtonFactoryTest.java
      - copied, changed from r1438468, qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/FactoryTest.java
Removed:
    qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/FactoryTest.java
Modified:
    qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java

Modified: qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java?rev=1438469&r1=1438468&r2=1438469&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java (original)
+++ qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java Fri Jan 25 12:26:58 2013
@@ -23,23 +23,50 @@ import java.util.ServiceLoader;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+/**
+ * A thin wrapper around {@link ServiceLoader} intended for loading Proton object factories.
+ */
 public class ProtonFactoryLoader<C>
 {
     private static final Logger LOGGER = Logger.getLogger(ProtonFactoryLoader.class.getName());
     private Class<C> _factoryInterface;
-    
+
+    /**
+     * Use this constructor if you intend to explicitly provide factory interface later,
+     * i.e. by calling {@link #loadFactory(Class)}. This is useful if you want to use the same
+     * ProtonFactoryLoader instance for loading multiple factory types.
+     */
+    public ProtonFactoryLoader()
+    {
+    }
+
+    /**
+     * @param factoryInterface will be used as the factory interface class in calls to {@link #loadFactory()}.
+     */
     public ProtonFactoryLoader(Class<C> factoryInterface)
     {
         _factoryInterface = factoryInterface;
     }
 
+    /**
+     * Returns the Proton factory that implements the stored {@link ProtonFactoryLoader#_factoryInterface} class.
+     */
     public C loadFactory()
     {
-        ServiceLoader<C> serviceLoader = ServiceLoader.load(_factoryInterface);
+        return loadFactory(_factoryInterface);
+    }
+
+    public C loadFactory(Class<C> factoryInterface)
+    {
+        if(factoryInterface == null)
+        {
+            throw new IllegalStateException("factoryInterface has not been set.");
+        }
+        ServiceLoader<C> serviceLoader = ServiceLoader.load(factoryInterface);
         Iterator<C> serviceLoaderIterator = serviceLoader.iterator();
         if(!serviceLoaderIterator.hasNext())
         {
-            throw new IllegalStateException("Can't find service loader for " + _factoryInterface.getName());
+            throw new IllegalStateException("Can't find service loader for " + factoryInterface.getName());
         }
         C factory = serviceLoaderIterator.next();
         if(LOGGER.isLoggable(Level.FINE))

Copied: qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/ProtonFactoryTest.java (from r1438468, qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/FactoryTest.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/ProtonFactoryTest.java?p2=qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/ProtonFactoryTest.java&p1=qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/FactoryTest.java&r1=1438468&r2=1438469&rev=1438469&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/FactoryTest.java (original)
+++ qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/systemtests/ProtonFactoryTest.java Fri Jan 25 12:26:58 2013
@@ -18,22 +18,35 @@
  */
 package org.apache.qpid.proton.systemtests;
 
-import static org.junit.Assert.*;
-
+import static org.junit.Assert.assertNotNull;
 
 import org.apache.qpid.proton.ProtonFactoryLoader;
 import org.apache.qpid.proton.engine.EngineFactory;
 import org.apache.qpid.proton.message.MessageFactory;
 import org.junit.Test;
 
-public class FactoryTest
+public class ProtonFactoryTest
 {
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Test
+    public void testLoadFactoryWithExplicitClass()
+    {
+        ProtonFactoryLoader factoryLoader = new ProtonFactoryLoader();
+        MessageFactory messageFactory = (MessageFactory) factoryLoader.loadFactory(MessageFactory.class);
+        assertNotNull(messageFactory);
+    }
 
     @Test
     public void testMessageFactory()
     {
-        MessageFactory messageFactory = new ProtonFactoryLoader<MessageFactory>(MessageFactory.class).loadFactory();
-        assertNotNull(messageFactory);
+        ProtonFactoryLoader<MessageFactory> factoryLoader = new ProtonFactoryLoader<MessageFactory>(MessageFactory.class);
+        assertNotNull(factoryLoader.loadFactory());
     }
 
+    @Test
+    public void testEngineFactory()
+    {
+        ProtonFactoryLoader<EngineFactory> factoryLoader = new ProtonFactoryLoader<EngineFactory>(EngineFactory.class);
+        assertNotNull(factoryLoader.loadFactory());
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org