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/03/27 13:07:46 UTC
svn commit: r1085911 - in
/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering:
RendererFactory.java RenderletManagerImpl.java
Author: reto
Date: Sun Mar 27 11:07:46 2011
New Revision: 1085911
URL: http://svn.apache.org/viewvc?rev=1085911&view=rev
Log:
CLEREZZA-460: implement unbindTypeRenderlet and toString methods
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/RenderletManagerImpl.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=1085911&r1=1085910&r2=1085911&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 Sun Mar 27 11:07:46 2011
@@ -65,8 +65,33 @@ public class RendererFactory {
@Reference
private StartLevel startLevelService;
- private Map<UriRef, RegexMap<MediaTypeMap<TypeRenderlet>>> typeRenderletMap =
- Collections.synchronizedMap(new HashMap<UriRef, RegexMap<MediaTypeMap<TypeRenderlet>>>());
+ /**
+ * A Tuple Type-Renderler Startlevel, for identity only the renderlet is relevan
+ */
+ private static class TypeRenderletStartLevel {
+ TypeRenderlet renderlet;
+ int startLevel;
+
+ private TypeRenderletStartLevel(TypeRenderlet renderlet, int startLevel) {
+ this.startLevel = startLevel;
+ this.renderlet = renderlet;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ TypeRenderletStartLevel that = (TypeRenderletStartLevel) o;
+ return renderlet.equals(that.renderlet);
+ }
+
+ @Override
+ public int hashCode() {
+ return renderlet.hashCode();
+ }
+ }
+
+ private Map<UriRef, RegexMap<MediaTypeMap<TypeRenderletStartLevel>>> typeRenderletMap =
+ Collections.synchronizedMap(new HashMap<UriRef, RegexMap<MediaTypeMap<TypeRenderletStartLevel>>>());
private BundleContext bundleContext;
@@ -119,17 +144,25 @@ public class RendererFactory {
Iterator<UriRef> sortedTypes = typePrioritizer.iterate(types);
while (sortedTypes.hasNext()) {
final UriRef currentType = sortedTypes.next();
- final RegexMap<MediaTypeMap<TypeRenderlet>> regexMap = typeRenderletMap.get(currentType);
+ final RegexMap<MediaTypeMap<TypeRenderletStartLevel>> regexMap = typeRenderletMap.get(currentType);
if (regexMap != null) {
- Iterator<MediaTypeMap<TypeRenderlet>> mediaTypeMapIter = regexMap.getMatching(mode);
+ Iterator<MediaTypeMap<TypeRenderletStartLevel>> mediaTypeMapIter = regexMap.getMatching(mode);
while (mediaTypeMapIter.hasNext()) {
- MediaTypeMap<TypeRenderlet> mediaTypeMap = mediaTypeMapIter.next();
+ MediaTypeMap<TypeRenderletStartLevel> mediaTypeMap = mediaTypeMapIter.next();
for (MediaType acceptableType : acceptableMediaTypes) {
- Iterator<TypeRenderlet> renderlets = mediaTypeMap.getMatching(acceptableType);
+ Iterator<TypeRenderletStartLevel> renderlets = mediaTypeMap.getMatching(acceptableType);
if (renderlets.hasNext()) {
- TypeRenderlet typeRenderlet = renderlets.next();
+ TypeRenderlet bestRenderlet = null;
+ int highestStartLevel = 0;
+ while (renderlets.hasNext()) {
+ TypeRenderletStartLevel typeRenderletStartLevel = renderlets.next();
+ if (typeRenderletStartLevel.startLevel > highestStartLevel) {
+ highestStartLevel = typeRenderletStartLevel.startLevel;
+ bestRenderlet = typeRenderletStartLevel.renderlet;
+ }
+ }
return new TypeRenderletRendererImpl(
- typeRenderlet,
+ bestRenderlet,
acceptableType,
this,
bundleContext);
@@ -157,27 +190,28 @@ public class RendererFactory {
private void registerRenderlet(TypeRenderlet typeRenderlet, int startLevel) {
final UriRef rdfType = typeRenderlet.getRdfType();
- RegexMap<MediaTypeMap<TypeRenderlet>> regexMap = typeRenderletMap.get(rdfType);
+ RegexMap<MediaTypeMap<TypeRenderletStartLevel>> regexMap = typeRenderletMap.get(rdfType);
if (regexMap == null) {
- regexMap = new RegexMap<MediaTypeMap<TypeRenderlet>>();
+ regexMap = new RegexMap<MediaTypeMap<TypeRenderletStartLevel>>();
typeRenderletMap.put(rdfType, regexMap);
}
final String mode = typeRenderlet.getModePattern();
- MediaTypeMap<TypeRenderlet> mediaTypeMap = regexMap.getFirstExactMatch(mode);
+ MediaTypeMap<TypeRenderletStartLevel> mediaTypeMap = regexMap.getFirstExactMatch(mode);
if (mediaTypeMap == null) {
- mediaTypeMap = new MediaTypeMap<TypeRenderlet>();
+ mediaTypeMap = new MediaTypeMap<TypeRenderletStartLevel>();
regexMap.addEntry(mode, mediaTypeMap);
}
final MediaType mediaType = typeRenderlet.getMediaType();
- mediaTypeMap.addEntry(mediaType, typeRenderlet);
+ mediaTypeMap.addEntry(mediaType, new TypeRenderletStartLevel(typeRenderlet, startLevel));
}
protected void unbindTypeRenderlet(TypeRenderlet typeRenderlet) {
- for (Map.Entry<UriRef, RegexMap<MediaTypeMap<TypeRenderlet>>> typeEntry: typeRenderletMap.entrySet()) {
- final RegexMap<MediaTypeMap<TypeRenderlet>> regexMap = typeEntry.getValue();
- for (Map.Entry<String, MediaTypeMap<TypeRenderlet>> regexEntry: regexMap.entrySet()) {
- final MediaTypeMap<TypeRenderlet> mediaTypeMap = regexEntry.getValue();
- if (mediaTypeMap.remove(typeRenderlet)) {
+ 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()) {
+ final MediaTypeMap<TypeRenderletStartLevel> mediaTypeMap = regexEntry.getValue();
+ if (mediaTypeMap.remove(typeRenderletStartLevel)) {
//for now we just leave the potentially empty mediaTypeMap there
//IMPROVEMENT remove without entries
return;
Modified: incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletManagerImpl.java?rev=1085911&r1=1085910&r2=1085911&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletManagerImpl.java (original)
+++ incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletManagerImpl.java Sun Mar 27 11:07:46 2011
@@ -282,6 +282,13 @@ public class RenderletManagerImpl implem
typeRenderletRequestProperties.getMediaType(),
renderletRequestProperties, os);
}
+
+ @Override
+ public String toString() {
+ return "RenderletManager managed for: "+renderletServiceName+" with "+renderingSpecificationUri;
+ }
+
+
};
ServiceRegistration registration = bundleContext.registerService(TypeRenderlet.class.getName(), typeRenderlet,
new Hashtable());