Author: reto
Date: Mon Sep 19 06:21:56 2011
New Revision: 1172474

URL: http://svn.apache.org/viewvc?rev=1172474&view=rev
Log:
CLEREZZA-630: fixed regex map to actually do the sorting, removed previous fix 
attempt

Added:
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/utils/
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/utils/RegexMapTest.java
Modified:
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RendererFactory.java
    
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/utils/RegexMap.java

Modified: 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RendererFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RendererFactory.java?rev=1172474&r1=1172473&r2=1172474&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RendererFactory.java
 (original)
+++ 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RendererFactory.java
 Mon Sep 19 06:21:56 2011
@@ -35,7 +35,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.felix.scr.annotations.Services;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentContext;
@@ -49,9 +48,7 @@ import org.slf4j.LoggerFactory;
  * @author mir, reto
  */
 @Component
-@Services({
-       @Service(RendererFactory.class)
-})
+@Service(RendererFactory.class)
 @Reference(name = "typeRenderlet",
 cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
 policy = ReferencePolicy.DYNAMIC,
@@ -73,14 +70,12 @@ public class RendererFactory {
         * A Tuple Type-Renderler Startlevel, for identity only the renderlet 
is relevan
         */
        private static class TypeRenderletStartLevel {
-               final TypeRenderlet renderlet;
-               final int startLevel;
-               final String modePattern;
+               TypeRenderlet renderlet;
+               int startLevel;
 
-               private TypeRenderletStartLevel(TypeRenderlet renderlet, int 
startLevel, String modePattern) {
+               private TypeRenderletStartLevel(TypeRenderlet renderlet, int 
startLevel) {
                        this.startLevel = startLevel;
                        this.renderlet = renderlet;
-                       this.modePattern = modePattern;
                }
 
                @Override
@@ -159,18 +154,9 @@ public class RendererFactory {
                                                
Iterator<TypeRenderletStartLevel> renderlets = 
mediaTypeMap.getMatching(acceptableType);
                                                if (renderlets.hasNext()) {
                                                        TypeRenderlet 
bestRenderlet = null;
-                                                       //an exact match is 
preferred over regex-matches disregarding the start-level
-                                                       boolean hasExactMatch = 
false;
                                                        int highestStartLevel = 
0;
                                                        while 
(renderlets.hasNext()) {
                                                                
TypeRenderletStartLevel typeRenderletStartLevel = renderlets.next();
-                                                               if 
(!hasExactMatch) {
-                                                                       if 
((mode == null) || mode.equals(typeRenderletStartLevel.modePattern)) {
-                                                                               
hasExactMatch = true;
-                                                                               
highestStartLevel = typeRenderletStartLevel.startLevel;
-                                                                               
bestRenderlet = typeRenderletStartLevel.renderlet;
-                                                                       }
-                                                               }
                                                                if 
(typeRenderletStartLevel.startLevel > highestStartLevel) {
                                                                        
highestStartLevel = typeRenderletStartLevel.startLevel;
                                                                        
bestRenderlet = typeRenderletStartLevel.renderlet;
@@ -217,11 +203,11 @@ public class RendererFactory {
                        regexMap.addEntry(modePattern, mediaTypeMap);
                }
                final MediaType mediaType = typeRenderlet.getMediaType();
-               mediaTypeMap.addEntry(mediaType, new 
TypeRenderletStartLevel(typeRenderlet, startLevel, modePattern));
+               mediaTypeMap.addEntry(mediaType, new 
TypeRenderletStartLevel(typeRenderlet, startLevel));
        }
 
        protected void unbindTypeRenderlet(TypeRenderlet typeRenderlet) {
-               TypeRenderletStartLevel typeRenderletStartLevel = new 
TypeRenderletStartLevel(typeRenderlet, 0, null);
+               TypeRenderletStartLevel typeRenderletStartLevel = new 
TypeRenderletStartLevel(typeRenderlet, 0);
                for (Map.Entry<UriRef, 
RegexMap<MediaTypeMap<TypeRenderletStartLevel>>> typeEntry: 
typeRenderletMap.entrySet()) {
                        final RegexMap<MediaTypeMap<TypeRenderletStartLevel>> 
regexMap = typeEntry.getValue();
                        for (Map.Entry<String, 
MediaTypeMap<TypeRenderletStartLevel>> regexEntry: regexMap.entrySet()) {

Modified: 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/utils/RegexMap.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/utils/RegexMap.java?rev=1172474&r1=1172473&r2=1172474&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/utils/RegexMap.java
 (original)
+++ 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/utils/RegexMap.java
 Mon Sep 19 06:21:56 2011
@@ -42,7 +42,7 @@ public class RegexMap<T> {
                        this.pattern = Pattern.compile(regex);
                        this.entry = entry;
                        for (char ch : regex.toCharArray()) {
-                               if ((ch >= 'a') && (ch <= 'Z')) 
{regexStrength++;} else
+                               if ((ch >= 'A') && (ch <= 'z')) 
{regexStrength++;} else
                                if ((ch >= '0') && (ch <= '9')) regexStrength++;
                        }
 
@@ -54,7 +54,7 @@ public class RegexMap<T> {
 
                @Override
                public int compareTo(Tuple o) {
-                       return regexStrength - o.regexStrength;
+                       return o.regexStrength - regexStrength;
                }
 
                @Override
@@ -97,6 +97,7 @@ public class RegexMap<T> {
        public void addEntry(String pRegex, T entry) {
                final String regex = pRegex != null ? pRegex : "";
                tuples.add(new Tuple(regex, entry));
+               Collections.sort(tuples);
        }
 
        /**

Added: 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/utils/RegexMapTest.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/utils/RegexMapTest.java?rev=1172474&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/utils/RegexMapTest.java
 (added)
+++ 
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/utils/RegexMapTest.java
 Mon Sep 19 06:21:56 2011
@@ -0,0 +1,16 @@
+package org.apache.clerezza.platform.typerendering.utils;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+
+public class RegexMapTest {
+
+       @Test
+       public void orderingTest() {
+               RegexMap<Object> map = new RegexMap<Object>();
+               map.addEntry("(naked|.*-naked)", "v2");
+               map.addEntry("concept-find-create-naked", "v1");
+               Assert.assertEquals("v1", 
map.getMatching("concept-find-create-naked").next());
+       }
+}


Reply via email to