Author: mir
Date: Tue Sep 14 16:29:24 2010
New Revision: 996975

URL: http://svn.apache.org/viewvc?rev=996975&view=rev
Log:
CLEREZZA-301: now passing the most concrete media type to the renderer

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java?rev=996975&r1=996974&r2=996975&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
 Tue Sep 14 16:29:24 2010
@@ -128,9 +128,10 @@ public class RenderletRendererFactoryImp
                        for (RenderletDefinition renderletDef : renderletDefs) {
                                MediaType mediaTypeInGraph = 
renderletDef.getMediaType();
                                int prio = -1;
+                               MediaType mediaTypeRequested = null;
                                for (int i = 0; i < 
acceptableMediaTypes.size(); i++) {
-                                       MediaType acceptableMediaType = 
acceptableMediaTypes.get(i);
-                                       if 
(acceptableMediaType.isCompatible(mediaTypeInGraph)) {
+                                       mediaTypeRequested = 
acceptableMediaTypes.get(i);
+                                       if 
(mediaTypeRequested.isCompatible(mediaTypeInGraph)) {
                                                prio = i;
                                                break;
                                        }
@@ -151,7 +152,7 @@ public class RenderletRendererFactoryImp
                                                        
renderletDef.getRenderingSpecification(),
                                                        renderlet,
                                                        mode,
-                                                       mediaTypeInGraph,
+                                                       
getMostConcreteMediaType(mediaTypeRequested, mediaTypeInGraph),
                                                        prio, 
RenderletRendererFactoryImpl.this,
                                                        
renderletDef.isBuiltIn()));
                                }
@@ -163,6 +164,25 @@ public class RenderletRendererFactoryImp
                return null;
        }
 
+       private MediaType getMostConcreteMediaType(MediaType a, MediaType b) {
+               if (a == null) {
+                       return b;
+               }
+               if (b == null) {
+                       return a;
+               }
+               if (!a.isWildcardType()) {
+                       return a;
+               }
+               if (!b.isWildcardType()) {
+                       return b;
+               }
+               if (!a.isWildcardSubtype()) {
+                       return a;
+               }
+               return b;
+       }
+
        @Override
        public void registerRenderlet(String renderlet,
                        UriRef renderingSpecification,


Reply via email to