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