You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/09/19 08:21:57 UTC

svn commit: r1172474 - in /incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src: main/java/org/apache/clerezza/platform/typerendering/ main/java/org/apache/clerezza/platform/typerendering/utils/ test/java/org/ test/jav...

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());
+	}
+}