private ComponentEventRequestParameters validateAndConstructComponentEventRequest(Request request, String pageName, String nestedComponentId, String eventType, List<String> remainingPath) { if (!componentClassResolver.isPageName(pageName)) { return null; } String activePageName = componentClassResolver.canonicalizePageName(pageName); if (isWhitelistOnlyAndNotValid(activePageName)) { return null; } String value = request.getParameter(InternalConstants.CONTAINER_PAGE_NAME); String containingPageName = value == null ? activePageName : componentClassResolver.canonicalizePageName(value); EventContext eventContext = contextPathEncoder.decodePath(joinPath(remainingPath)); EventContext activationContext = contextPathEncoder.decodePath(request.getParameter(InternalConstants.PAGE_CONTEXT_NAME)); return new ComponentEventRequestParameters(activePageName, containingPageName, nestedComponentId, eventType, activationContext, eventContext); }
public Link createComponentEventLink(Page page, String nestedId, String eventType, boolean forForm, Object... eventContext) { assert page != null; assert InternalUtils.isNonBlank(eventType); Page activePage = pageRenderQueue.getRenderingPage(); // See TAPESTRY-2184 if (activePage == null) activePage = page; String activePageName = activePage.getName(); Object[] pageActivationContext = contextCollector.collectPageActivationContext(activePageName); ComponentEventRequestParameters parameters = new ComponentEventRequestParameters(activePageName, page.getName(), toBlank(nestedId), eventType, new ArrayEventContext(typeCoercer, pageActivationContext), new ArrayEventContext(typeCoercer, eventContext)); Link link = linkEncoder.createComponentEventLink(parameters, forForm); for (LinkCreationListener2 listener : listeners) listener.createdComponentEventLink(link, parameters); return link; }
public ComponentEventRequestParameters decodeComponentEventRequest(Request request) { if (!request.getPath().equals("/event")) return null; String localeName = request.getParameter("x:locale"); String pageName = request.getParameter("x:page"); String container = request.getParameter("x:container"); String id = request.getParameter("x:id"); String pac = request.getParameter("x:pac"); String ec = request.getParameter("x:ec"); String type = request.getParameter("x:type"); if (localeName != null) localizationSetter.setLocaleFromLocaleName(localeName); return new ComponentEventRequestParameters(pageName, container == null ? pageName : container, id, type, toContext(pac), toContext(ec)); }
@Test public void component_event_from_other_page() { String primaryPageName = "blocks/AppDisplay"; Page primaryPage = mockPage(); Page activePage = mockPage(); PageRenderQueue queue = mockPageRenderQueue(); PageActivationContextCollector collector = mockPageActivationContextCollector(); ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder(); Link link = mockLink(); train_getRenderingPage(queue, activePage); train_getName(activePage, "order/View"); train_getName(primaryPage, primaryPageName); train_collectPageActivationContext(collector, "order/View", "x", "y"); EventContext pageActivationContext = new ArrayEventContext(typeCoercer, "x", "y"); EventContext eventContext = new ArrayEventContext(typeCoercer, 3, 5, 9); ComponentEventRequestParameters parameters = new ComponentEventRequestParameters("order/View", primaryPageName, "gnip.gnop", "myevent", pageActivationContext, eventContext); expect(linkEncoder.createComponentEventLink(parameters, true)).andReturn(link); replay(); LinkSource source = new LinkSourceImpl(queue, collector, typeCoercer, null, linkEncoder, null, null, emptyConfiguration); assertSame(source.createComponentEventLink(primaryPage, "gnip.gnop", "myevent", true, 3, 5, 9), link); verify(); }
ClientWhitelist whitelist = newMock(ClientWhitelist.class); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( containerPageName, containerPageName, "", "anevent", new EmptyEventContext(), new EmptyEventContext());
private void testEventLinkCreation2(String pageName, String nestedId, String eventType, boolean forForm, Object... context) { Page primaryPage = mockPage(); PageRenderQueue queue = mockPageRenderQueue(); PageActivationContextCollector collector = mockPageActivationContextCollector(); LinkCreationListener2 listener = mockLinkCreationListener2(); ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder(); Link link = mockLink(); ArrayEventContext eventContext = new ArrayEventContext(typeCoercer, context); ArrayEventContext pageEventContext = new ArrayEventContext(typeCoercer, "a", "b"); train_getRenderingPage(queue, null); train_getName(primaryPage, pageName); train_collectPageActivationContext(collector, pageName, "a", "b"); ComponentEventRequestParameters parameters = new ComponentEventRequestParameters(pageName, pageName, nestedId, eventType, pageEventContext, eventContext); expect(linkEncoder.createComponentEventLink(parameters, forForm)).andReturn(link); listener.createdComponentEventLink(link, parameters); List<LinkCreationListener2> configuration = CollectionFactory.newList(listener); replay(); LinkSource source = new LinkSourceImpl(queue, collector, typeCoercer, null, linkEncoder, null, null, configuration); Link returnedLink = source.createComponentEventLink(primaryPage, nestedId, eventType, forForm, context); // Make sure the same link is returned. assertSame(returnedLink, link); verify(); }
private void testEventLinkCreation(String pageName, String nestedId, String eventType, boolean forForm, Object... context) { Page primaryPage = mockPage(); PageRenderQueue queue = mockPageRenderQueue(); PageActivationContextCollector collector = mockPageActivationContextCollector(); LinkCreationListener2 listener = mockLinkCreationListener2(); ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder(); Link link = mockLink(); ArrayEventContext eventContext = new ArrayEventContext(typeCoercer, context); ArrayEventContext pageEventContext = new ArrayEventContext(typeCoercer, "a", "b"); train_getRenderingPage(queue, null); train_getName(primaryPage, pageName); train_collectPageActivationContext(collector, pageName, "a", "b"); ComponentEventRequestParameters parameters = new ComponentEventRequestParameters(pageName, pageName, nestedId, eventType, pageEventContext, eventContext); expect(linkEncoder.createComponentEventLink(parameters, forForm)).andReturn(link); listener.createdComponentEventLink(link, parameters); replay(); LinkSource source = new LinkSourceImpl(queue, collector, typeCoercer, null, linkEncoder, null, null, emptyConfiguration); source.getLinkCreationHub().addListener(listener); Link returnedLink = source.createComponentEventLink(primaryPage, nestedId, eventType, forForm, context); // Make sure the same link is returned. assertSame(returnedLink, link); verify(); }
@Test public void page_activation_context_in_request() throws Exception { ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter ls = mockLocalizationSetter(); MetaDataLocator metaDataLocator = neverWhitelistProtected(); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( "mypage", "mypage", "", "eventname", new URLEventContext(contextValueEncoder, new String[] {"alpha", "beta"}), new EmptyEventContext()); train_getPath(request, "/mypage:eventname"); expect(ls.isSupportedLocaleName("mypage:eventname")).andReturn(false); train_isPageName(resolver, "mypage", true); train_canonicalizePageName(resolver, "mypage", "mypage"); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, "alpha/beta"); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null); expect(request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND)).andStubReturn(null); train_for_request_locale(request, ls); handler.handleComponentEvent(expectedParameters); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "", metaDataLocator, null)); assertTrue(dispatcher.dispatch(request, response)); verify(); }
@Test public void different_active_and_containing_pages() throws Exception { ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter ls = mockLocalizationSetter(); MetaDataLocator metaDataLocator = neverWhitelistProtected(); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( "activepage", "mypage", "", "eventname", new EmptyEventContext(), new EmptyEventContext()); train_getPath(request, "/activepage:eventname"); expect(ls.isSupportedLocaleName("activepage:eventname")).andReturn(false); train_isPageName(resolver, "activepage", true); train_canonicalizePageName(resolver, "activepage", "activepage"); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, "mypage"); expect(request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND)).andStubReturn(null); train_canonicalizePageName(resolver, "mypage", "mypage"); train_for_request_locale(request, ls); handler.handleComponentEvent(expectedParameters); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "", metaDataLocator, null)); assertTrue(dispatcher.dispatch(request, response)); verify(); }
private void test(String requestPath, String localeName, String containerPageName, String nestedComponentId, String eventType, String... eventContext) throws IOException { ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter localizationSetter = mockLocalizationSetter(); MetaDataLocator metaDataLocator = neverWhitelistProtected(); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( containerPageName, containerPageName, nestedComponentId, eventType, new EmptyEventContext(), new URLEventContext(contextValueEncoder, eventContext)); train_getPath(request, requestPath); expect(localizationSetter.isSupportedLocaleName(localeName)).andReturn(false); train_isPageName(resolver, containerPageName, true); train_canonicalizePageName(resolver, containerPageName, containerPageName); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null); expect(request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND)).andStubReturn(null); handler.handleComponentEvent(expectedParameters); train_for_request_locale(request, localizationSetter); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter, response, null, null, null, true, null, "", metaDataLocator, null)); assertTrue(dispatcher.dispatch(request, response)); verify(); }