package info.magnolia.services; import info.magnolia.context.MgnlContext; import info.magnolia.objectfactory.Components; import info.magnolia.rendering.context.RenderingContext; import info.magnolia.rendering.engine.RenderException; import info.magnolia.rendering.engine.RenderingEngine; import info.magnolia.rendering.renderer.Renderer; import org.apache.commons.lang.StringUtils; import org.apache.jackrabbit.commons.JcrUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.jcr.RepositoryException; import java.util.Map; /** * Description here. * User: nicolasbarbe * Date: 05/03/14 */ public class ResourceExtensionDispatcherRenderer implements Renderer { private static final Logger log = LoggerFactory.getLogger(ResourceExtensionDispatcherRenderer.class); @Override public void render(RenderingContext ctx, Map contextObjects) throws RenderException { Node content = ctx.getCurrentContent(); String extension = StringUtils.substringAfterLast(MgnlContext.getAggregationState().getCurrentURI(), "."); if(null != extension) { try { Node nodeToBeServed = null; if(content.hasNode(extension)) { nodeToBeServed = content.getNode(extension); RenderingEngine engine = Components.getComponent(RenderingEngine.class); engine.render(nodeToBeServed, ctx.getOutputProvider()); }else { throw new RenderException("Extension " + extension + " not found for the resource " + JcrUtils.toString(content)); } } catch (RepositoryException e) { throw new RenderException("Extension " + extension + " not found for the resource " + JcrUtils.toString(content), e); } } else { throw new RenderException("Resource " + JcrUtils.toString(content) + " must be accessed using an extension."); } } }