/** * Returns the "current content" from the aggregation state. Override this method if your component needs a * different target node. */ protected Node currentContent() { return renderingContext.getCurrentContent(); }
@Override public void push(Node content, RenderableDefinition renderableDefinition) { push(content, renderableDefinition, null); }
/** * @param level >= 1 * @return ancestor definition or <code>null</code> if such ancestor doesn't exist. */ @Override public RenderableDefinition getAncestorDefinition(int level) { if (level <= 0 || level > stack.size()) { log.error("Level {} ancestor of renderable definition for node '{}' doesn't exist.", level, this.getCurrentContent()); return null; } int index = stack.size() - level; return stack.get(index).renderableDefinition; }
private TemplateDefinition getRequiredTemplateDefinition() { return (TemplateDefinition) getRenderingContext().getRenderableDefinition(); }
@Test public void testNoInteractionsWhenTargetAreaAttributeIsEmpty() throws Exception { // GIVEN ctx.setAttribute("mgnlArea", "", 0); RenderingListener listener = new AreaFilteringListener(provider); // WHEN listener.before(null, null, null, null); listener.after(null, null, null, null); // THEN verifyNoMoreInteractions(provider); }
@Test public void getAncestorDefinitionLevel2() throws Exception { // GIVEN RenderableDefinition ancestor2 = mock(RenderableDefinition.class); RenderableDefinition ancestor1 = mock(TemplateDefinition.class); context.push(null, ancestor2, null); context.push(null, ancestor1, null); context.push(null, null, null); // WHEN RenderableDefinition result = context.getAncestorDefinition(2); // THEN assertEquals(ancestor2, result); }
@Test public void testPushSetsRenderableDefinition() { // GIVEN RenderableDefinition renderableDefinition = mock(RenderableDefinition.class); // WHEN context.push(mainNode, renderableDefinition, null); // THEN assertEquals(renderableDefinition, context.getRenderableDefinition()); }
@Test public void testPushSetsMainContentIfItsNull() throws Exception { // GIVEN ... see setUp Node currentContent = mock(Node.class); aggregationState.setCurrentContentNode(currentContent); // WHEN context.push(mainNode, null, null); assertEquals(mainNode, context.getMainContent()); // THEN - mainContent should now be set }
/** * Called when a submission occurs with a form state token but there is no formState in session. This typically * happens when the user has waited so long to complete the form that the session timed out. */ protected View handleNoSuchFormStateOnSubmit(String formStateToken) throws RepositoryException { // Redirect to the current page _with_ the invalid token, this will render an error message. return new RedirectWithTokenView(context.getMainContent(), formStateToken); }
@Test(expected = EmptyStackException.class) public void testPopWithoutPrecedingPush() { // GIVEN - all done in setUp() // WHEN context.pop(); // THEN - nothing on stack so there should be a Exception }
@Override public void push(Node content, RenderableDefinition renderableDefinition, OutputProvider outputProvider) { // Creating the Content object can fail with an exception, by doing it before anything else we don't risk ending // up having inconsistent state due to a partially completed push. Node legacyContent = content; if (aggregationState.getMainContentNode() == null) { aggregationState.setMainContentNode(content); } if (depth > 0) { stack.push(new StackState(currentRenderableDefinition, currentOutputProvider, aggregationState.getCurrentContentNode())); } aggregationState.setCurrentContentNode(content); currentRenderableDefinition = renderableDefinition; currentOutputProvider = outputProvider != null ? outputProvider : currentOutputProvider; depth++; }
@Test public void testGetRenderableDefinitionBeforePushReturnsNull() { // GIVEN - all done in setUp() // WHEN RenderableDefinition result = context.getRenderableDefinition(); // THEN assertNull(result); }
@Test public void getAncestorDefinitionNegativeValue() throws Exception { // GIVEN // WHEN RenderableDefinition result = context.getAncestorDefinition(1); // THEN assertNull(result); } }
@Test public void testGetMainContent() { // GIVEN aggregationState.setMainContentNode(mainNode); // WHEN Node result = context.getMainContent(); // THEN assertEquals(mainNode, result); }
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"); }
@Test public void testWriterActivity() throws Exception { // GIVEN ctx.setAttribute("mgnlArea", "targetArea", 0); RenderingListener listener = new AreaFilteringListener(provider); Node contentNode = new MockNode(); // WHEN listener.before(contentNode, null, null, null); listener.after(contentNode, null, null, null); // THEN verify(provider).setWriteEnabled(false); Node areaNode = new MockNode("targetArea"); // WHEN listener.before(areaNode, null, null, null); // THEN verify(provider).setWriteEnabled(true); // WHEN listener.after(areaNode, null, null, null); // THEN verify(provider, times(2)).setWriteEnabled(false); verifyNoMoreInteractions(provider); }
@Test public void getAncestorDefinitionLevel1() throws Exception { // GIVEN RenderableDefinition ancestor = mock(RenderableDefinition.class); context.push(null, ancestor, null); context.push(null, null, null); // WHEN RenderableDefinition result = context.getAncestorDefinition(1); // THEN assertEquals(ancestor, result); }
@Test public void testGetCurrentContent() { // GIVEN aggregationState.setCurrentContentNode(mainNode); // WHEN Node result = context.getCurrentContent(); // THEN assertEquals(mainNode, result); }
@Override protected View handleNoSuchFormState(String formStateToken) throws RepositoryException { return new SessionExpiredView(NodeUtil.getNodeIdentifierIfPossible(context.getMainContent())); }
@Test public void testNestedAreaWithSameName() throws Exception { // GIVEN ctx.setAttribute("mgnlArea", "targetArea", 0); RenderingListener listener = new AreaFilteringListener(provider); Node areaNode = new MockNode("targetArea"); // WHEN listener.before(areaNode, null, null, null); // THEN verify(provider).setWriteEnabled(true); Node nestedArea = new MockNode("targetArea"); // WHEN listener.before(nestedArea, null, null, null); // THEN verify(provider).setWriteEnabled(true); // WHEN listener.after(nestedArea, null, null, null); listener.after(areaNode, null, null, null); // THEN verify(provider).setWriteEnabled(false); verifyNoMoreInteractions(provider); } }