Skip to content

Commit 0a79b4a

Browse files
author
Howard Lewis Ship
committed
Let the LinkSource service decide whether a page render link is a loopback or not
git-svn-id: https://svn.apache.org/repos/asf/tapestry/tapestry5/trunk@896566 13f79535-47bb-0310-9956-ffa450edef68
1 parent 93e67bd commit 0a79b4a

File tree

6 files changed

+44
-55
lines changed

6 files changed

+44
-55
lines changed

tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ public class ComponentEventLinkEncoderImpl implements ComponentEventLinkEncoder
4747

4848
private final boolean encodeLocaleIntoPath;
4949

50-
private final RequestGlobals requestGlobals;
51-
5250
private static final int BUFFER_SIZE = 100;
5351

5452
private static final char SLASH = '/';
@@ -86,7 +84,7 @@ public ComponentEventLinkEncoderImpl(ComponentClassResolver componentClassResolv
8684
RequestPathOptimizer optimizer, PersistentLocale persistentLocale,
8785

8886
@Symbol(SymbolConstants.ENCODE_LOCALE_INTO_PATH)
89-
boolean encodeLocaleIntoPath, RequestGlobals requestGlobals)
87+
boolean encodeLocaleIntoPath)
9088
{
9189
this.componentClassResolver = componentClassResolver;
9290
this.contextPathEncoder = contextPathEncoder;
@@ -97,7 +95,6 @@ public ComponentEventLinkEncoderImpl(ComponentClassResolver componentClassResolv
9795
this.optimizer = optimizer;
9896
this.persistentLocale = persistentLocale;
9997
this.encodeLocaleIntoPath = encodeLocaleIntoPath;
100-
this.requestGlobals = requestGlobals;
10198
}
10299

103100
public Link createPageRenderLink(PageRenderRequestParameters parameters)
@@ -127,12 +124,7 @@ public Link createPageRenderLink(PageRenderRequestParameters parameters)
127124

128125
Link link = new LinkImpl(builder.toString(), baseURL == null, false, response, optimizer);
129126

130-
String requestPageName = requestGlobals.getActivePageName();
131-
132-
// TODO: It should only be necessary to encode the LOOPBACK for pages that actually have
133-
// reset listener.
134-
135-
if (activePageName.equals(requestPageName))
127+
if (parameters.isLoopback())
136128
link.addParameter(InternalConstants.LOOPBACK, "t");
137129

138130
return link;

tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,23 @@ public class LinkSourceImpl implements LinkSource, LinkCreationHub
3737

3838
private final ComponentClassResolver resolver;
3939

40+
private final RequestGlobals requestGlobals;
41+
4042
public LinkSourceImpl(PageRenderQueue pageRenderQueue,
41-
PageActivationContextCollector contextCollector,
42-
TypeCoercer typeCoercer,
43-
ComponentClassResolver resolver,
44-
ComponentEventLinkEncoder linkEncoder)
43+
PageActivationContextCollector contextCollector, TypeCoercer typeCoercer,
44+
ComponentClassResolver resolver, ComponentEventLinkEncoder linkEncoder,
45+
RequestGlobals requestGlobals)
4546
{
4647
this.pageRenderQueue = pageRenderQueue;
4748
this.contextCollector = contextCollector;
4849
this.typeCoercer = typeCoercer;
4950
this.resolver = resolver;
5051
this.linkEncoder = linkEncoder;
52+
this.requestGlobals = requestGlobals;
5153
}
5254

