Author: desruisseaux
Date: Wed Aug  7 10:45:39 2013
New Revision: 1511243

URL: http://svn.apache.org/r1511243
Log:
Allow external modules to specialize factories (especially TemporalFactory).
This is a temporary workaround while we are waiting for real dependency 
injection in SIS.

Modified:
    
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/system/DefaultFactories.java

Modified: 
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/system/DefaultFactories.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/system/DefaultFactories.java?rev=1511243&r1=1511242&r2=1511243&view=diff
==============================================================================
--- 
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/system/DefaultFactories.java
 [UTF-8] (original)
+++ 
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/system/DefaultFactories.java
 [UTF-8] Wed Aug  7 10:45:39 2013
@@ -86,11 +86,17 @@ public final class DefaultFactories exte
         T factory = type.cast(FACTORIES.get(type));
         if (factory == null && !FACTORIES.containsKey(type)) {
             for (final T candidate : ServiceLoader.load(type)) {
-                if 
(candidate.getClass().getName().startsWith("org.apache.sis.")) {
+                final Class<?> ct = candidate.getClass();
+                if (ct.getName().startsWith("org.apache.sis.")) {
                     factory = candidate;
                     break;
                 }
-                if (factory == null) {
+                /*
+                 * Select the first provider found in the iteration. If more 
than one provider is found,
+                 * select the most specialized type. This is okay only for 
relatively simple configurations,
+                 * while we are waiting for a real dependency injection 
mechanism.
+                 */
+                if (factory == null || 
factory.getClass().isAssignableFrom(ct)) {
                     factory = candidate;
                 }
             }


Reply via email to