You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by bl...@apache.org on 2009/09/24 01:15:15 UTC

svn commit: r818312 - /incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ProvidersRegistry.java

Author: bluk
Date: Wed Sep 23 23:15:15 2009
New Revision: 818312

URL: http://svn.apache.org/viewvc?rev=818312&view=rev
Log:
Always choose user providers over system

In cases where there is a user MessageBodyWriter<Object>
and a system MessageBodyWriter<String> and a String
is the response object, still check the user
provider before the system.

Modified:
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ProvidersRegistry.java

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ProvidersRegistry.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ProvidersRegistry.java?rev=818312&r1=818311&r2=818312&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ProvidersRegistry.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ProvidersRegistry.java Wed Sep 23 23:15:15 2009
@@ -631,7 +631,28 @@
                 return of.getInstanceClass();
             }
 
+            private static final double MAX_SYSTEM_PRIORITY = WinkApplication.SYSTEM_PRIORITY;
+
             public int compareTo(OFHolder<T> o) {
+                // check if this is a system provider
+                // system providers are less than
+                // WinkApplication.SYSTEM_PRIORITY + 0.1 (they start at
+                // WinkApplication.SYSTEM_PRIORITY and
+                // unless there are 10000000000, this shouldn't matter)
+                if (of.priority < MAX_SYSTEM_PRIORITY) {
+                    // this is a system provider
+                    if (o.of.priority > MAX_SYSTEM_PRIORITY) {
+                        // the other is a user provider so this is > 0.2
+                        return -1;
+                    }
+                } else if (o.of.priority < MAX_SYSTEM_PRIORITY) {
+                    // the other is a system provider
+                    if (of.priority > MAX_SYSTEM_PRIORITY) {
+                        // this is a user provider
+                        return 1;
+                    }
+                }
+
                 // first compare by media type
                 int compare = MediaTypeUtils.compareTo(mediaType, o.mediaType);
                 if (compare != 0) {