53-
public Link createComponentEventLink(Page page, String nestedId, String eventType, boolean forForm,
54-
Object... eventContext)
55+
public Link createComponentEventLink(Page page, String nestedId, String eventType,
56+
boolean forForm, Object... eventContext)
5557
{
5658
Defense.notNull(page, "page");
5759
Defense.notBlank(eventType, "action");
@@ -64,17 +66,13 @@ public Link createComponentEventLink(Page page, String nestedId, String eventTyp
6466

6567
String activePageName = activePage.getName();
6668

67-
Object[] pageActivationContext = contextCollector.collectPageActivationContext(activePageName);
68-
69-
ComponentEventRequestParameters parameters
70-
= new ComponentEventRequestParameters(
71-
activePageName,
72-
page.getName(),
73-
toBlank(nestedId),
74-
eventType,
75-
new ArrayEventContext(typeCoercer, pageActivationContext),
76-
new ArrayEventContext(typeCoercer, eventContext));
69+
Object[] pageActivationContext = contextCollector
70+
.collectPageActivationContext(activePageName);
7771

72+
ComponentEventRequestParameters parameters = new ComponentEventRequestParameters(
73+
activePageName, page.getName(), toBlank(nestedId), eventType,
74+
new ArrayEventContext(typeCoercer, pageActivationContext), new ArrayEventContext(
75+
typeCoercer, eventContext));
7876

7977
Link link = linkEncoder.createComponentEventLink(parameters, forForm);
8078

@@ -89,20 +87,22 @@ private String toBlank(String input)
8987
return input == null ? "" : input;
9088
}
9189

92-
public Link createPageRenderLink(String pageName, boolean override, Object... pageActivationContext)
90+
public Link createPageRenderLink(String pageName, boolean override,
91+
Object... pageActivationContext)
9392
{
94-
// Resolve the page name to its canonical format (the best version for URLs). This also validates
93+
// Resolve the page name to its canonical format (the best version for URLs). This also
94+
// validates
9595
// the page name.
9696

9797
String canonical = resolver.canonicalizePageName(pageName);
9898

99-
Object[] context = (override || pageActivationContext.length != 0)
100-
? pageActivationContext
101-
: contextCollector.collectPageActivationContext(canonical);
99+
Object[] context = (override || pageActivationContext.length != 0) ? pageActivationContext
100+
: contextCollector.collectPageActivationContext(canonical);
101+
102+
boolean loopback = canonical.equals(requestGlobals.getActivePageName());
102103

103-
PageRenderRequestParameters parameters =
104-
new PageRenderRequestParameters(canonical,
105-
new ArrayEventContext(typeCoercer, context));
104+
PageRenderRequestParameters parameters = new PageRenderRequestParameters(canonical,
105+
new ArrayEventContext(typeCoercer, context), loopback);
106106

107107
Link link = linkEncoder.createPageRenderLink(parameters);
108108

tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void no_dot_or_colon_in_path() throws Exception
5050

5151
Dispatcher dispatcher = new ComponentEventDispatcher(null,
5252
new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, request,
53-
response, null, null, null, true, null));
53+
response, null, null, null, true));
5454

5555
assertFalse(dispatcher.dispatch(request, response));
5656

@@ -160,7 +160,7 @@ public void page_activation_context_in_request() throws Exception
160160

161161
Dispatcher dispatcher = new ComponentEventDispatcher(handler,
162162
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
163-
response, null, null, null, true, null));
163+
response, null, null, null, true));
164164

165165
assertTrue(dispatcher.dispatch(request, response));
166166

@@ -200,7 +200,7 @@ public void different_active_and_containing_pages() throws Exception
200200

201201
Dispatcher dispatcher = new ComponentEventDispatcher(handler,
202202
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
203-
response, null, null, null, true, null));
203+
response, null, null, null, true));
204204

205205
assertTrue(dispatcher.dispatch(request, response));
206206

@@ -224,7 +224,7 @@ public void request_path_reference_non_existent_page() throws Exception
224224

225225
Dispatcher dispatcher = new ComponentEventDispatcher(null,
226226
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
227-
response, null, null, null, true, null));
227+
response, null, null, null, true));
228228

229229
assertFalse(dispatcher.dispatch(request, response));
230230

@@ -262,7 +262,7 @@ private void test(String requestPath, String localeName, String containerPageNam
262262

263263
Dispatcher dispatcher = new ComponentEventDispatcher(handler,
264264
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter,
265-
request, response, null, null, null, true, null));
265+
request, response, null, null, null, true));
266266

267267
assertTrue(dispatcher.dispatch(request, response));
268268

tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ public void locale_not_encoded()
5555
replay();
5656

5757
ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null,
58-
contextPathEncoder, null, request, response, manager, optimizer, null, false,
59-
globals);
58+
contextPathEncoder, null, request, response, manager, optimizer, null, false);
6059

6160
PageRenderRequestParameters parameters = new PageRenderRequestParameters("MyPage",
6261
new EmptyEventContext());
@@ -95,8 +94,7 @@ public void index_stripped_off()
9594
replay();
9695

