Author: reto
Date: Thu Dec 17 09:48:37 2009
New Revision: 891606

URL: http://svn.apache.org/viewvc?rev=891606&view=rev
Log:
CLEREZZA-34: merged into trunk

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/
   (props changed)
    
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

Propchange: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Thu Dec 17 09:48:37 2009
@@ -0,0 +1,2 @@
+/incubator/clerezza/issues/CLEREZZA-34:890804-891129
+/incubator/clerezza/issues/CLEREZZA-34/org.apache.clerezza.platform.typerendering:890796-891226

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=891606&r1=891605&r2=891606&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
 Thu Dec 17 09:48:37 2009
@@ -18,6 +18,8 @@
  */
 package org.apache.clerezza.platform.typerendering;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -68,33 +70,26 @@
        @Service(RenderletManager.class),
        @Service(RendererFactory.class)
 })
-...@reference(name="renderlet",
-       cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,
-       policy=ReferencePolicy.DYNAMIC,
-       referenceInterface=Renderlet.class)
+...@reference(name = "renderlet",
+cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+policy = ReferencePolicy.DYNAMIC,
+referenceInterface = Renderlet.class)
 public class RenderletRendererFactoryImpl implements RenderletManager, 
RendererFactory,
-               GraphListener{
+               GraphListener {
 
        private Logger logger = 
LoggerFactory.getLogger(RenderletRendererFactoryImpl.class);
-
        @Reference
        private ContentGraphProvider contentGraphProvider;
-
        private static final String RDF_TYPE_PRIO_LIST_URI =
                        "http://tpf.localhost/rdfTypePriorityList";;
-
        /**
         * Mapping of service pid's of renderlets to the service objects.
         */
-       private Map<String,Renderlet> renderletMap = new 
HashMap<String,Renderlet>();
-
+       private Map<String, Renderlet> renderletMap = new HashMap<String, 
Renderlet>();
        private ComponentContext componentContext;
-
        private ReentrantReadWriteLock configLock = new 
ReentrantReadWriteLock();
-
        private Set<ServiceReference> renderletRefStore =
                        Collections.synchronizedSet(new 
HashSet<ServiceReference>());
-       
        List<Resource> rdfTypePrioList;
 
        @Override
@@ -102,7 +97,7 @@
                // extract rdf types
                Set<UriRef> rdfTypes = new HashSet<UriRef>();
                Iterator<UriRef> it = resource.getUriRefObjects(RDF.type);
-               while(it.hasNext()) {
+               while (it.hasNext()) {
                        final UriRef rdfType = it.next();
                        rdfTypes.add(rdfType);
                }
@@ -110,57 +105,65 @@
                return getRenderer(rdfTypes, mode, acceptableMediaTypes);
        }
 
-       private RendererImpl getRenderer(Set<UriRef> rdfTypes,
-                       String mode, List<MediaType> acceptableMediaTypes) {
-               MGraph contentGraph = contentGraphProvider.getContentGraph();
-               SortedSet<RendererImpl> configurationList =
-                               new TreeSet<RendererImpl>();
-               for (Resource prioRdfType : rdfTypePrioList) {
-                       if (!rdfTypes.contains(prioRdfType)) {
-                               continue;
-                       }
-                       Iterator<Triple> renderletDefs =
-                                       contentGraph.filter(null, 
TYPERENDERING.renderedType, prioRdfType);
-                       while (renderletDefs.hasNext()) {
-                               NonLiteral renderletDef = 
renderletDefs.next().getSubject();
-                               GraphNode renderletDefNode = new 
GraphNode(renderletDef,
-                                               contentGraph);
-                               String renderingModeStr = getMode(contentGraph,
-                                               renderletDef);
-                               MediaType mediaTypeInGraph = 
getMediaType(contentGraph, renderletDef);
-                               int prio = -1;
-                               for (int i = 0; i < 
acceptableMediaTypes.size(); i++) {
-                                       MediaType acceptableMediaType = 
acceptableMediaTypes.get(i);
-                                       if 
(acceptableMediaType.isCompatible(mediaTypeInGraph)) {
-                                               prio = i;
-                                               break;
+       private RendererImpl getRenderer(final Set<UriRef> rdfTypes,
+                       final String mode, final List<MediaType> 
acceptableMediaTypes) {
+               //this is done as priviledged as the user need not have right 
to read from
+               //the content graph for the locating the template (this is 
needed e.g.
+               //to show a login page)
+               return AccessController.doPrivileged(new 
PrivilegedAction<RendererImpl>() {
+                       @Override
+                       public RendererImpl run() {
+                               MGraph contentGraph = 
contentGraphProvider.getContentGraph();
+                               SortedSet<RendererImpl> configurationList =
+                                               new TreeSet<RendererImpl>();
+                               for (Resource prioRdfType : rdfTypePrioList) {
+                                       if (!rdfTypes.contains(prioRdfType)) {
+                                               continue;
                                        }
-                               }
-                               if (prio == -1) {
-                                       continue;
-                               }
-                               if (equals(renderingModeStr, mode)) {
-                                       final String renderletName = 
getRenderletName(contentGraph, renderletDef);
-                                       Renderlet renderlet = renderletMap.
-                                                       get(renderletName);
-                                       if (renderlet == null) {
-                                               throw new 
RenderletNotFoundException("Renderlet "+renderletName+" could not be loaded.");
+                                       Iterator<Triple> renderletDefs =
+                                                       
contentGraph.filter(null, TYPERENDERING.renderedType, prioRdfType);
+                                       while (renderletDefs.hasNext()) {
+                                               NonLiteral renderletDef = 
renderletDefs.next().getSubject();
+                                               GraphNode renderletDefNode = 
new GraphNode(renderletDef,
+                                                               contentGraph);
+                                               String renderingModeStr = 
getMode(contentGraph,
+                                                               renderletDef);
+                                               MediaType mediaTypeInGraph = 
getMediaType(contentGraph, renderletDef);
+                                               int prio = -1;
+                                               for (int i = 0; i < 
acceptableMediaTypes.size(); i++) {
+                                                       MediaType 
acceptableMediaType = acceptableMediaTypes.get(i);
+                                                       if 
(acceptableMediaType.isCompatible(mediaTypeInGraph)) {
+                                                               prio = i;
+                                                               break;
+                                                       }
+                                               }
+                                               if (prio == -1) {
+                                                       continue;
+                                               }
+                                               if 
(RenderletRendererFactoryImpl.equals(renderingModeStr, mode)) {
+                                                       final String 
renderletName = getRenderletName(contentGraph, renderletDef);
+                                                       Renderlet renderlet = 
renderletMap.get(renderletName);
+                                                       if (renderlet == null) {
+                                                               throw new 
RenderletNotFoundException("Renderlet " + renderletName + " could not be 
loaded.");
+                                                       }
+                                                       
configurationList.add(new RendererImpl(
+                                                                       
getRenderingSpecification(contentGraph, renderletDef),
+                                                                       
renderlet,
+                                                                       
mediaTypeInGraph,
+                                                                       prio, 
new CallbackRendererImpl(RenderletRendererFactoryImpl.this, mediaTypeInGraph),
+                                                                       
renderletDefNode.hasProperty(RDF.type,
+                                                                       
TYPERENDERING.BuiltInRenderletDefinition)));
+                                               }
+
+                                       }
+                                       if (!configurationList.isEmpty()) {
+                                               return 
configurationList.first();
                                        }
-                                       configurationList.add(new RendererImpl(
-                                                       
getRenderingSpecification(contentGraph, renderletDef),
-                                                       renderlet,
-                                                       mediaTypeInGraph,
-                                                       prio, new 
CallbackRendererImpl(this, mediaTypeInGraph),
-                                                       
renderletDefNode.hasProperty(RDF.type,
-                                                       
TYPERENDERING.BuiltInRenderletDefinition)));
                                }
-
-                       }
-                       if (!configurationList.isEmpty()) {
-                               return configurationList.first();
+                               return null;
                        }
-               }
-               return null;
+               });
+
        }
 
        /**
@@ -175,8 +178,7 @@
                Iterator<Triple> renderletModeIter = contentGraph.filter(
                                (NonLiteral) renderletDef, 
TYPERENDERING.renderingMode, null);
                if (renderletModeIter.hasNext()) {
-                       TypedLiteral renderletMode = (TypedLiteral) 
renderletModeIter.next()
-                                       .getObject();
+                       TypedLiteral renderletMode = (TypedLiteral) 
renderletModeIter.next().getObject();
                        return 
LiteralFactory.getInstance().createObject(String.class,
                                        renderletMode);
                }
@@ -224,8 +226,7 @@
                Iterator<Triple> renderletModeIter = contentGraph.filter(
                                (NonLiteral) renderletDef, 
TYPERENDERING.renderlet, null);
                if (renderletModeIter.hasNext()) {
-                       TypedLiteral renderletMode = (TypedLiteral) 
renderletModeIter.next()
-                                       .getObject();
+                       TypedLiteral renderletMode = (TypedLiteral) 
renderletModeIter.next().getObject();
                        String renderletName = 
LiteralFactory.getInstance().createObject(String.class,
                                        renderletMode);
                        return renderletName;
@@ -237,8 +238,7 @@
                Iterator<Triple> mediaTypeIter = contentGraph.filter(
                                (NonLiteral) renderletDef, 
TYPERENDERING.mediaType, null);
                if (mediaTypeIter.hasNext()) {
-                       TypedLiteral renderletMode = (TypedLiteral) 
mediaTypeIter.next()
-                                       .getObject();
+                       TypedLiteral renderletMode = (TypedLiteral) 
mediaTypeIter.next().getObject();
                        String mediaTypeStr = 
LiteralFactory.getInstance().createObject(String.class,
                                        renderletMode);
                        return MediaType.valueOf(mediaTypeStr);
@@ -253,14 +253,13 @@
                        String mode,
                        MediaType mediaType, boolean builtIn) {
                MGraph contentGraph = contentGraphProvider.getContentGraph();
-               
+
                removeExisting(rdfType, mode, mediaType, builtIn, contentGraph);
 
                BNode renderletDefinition = new BNode();
                GraphNode renderletDefinitionNode = new 
GraphNode(renderletDefinition, contentGraph);
                contentGraph.add(new TripleImpl(renderletDefinition,
-                               TYPERENDERING.renderlet, 
LiteralFactory.getInstance()
-                                                       
.createTypedLiteral(renderlet)));
+                               TYPERENDERING.renderlet, 
LiteralFactory.getInstance().createTypedLiteral(renderlet)));
                if (renderingSpecification != null) {
                        contentGraph.add(new TripleImpl(renderletDefinition,
                                        TYPERENDERING.renderingSpecification, 
renderingSpecification));
@@ -269,10 +268,9 @@
                                TYPERENDERING.renderedType, rdfType));
 
                contentGraph.add(new TripleImpl(renderletDefinition,
-                               TYPERENDERING.mediaType, 
LiteralFactory.getInstance()
-                                                       
.createTypedLiteral(mediaType.toString())));
+                               TYPERENDERING.mediaType, 
LiteralFactory.getInstance().createTypedLiteral(mediaType.toString())));
                renderletDefinitionNode.addProperty(RDF.type, 
TYPERENDERING.RenderletDefinition);
-               
+
                if (builtIn) {
                        renderletDefinitionNode.addProperty(RDF.type,
                                        
TYPERENDERING.BuiltInRenderletDefinition);
@@ -280,11 +278,10 @@
                        renderletDefinitionNode.addProperty(RDF.type,
                                        
TYPERENDERING.CustomRenderletDefinition);
                }
-               
+
                if (mode != null) {
                        contentGraph.add(new TripleImpl(renderletDefinition,
-                                       TYPERENDERING.renderingMode, 
LiteralFactory.getInstance()
-                                                       
.createTypedLiteral(mode)));
+                                       TYPERENDERING.renderingMode, 
LiteralFactory.getInstance().createTypedLiteral(mode)));
                }
 
                if (!rdfTypePrioList.contains(rdfType)) {
@@ -292,7 +289,7 @@
                                rdfTypePrioList.add(RDFS.Resource);
                        } else {
                                rdfTypePrioList.add(0, rdfType);
-                       }                       
+                       }
                }
        }
 
@@ -312,7 +309,7 @@
                existing.deleteProperties(TYPERENDERING.renderingSpecification);
                existing.deleteProperties(TYPERENDERING.renderlet);
 
-               
+
        }
 
        private GraphNode findDefinition(UriRef rdfType, String mode,
@@ -336,7 +333,7 @@
                        if (!equals(modeInGraph, mode)) {
                                continue;
                        }
-                       if (builtIn && !node.hasProperty(RDF.type, 
+                       if (builtIn && !node.hasProperty(RDF.type,
                                        
TYPERENDERING.BuiltInRenderletDefinition)) {
                                continue;
                        }
@@ -349,9 +346,9 @@
                return null;
        }
 
-       private boolean equals(Object o1, Object o2) {
+       private static boolean equals(Object o1, Object o2) {
                return o1 == o2 ||
-                                       (o1 != null) && o1.equals(o2);
+                               (o1 != null) && o1.equals(o2);
        }
 
        protected void bindContentGraphProvider(ContentGraphProvider 
contentGraphProvider) {
@@ -363,8 +360,7 @@
        }
 
        protected void bindRenderlet(ServiceReference renderletRef) {
-               logger.info("Bind renderlet of bundle {}", renderletRef
-                               .getBundle().getSymbolicName());
+               logger.info("Bind renderlet of bundle {}", 
renderletRef.getBundle().getSymbolicName());
                if (componentContext != null) {
                        registerRenderletService(renderletRef);
                } else {
@@ -374,8 +370,7 @@
 
        private void registerRenderletService(ServiceReference renderletRef) {
                String servicePid = (String) 
renderletRef.getProperty(Constants.SERVICE_PID);
-               Renderlet renderlet = (Renderlet) componentContext.
-                               locateService("renderlet", renderletRef);
+               Renderlet renderlet = (Renderlet) 
componentContext.locateService("renderlet", renderletRef);
                registerRenderletService(servicePid, renderlet);
        }
 
@@ -391,14 +386,12 @@
        }
 
        protected void unbindRenderlet(ServiceReference renderletRef) {
-               logger.info("Unbind renderlet of bundle {}", renderletRef
-                               .getBundle().getSymbolicName());
+               logger.info("Unbind renderlet of bundle {}", 
renderletRef.getBundle().getSymbolicName());
                configLock.writeLock().lock();
-               try{
+               try {
                        if (!renderletRefStore.remove(renderletRef)) {
                                String servicePid = (String) 
renderletRef.getProperty(Constants.SERVICE_PID);
-                               Renderlet renderlet = (Renderlet) 
componentContext.
-                               locateService("renderlet", renderletRef);
+                               Renderlet renderlet = (Renderlet) 
componentContext.locateService("renderlet", renderletRef);
                                unregisterRenderletService(servicePid, 
renderlet);
                        }
                } finally {
@@ -417,7 +410,7 @@
        }
 
        private void registerRenderletsFromStore() {
-               for(ServiceReference renderletRef : renderletRefStore) {
+               for (ServiceReference renderletRef : renderletRefStore) {
                        registerRenderletService(renderletRef);
                }
                renderletRefStore.clear();


Reply via email to