private TemplateDefinition getRequiredTemplateDefinition() { return (TemplateDefinition) getRenderingContext().getRenderableDefinition(); }
protected TemplateDefinition resolveTemplateDefinition() throws RenderException { RenderableDefinition renderableDefinition = getRenderingContext().getRenderableDefinition(); RenderableDefinition variation = variationResolver.resolveVariation(renderableDefinition); renderableDefinition = variation == null ? renderableDefinition : variation; if (renderableDefinition == null || renderableDefinition instanceof TemplateDefinition) { return (TemplateDefinition) renderableDefinition; } throw new RenderException("Current RenderableDefinition [" + renderableDefinition + "] is not of type TemplateDefinition. Areas cannot be supported"); }
@Override public void handleException(RenderException renderException, RenderingContext renderingContext) { try { final String path = renderingContext.getCurrentContent().getPath(); final PrintWriter printWriter = getPrintWriterFor(renderingContext.getAppendable()); final String id = renderingContext.getRenderableDefinition().getId(); final AggregationState aggregationState = aggregationStateProvider.get(); final String msg = String.format("Error while rendering [%s] with template [%s] for URI [%s]:\n%s", path, id, formatURI(aggregationState), ExceptionUtils.getMessage(renderException)); this.processException(renderException, printWriter, msg); } catch (RepositoryException e) { throw new RuntimeException("Can't log template exception.", e); } catch (IOException e) { throw new RuntimeException("Can't log template exception.", e); } }
String id = renderingContext.getRenderableDefinition().getId();
@Test public void testOnRenderReturnsDefaultContentType() throws Exception { // GIVEN final RenderingContext rctx = mock(RenderingContext.class); final ConfiguredRenderableDefinition rd = new ConfiguredRenderableDefinition(); final DummyRenderer renderer = new DummyRenderer(); when(rctx.getRenderableDefinition()).thenReturn(rd); // WHEN renderer.render(rctx, new HashMap<String, Object>()); // THEN verify(response).setContentType("text/html"); }
@Test public void testRenderWithModelAttributePrefixBeingNullAndRenderingSkipped() throws Exception { // GIVEN RenderableDefinition definition = mock(RenderableDefinition.class); when(definition.getModelClass()).thenReturn(SkipRenderingDummyModel.class); when(ctx.getCurrentContent()).thenReturn(content); when(ctx.getRenderableDefinition()).thenReturn(definition); AbstractRenderer renderer = new DummyRenderer() { @Override protected String resolveTemplateScript(Node content, RenderableDefinition definition, RenderingModel<?> model, String actionResult) { throw new RuntimeException("Should have exited method before this call!"); } }; // WHEN renderer.render(ctx, null); // THEN - didn't get a RuntimeException on call above so execution stopped before calling determineTemplatePath... }
@Test public void testOnRenderReturnsConfiguredContentType() throws Exception { // GIVEN final RenderingContext rctx = mock(RenderingContext.class); final ConfiguredRenderableDefinition rd = new ConfiguredRenderableDefinition(); final DummyRenderer renderer = new DummyRenderer(); renderer.setContentType("text/plain"); when(rctx.getRenderableDefinition()).thenReturn(rd); // WHEN renderer.render(rctx, new HashMap<String, Object>()); // THEN verify(response).setContentType("text/plain"); }
@Test(expected = RenderException.class) public void testRenderWithTemplateScriptBeingNull() throws Exception { // GIVEN Map<String, Object> contextObjects = new LinkedHashMap<String, Object>(); RenderableDefinition definition = mock(RenderableDefinition.class); when(definition.getModelClass()).thenReturn(DummyModel.class); when(ctx.getCurrentContent()).thenReturn(content); when(ctx.getRenderableDefinition()).thenReturn(definition); AbstractRenderer renderer = new DummyRenderer() { @Override protected String resolveTemplateScript(Node content, RenderableDefinition definition, RenderingModel<?> model, String actionResult) { return null; } }; // WHEN renderer.render(ctx, contextObjects); // THEN - expected Exception }
@Test public void testRender() throws Exception { // GIVEN Map<String, Object> contextObjects = new LinkedHashMap<String, Object>(); RenderableDefinition definition = mock(RenderableDefinition.class); when(definition.getModelClass()).thenReturn(DummyModel.class); when(ctx.getCurrentContent()).thenReturn(content); when(ctx.getRenderableDefinition()).thenReturn(definition); DummyRenderer renderer = new DummyRenderer(); // WHEN renderer.render(ctx, contextObjects); // THEN assertTrue(renderer.wasOnRenderCalled()); assertEquals(parentModel, MgnlContext.getAttribute(AbstractRenderer.MODEL_ATTRIBUTE)); }
@Override public void render(final RenderingContext renderingCtx, Map<String, Object> contextObjects) throws RenderException { Node content = renderingCtx.getCurrentContent(); try { RenderableDefinition renderableDefinition = renderingCtx.getRenderableDefinition(); // Merge in case of a page if (content != null && NodeUtil.isNodeType(content, NodeTypes.Page.NAME)) { final Site site = getSite(content); renderableDefinition = BeanMergerUtil.merge(renderableDefinition, site.getTemplates().getPrototype(), fallbackTemplateDefinition.getFallbackTemplateDefinition()); } renderingCtx.push(content, renderableDefinition); try { super.render(renderingCtx, contextObjects); } finally { renderingCtx.pop(); } } catch (RepositoryException e) { throw new RenderException(String.format("Could not determine node type of node [%s]", content), e); } }
@Override public void render(final RenderingContext renderingCtx, Map<String, Object> contextObjects) throws RenderException { Node content = renderingCtx.getCurrentContent(); try { RenderableDefinition renderableDefinition = renderingCtx.getRenderableDefinition(); // Merge in case of a page if (content != null && NodeUtil.isNodeType(content, NodeTypes.Page.NAME)) { final Site site = getSite(content); renderableDefinition = BeanMergerUtil.merge(renderableDefinition, site.getTemplates().getPrototype(), fallbackTemplateDefinition.getFallbackTemplateDefinition()); } renderingCtx.push(content, renderableDefinition); try { rendererRegistry.getProvider(wrappedRendererType).get().render(renderingCtx, contextObjects); } catch (Registry.NoSuchDefinitionException e) { throw new RenderException("Render type '" + wrappedRendererType + "' does not exist.", e); } finally { renderingCtx.pop(); } } catch (RepositoryException e) { throw new RenderException(String.format("Could not determine node type of node [%s]", content), e); } }
@Override public void render(final RenderingContext renderingCtx, Map<String, Object> contextObjects) throws RenderException { Node content = renderingCtx.getCurrentContent(); // FIXME for the time being we only render pages and areas but not components try { final Site site = getSite(content); RenderableDefinition renderableDefinition = renderingCtx.getRenderableDefinition(); // merge in case of a page if (renderableDefinition instanceof STKPage) { renderableDefinition = (RenderableDefinition) BeanMergerUtil.merge(renderableDefinition, site.getTemplates().getPrototype(), DefaultSTKTemplateConfiguration.getInstance()); } // FIXME we should not push() if the definition is not merged renderingCtx.push(content, renderableDefinition); try { super.render(renderingCtx, contextObjects); } finally { renderingCtx.pop(); } } catch (Exception e) { throw new RenderException(e); } }
RenderableDefinition definition = renderingCtx.getRenderableDefinition();