9796
ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null,
98-
contextPathEncoder, null, request, response, manager, optimizer, null, false,
99-
globals);
97+
contextPathEncoder, null, request, response, manager, optimizer, null, false);
10098

10199
PageRenderRequestParameters parameters = new PageRenderRequestParameters("admin/Index",
102100
new ArrayEventContext(typeCoercer, "abc"));
@@ -126,8 +124,7 @@ public void root_index_page_gone()
126124
replay();
127125

128126
ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null,
129-
contextPathEncoder, null, request, response, manager, optimizer, null, false,
130-
globals);
127+
contextPathEncoder, null, request, response, manager, optimizer, null, false);
131128

132129
PageRenderRequestParameters parameters = new PageRenderRequestParameters("Index",
133130
new EmptyEventContext());

tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public void create_page_render_link_by_name()
101101

102102
LinkSource source = new LinkSourceImpl(null,
103103
collector, typeCoercer, resolver,
104-
linkEncoder);
104+
linkEncoder, null);
105105

106106

107107
Link actual = source.createPageRenderLink(pageName, false);
@@ -140,7 +140,7 @@ private void testPageLinkCreation(String pageName, boolean overrideContext,
140140

141141
LinkSource source = new LinkSourceImpl(null,
142142
collector, typeCoercer, resolver,
143-
linkEncoder);
143+
linkEncoder, null);
144144

145145
source.getLinkCreationHub().addListener(listener);
146146

@@ -215,7 +215,7 @@ public void component_event_from_other_page()
215215

216216
LinkSource source = new LinkSourceImpl(queue,
217217
collector, typeCoercer, null,
218-
linkEncoder);
218+
linkEncoder, null);
219219

220220
assertSame(source.createComponentEventLink(primaryPage, "gnip.gnop", "myevent", true, 3, 5, 9), link);
221221

@@ -261,7 +261,7 @@ private void testEventLinkCreation(String pageName,
261261

262262
LinkSource source = new LinkSourceImpl(queue,
263263
collector, typeCoercer, null,
264-
linkEncoder);
264+
linkEncoder, null);
265265

266266
source.getLinkCreationHub().addListener(listener);
267267

tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderDispatcherTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void not_a_page_request() throws Exception
5555
replay();
5656

5757
Dispatcher d = new PageRenderDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
58-
contextPathEncoder, ls, request, response, null, null, null, true, null));
58+
contextPathEncoder, ls, request, response, null, null, null, true));
5959

6060
assertFalse(d.dispatch(request, response));
6161

@@ -80,7 +80,7 @@ public void empty_path() throws Exception
8080
replay();
8181

8282
Dispatcher d = new PageRenderDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
83-
contextPathEncoder, ls, request, response, null, null, null, true, null));
83+
contextPathEncoder, ls, request, response, null, null, null, true));
8484

8585
assertFalse(d.dispatch(request, response));
8686

@@ -104,7 +104,7 @@ public void just_the_locale_name() throws Exception
104104
replay();
105105

106106
Dispatcher d = new PageRenderDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
107-
contextPathEncoder, ls, request, response, null, null, null, true, null));
107+
contextPathEncoder, ls, request, response, null, null, null, true));
108108

109109
assertFalse(d.dispatch(request, response));
110110

@@ -161,7 +161,7 @@ public void page_activation_context_for_root_index_page() throws Exception
161161

162162
Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer, request),
163163
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
164-
response, null, null, null, true, null));
164+
response, null, null, null, true));
165165

166166
assertTrue(d.dispatch(request, response));
167167

@@ -214,7 +214,7 @@ private void no_extra_context(boolean finalSlash) throws Exception
214214

215215
Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer, request),
216216
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
217-
response, null, null, null, true, null));
217+
response, null, null, null, true));
218218

219219
assertTrue(d.dispatch(request, response));
220220

@@ -272,7 +272,7 @@ private void context_passed_in_path(boolean finalSlash) throws Exception
272272

273273
Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer, request),
274274
new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
275-
response, null, null, null, true, null));
275+
response, null, null, null, true));
276276

277277
assertTrue(d.dispatch(request, response));
278278

0 commit comments

Comments
 (0)