<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-302</id>
	<title>Nabble - Tapestry</title>
	<updated>2009-11-24T00:49:00Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Tapestry-f302.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Tapestry-f302.html" />
	<subtitle type="html">Tapestry is a powerful, open-source, all-Java framework for creating leading edge web applications in Java. Jakarta Tapestry home is &lt;a href=&quot;http://jakarta.apache.org/tapestry/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26492409</id>
	<title>Re: Help Tapestry5 Block with JavaScript? Anyone</title>
	<published>2009-11-24T00:49:00Z</published>
	<updated>2009-11-24T00:49:00Z</updated>
	<author>
		<name>alanearl</name>
	</author>
	<content type="html">Sorry @Environment is lacking
&lt;br&gt;But still no luck heheheh...
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;quote author=&quot;alanearl&quot;&gt;&lt;br&gt;Excuse Me Sir Howard,
&lt;br&gt;&lt;br&gt;Could you help me with this? Im receiving error...
&lt;br&gt;&lt;br&gt;&lt;br&gt;org.apache.tapestry5.internal.services.RenderQueueException
&lt;br&gt;Render queue error in BeginRender[Index:myblock]: org.apache.tapestry5.ioc.internal.util.TapestryException
&lt;br&gt;&lt;br&gt;Template Class
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:actionlink t:id=&amp;quot;Button1&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;Click Me1!&amp;lt;/t:actionlink&amp;gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:actionlink t:id=&amp;quot;Button2&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;Click Me2!&amp;lt;/t:actionlink&amp;gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Hello
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:Myblock&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:block t:id=&amp;quot;block1&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:block t:id=&amp;quot;block2&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:Myblock&amp;gt;
&lt;br&gt;&lt;br&gt;Page Class
&lt;br&gt;&lt;br&gt;public class Index
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; @InjectComponent
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Zone output;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Block block1;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Block block2;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; private Block blockToRender;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public Block getBlockToRender() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public void setBlockToRender(Block blockToRender) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.blockToRender = blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Object onActionFromButton1()
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setBlockToRender(block1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Object onActionFromButton2()
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setBlockToRender(block2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;Component Class
&lt;br&gt;&lt;br&gt;public class Myblock {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject 
&lt;br&gt;&amp;nbsp; &amp;nbsp; @Path(&amp;quot;context:layout/scripts/jquery-1.3.2.min.js&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Asset jquery;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject
&lt;br&gt;&amp;nbsp; &amp;nbsp; @Path(&amp;quot;context:layout/scripts/pagination.js&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Asset pagination;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; private RenderSupport rendersupport;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @BeginRender
&lt;br&gt;&amp;nbsp; &amp;nbsp; public void beginRender(){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rendersupport.addScriptLink(jquery);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rendersupport.addScriptLink(pagination);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Howard Lewis Ship wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;Search the archives, I'm pretty sure this has come up before.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 3:24 PM, alanearl &amp;lt;alan-luayon@dash.com.ph&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sory Oakstair i did not detail my problem.
&lt;br&gt;&amp;gt; First I dont have any problem integrating Tapestry &amp; JQuery.
&lt;br&gt;&amp;gt; My Problem is executing my javascript when it is inside the BLOCK.
&lt;br&gt;&amp;gt; I think it will not execute....
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Excuse me Sir Howard,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I don't understand this part:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This can be accomplished by using the Delegate component to call back
&lt;br&gt;&amp;gt; into your outer component (you have a getter method return an inner
&lt;br&gt;&amp;gt; class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;&amp;gt; Assets and use RenderSupport to include them.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What do you mean i need to create a new component then it will be called by
&lt;br&gt;&amp;gt; my page
&lt;br&gt;&amp;gt; using injectcomponent &amp; put my javascript in the asset &amp; use render support?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sorry but Im confuse ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Howard Lewis Ship wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The @IncludeJavascriptLibrary annotation changes the beginRender phase
&lt;br&gt;&amp;gt;&amp;gt; of your component to add the JavaScript.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; When a block within your component is rendered, the component's
&lt;br&gt;&amp;gt;&amp;gt; beginRender phase does not execute, just the
&lt;br&gt;&amp;gt;&amp;gt; beginRender phase of components *inside* the block.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; This can be accomplished by using the Delegate component to call back
&lt;br&gt;&amp;gt;&amp;gt; into your outer component (you have a getter method return an inner
&lt;br&gt;&amp;gt;&amp;gt; class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;&amp;gt;&amp;gt; Assets and use RenderSupport to include them.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:44 PM, alanearl &amp;lt;alan-luayon@dash.com.ph&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Question is when one of my block has jquery. It will not load the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; jquery
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; then action link perform.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Any help is appreciated.... Thanks!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Code .tml
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:actionlink t:id=&amp;quot;testPage&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      Default
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:block id=&amp;quot;testBlock&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      &amp;lt;!-- With JQuery  it will not load the JQuery --&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Class
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @IncludeJavaScriptLibrary({&amp;quot;jquery-1.3.2.min.js&amp;quot;,&amp;quot;test.js&amp;quot;})
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    @InjectComponent
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Zone output;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    @Inject
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Block testBlock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Block blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    public Block getBlockToRender()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    Object onActionFromtestPage()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        blockToRender = testBlock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; View this message in context:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context: &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26487973.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26487973.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/quote&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839s302p26492409.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26492199</id>
	<title>Re: Help Tapestry5 Block with JavaScript? Anyone</title>
	<published>2009-11-24T00:33:49Z</published>
	<updated>2009-11-24T00:33:49Z</updated>
	<author>
		<name>alanearl</name>
	</author>
	<content type="html">Excuse Me Sir Howard,
&lt;br&gt;&lt;br&gt;Could you help me with this? Im receiving error...
&lt;br&gt;&lt;br&gt;&lt;br&gt;org.apache.tapestry5.internal.services.RenderQueueException
&lt;br&gt;Render queue error in BeginRender[Index:myblock]: org.apache.tapestry5.ioc.internal.util.TapestryException
&lt;br&gt;&lt;br&gt;Template Class
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:actionlink t:id=&amp;quot;Button1&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;Click Me1!&amp;lt;/t:actionlink&amp;gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:actionlink t:id=&amp;quot;Button2&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;Click Me2!&amp;lt;/t:actionlink&amp;gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Hello
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:Myblock&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:block t:id=&amp;quot;block1&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:block t:id=&amp;quot;block2&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/t:Myblock&amp;gt;
&lt;br&gt;&lt;br&gt;Page Class
&lt;br&gt;&lt;br&gt;public class Index
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; @InjectComponent
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Zone output;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Block block1;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Block block2;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; private Block blockToRender;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public Block getBlockToRender() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public void setBlockToRender(Block blockToRender) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.blockToRender = blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Object onActionFromButton1()
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setBlockToRender(block1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Object onActionFromButton2()
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setBlockToRender(block2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return blockToRender;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;}
&lt;br&gt;&lt;br&gt;Component Class
&lt;br&gt;&lt;br&gt;public class Myblock {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject 
&lt;br&gt;&amp;nbsp; &amp;nbsp; @Path(&amp;quot;context:layout/scripts/jquery-1.3.2.min.js&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Asset jquery;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @Inject
&lt;br&gt;&amp;nbsp; &amp;nbsp; @Path(&amp;quot;context:layout/scripts/pagination.js&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; private Asset pagination;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; private RenderSupport rendersupport;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; @BeginRender
&lt;br&gt;&amp;nbsp; &amp;nbsp; public void beginRender(){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rendersupport.addScriptLink(jquery);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rendersupport.addScriptLink(pagination);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Howard Lewis Ship wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;Search the archives, I'm pretty sure this has come up before.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 3:24 PM, alanearl &amp;lt;alan-luayon@dash.com.ph&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sory Oakstair i did not detail my problem.
&lt;br&gt;&amp;gt; First I dont have any problem integrating Tapestry &amp; JQuery.
&lt;br&gt;&amp;gt; My Problem is executing my javascript when it is inside the BLOCK.
&lt;br&gt;&amp;gt; I think it will not execute....
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Excuse me Sir Howard,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I don't understand this part:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This can be accomplished by using the Delegate component to call back
&lt;br&gt;&amp;gt; into your outer component (you have a getter method return an inner
&lt;br&gt;&amp;gt; class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;&amp;gt; Assets and use RenderSupport to include them.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What do you mean i need to create a new component then it will be called by
&lt;br&gt;&amp;gt; my page
&lt;br&gt;&amp;gt; using injectcomponent &amp; put my javascript in the asset &amp; use render support?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sorry but Im confuse ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Howard Lewis Ship wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The @IncludeJavascriptLibrary annotation changes the beginRender phase
&lt;br&gt;&amp;gt;&amp;gt; of your component to add the JavaScript.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; When a block within your component is rendered, the component's
&lt;br&gt;&amp;gt;&amp;gt; beginRender phase does not execute, just the
&lt;br&gt;&amp;gt;&amp;gt; beginRender phase of components *inside* the block.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; This can be accomplished by using the Delegate component to call back
&lt;br&gt;&amp;gt;&amp;gt; into your outer component (you have a getter method return an inner
&lt;br&gt;&amp;gt;&amp;gt; class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;&amp;gt;&amp;gt; Assets and use RenderSupport to include them.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:44 PM, alanearl &amp;lt;alan-luayon@dash.com.ph&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Question is when one of my block has jquery. It will not load the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; jquery
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; then action link perform.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Any help is appreciated.... Thanks!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Code .tml
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:actionlink t:id=&amp;quot;testPage&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      Default
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:block id=&amp;quot;testBlock&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      &amp;lt;!-- With JQuery  it will not load the JQuery --&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Class
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @IncludeJavaScriptLibrary({&amp;quot;jquery-1.3.2.min.js&amp;quot;,&amp;quot;test.js&amp;quot;})
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    @InjectComponent
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Zone output;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    @Inject
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Block testBlock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Block blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    public Block getBlockToRender()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    Object onActionFromtestPage()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        blockToRender = testBlock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; View this message in context:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context: &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26487973.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26487973.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839s302p26492199.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26491350</id>
	<title>Re: Help Tapestry5 Block with JavaScript? Anyone</title>
	<published>2009-11-23T23:10:51Z</published>
	<updated>2009-11-23T23:10:51Z</updated>
	<author>
		<name>alanearl</name>
	</author>
	<content type="html">Any Examples is appreciated ...
&lt;br&gt;Currently no luck in searching the nabble forum any links.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;quote author=&quot;alanearl&quot;&gt;&lt;br&gt;Sory Oakstair i did not detail my problem.
&lt;br&gt;First I dont have any problem integrating Tapestry &amp; JQuery.
&lt;br&gt;My Problem is executing my javascript when it is inside the BLOCK.
&lt;br&gt;I think it will not execute....
&lt;br&gt;&lt;br&gt;Excuse me Sir Howard,
&lt;br&gt;&lt;br&gt;I don't understand this part:
&lt;br&gt;&lt;br&gt;This can be accomplished by using the Delegate component to call back
&lt;br&gt;into your outer component (you have a getter method return an inner
&lt;br&gt;class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;Assets and use RenderSupport to include them.
&lt;br&gt;&lt;br&gt;What do you mean i need to create a new component then it will be called by my page
&lt;br&gt;using injectcomponent &amp; put my javascript in the asset &amp; use render support?
&lt;br&gt;&lt;br&gt;Sorry but Im confuse ... 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Howard Lewis Ship wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;The @IncludeJavascriptLibrary annotation changes the beginRender phase
&lt;br&gt;of your component to add the JavaScript.
&lt;br&gt;&lt;br&gt;When a block within your component is rendered, the component's
&lt;br&gt;beginRender phase does not execute, just the
&lt;br&gt;beginRender phase of components *inside* the block.
&lt;br&gt;&lt;br&gt;This can be accomplished by using the Delegate component to call back
&lt;br&gt;into your outer component (you have a getter method return an inner
&lt;br&gt;class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;Assets and use RenderSupport to include them.
&lt;br&gt;&lt;br&gt;On Sun, Nov 22, 2009 at 6:44 PM, alanearl &amp;lt;alan-luayon@dash.com.ph&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My Question is when one of my block has jquery. It will not load the jquery
&lt;br&gt;&amp;gt; then action link perform.
&lt;br&gt;&amp;gt; Any help is appreciated.... Thanks!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My Code .tml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;t:actionlink t:id=&amp;quot;testPage&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;      Default
&lt;br&gt;&amp;gt;   &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;t:block id=&amp;quot;testBlock&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;      &amp;lt;!-- With JQuery  it will not load the JQuery --&amp;gt;
&lt;br&gt;&amp;gt;      Test
&lt;br&gt;&amp;gt;   &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My Class
&lt;br&gt;&amp;gt; @IncludeJavaScriptLibrary({&amp;quot;jquery-1.3.2.min.js&amp;quot;,&amp;quot;test.js&amp;quot;})
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    @InjectComponent
&lt;br&gt;&amp;gt;    private Zone output;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    @Inject
&lt;br&gt;&amp;gt;    private Block testBlock;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    private Block blockToRender;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    public Block getBlockToRender()
&lt;br&gt;&amp;gt;    {
&lt;br&gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;    }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    Object onActionFromtestPage()
&lt;br&gt;&amp;gt;    {
&lt;br&gt;&amp;gt;        blockToRender = testBlock;
&lt;br&gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;    }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context: &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/quote&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839s302p26491350.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26491079</id>
	<title>method advisors... change parameters</title>
	<published>2009-11-23T22:31:32Z</published>
	<updated>2009-11-23T22:31:32Z</updated>
	<author>
		<name>Alfonso Quiroga</name>
	</author>
	<content type="html">Hi, is there a way to change the parameters of a service &amp;quot;invocation&amp;quot;?
&lt;br&gt;I have the T5Invocation, the java Method.. I saw that invocation has
&lt;br&gt;the real values inside (p0, p1.. fields). I can access them via
&lt;br&gt;reflection (brute force), maybe something more adecuate? thanks in
&lt;br&gt;advance
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26491079&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26491079&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/method-advisors...-change-parameters-tp26491079s302p26491079.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26490493</id>
	<title>Re: Combining Javascript doesn't work with libraries like TinyMCE</title>
	<published>2009-11-23T20:56:34Z</published>
	<updated>2009-11-23T20:56:34Z</updated>
	<author>
		<name>joshcanfield</name>
	</author>
	<content type="html">Here is a workaround that I used in my tinymce mixin.
&lt;br&gt;&lt;br&gt;void afterRender(MarkupWriter writer) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // inject script in a non-combinable way
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final String scriptelementid = &amp;quot;tinymce-script&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final Element src =
&lt;br&gt;writer.getDocument().getElementById(scriptelementid);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (src == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final String path =
&lt;br&gt;_symbolSource.valueForSymbol(&amp;quot;tinymce&amp;quot;) + &amp;quot;/tiny_mce.js&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final Asset asset =
&lt;br&gt;_assetSource.getAsset(_resources.getBaseResource(), path,
&lt;br&gt;_resources.getLocale());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Element dest = writer.getDocument().find(&amp;quot;html/head&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (dest != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dest.element(&amp;quot;script&amp;quot;, &amp;quot;src&amp;quot;, asset.toClientURL(),
&lt;br&gt;&amp;quot;id&amp;quot;, scriptelementid);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;Josh
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 1:13 PM, raulmt &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490493&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;raulmt@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Combining Javascripts feature in T5.1 is great, but sadly I had to disable
&lt;br&gt;&amp;gt; it. I use TinyMCE and this library uses its own path (where tiny_mce.js
&lt;br&gt;&amp;gt; &amp;quot;lives&amp;quot;) to load other files that are needed (themes, languages, etc.). The
&lt;br&gt;&amp;gt; problem arises when tiny_mce.js is in the combined virtual asset because it
&lt;br&gt;&amp;gt; doesn't find any script tag with itself as the src so TinyMCE can't figure
&lt;br&gt;&amp;gt; out the path to load the other assets.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I think there should be a way to specify that some scripts should not be
&lt;br&gt;&amp;gt; combined because sometimes (like in this case) is a must have... &amp;quot;all or
&lt;br&gt;&amp;gt; nothing&amp;quot; isn't optimal. I looked into the Tapestry code and doesn't seem to
&lt;br&gt;&amp;gt; be possible currently... is there a way? should I post a ticket in jira
&lt;br&gt;&amp;gt; about per-script combining configuration?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards.
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context: &lt;a href=&quot;http://n2.nabble.com/Combining-Javascript-doesn-t-work-with-libraries-like-TinyMCE-tp4054005p4054005.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://n2.nabble.com/Combining-Javascript-doesn-t-work-with-libraries-like-TinyMCE-tp4054005p4054005.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Tapestry Users mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490493&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490493&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;--
&lt;br&gt;TheDailyTube.com. Sign up and get the best new videos on the internet
&lt;br&gt;delivered fresh to your inbox.
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490493&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490493&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Combining-Javascript-doesn%27t-work-with-libraries-like-TinyMCE-tp26485941s302p26490493.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26490144</id>
	<title>AjaxFormLoop problem</title>
	<published>2009-11-23T19:54:27Z</published>
	<updated>2009-11-23T19:54:27Z</updated>
	<author>
		<name>Greg Pagendam-Turner</name>
	</author>
	<content type="html">I'm getting the following error on my page that uses an AjaxFormLoop:
&lt;br&gt;&lt;br&gt;&amp;quot;Render queue error in AfterRender[EditGoal:ajaxformloop.fragment]: The 
&lt;br&gt;rendered content did not include any elements that allow for the 
&lt;br&gt;positioning of the hidden form field's element.&amp;quot;
&lt;br&gt;&lt;br&gt;I see that an issue has been raised:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-733&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-733&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Is there yet any fix or workaround for this issue?
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;&lt;br&gt;Greg.
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490144&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490144&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/AjaxFormLoop-problem-tp26490144s302p26490144.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26489880</id>
	<title>[jira] Commented: (TAP5-935) Per-script combining configuration</title>
	<published>2009-11-23T19:12:39Z</published>
	<updated>2009-11-23T19:12:39Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12781755#action_12781755&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12781755#action_12781755&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Raul Montes commented on TAP5-935:
&lt;br&gt;----------------------------------
&lt;br&gt;&lt;br&gt;One possible solution could be to just add two extra methods to RenderSupport (and one to DocumentLinker) to receive scripts assets/stringURLs that won't be combined (something like RenderSupport#addUncombinableScript(Asset script) ) and store them on a separate List&amp;lt;String&amp;gt; in DocumentLinker.
&lt;br&gt;&lt;br&gt;I'm not sure of what to do with duplicated scripts across this methods. It should go to just the uncombined list I suppose (because if a combinable script is uncombined, it hurts less than combining an uncombinable script).
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Per-script combining configuration
&lt;br&gt;&amp;gt; ----------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: TAP5-935
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-935&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-935&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Tapestry 5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: tapestry-core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.1.0.5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Raul Montes
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Some libraries (like TinyMCE for example) requires to be loaded from its own script tag because they look into its own src to find out the path of other related resources (like themes, languages, images, etc., in TinyMCE case). But if the initializing script of tinyMCE is combined into the virtual asset, it can't figured out its own path and thus fails to load other required resources.
&lt;br&gt;&amp;gt; Because of this problem, I had to disable this great feature, but I think it could be solved if we can set whether a script should be combined or not.
&lt;br&gt;&amp;gt; I put TinyMCE as an example because this library made me disable combined scripts, but the same teqnique is also used by many other libraries as well (as the not modified version of scriptaculous itself) or even in cases when dynamic javascript file generation is needed.
&lt;br&gt;&amp;gt; Regards.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28TAP5-935%29-Per-script-combining-configuration-tp26487130s302p26489880.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26488788</id>
	<title>Re: Help Tapestry5 Block with JavaScript? Anyone</title>
	<published>2009-11-23T16:47:59Z</published>
	<updated>2009-11-23T16:47:59Z</updated>
	<author>
		<name>Howard Lewis Ship</name>
	</author>
	<content type="html">Search the archives, I'm pretty sure this has come up before.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 3:24 PM, alanearl &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alan-luayon@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sory Oakstair i did not detail my problem.
&lt;br&gt;&amp;gt; First I dont have any problem integrating Tapestry &amp; JQuery.
&lt;br&gt;&amp;gt; My Problem is executing my javascript when it is inside the BLOCK.
&lt;br&gt;&amp;gt; I think it will not execute....
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Excuse me Sir Howard,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I don't understand this part:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This can be accomplished by using the Delegate component to call back
&lt;br&gt;&amp;gt; into your outer component (you have a getter method return an inner
&lt;br&gt;&amp;gt; class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;&amp;gt; Assets and use RenderSupport to include them.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What do you mean i need to create a new component then it will be called by
&lt;br&gt;&amp;gt; my page
&lt;br&gt;&amp;gt; using injectcomponent &amp; put my javascript in the asset &amp; use render support?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sorry but Im confuse ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Howard Lewis Ship wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The @IncludeJavascriptLibrary annotation changes the beginRender phase
&lt;br&gt;&amp;gt;&amp;gt; of your component to add the JavaScript.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; When a block within your component is rendered, the component's
&lt;br&gt;&amp;gt;&amp;gt; beginRender phase does not execute, just the
&lt;br&gt;&amp;gt;&amp;gt; beginRender phase of components *inside* the block.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; This can be accomplished by using the Delegate component to call back
&lt;br&gt;&amp;gt;&amp;gt; into your outer component (you have a getter method return an inner
&lt;br&gt;&amp;gt;&amp;gt; class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;&amp;gt;&amp;gt; Assets and use RenderSupport to include them.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:44 PM, alanearl &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alan-luayon@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Question is when one of my block has jquery. It will not load the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; jquery
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; then action link perform.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Any help is appreciated.... Thanks!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Code .tml
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:actionlink t:id=&amp;quot;testPage&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      Default
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;t:block id=&amp;quot;testBlock&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      &amp;lt;!-- With JQuery  it will not load the JQuery --&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;      Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;   &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; My Class
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @IncludeJavaScriptLibrary({&amp;quot;jquery-1.3.2.min.js&amp;quot;,&amp;quot;test.js&amp;quot;})
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    @InjectComponent
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Zone output;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    @Inject
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Block testBlock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    private Block blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    public Block getBlockToRender()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    Object onActionFromtestPage()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        blockToRender = testBlock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; View this message in context:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context: &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26487973.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26487973.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26488788&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839s302p26488788.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26487973</id>
	<title>Re: Help Tapestry5 Block with JavaScript? Anyone</title>
	<published>2009-11-23T15:24:33Z</published>
	<updated>2009-11-23T15:24:33Z</updated>
	<author>
		<name>alanearl</name>
	</author>
	<content type="html">Sory Oakstair i did not detail my problem.
&lt;br&gt;First I dont have any problem integrating Tapestry &amp; JQuery.
&lt;br&gt;My Problem is executing my javascript when it is inside the BLOCK.
&lt;br&gt;I think it will not execute....
&lt;br&gt;&lt;br&gt;Excuse me Sir Howard,
&lt;br&gt;&lt;br&gt;I don't understand this part:
&lt;br&gt;&lt;br&gt;This can be accomplished by using the Delegate component to call back
&lt;br&gt;into your outer component (you have a getter method return an inner
&lt;br&gt;class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;Assets and use RenderSupport to include them.
&lt;br&gt;&lt;br&gt;What do you mean i need to create a new component then it will be called by my page
&lt;br&gt;using injectcomponent &amp; put my javascript in the asset &amp; use render support?
&lt;br&gt;&lt;br&gt;Sorry but Im confuse ... 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Howard Lewis Ship wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;The @IncludeJavascriptLibrary annotation changes the beginRender phase
&lt;br&gt;of your component to add the JavaScript.
&lt;br&gt;&lt;br&gt;When a block within your component is rendered, the component's
&lt;br&gt;beginRender phase does not execute, just the
&lt;br&gt;beginRender phase of components *inside* the block.
&lt;br&gt;&lt;br&gt;This can be accomplished by using the Delegate component to call back
&lt;br&gt;into your outer component (you have a getter method return an inner
&lt;br&gt;class of type Renderable), and then you inject the stylesheets as
&lt;br&gt;Assets and use RenderSupport to include them.
&lt;br&gt;&lt;br&gt;On Sun, Nov 22, 2009 at 6:44 PM, alanearl &amp;lt;alan-luayon@dash.com.ph&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My Question is when one of my block has jquery. It will not load the jquery
&lt;br&gt;&amp;gt; then action link perform.
&lt;br&gt;&amp;gt; Any help is appreciated.... Thanks!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My Code .tml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;t:actionlink t:id=&amp;quot;testPage&amp;quot; t:zone=&amp;quot;output&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;t:zone t:id=&amp;quot;output&amp;quot; t:update=&amp;quot;show&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;      Default
&lt;br&gt;&amp;gt;   &amp;lt;t:delegate to=&amp;quot;prop:blockToRender&amp;quot; /&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;/t:zone&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;   &amp;lt;t:block id=&amp;quot;testBlock&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt;      &amp;lt;!-- With JQuery  it will not load the JQuery --&amp;gt;
&lt;br&gt;&amp;gt;      Test
&lt;br&gt;&amp;gt;   &amp;lt;/t:block&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My Class
&lt;br&gt;&amp;gt; @IncludeJavaScriptLibrary({&amp;quot;jquery-1.3.2.min.js&amp;quot;,&amp;quot;test.js&amp;quot;})
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    @InjectComponent
&lt;br&gt;&amp;gt;    private Zone output;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    @Inject
&lt;br&gt;&amp;gt;    private Block testBlock;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    private Block blockToRender;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    public Block getBlockToRender()
&lt;br&gt;&amp;gt;    {
&lt;br&gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;    }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    Object onActionFromtestPage()
&lt;br&gt;&amp;gt;    {
&lt;br&gt;&amp;gt;        blockToRender = testBlock;
&lt;br&gt;&amp;gt;        return blockToRender;
&lt;br&gt;&amp;gt;    }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context: &lt;a href=&quot;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839p26471839.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Tapestry - User mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;&amp;gt; For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
&lt;br&gt;For additional commands, e-mail: users-help@tapestry.apache.org
&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Help-Tapestry5-Block-with-JavaScript--Anyone-tp26471839s302p26487973.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26487130</id>
	<title>[jira] Created: (TAP5-935) Per-script combining configuration</title>
	<published>2009-11-23T14:23:39Z</published>
	<updated>2009-11-23T14:23:39Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">Per-script combining configuration
&lt;br&gt;----------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: TAP5-935
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-935&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-935&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: Tapestry 5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Improvement
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Components: tapestry-core
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 5.1.0.5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Raul Montes
&lt;br&gt;&lt;br&gt;&lt;br&gt;Some libraries (like TinyMCE for example) requires to be loaded from its own script tag because they look into its own src to find out the path of other related resources (like themes, languages, images, etc., in TinyMCE case). But if the initializing script of tinyMCE is combined into the virtual asset, it can't figured out its own path and thus fails to load other required resources.
&lt;br&gt;&lt;br&gt;Because of this problem, I had to disable this great feature, but I think it could be solved if we can set whether a script should be combined or not.
&lt;br&gt;&lt;br&gt;I put TinyMCE as an example because this library made me disable combined scripts, but the same teqnique is also used by many other libraries as well (as the not modified version of scriptaculous itself) or even in cases when dynamic javascript file generation is needed.
&lt;br&gt;&lt;br&gt;Regards.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28TAP5-935%29-Per-script-combining-configuration-tp26487130s302p26487130.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26487127</id>
	<title>Re: Combining Javascript doesn't work with libraries like TinyMCE</title>
	<published>2009-11-23T14:23:11Z</published>
	<updated>2009-11-23T14:23:11Z</updated>
	<author>
		<name>raulmt</name>
	</author>
	<content type="html">&lt;br&gt;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-935&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-935&lt;/a&gt;&lt;br&gt;&lt;br&gt;If you have something to add or clarify, please do it as well ;)
&lt;br&gt;&lt;br&gt;&lt;br&gt;Thiago H. de Paula Figueiredo wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Em Mon, 23 Nov 2009 19:13:09 -0200, raulmt &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487127&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;raulmt@...&lt;/a&gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Hi!
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; should I post a ticket in jira about per-script combining configuration?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Please do it.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -- 
&lt;br&gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, &amp;nbsp;
&lt;br&gt;&amp;gt; and instructor
&lt;br&gt;&amp;gt; Owner, software architect and developer, Ars Machina Tecnologia da &amp;nbsp;
&lt;br&gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487127&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487127&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;View this message in context: &lt;a href=&quot;http://n2.nabble.com/Combining-Javascript-doesn-t-work-with-libraries-like-TinyMCE-tp4054005p4054444.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://n2.nabble.com/Combining-Javascript-doesn-t-work-with-libraries-like-TinyMCE-tp4054005p4054444.html&lt;/a&gt;&lt;br&gt;Sent from the Tapestry Users mailing list archive at Nabble.com.
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487127&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487127&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Combining-Javascript-doesn%27t-work-with-libraries-like-TinyMCE-tp26485941s302p26487127.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26486423</id>
	<title>Re: Combining Javascript doesn't work with libraries like TinyMCE</title>
	<published>2009-11-23T13:40:02Z</published>
	<updated>2009-11-23T13:40:02Z</updated>
	<author>
		<name>Thiago H. de Paula Figueiredo</name>
	</author>
	<content type="html">Em Mon, 23 Nov 2009 19:13:09 -0200, raulmt &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26486423&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;raulmt@...&lt;/a&gt;&amp;gt; escreveu:
&lt;br&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&lt;br&gt;Hi!
&lt;br&gt;&lt;br&gt;&amp;gt; should I post a ticket in jira about per-script combining configuration?
&lt;br&gt;&lt;br&gt;Please do it.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Thiago H. de Paula Figueiredo
&lt;br&gt;Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, &amp;nbsp;
&lt;br&gt;and instructor
&lt;br&gt;Owner, software architect and developer, Ars Machina Tecnologia da &amp;nbsp;
&lt;br&gt;Informação Ltda.
&lt;br&gt;&lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26486423&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26486423&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Combining-Javascript-doesn%27t-work-with-libraries-like-TinyMCE-tp26485941s302p26486423.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26485941</id>
	<title>Combining Javascript doesn't work with libraries like TinyMCE</title>
	<published>2009-11-23T13:13:09Z</published>
	<updated>2009-11-23T13:13:09Z</updated>
	<author>
		<name>raulmt</name>
	</author>
	<content type="html">&lt;br&gt;Hello,
&lt;br&gt;&lt;br&gt;Combining Javascripts feature in T5.1 is great, but sadly I had to disable
&lt;br&gt;it. I use TinyMCE and this library uses its own path (where tiny_mce.js
&lt;br&gt;&amp;quot;lives&amp;quot;) to load other files that are needed (themes, languages, etc.). The
&lt;br&gt;problem arises when tiny_mce.js is in the combined virtual asset because it
&lt;br&gt;doesn't find any script tag with itself as the src so TinyMCE can't figure
&lt;br&gt;out the path to load the other assets.
&lt;br&gt;&lt;br&gt;I think there should be a way to specify that some scripts should not be
&lt;br&gt;combined because sometimes (like in this case) is a must have... &amp;quot;all or
&lt;br&gt;nothing&amp;quot; isn't optimal. I looked into the Tapestry code and doesn't seem to
&lt;br&gt;be possible currently... is there a way? should I post a ticket in jira
&lt;br&gt;about per-script combining configuration?
&lt;br&gt;&lt;br&gt;Regards.
&lt;br&gt;-- 
&lt;br&gt;View this message in context: &lt;a href=&quot;http://n2.nabble.com/Combining-Javascript-doesn-t-work-with-libraries-like-TinyMCE-tp4054005p4054005.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://n2.nabble.com/Combining-Javascript-doesn-t-work-with-libraries-like-TinyMCE-tp4054005p4054005.html&lt;/a&gt;&lt;br&gt;Sent from the Tapestry Users mailing list archive at Nabble.com.
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485941&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485941&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;users-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Combining-Javascript-doesn%27t-work-with-libraries-like-TinyMCE-tp26485941s302p26485941.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26485571</id>
	<title>Re: 5.1 - 5.0 next releases?</title>
	<published>2009-11-23T12:49:49Z</published>
	<updated>2009-11-23T12:49:49Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">It would be also cool if you could reset my account (I forgot my password)
&lt;br&gt;and give me the right to trigger the build manually.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 8:47 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Ok, so far I've created a nightly build (install, no docs) for
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If that's working happy, I'll add one for the other branch ... is that
&lt;br&gt;&amp;gt; 5.1-dev/ or 5.1.0.x-dev/ ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 11:41 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; Not sure what to make of those errors. &amp;nbsp;Some of the IoC stuff has been
&lt;br&gt;&amp;gt; &amp;gt; very rarely flakey, which I took to be limitations of (i.e., bugs in)
&lt;br&gt;&amp;gt; &amp;gt; the tests, or runtime problems related to running in Bamboo.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I'll got set up some CI builds for the other branches.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Mon, Nov 23, 2009 at 11:20 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; fyi, i just sent an email to infra about hudson &amp; selenium...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Also, it looks like tapestry-ioc is a bit unstable - hudson now gives
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; those failures:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; while there's no change that could affect that...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; So, should be jvm version... i think bamboo runs with 1.5, right? i
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; could set hudson to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; use that (unless someone can explain the failures)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard, is it possible to create builds for the branches at formos
&lt;br&gt;&amp;gt; bamboo?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; We need a temporal solution. I also feel uncomfortably to release
&lt;br&gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; without having a single build at CI.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I don't feel comfortable until the code executes properly in the full
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; stack, including browser, servlet container and Tapestry, and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; including Ajax updates. Anything simulated in that stack is a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; potential to be different than the end user's experience. Selenium is
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; a pain in the ass, but it's as close as you'll get to hiring actual
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; people to validate your web app.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 7:14 PM, Kalle Korhonen
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalle.o.korhonen@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Sun, Nov 22, 2009 at 11:42 AM, Andreas Andreou &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Integration tests aren't currently able to run (missing firefox
&lt;br&gt;&amp;gt; from
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; path)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and all 4 failing tests in 5.1 are due to that.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 5.0 has a few more failures which confirm what i'm seeing locally
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; (
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&lt;/a&gt;&amp;nbsp;)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On that note, I've had very good success doing integration testing
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with HtmlUnit and embedded Jetty. The tests run faster than
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Selenium-based ones and are more independent of the environment. The
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; recent versions of HtmlUnit run any kind of Javascript just fine
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (dojo, prototype, etc.) but obviously it's not *exactly* the same as
&lt;br&gt;&amp;gt; a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; real browser. I've re-written both Apache Shiro's and Tynamo's (at
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Codehaus) integration tests to use the same concepts (see e.g.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ).
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Just thought it might be worth considering - I know how challenging
&lt;br&gt;&amp;gt; it
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; can be at times to rely on infrastructure you are not in control of.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; But perhaps Apache infra folks can help making firefox available on
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the path.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; It's not difficult, just means running Xvfb (X virtual frame buffer).
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Kalle
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:49 PM, Howard Lewis Ship &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm fine with moving stuff off of tapestry.formos.com.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I do want to maintain some site with nightly snapshots, though.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 8:39 AM, Andreas Andreou &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I have the same problem (lost password &amp; bamboo not sending
&lt;br&gt;&amp;gt; email) -
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; that's why
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I started investigating apache's hudson infrastructure...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I got 4.1 building there,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (the trick was to set the build node to master - we were told to
&lt;br&gt;&amp;gt; use
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; minerva or vesta but
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it looks like those are missing maven)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I want to go ahead and add 5.0 and 5.1 there anyway. Howard, you
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already have an account
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but it don't see any T5 builds there, should i just go ahead?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; As for nexus, doing a mvn release will actually just stage it in
&lt;br&gt;&amp;gt; a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; one-time only repo so that
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; anyone can try it from there. I really wanted to try that with
&lt;br&gt;&amp;gt; the 5.0
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but some build failures
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; i'm having haven't allowed that - hoping to tackle them as we
&lt;br&gt;&amp;gt; speak.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 3:55 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can someone please add builds for 5.1.x and 5.0.x branches to
&lt;br&gt;&amp;gt; bamboo?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; forgot my password and bamboo fails to send me a new one.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 1:38 PM, Howard Lewis Ship &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What's the process for staging things in Nexus?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Fri, Nov 20, 2009 at 7:50 AM, Andreas Andreou &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.0 branch] So, i'm basically still getting 3 test failures
&lt;br&gt;&amp;gt; in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-ioc and 2 in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-core (jdk5 &amp; jdk6)... the good thing is i'm not
&lt;br&gt;&amp;gt; getting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; those
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in the 5.1 branch, so, i'll try to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look for diffs.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.1 branch] All look fine here, once we say GO, I (or
&lt;br&gt;&amp;gt; anyone) can
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just try to stage the release
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in nexus and once that works, send the email for the vote
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, Nov 20, 2009 at 2:24 PM, Thiago H. de Paula
&lt;br&gt;&amp;gt; Figueiredo
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thiagohp@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; +1
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Em Fri, 20 Nov 2009 07:09:03 -0200, David Rees &amp;lt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drees76@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2009 at 10:24 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; We should release 5.1.0.6 asap because of the security
&lt;br&gt;&amp;gt; issues.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; What if
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; only backport already fixed issues in 5.2.0.0 snapshots,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; release
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; immidiately go on with 5.1.0.7?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm a big fan of &amp;quot;release often&amp;quot; as long as people are
&lt;br&gt;&amp;gt; willing
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; to do it
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; so +1.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Dave
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate
&lt;br&gt;&amp;gt; consultant,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; developer,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; instructor
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Owner, software architect and developer, Ars Machina
&lt;br&gt;&amp;gt; Tecnologia
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; da
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Consultor, desenvolvedor e instrutor em Java, Tapestry e
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Hibernate
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Coordenador e professor da Especialização em Engenharia de
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Software com
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; -
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support.
&lt;br&gt;&amp;gt; Contact me
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact
&lt;br&gt;&amp;gt; me to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=36&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=37&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=38&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; &amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=39&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485571&amp;i=40&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/5.1---5.0-next-releases--tp26406209s302p26485571.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26485535</id>
	<title>Re: svn commit: r834151 - in /tapestry/tapestry5/trunk:  src/site/apt/guide/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/  tapestry-core/src/main/java/org/apache/tapestry5/services/  tapestry-core/src/test/java/org/apache/tapestry</title>
	<published>2009-11-23T12:47:14Z</published>
	<updated>2009-11-23T12:47:14Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">Release notes + maven site.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 8:53 PM, Ulrich Stärk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485535&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;uli@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; This will break all applications using chenillekit until the chenillekit
&lt;br&gt;&amp;gt; devs update their code and should be visibly documented somewhere.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Uli
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Howard Lewis Ship schrieb:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;Good catch, and I agree.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 10:07 AM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485535&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I think the contribution &amp;quot;^org/chenillekit/tapestry/&amp;quot; should be removed
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; from
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the configuration of the RegexpAuthorizer. App developers using
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Chenillekit
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; should contribute it.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Mon, Nov 9, 2009 at 6:23 PM, &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485535&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;robertdzeigler@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Author: robertdzeigler
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Date: Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; New Revision: 834151
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Log:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; TAP5-815: Asset dispatcher allows any file inside the webapp visible and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; downloadable (5.2 branch)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Modified: tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --- tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt (original)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++ tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt Mon Nov &amp;nbsp;9
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -138,6 +138,31 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;In addition, context assets will use the URL prefix
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&amp;lt;&amp;lt;/assets/ctx/&amp;gt;&amp;gt;&amp;gt;&amp;lt;app-version&amp;gt;&amp;lt;&amp;lt;&amp;lt;/&amp;gt;&amp;gt;&amp;gt;.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +Securing Assets
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;Securing assets is an important consideration for any web
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; application.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Many assets, such as hibernate configuration
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;files, sit in the classpath and are exposable via the Asset service,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; which is not desirable. &amp;nbsp;To protect these and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;other sensitive assets, Tapestry provides the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;This dispatcher sits in front of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;AssetDispatcher, the service responsible for streaming assets to the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; client, and watches for Asset requests.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;When an asset request comes in, the protection dispatcher checks for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; authorization to view the file against a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;contributed list of AssetPathAuthorizer implementations.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Determination
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of whether the client can view the requested
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;resource is then made based on whether any of the contributed
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer implementations explicitly allowed
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;or denied access to the resource.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;Tapestry provides two AssetPathAuthorizer implemenations &amp;quot;out of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; box&amp;quot; to which users may contribute: RegexAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;and WhitelistAuthorizer. &amp;nbsp;RegexAuthorizer uses regular expressions to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; determine assets which are viewable by the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;client; any assets that match one of its (contributed) regular
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; expressions are authorized. Anything not matched is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;passed through to the WhitelistAuthorizer. &amp;nbsp;WhitelistAuthorizer uses
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; an
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; exact-matching whitelist. &amp;nbsp;Anything matching
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;exactly one its contributions is allowed; all other asset requests
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; denied. &amp;nbsp;The default tapestry configuration
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;contributes nothing to WhitelistAuthorizer (access will be denied to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; all
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; asset requests passed through to it), and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;explicitly allows access to css, jpg, jpeg, js, png, and gif files
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; associated with tapestry (tapestry.js, blackbird
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;files, date picker files, etc.). &amp;nbsp;The default contribution also
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; enables
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; access to the css, jpg, jpeg, js, png, and gif
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;files provided by the popular chenille-kit 3rd party library. The
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; default configuration denies access to all other
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;assets. &amp;nbsp;To enable access to your application's assets, either
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; contribute a custom AssetPathAnalyzer, or contribute
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;appropriate regular expression or exact path contributions to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; RegexAuthorizer or WhitelistAuthorizer, respectively.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;See TapestryModule.contribteRegexAuthorizer for examples.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Performance Notes
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Assets are expected to be entirely static (not changing while the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; application is deployed). When Tapestry generates a URL
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -146,4 +171,4 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;asset.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;In addition, Tapestry will {{{compress.html}GZIP compress}} the content
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of &amp;lt;all&amp;gt; assets (if the asset
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; \ No newline at end of file
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.*;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Dispatcher that handles whether to allow or deny access to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; particular
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * assets. Actual work of authorizing a particular url is handled by
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * implementations of AssetPathAuthorizer. Configuration is an ordered
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * list of AssetPathAuthorizers. &amp;nbsp;Each authorizer specifies an order of
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * operations as a list (see AssetPathAuthorizer.Order).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcher implements Dispatcher
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;AssetPathAuthorizer&amp;gt; authorizers;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final ClasspathAssetAliasManager assetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Logger logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public AssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.authorizers = Collections.unmodifiableList(auths);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.assetAliasManager = manager;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.logger = logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean dispatch(Request request, Response response)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IOException
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String path = request.getPath();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//we only protect assets, and don't examine any other url's.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!path.startsWith(RequestConstants.ASSET_PATH_PREFIX))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = assetAliasManager.toResourcePath(path);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer auth : authorizers)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer.Order o : auth.order())
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (o == AssetPathAuthorizer.Order.ALLOW)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessAllowed(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to &amp;quot; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessDenied(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to &amp;quot; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if we get here, no Authorizer had anything useful to say
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; about
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the resourcePath.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//so let it fall through.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Fell through the list of authorizers. Allowing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; access to: &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.regex.Pattern;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Provides a regex-based authorization scheme for asset-access
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; authorization.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Note that this implementation doesn't actually deny access to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; anything.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * But it's placement within the chain of command of authorizers is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; just
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; before
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * the whitelist authorizer, which has an explicit deny policy.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Hence, as long as the whitelist authorizer is being used in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; conjunction
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; with
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * the regex authorizer, there is no need to worry about accessDenied
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; this authorizer.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public class RegexAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;Pattern&amp;gt; _regexes;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public RegexAuthorizer(final Collection&amp;lt;String&amp;gt; regex)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//an alternate way to construct this would be to make sure that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; each pattern is grouped
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//and then to regex or the various patterns together into a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; single
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; pattern.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//that might be faster, but probably not enough to make a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; difference, and this is cleaner.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Pattern&amp;gt; tmp = new ArrayList&amp;lt;Pattern&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String exp : regex)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tmp.add(Pattern.compile(exp));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_regexes = Collections.unmodifiableCollection(tmp);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(Pattern regex : _regexes)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (regex.matcher(resourcePath).matches())
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,59 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Map;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.concurrent.ConcurrentHashMap;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * AssetPathAuthorizer that determines access rights based on exact
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; matching to a contributed whitelist.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Any resource not explicitly specified in the whitelist is denied
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; access.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW, Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;//hash the resource paths for fast lookups.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Map&amp;lt;String, Boolean&amp;gt; _paths;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public WhitelistAuthorizer(Collection&amp;lt;String&amp;gt; paths)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths = new ConcurrentHashMap&amp;lt;String, Boolean&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String path : paths)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths.put(path, true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (_paths.containsKey(resourcePath));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return !_paths.containsKey(resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Determines whether access to an asset is allowed, denied, or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; undetermined.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Each contributed authorizer makes up part of a chain of command for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; determining access.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Access is explicitly allowed if accessAllowed returns true.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Access is explicitly denied if accessDenied returns true.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Ordering depends on the order specified by the &amp;quot;order&amp;quot; parameter.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Hence, an implementation which specifies an order of:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * ALLOW, DENY, and returns true from both accessAllowed and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accessDenied
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * will allow access for all resources. With the same return values for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * access* methods but the order switched to DENY, ALLOW, access to all
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resources
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * would be denied. &amp;nbsp;It is possible for an authorizer to have &amp;quot;nothing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * to say&amp;quot; regarding a particular resource. &amp;nbsp;If accessAllowed returns
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; false,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * it does not mean that access is denied, merely that it is not
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; explicitly allowed.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * If accessDenied returns false, it does not mean that access is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; allowed,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; merely that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * it is not explicitly denied. &amp;nbsp;Hence, if both accessAllowed and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accessDenied return false,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * control will pass to the next authorizer in the chain.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public interface AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Types of orderings, either ALLOW or DENY.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;enum Order {ALLOW, DENY;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Specify the ordering for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return the operations for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Operations will be performed in the order returned by the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; iterator.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * It is assumed that the authorizer correctly implements each form
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * ordering returned. It is acceptable to only return only ALLOW or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; DENY.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;List&amp;lt;Order&amp;gt; order();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Determines whether a request to &amp;quot;resourcePath&amp;quot; is allowed.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly allowed for the path. False
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resource
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * was listed, and false otherwise. &amp;nbsp;A blacklist implementation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; return
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * false regardless of whether the path was in the blacklist.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Alternatively, if the blacklist specified an order of DENY,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ALLOW,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; it could
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true from accessAllowed if the resource was not
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; explicitly
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; listed in its
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * blacklist.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessAllowed(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly prohibited for the path.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; False
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resource was
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * not explicitly listed, and false otherwise. A blacklist
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implementation would
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true if the resource was explicitly denied, and false
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessDenied(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -305,6 +305,9 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(PageRenderLinkSource.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; PageRenderLinkSourceImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(ClientInfrastructure.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ClientInfrastructureImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(URLRewriter.class, URLRewriterImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(Dispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.class).withId(&amp;quot;AssetProtectionDispatcher&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; WhitelistAuthorizer.class).withId(&amp;quot;WhitelistAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; RegexAuthorizer.class).withId(&amp;quot;RegexAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ========================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -1572,13 +1575,17 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; * and forwards onto {@link PageRenderRequestHandler}&amp;lt;/dd&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;dt&amp;gt;ComponentEvent&amp;lt;/dt&amp;gt; &amp;lt;dd&amp;gt;Identifies the {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; * ComponentEventRequestParameters} and forwards onto the {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ComponentEventRequestHandler}&amp;lt;/dd&amp;gt; &amp;lt;/dl&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; configuration)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; configuration,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;@InjectService(&amp;quot;AssetProtectionDispatcher&amp;quot;) Dispatcher assetProt)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Looks for the root path and renders the start page. This is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; maintained for compatibility
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// with earlier versions of Tapestry 5, it is recommended that an
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Index page be used instead.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.addInstance(&amp;quot;RootPath&amp;quot;, RootPathDispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this goes before asset to make sure that only allowed assets
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; streamed to the client.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;AssetProtection&amp;quot;, assetProt,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// This goes first because an asset to be streamed may have an
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; file
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; extension, such as
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// &amp;quot;.html&amp;quot;, that will confuse the later dispatchers.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -1591,6 +1598,7 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.addInstance(&amp;quot;PageRender&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; PageRenderDispatcher.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; * Contributes a default object renderer for type Object, plus
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; specialized renderers for {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; * org.apache.tapestry5.services.Request}, {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; org.apache.tapestry5.ioc.Location}, {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -2480,4 +2488,41 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Contributes the default set of AssetPathAuthorizers into the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param whitelist authorization based on explicit whitelisting.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param regex authorization based on pattern matching.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param conf
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeAssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;WhitelistAuthorizer&amp;quot;) AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; whitelist,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;RegexAuthorizer&amp;quot;) AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; regex,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OrderedConfiguration&amp;lt;AssetPathAuthorizer&amp;gt; conf)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//putting whitelist after everything ensures that, in fact,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; nothing falls through.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//also ensures that whitelist gives other authorizers the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; chance
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to act...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;regex&amp;quot;,regex,&amp;quot;before:whitelist&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;whitelist&amp;quot;, whitelist,&amp;quot;after:*&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt; regex,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.scriptaculous.path&amp;quot;) String
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; scriptPath,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.blackbird.path&amp;quot;) String
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; blackbirdPath,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.datepicker.path&amp;quot;) String
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; datepickerPath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow any js, jpg, jpeg, png, or css under
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; org/chenillekit/tapstry. The funky bit of ([^/.]+/)* is what allows
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//multiple paths, while not allowing any of those paths to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; contains ./ or ../ thereby preventing paths like:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//org/chenillekit/tapestry/../../../foo.js
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pathPattern =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;([^/.]+/)*[^/.]+\\.((css)|(js)|(jpg)|(jpeg)|(png)|(gif))$&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/chenillekit/tapestry/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/apache/tapestry5/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(blackbirdPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(datepickerPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(scriptPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow access to virtual assets. Critical for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry-combined
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; js files.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;virtual/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -257,4 +257,22 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;ReverseStringsWorker&amp;quot;, new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ReverseStringsWorker());
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; configuration) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//use this rather than a blanket regex (^.*.jpg$, etc.); want
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be sure that tests pass from the default
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//configuration setup, (eg: this way, I realized that the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;virtual&amp;quot; assets folder
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//needed to be opened up in the tapestry-provided
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; contributions)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; rather than from some blanket configuration in the appmodule
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//opening up all css, js, etc. files.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//would contribute to whitelist except that the resource path
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; between ctxt and the rest of the path can change.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/css/app\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/style\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bg\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/header\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightsmall\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightbig\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bottom\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/footer\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/tapestry_banner\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/asf_logo_wide\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.createMock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.expect;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.*;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; org.apache.tapestry5.internal.services.AssetProtectionDispatcher;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.ClasspathAssetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Request;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Response;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcherTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void ignores_nonassets() throws IOException
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//shouldn't need any configuration here...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = Collections.emptyList();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,null,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(request.getPath()).andReturn(&amp;quot;start&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void checks_authorizers() throws IOException
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ArrayList&amp;lt;AssetPathAuthorizer&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetPathAuthorizer auth =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; createMock(AssetPathAuthorizer.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(auth.order()).andReturn(Arrays.asList(AssetPathAuthorizer.Order.ALLOW,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.DENY)).times(2);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(false);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessDenied(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/org/apache/tapestry/default.css&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auths.add(auth);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to /cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; /org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; createMock(ClasspathAssetAliasManager.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(manager.toResourcePath(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;)).andReturn(&amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.andReturn(&amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(auth,request,response,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(disp.dispatch(request,response));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(auth,request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,53 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RegexAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public class RegexAuthorizerTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void test_regexes()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;String&amp;gt; patterns =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Arrays.asList(&amp;quot;^.*\\.png$&amp;quot;,&amp;quot;^.*\\.jpg&amp;quot;,&amp;quot;^.*\\.jpeg&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RegexAuthorizer auth = new RegexAuthorizer(patterns);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pkg = &amp;quot;assets/com/saiwaisolutions/resources/&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String png = pkg + &amp;quot;foo.png&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpg = pkg + &amp;quot;foo.jpg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpeg = pkg + &amp;quot;foo.jpeg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String xml = pkg + &amp;quot;foo.xml&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,png,true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpg,true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpeg,true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,xml,false);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private static void test(RegexAuthorizer auth, String one,boolean
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; allowed)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.accessAllowed(one),allowed);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auth.accessAllowed(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one),
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowed);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(one));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,45 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +/*
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + * Created on Jul 28, 2007
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.WhitelistAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizerTest extends Assert {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void run()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WhitelistAuthorizer auth = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; WhitelistAuthorizer(Arrays.asList(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(0),
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(1),
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().size(),2);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessAllowed(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessAllowed(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessDenied(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485535&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485535&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-svn-commit%3A-r834151---in--tapestry-tapestry5-trunk%3A--src-site-apt-guide--tapestry-core-src-main-java-org-apache-tapestry5-internal-services---tapestry-core-src-main-java-org-apache-tapestry5-services---tapestry-core-src-test-java-org-apache-tapestry-tp26483150s302p26485535.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26485512</id>
	<title>Re: 5.1 - 5.0 next releases?</title>
	<published>2009-11-23T12:45:20Z</published>
	<updated>2009-11-23T12:45:20Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">Thanks. It is 5.1.0.x-dev.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 8:47 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Ok, so far I've created a nightly build (install, no docs) for
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If that's working happy, I'll add one for the other branch ... is that
&lt;br&gt;&amp;gt; 5.1-dev/ or 5.1.0.x-dev/ ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 11:41 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; Not sure what to make of those errors. &amp;nbsp;Some of the IoC stuff has been
&lt;br&gt;&amp;gt; &amp;gt; very rarely flakey, which I took to be limitations of (i.e., bugs in)
&lt;br&gt;&amp;gt; &amp;gt; the tests, or runtime problems related to running in Bamboo.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I'll got set up some CI builds for the other branches.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Mon, Nov 23, 2009 at 11:20 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; fyi, i just sent an email to infra about hudson &amp; selenium...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Also, it looks like tapestry-ioc is a bit unstable - hudson now gives
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; those failures:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; while there's no change that could affect that...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; So, should be jvm version... i think bamboo runs with 1.5, right? i
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; could set hudson to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; use that (unless someone can explain the failures)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard, is it possible to create builds for the branches at formos
&lt;br&gt;&amp;gt; bamboo?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; We need a temporal solution. I also feel uncomfortably to release
&lt;br&gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; without having a single build at CI.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I don't feel comfortable until the code executes properly in the full
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; stack, including browser, servlet container and Tapestry, and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; including Ajax updates. Anything simulated in that stack is a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; potential to be different than the end user's experience. Selenium is
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; a pain in the ass, but it's as close as you'll get to hiring actual
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; people to validate your web app.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 7:14 PM, Kalle Korhonen
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalle.o.korhonen@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Sun, Nov 22, 2009 at 11:42 AM, Andreas Andreou &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Integration tests aren't currently able to run (missing firefox
&lt;br&gt;&amp;gt; from
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; path)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and all 4 failing tests in 5.1 are due to that.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 5.0 has a few more failures which confirm what i'm seeing locally
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; (
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&lt;/a&gt;&amp;nbsp;)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On that note, I've had very good success doing integration testing
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with HtmlUnit and embedded Jetty. The tests run faster than
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Selenium-based ones and are more independent of the environment. The
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; recent versions of HtmlUnit run any kind of Javascript just fine
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (dojo, prototype, etc.) but obviously it's not *exactly* the same as
&lt;br&gt;&amp;gt; a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; real browser. I've re-written both Apache Shiro's and Tynamo's (at
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Codehaus) integration tests to use the same concepts (see e.g.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ).
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Just thought it might be worth considering - I know how challenging
&lt;br&gt;&amp;gt; it
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; can be at times to rely on infrastructure you are not in control of.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; But perhaps Apache infra folks can help making firefox available on
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the path.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; It's not difficult, just means running Xvfb (X virtual frame buffer).
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Kalle
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:49 PM, Howard Lewis Ship &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm fine with moving stuff off of tapestry.formos.com.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I do want to maintain some site with nightly snapshots, though.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 8:39 AM, Andreas Andreou &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I have the same problem (lost password &amp; bamboo not sending
&lt;br&gt;&amp;gt; email) -
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; that's why
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I started investigating apache's hudson infrastructure...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I got 4.1 building there,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (the trick was to set the build node to master - we were told to
&lt;br&gt;&amp;gt; use
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; minerva or vesta but
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it looks like those are missing maven)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I want to go ahead and add 5.0 and 5.1 there anyway. Howard, you
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already have an account
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but it don't see any T5 builds there, should i just go ahead?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; As for nexus, doing a mvn release will actually just stage it in
&lt;br&gt;&amp;gt; a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; one-time only repo so that
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; anyone can try it from there. I really wanted to try that with
&lt;br&gt;&amp;gt; the 5.0
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but some build failures
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; i'm having haven't allowed that - hoping to tackle them as we
&lt;br&gt;&amp;gt; speak.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 3:55 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can someone please add builds for 5.1.x and 5.0.x branches to
&lt;br&gt;&amp;gt; bamboo?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; forgot my password and bamboo fails to send me a new one.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 1:38 PM, Howard Lewis Ship &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What's the process for staging things in Nexus?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Fri, Nov 20, 2009 at 7:50 AM, Andreas Andreou &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.0 branch] So, i'm basically still getting 3 test failures
&lt;br&gt;&amp;gt; in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-ioc and 2 in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-core (jdk5 &amp; jdk6)... the good thing is i'm not
&lt;br&gt;&amp;gt; getting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; those
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in the 5.1 branch, so, i'll try to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look for diffs.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.1 branch] All look fine here, once we say GO, I (or
&lt;br&gt;&amp;gt; anyone) can
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just try to stage the release
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in nexus and once that works, send the email for the vote
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, Nov 20, 2009 at 2:24 PM, Thiago H. de Paula
&lt;br&gt;&amp;gt; Figueiredo
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thiagohp@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; +1
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Em Fri, 20 Nov 2009 07:09:03 -0200, David Rees &amp;lt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drees76@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2009 at 10:24 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; We should release 5.1.0.6 asap because of the security
&lt;br&gt;&amp;gt; issues.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; What if
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; only backport already fixed issues in 5.2.0.0 snapshots,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; release
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; immidiately go on with 5.1.0.7?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm a big fan of &amp;quot;release often&amp;quot; as long as people are
&lt;br&gt;&amp;gt; willing
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; to do it
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; so +1.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Dave
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate
&lt;br&gt;&amp;gt; consultant,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; developer,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; instructor
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Owner, software architect and developer, Ars Machina
&lt;br&gt;&amp;gt; Tecnologia
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; da
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Consultor, desenvolvedor e instrutor em Java, Tapestry e
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Hibernate
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Coordenador e professor da Especialização em Engenharia de
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Software com
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; -
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support.
&lt;br&gt;&amp;gt; Contact me
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact
&lt;br&gt;&amp;gt; me to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=36&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=37&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=38&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; &amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=39&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26485512&amp;i=40&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/5.1---5.0-next-releases--tp26406209s302p26485512.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484729</id>
	<title>Re: svn commit: r834151 - in /tapestry/tapestry5/trunk: 	src/site/apt/guide/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ 	tapestry-core/src/main/java/org/apache/tapestry5/services/ tapestry-core/src/test/java/org/apache/tapestry</title>
	<published>2009-11-23T11:53:19Z</published>
	<updated>2009-11-23T11:53:19Z</updated>
	<author>
		<name>Ulrich Stärk</name>
	</author>
	<content type="html">This will break all applications using chenillekit until the chenillekit 
&lt;br&gt;devs update their code and should be visibly documented somewhere.
&lt;br&gt;&lt;br&gt;Uli
&lt;br&gt;&lt;br&gt;Howard Lewis Ship schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Good catch, and I agree.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 10:07 AM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484729&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; I think the contribution &amp;quot;^org/chenillekit/tapestry/&amp;quot; should be removed from
&lt;br&gt;&amp;gt;&amp;gt; the configuration of the RegexpAuthorizer. App developers using Chenillekit
&lt;br&gt;&amp;gt;&amp;gt; should contribute it.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Mon, Nov 9, 2009 at 6:23 PM, &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484729&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;robertdzeigler@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Author: robertdzeigler
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Date: Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; New Revision: 834151
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Log:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; TAP5-815: Asset dispatcher allows any file inside the webapp visible and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; downloadable (5.2 branch)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Modified: tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --- tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt (original)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++ tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt Mon Nov &amp;nbsp;9
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -138,6 +138,31 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; In addition, context assets will use the URL prefix
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&amp;lt;&amp;lt;/assets/ctx/&amp;gt;&amp;gt;&amp;gt;&amp;lt;app-version&amp;gt;&amp;lt;&amp;lt;&amp;lt;/&amp;gt;&amp;gt;&amp;gt;.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +Securing Assets
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;Securing assets is an important consideration for any web application.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Many assets, such as hibernate configuration
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;files, sit in the classpath and are exposable via the Asset service,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; which is not desirable. &amp;nbsp;To protect these and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;other sensitive assets, Tapestry provides the AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;This dispatcher sits in front of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;AssetDispatcher, the service responsible for streaming assets to the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; client, and watches for Asset requests.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;When an asset request comes in, the protection dispatcher checks for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; authorization to view the file against a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;contributed list of AssetPathAuthorizer implementations. &amp;nbsp;Determination
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; of whether the client can view the requested
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;resource is then made based on whether any of the contributed
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer implementations explicitly allowed
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;or denied access to the resource.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;Tapestry provides two AssetPathAuthorizer implemenations &amp;quot;out of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; box&amp;quot; to which users may contribute: RegexAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;and WhitelistAuthorizer. &amp;nbsp;RegexAuthorizer uses regular expressions to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; determine assets which are viewable by the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;client; any assets that match one of its (contributed) regular
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; expressions are authorized. Anything not matched is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;passed through to the WhitelistAuthorizer. &amp;nbsp;WhitelistAuthorizer uses an
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; exact-matching whitelist. &amp;nbsp;Anything matching
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;exactly one its contributions is allowed; all other asset requests are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; denied. &amp;nbsp;The default tapestry configuration
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;contributes nothing to WhitelistAuthorizer (access will be denied to all
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; asset requests passed through to it), and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;explicitly allows access to css, jpg, jpeg, js, png, and gif files
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; associated with tapestry (tapestry.js, blackbird
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;files, date picker files, etc.). &amp;nbsp;The default contribution also enables
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; access to the css, jpg, jpeg, js, png, and gif
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;files provided by the popular chenille-kit 3rd party library. The
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; default configuration denies access to all other
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;assets. &amp;nbsp;To enable access to your application's assets, either
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; contribute a custom AssetPathAnalyzer, or contribute
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;appropriate regular expression or exact path contributions to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; RegexAuthorizer or WhitelistAuthorizer, respectively.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;See TapestryModule.contribteRegexAuthorizer for examples.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;Performance Notes
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; Assets are expected to be entirely static (not changing while the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; application is deployed). When Tapestry generates a URL
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -146,4 +171,4 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; asset.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; In addition, Tapestry will {{{compress.html}GZIP compress}} the content
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; of &amp;lt;all&amp;gt; assets (if the asset
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; - &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; \ No newline at end of file
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.*;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Dispatcher that handles whether to allow or deny access to particular
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * assets. Actual work of authorizing a particular url is handled by
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * implementations of AssetPathAuthorizer. Configuration is an ordered
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * list of AssetPathAuthorizers. &amp;nbsp;Each authorizer specifies an order of
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * operations as a list (see AssetPathAuthorizer.Order).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcher implements Dispatcher
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;AssetPathAuthorizer&amp;gt; authorizers;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final ClasspathAssetAliasManager assetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Logger logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public AssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.authorizers = Collections.unmodifiableList(auths);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.assetAliasManager = manager;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.logger = logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean dispatch(Request request, Response response)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IOException
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String path = request.getPath();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//we only protect assets, and don't examine any other url's.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!path.startsWith(RequestConstants.ASSET_PATH_PREFIX))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = assetAliasManager.toResourcePath(path);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer auth : authorizers)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer.Order o : auth.order())
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (o == AssetPathAuthorizer.Order.ALLOW)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessAllowed(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to &amp;quot; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessDenied(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if we get here, no Authorizer had anything useful to say about
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the resourcePath.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//so let it fall through.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Fell through the list of authorizers. Allowing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; access to: &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.regex.Pattern;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Provides a regex-based authorization scheme for asset-access
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; authorization.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Note that this implementation doesn't actually deny access to anything.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * But it's placement within the chain of command of authorizers is just
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; before
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * the whitelist authorizer, which has an explicit deny policy.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Hence, as long as the whitelist authorizer is being used in conjunction
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; with
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * the regex authorizer, there is no need to worry about accessDenied in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; this authorizer.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public class RegexAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;Pattern&amp;gt; _regexes;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public RegexAuthorizer(final Collection&amp;lt;String&amp;gt; regex)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//an alternate way to construct this would be to make sure that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; each pattern is grouped
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//and then to regex or the various patterns together into a single
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; pattern.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//that might be faster, but probably not enough to make a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; difference, and this is cleaner.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Pattern&amp;gt; tmp = new ArrayList&amp;lt;Pattern&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String exp : regex)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tmp.add(Pattern.compile(exp));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_regexes = Collections.unmodifiableCollection(tmp);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(Pattern regex : _regexes)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (regex.matcher(resourcePath).matches())
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,59 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Map;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.concurrent.ConcurrentHashMap;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * AssetPathAuthorizer that determines access rights based on exact
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; matching to a contributed whitelist.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Any resource not explicitly specified in the whitelist is denied
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; access.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW, Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;//hash the resource paths for fast lookups.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Map&amp;lt;String, Boolean&amp;gt; _paths;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public WhitelistAuthorizer(Collection&amp;lt;String&amp;gt; paths)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths = new ConcurrentHashMap&amp;lt;String, Boolean&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String path : paths)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths.put(path, true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (_paths.containsKey(resourcePath));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return !_paths.containsKey(resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Determines whether access to an asset is allowed, denied, or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; undetermined.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Each contributed authorizer makes up part of a chain of command for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; determining access.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Access is explicitly allowed if accessAllowed returns true.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Access is explicitly denied if accessDenied returns true.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Ordering depends on the order specified by the &amp;quot;order&amp;quot; parameter.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Hence, an implementation which specifies an order of:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * ALLOW, DENY, and returns true from both accessAllowed and accessDenied
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * will allow access for all resources. With the same return values for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * access* methods but the order switched to DENY, ALLOW, access to all
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; resources
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * would be denied. &amp;nbsp;It is possible for an authorizer to have &amp;quot;nothing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * to say&amp;quot; regarding a particular resource. &amp;nbsp;If accessAllowed returns
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; false,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * it does not mean that access is denied, merely that it is not
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; explicitly allowed.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * If accessDenied returns false, it does not mean that access is allowed,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; merely that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * it is not explicitly denied. &amp;nbsp;Hence, if both accessAllowed and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; accessDenied return false,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * control will pass to the next authorizer in the chain.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public interface AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Types of orderings, either ALLOW or DENY.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;enum Order {ALLOW, DENY;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Specify the ordering for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return the operations for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Operations will be performed in the order returned by the iterator.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * It is assumed that the authorizer correctly implements each form of
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * ordering returned. It is acceptable to only return only ALLOW or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; DENY.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;List&amp;lt;Order&amp;gt; order();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Determines whether a request to &amp;quot;resourcePath&amp;quot; is allowed.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly allowed for the path. False
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; resource
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * was listed, and false otherwise. &amp;nbsp;A blacklist implementation would
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; return
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * false regardless of whether the path was in the blacklist.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Alternatively, if the blacklist specified an order of DENY, ALLOW,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; it could
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true from accessAllowed if the resource was not explicitly
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; listed in its
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * blacklist.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessAllowed(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly prohibited for the path. False
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; resource was
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * not explicitly listed, and false otherwise. A blacklist
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implementation would
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true if the resource was explicitly denied, and false
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessDenied(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -305,6 +305,9 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(PageRenderLinkSource.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; PageRenderLinkSourceImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(ClientInfrastructure.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ClientInfrastructureImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(URLRewriter.class, URLRewriterImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(Dispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.class).withId(&amp;quot;AssetProtectionDispatcher&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; WhitelistAuthorizer.class).withId(&amp;quot;WhitelistAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; RegexAuthorizer.class).withId(&amp;quot;RegexAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; //
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ========================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -1572,13 +1575,17 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* and forwards onto {@link PageRenderRequestHandler}&amp;lt;/dd&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;dt&amp;gt;ComponentEvent&amp;lt;/dt&amp;gt; &amp;lt;dd&amp;gt;Identifies the {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* ComponentEventRequestParameters} and forwards onto the {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ComponentEventRequestHandler}&amp;lt;/dd&amp;gt; &amp;lt;/dl&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; - &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;@InjectService(&amp;quot;AssetProtectionDispatcher&amp;quot;) Dispatcher assetProt)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Looks for the root path and renders the start page. This is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; maintained for compatibility
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // with earlier versions of Tapestry 5, it is recommended that an
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Index page be used instead.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.addInstance(&amp;quot;RootPath&amp;quot;, RootPathDispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this goes before asset to make sure that only allowed assets are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; streamed to the client.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;AssetProtection&amp;quot;, assetProt, &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // This goes first because an asset to be streamed may have an file
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; extension, such as
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;quot;.html&amp;quot;, that will confuse the later dispatchers.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -1591,6 +1598,7 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.addInstance(&amp;quot;PageRender&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; PageRenderDispatcher.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Contributes a default object renderer for type Object, plus
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; specialized renderers for {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* org.apache.tapestry5.services.Request}, {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; org.apache.tapestry5.ioc.Location}, {@link
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -2480,4 +2488,41 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Contributes the default set of AssetPathAuthorizers into the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param whitelist authorization based on explicit whitelisting.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param regex authorization based on pattern matching.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param conf
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeAssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;WhitelistAuthorizer&amp;quot;) AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; whitelist,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;RegexAuthorizer&amp;quot;) AssetPathAuthorizer regex,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OrderedConfiguration&amp;lt;AssetPathAuthorizer&amp;gt; conf)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//putting whitelist after everything ensures that, in fact,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; nothing falls through.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//also ensures that whitelist gives other authorizers the chance
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; to act...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;regex&amp;quot;,regex,&amp;quot;before:whitelist&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;whitelist&amp;quot;, whitelist,&amp;quot;after:*&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt; regex,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.scriptaculous.path&amp;quot;) String scriptPath,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.blackbird.path&amp;quot;) String blackbirdPath,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.datepicker.path&amp;quot;) String datepickerPath)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow any js, jpg, jpeg, png, or css under
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; org/chenillekit/tapstry. The funky bit of ([^/.]+/)* is what allows
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//multiple paths, while not allowing any of those paths to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; contains ./ or ../ thereby preventing paths like:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//org/chenillekit/tapestry/../../../foo.js
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pathPattern =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;([^/.]+/)*[^/.]+\\.((css)|(js)|(jpg)|(jpeg)|(png)|(gif))$&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/chenillekit/tapestry/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/apache/tapestry5/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(blackbirdPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(datepickerPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(scriptPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow access to virtual assets. Critical for tapestry-combined
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; js files.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;virtual/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -257,4 +257,22 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.add(&amp;quot;ReverseStringsWorker&amp;quot;, new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ReverseStringsWorker());
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; configuration) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//use this rather than a blanket regex (^.*.jpg$, etc.); want to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; be sure that tests pass from the default
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//configuration setup, (eg: this way, I realized that the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;virtual&amp;quot; assets folder
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//needed to be opened up in the tapestry-provided contributions)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; rather than from some blanket configuration in the appmodule
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//opening up all css, js, etc. files.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//would contribute to whitelist except that the resource path
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; between ctxt and the rest of the path can change.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/css/app\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/style\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bg\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/header\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightsmall\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightbig\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bottom\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/footer\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/tapestry_banner\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/asf_logo_wide\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.createMock;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.expect;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.*;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.AssetProtectionDispatcher;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.ClasspathAssetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Request;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Response;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcherTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void ignores_nonassets() throws IOException
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//shouldn't need any configuration here...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = Collections.emptyList();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,null,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(request.getPath()).andReturn(&amp;quot;start&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void checks_authorizers() throws IOException
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ArrayList&amp;lt;AssetPathAuthorizer&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetPathAuthorizer auth = createMock(AssetPathAuthorizer.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(auth.order()).andReturn(Arrays.asList(AssetPathAuthorizer.Order.ALLOW,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.DENY)).times(2);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(false);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessDenied(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/org/apache/tapestry/default.css&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auths.add(auth);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to /cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; /org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; createMock(ClasspathAssetAliasManager.class);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;)).andReturn(&amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;))
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.andReturn(&amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(auth,request,response,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(disp.dispatch(request,response));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(auth,request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,53 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RegexAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public class RegexAuthorizerTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void test_regexes()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;String&amp;gt; patterns =
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Arrays.asList(&amp;quot;^.*\\.png$&amp;quot;,&amp;quot;^.*\\.jpg&amp;quot;,&amp;quot;^.*\\.jpeg&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RegexAuthorizer auth = new RegexAuthorizer(patterns);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pkg = &amp;quot;assets/com/saiwaisolutions/resources/&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String png = pkg + &amp;quot;foo.png&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpg = pkg + &amp;quot;foo.jpg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpeg = pkg + &amp;quot;foo.jpeg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String xml = pkg + &amp;quot;foo.xml&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,png,true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpg,true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpeg,true);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,xml,false);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private static void test(RegexAuthorizer auth, String one,boolean
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; allowed)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.accessAllowed(one),allowed);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auth.accessAllowed(
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one),
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowed);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(one));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -0,0 +1,45 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +/*
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + * Created on Jul 28, 2007
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.WhitelistAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizerTest extends Assert {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void run()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WhitelistAuthorizer auth = new
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; WhitelistAuthorizer(Arrays.asList(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(0),
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(1), AssetPathAuthorizer.Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().size(),2);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessAllowed(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessAllowed(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessDenied(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484729&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484729&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-svn-commit%3A-r834151---in--tapestry-tapestry5-trunk%3A--src-site-apt-guide--tapestry-core-src-main-java-org-apache-tapestry5-internal-services---tapestry-core-src-main-java-org-apache-tapestry5-services---tapestry-core-src-test-java-org-apache-tapestry-tp26483150s302p26484729.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484637</id>
	<title>Re: 5.1 - 5.0 next releases?</title>
	<published>2009-11-23T11:47:54Z</published>
	<updated>2009-11-23T11:47:54Z</updated>
	<author>
		<name>Howard Lewis Ship</name>
	</author>
	<content type="html">Ok, so far I've created a nightly build (install, no docs) for
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0&lt;/a&gt;&lt;br&gt;&lt;br&gt;If that's working happy, I'll add one for the other branch ... is that
&lt;br&gt;5.1-dev/ or 5.1.0.x-dev/ ?
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 11:41 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Not sure what to make of those errors.  Some of the IoC stuff has been
&lt;br&gt;&amp;gt; very rarely flakey, which I took to be limitations of (i.e., bugs in)
&lt;br&gt;&amp;gt; the tests, or runtime problems related to running in Bamboo.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'll got set up some CI builds for the other branches.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 11:20 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; fyi, i just sent an email to infra about hudson &amp; selenium...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Also, it looks like tapestry-ioc is a bit unstable - hudson now gives
&lt;br&gt;&amp;gt;&amp;gt; those failures:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; while there's no change that could affect that...
&lt;br&gt;&amp;gt;&amp;gt; So, should be jvm version... i think bamboo runs with 1.5, right? i
&lt;br&gt;&amp;gt;&amp;gt; could set hudson to
&lt;br&gt;&amp;gt;&amp;gt; use that (unless someone can explain the failures)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Howard, is it possible to create builds for the branches at formos bamboo?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; We need a temporal solution. I also feel uncomfortably to release 5.1.0.6
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; without having a single build at CI.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I don't feel comfortable until the code executes properly in the full
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; stack, including browser, servlet container and Tapestry, and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; including Ajax updates. Anything simulated in that stack is a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; potential to be different than the end user's experience. Selenium is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a pain in the ass, but it's as close as you'll get to hiring actual
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; people to validate your web app.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 7:14 PM, Kalle Korhonen
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalle.o.korhonen@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Sun, Nov 22, 2009 at 11:42 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Integration tests aren't currently able to run (missing firefox from
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; path)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and all 4 failing tests in 5.1 are due to that.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 5.0 has a few more failures which confirm what i'm seeing locally
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; (
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&lt;/a&gt;&amp;nbsp;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On that note, I've had very good success doing integration testing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with HtmlUnit and embedded Jetty. The tests run faster than
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Selenium-based ones and are more independent of the environment. The
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; recent versions of HtmlUnit run any kind of Javascript just fine
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (dojo, prototype, etc.) but obviously it's not *exactly* the same as a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; real browser. I've re-written both Apache Shiro's and Tynamo's (at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Codehaus) integration tests to use the same concepts (see e.g.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Just thought it might be worth considering - I know how challenging it
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; can be at times to rely on infrastructure you are not in control of.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; But perhaps Apache infra folks can help making firefox available on
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the path.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; It's not difficult, just means running Xvfb (X virtual frame buffer).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Kalle
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:49 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm fine with moving stuff off of tapestry.formos.com.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I do want to maintain some site with nightly snapshots, though.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 8:39 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I have the same problem (lost password &amp; bamboo not sending email) -
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that's why
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I started investigating apache's hudson infrastructure...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I got 4.1 building there,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (the trick was to set the build node to master - we were told to use
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; minerva or vesta but
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it looks like those are missing maven)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I want to go ahead and add 5.0 and 5.1 there anyway. Howard, you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already have an account
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but it don't see any T5 builds there, should i just go ahead?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; As for nexus, doing a mvn release will actually just stage it in a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; one-time only repo so that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; anyone can try it from there. I really wanted to try that with the 5.0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but some build failures
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; i'm having haven't allowed that - hoping to tackle them as we speak.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 3:55 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can someone please add builds for 5.1.x and 5.0.x branches to bamboo?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; forgot my password and bamboo fails to send me a new one.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 1:38 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What's the process for staging things in Nexus?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Fri, Nov 20, 2009 at 7:50 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.0 branch] So, i'm basically still getting 3 test failures in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-ioc and 2 in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-core (jdk5 &amp; jdk6)... the good thing is i'm not getting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; those
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in the 5.1 branch, so, i'll try to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look for diffs.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.1 branch] All look fine here, once we say GO, I (or anyone) can
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just try to stage the release
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in nexus and once that works, send the email for the vote
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, Nov 20, 2009 at 2:24 PM, Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thiagohp@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; +1
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Em Fri, 20 Nov 2009 07:09:03 -0200, David Rees &amp;lt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drees76@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2009 at 10:24 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; We should release 5.1.0.6 asap because of the security issues.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What if
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; only backport already fixed issues in 5.2.0.0 snapshots,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; release
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; immidiately go on with 5.1.0.7?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm a big fan of &amp;quot;release often&amp;quot; as long as people are willing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to do it
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; so +1.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Dave
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate consultant,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; developer,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; instructor
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Owner, software architect and developer, Ars Machina Tecnologia
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; da
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Consultor, desenvolvedor e instrutor em Java, Tapestry e
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hibernate
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Coordenador e professor da Especialização em Engenharia de
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Software com
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=36&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=37&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=38&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484637&amp;i=39&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/5.1---5.0-next-releases--tp26406209s302p26484637.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484533</id>
	<title>Re: 5.1 - 5.0 next releases?</title>
	<published>2009-11-23T11:41:04Z</published>
	<updated>2009-11-23T11:41:04Z</updated>
	<author>
		<name>Howard Lewis Ship</name>
	</author>
	<content type="html">Not sure what to make of those errors. &amp;nbsp;Some of the IoC stuff has been
&lt;br&gt;very rarely flakey, which I took to be limitations of (i.e., bugs in)
&lt;br&gt;the tests, or runtime problems related to running in Bamboo.
&lt;br&gt;&lt;br&gt;I'll got set up some CI builds for the other branches.
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 11:20 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; fyi, i just sent an email to infra about hudson &amp; selenium...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Also, it looks like tapestry-ioc is a bit unstable - hudson now gives
&lt;br&gt;&amp;gt; those failures:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&lt;/a&gt;&lt;br&gt;&amp;gt; while there's no change that could affect that...
&lt;br&gt;&amp;gt; So, should be jvm version... i think bamboo runs with 1.5, right? i
&lt;br&gt;&amp;gt; could set hudson to
&lt;br&gt;&amp;gt; use that (unless someone can explain the failures)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; Howard, is it possible to create builds for the branches at formos bamboo?
&lt;br&gt;&amp;gt;&amp;gt; We need a temporal solution. I also feel uncomfortably to release 5.1.0.6
&lt;br&gt;&amp;gt;&amp;gt; without having a single build at CI.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I don't feel comfortable until the code executes properly in the full
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; stack, including browser, servlet container and Tapestry, and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; including Ajax updates. Anything simulated in that stack is a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; potential to be different than the end user's experience. Selenium is
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; a pain in the ass, but it's as close as you'll get to hiring actual
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; people to validate your web app.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 7:14 PM, Kalle Korhonen
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalle.o.korhonen@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Sun, Nov 22, 2009 at 11:42 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Integration tests aren't currently able to run (missing firefox from
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; path)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and all 4 failing tests in 5.1 are due to that.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 5.0 has a few more failures which confirm what i'm seeing locally
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; (
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&lt;/a&gt;&amp;nbsp;)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On that note, I've had very good success doing integration testing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with HtmlUnit and embedded Jetty. The tests run faster than
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Selenium-based ones and are more independent of the environment. The
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; recent versions of HtmlUnit run any kind of Javascript just fine
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (dojo, prototype, etc.) but obviously it's not *exactly* the same as a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; real browser. I've re-written both Apache Shiro's and Tynamo's (at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Codehaus) integration tests to use the same concepts (see e.g.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Just thought it might be worth considering - I know how challenging it
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; can be at times to rely on infrastructure you are not in control of.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; But perhaps Apache infra folks can help making firefox available on
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the path.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; It's not difficult, just means running Xvfb (X virtual frame buffer).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Kalle
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:49 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm fine with moving stuff off of tapestry.formos.com.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I do want to maintain some site with nightly snapshots, though.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 8:39 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I have the same problem (lost password &amp; bamboo not sending email) -
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; that's why
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I started investigating apache's hudson infrastructure...
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I got 4.1 building there,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (the trick was to set the build node to master - we were told to use
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; minerva or vesta but
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it looks like those are missing maven)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I want to go ahead and add 5.0 and 5.1 there anyway. Howard, you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already have an account
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but it don't see any T5 builds there, should i just go ahead?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; As for nexus, doing a mvn release will actually just stage it in a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; one-time only repo so that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; anyone can try it from there. I really wanted to try that with the 5.0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but some build failures
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; i'm having haven't allowed that - hoping to tackle them as we speak.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 3:55 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can someone please add builds for 5.1.x and 5.0.x branches to bamboo?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; forgot my password and bamboo fails to send me a new one.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 1:38 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What's the process for staging things in Nexus?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Fri, Nov 20, 2009 at 7:50 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.0 branch] So, i'm basically still getting 3 test failures in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-ioc and 2 in
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-core (jdk5 &amp; jdk6)... the good thing is i'm not getting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; those
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in the 5.1 branch, so, i'll try to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look for diffs.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.1 branch] All look fine here, once we say GO, I (or anyone) can
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just try to stage the release
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in nexus and once that works, send the email for the vote
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, Nov 20, 2009 at 2:24 PM, Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thiagohp@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; +1
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Em Fri, 20 Nov 2009 07:09:03 -0200, David Rees &amp;lt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drees76@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2009 at 10:24 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; We should release 5.1.0.6 asap because of the security issues.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; What if
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; only backport already fixed issues in 5.2.0.0 snapshots,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; release
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; immidiately go on with 5.1.0.7?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm a big fan of &amp;quot;release often&amp;quot; as long as people are willing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; to do it
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; so +1.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Dave
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate consultant,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; developer,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; instructor
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Owner, software architect and developer, Ars Machina Tecnologia
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; da
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Consultor, desenvolvedor e instrutor em Java, Tapestry e
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hibernate
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Coordenador e professor da Especialização em Engenharia de
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Software com
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=36&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=37&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484533&amp;i=38&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/5.1---5.0-next-releases--tp26406209s302p26484533.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484494</id>
	<title>Re: svn commit: r834151 - in /tapestry/tapestry5/trunk:  src/site/apt/guide/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/  tapestry-core/src/main/java/org/apache/tapestry5/services/  tapestry-core/src/test/java/org/apache/tapestry</title>
	<published>2009-11-23T11:37:53Z</published>
	<updated>2009-11-23T11:37:53Z</updated>
	<author>
		<name>Howard Lewis Ship</name>
	</author>
	<content type="html">Good catch, and I agree.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 10:07 AM, Igor Drobiazko
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484494&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I think the contribution &amp;quot;^org/chenillekit/tapestry/&amp;quot; should be removed from
&lt;br&gt;&amp;gt; the configuration of the RegexpAuthorizer. App developers using Chenillekit
&lt;br&gt;&amp;gt; should contribute it.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 9, 2009 at 6:23 PM, &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484494&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;robertdzeigler@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Author: robertdzeigler
&lt;br&gt;&amp;gt;&amp;gt; Date: Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; New Revision: 834151
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Log:
&lt;br&gt;&amp;gt;&amp;gt; TAP5-815: Asset dispatcher allows any file inside the webapp visible and
&lt;br&gt;&amp;gt;&amp;gt; downloadable (5.2 branch)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt;    tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Modified: tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; --- tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt (original)
&lt;br&gt;&amp;gt;&amp;gt; +++ tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt Mon Nov  9
&lt;br&gt;&amp;gt;&amp;gt; 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -138,6 +138,31 @@
&lt;br&gt;&amp;gt;&amp;gt;   In addition, context assets will use the URL prefix
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&amp;lt;&amp;lt;/assets/ctx/&amp;gt;&amp;gt;&amp;gt;&amp;lt;app-version&amp;gt;&amp;lt;&amp;lt;&amp;lt;/&amp;gt;&amp;gt;&amp;gt;.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +Securing Assets
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +  Securing assets is an important consideration for any web application.
&lt;br&gt;&amp;gt;&amp;gt;  Many assets, such as hibernate configuration
&lt;br&gt;&amp;gt;&amp;gt; +  files, sit in the classpath and are exposable via the Asset service,
&lt;br&gt;&amp;gt;&amp;gt; which is not desirable.  To protect these and
&lt;br&gt;&amp;gt;&amp;gt; +  other sensitive assets, Tapestry provides the AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt;  This dispatcher sits in front of the
&lt;br&gt;&amp;gt;&amp;gt; +  AssetDispatcher, the service responsible for streaming assets to the
&lt;br&gt;&amp;gt;&amp;gt; client, and watches for Asset requests.
&lt;br&gt;&amp;gt;&amp;gt; +  When an asset request comes in, the protection dispatcher checks for
&lt;br&gt;&amp;gt;&amp;gt; authorization to view the file against a
&lt;br&gt;&amp;gt;&amp;gt; +  contributed list of AssetPathAuthorizer implementations.  Determination
&lt;br&gt;&amp;gt;&amp;gt; of whether the client can view the requested
&lt;br&gt;&amp;gt;&amp;gt; +  resource is then made based on whether any of the contributed
&lt;br&gt;&amp;gt;&amp;gt; AssetPathAuthorizer implementations explicitly allowed
&lt;br&gt;&amp;gt;&amp;gt; +  or denied access to the resource.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +  Tapestry provides two AssetPathAuthorizer implemenations &amp;quot;out of the
&lt;br&gt;&amp;gt;&amp;gt; box&amp;quot; to which users may contribute: RegexAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +  and WhitelistAuthorizer.  RegexAuthorizer uses regular expressions to
&lt;br&gt;&amp;gt;&amp;gt; determine assets which are viewable by the
&lt;br&gt;&amp;gt;&amp;gt; +  client; any assets that match one of its (contributed) regular
&lt;br&gt;&amp;gt;&amp;gt; expressions are authorized. Anything not matched is
&lt;br&gt;&amp;gt;&amp;gt; +  passed through to the WhitelistAuthorizer.  WhitelistAuthorizer uses an
&lt;br&gt;&amp;gt;&amp;gt; exact-matching whitelist.  Anything matching
&lt;br&gt;&amp;gt;&amp;gt; +  exactly one its contributions is allowed; all other asset requests are
&lt;br&gt;&amp;gt;&amp;gt; denied.  The default tapestry configuration
&lt;br&gt;&amp;gt;&amp;gt; +  contributes nothing to WhitelistAuthorizer (access will be denied to all
&lt;br&gt;&amp;gt;&amp;gt; asset requests passed through to it), and
&lt;br&gt;&amp;gt;&amp;gt; +  explicitly allows access to css, jpg, jpeg, js, png, and gif files
&lt;br&gt;&amp;gt;&amp;gt; associated with tapestry (tapestry.js, blackbird
&lt;br&gt;&amp;gt;&amp;gt; +  files, date picker files, etc.).  The default contribution also enables
&lt;br&gt;&amp;gt;&amp;gt; access to the css, jpg, jpeg, js, png, and gif
&lt;br&gt;&amp;gt;&amp;gt; +  files provided by the popular chenille-kit 3rd party library. The
&lt;br&gt;&amp;gt;&amp;gt; default configuration denies access to all other
&lt;br&gt;&amp;gt;&amp;gt; +  assets.  To enable access to your application's assets, either
&lt;br&gt;&amp;gt;&amp;gt; contribute a custom AssetPathAnalyzer, or contribute
&lt;br&gt;&amp;gt;&amp;gt; +  appropriate regular expression or exact path contributions to
&lt;br&gt;&amp;gt;&amp;gt; RegexAuthorizer or WhitelistAuthorizer, respectively.
&lt;br&gt;&amp;gt;&amp;gt; +  See TapestryModule.contribteRegexAuthorizer for examples.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  Performance Notes
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;   Assets are expected to be entirely static (not changing while the
&lt;br&gt;&amp;gt;&amp;gt; application is deployed). When Tapestry generates a URL
&lt;br&gt;&amp;gt;&amp;gt; @@ -146,4 +171,4 @@
&lt;br&gt;&amp;gt;&amp;gt;   asset.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;   In addition, Tapestry will {{{compress.html}GZIP compress}} the content
&lt;br&gt;&amp;gt;&amp;gt; of &amp;lt;all&amp;gt; assets (if the asset
&lt;br&gt;&amp;gt;&amp;gt; -  is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt; \ No newline at end of file
&lt;br&gt;&amp;gt;&amp;gt; +  is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.*;
&lt;br&gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * Dispatcher that handles whether to allow or deny access to particular
&lt;br&gt;&amp;gt;&amp;gt; + * assets. Actual work of authorizing a particular url is handled by
&lt;br&gt;&amp;gt;&amp;gt; + * implementations of AssetPathAuthorizer. Configuration is an ordered
&lt;br&gt;&amp;gt;&amp;gt; + * list of AssetPathAuthorizers.  Each authorizer specifies an order of
&lt;br&gt;&amp;gt;&amp;gt; + * operations as a list (see AssetPathAuthorizer.Order).
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcher implements Dispatcher
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    private final Collection&amp;lt;AssetPathAuthorizer&amp;gt; authorizers;
&lt;br&gt;&amp;gt;&amp;gt; +    private final ClasspathAssetAliasManager assetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt; +    private final Logger logger;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public AssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt; +            List&amp;lt;AssetPathAuthorizer&amp;gt; auths,
&lt;br&gt;&amp;gt;&amp;gt; +            ClasspathAssetAliasManager manager,
&lt;br&gt;&amp;gt;&amp;gt; +            Logger logger)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        this.authorizers = Collections.unmodifiableList(auths);
&lt;br&gt;&amp;gt;&amp;gt; +        this.assetAliasManager = manager;
&lt;br&gt;&amp;gt;&amp;gt; +        this.logger = logger;
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public boolean dispatch(Request request, Response response)
&lt;br&gt;&amp;gt;&amp;gt; +            throws IOException
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        String path = request.getPath();
&lt;br&gt;&amp;gt;&amp;gt; +        //we only protect assets, and don't examine any other url's.
&lt;br&gt;&amp;gt;&amp;gt; +        if (!path.startsWith(RequestConstants.ASSET_PATH_PREFIX))
&lt;br&gt;&amp;gt;&amp;gt; +        {
&lt;br&gt;&amp;gt;&amp;gt; +            return false;
&lt;br&gt;&amp;gt;&amp;gt; +        }
&lt;br&gt;&amp;gt;&amp;gt; +        String resourcePath = assetAliasManager.toResourcePath(path);
&lt;br&gt;&amp;gt;&amp;gt; +        for(AssetPathAuthorizer auth : authorizers)
&lt;br&gt;&amp;gt;&amp;gt; +        {
&lt;br&gt;&amp;gt;&amp;gt; +            for(AssetPathAuthorizer.Order o : auth.order())
&lt;br&gt;&amp;gt;&amp;gt; +            {
&lt;br&gt;&amp;gt;&amp;gt; +                if (o == AssetPathAuthorizer.Order.ALLOW)
&lt;br&gt;&amp;gt;&amp;gt; +                {
&lt;br&gt;&amp;gt;&amp;gt; +                    if (auth.accessAllowed(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt; +                    {
&lt;br&gt;&amp;gt;&amp;gt; +                        logger.debug(&amp;quot;Allowing access to &amp;quot; +
&lt;br&gt;&amp;gt;&amp;gt; resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +                        return false;
&lt;br&gt;&amp;gt;&amp;gt; +                    }
&lt;br&gt;&amp;gt;&amp;gt; +                }
&lt;br&gt;&amp;gt;&amp;gt; +                else
&lt;br&gt;&amp;gt;&amp;gt; +                {
&lt;br&gt;&amp;gt;&amp;gt; +                    if (auth.accessDenied(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt; +                    {
&lt;br&gt;&amp;gt;&amp;gt; +                        logger.debug(&amp;quot;Denying access to &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  response.sendError(HttpServletResponse.SC_FORBIDDEN,resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +                        return true;
&lt;br&gt;&amp;gt;&amp;gt; +                    }
&lt;br&gt;&amp;gt;&amp;gt; +                }
&lt;br&gt;&amp;gt;&amp;gt; +            }
&lt;br&gt;&amp;gt;&amp;gt; +        }
&lt;br&gt;&amp;gt;&amp;gt; +        //if we get here, no Authorizer had anything useful to say about
&lt;br&gt;&amp;gt;&amp;gt; the resourcePath.
&lt;br&gt;&amp;gt;&amp;gt; +        //so let it fall through.
&lt;br&gt;&amp;gt;&amp;gt; +        logger.debug(&amp;quot;Fell through the list of authorizers. Allowing
&lt;br&gt;&amp;gt;&amp;gt; access to: &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +        return false;
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.regex.Pattern;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * Provides a regex-based authorization scheme for asset-access
&lt;br&gt;&amp;gt;&amp;gt; authorization.
&lt;br&gt;&amp;gt;&amp;gt; + * Note that this implementation doesn't actually deny access to anything.
&lt;br&gt;&amp;gt;&amp;gt; + * But it's placement within the chain of command of authorizers is just
&lt;br&gt;&amp;gt;&amp;gt; before
&lt;br&gt;&amp;gt;&amp;gt; + * the whitelist authorizer, which has an explicit deny policy.
&lt;br&gt;&amp;gt;&amp;gt; + * Hence, as long as the whitelist authorizer is being used in conjunction
&lt;br&gt;&amp;gt;&amp;gt; with
&lt;br&gt;&amp;gt;&amp;gt; + * the regex authorizer, there is no need to worry about accessDenied in
&lt;br&gt;&amp;gt;&amp;gt; this authorizer.
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public class RegexAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    private final Collection&amp;lt;Pattern&amp;gt; _regexes;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public RegexAuthorizer(final Collection&amp;lt;String&amp;gt; regex)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        //an alternate way to construct this would be to make sure that
&lt;br&gt;&amp;gt;&amp;gt; each pattern is grouped
&lt;br&gt;&amp;gt;&amp;gt; +        //and then to regex or the various patterns together into a single
&lt;br&gt;&amp;gt;&amp;gt; pattern.
&lt;br&gt;&amp;gt;&amp;gt; +        //that might be faster, but probably not enough to make a
&lt;br&gt;&amp;gt;&amp;gt; difference, and this is cleaner.
&lt;br&gt;&amp;gt;&amp;gt; +        List&amp;lt;Pattern&amp;gt; tmp = new ArrayList&amp;lt;Pattern&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt; +        for(String exp : regex)
&lt;br&gt;&amp;gt;&amp;gt; +        {
&lt;br&gt;&amp;gt;&amp;gt; +            tmp.add(Pattern.compile(exp));
&lt;br&gt;&amp;gt;&amp;gt; +        }
&lt;br&gt;&amp;gt;&amp;gt; +        _regexes = Collections.unmodifiableCollection(tmp);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        for(Pattern regex : _regexes)
&lt;br&gt;&amp;gt;&amp;gt; +        {
&lt;br&gt;&amp;gt;&amp;gt; +            if (regex.matcher(resourcePath).matches())
&lt;br&gt;&amp;gt;&amp;gt; +            {
&lt;br&gt;&amp;gt;&amp;gt; +                return true;
&lt;br&gt;&amp;gt;&amp;gt; +            }
&lt;br&gt;&amp;gt;&amp;gt; +        }
&lt;br&gt;&amp;gt;&amp;gt; +        return false;
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        return false;
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        return Arrays.asList(Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,59 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Map;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.concurrent.ConcurrentHashMap;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * AssetPathAuthorizer that determines access rights based on exact
&lt;br&gt;&amp;gt;&amp;gt; matching to a contributed whitelist.
&lt;br&gt;&amp;gt;&amp;gt; + * Any resource not explicitly specified in the whitelist is denied
&lt;br&gt;&amp;gt;&amp;gt; access.
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        return Arrays.asList(Order.ALLOW, Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    //hash the resource paths for fast lookups.
&lt;br&gt;&amp;gt;&amp;gt; +    private final Map&amp;lt;String, Boolean&amp;gt; _paths;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public WhitelistAuthorizer(Collection&amp;lt;String&amp;gt; paths)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        _paths = new ConcurrentHashMap&amp;lt;String, Boolean&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt; +        for(String path : paths)
&lt;br&gt;&amp;gt;&amp;gt; +        {
&lt;br&gt;&amp;gt;&amp;gt; +            _paths.put(path, true);
&lt;br&gt;&amp;gt;&amp;gt; +        }
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        return (_paths.containsKey(resourcePath));
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        return !_paths.containsKey(resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * Determines whether access to an asset is allowed, denied, or
&lt;br&gt;&amp;gt;&amp;gt; undetermined.
&lt;br&gt;&amp;gt;&amp;gt; + * Each contributed authorizer makes up part of a chain of command for
&lt;br&gt;&amp;gt;&amp;gt; determining access.
&lt;br&gt;&amp;gt;&amp;gt; + * Access is explicitly allowed if accessAllowed returns true.
&lt;br&gt;&amp;gt;&amp;gt; + * Access is explicitly denied if accessDenied returns true.
&lt;br&gt;&amp;gt;&amp;gt; + * Ordering depends on the order specified by the &amp;quot;order&amp;quot; parameter.
&lt;br&gt;&amp;gt;&amp;gt; + * Hence, an implementation which specifies an order of:
&lt;br&gt;&amp;gt;&amp;gt; + * ALLOW, DENY, and returns true from both accessAllowed and accessDenied
&lt;br&gt;&amp;gt;&amp;gt; + * will allow access for all resources. With the same return values for
&lt;br&gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt; + * access* methods but the order switched to DENY, ALLOW, access to all
&lt;br&gt;&amp;gt;&amp;gt; resources
&lt;br&gt;&amp;gt;&amp;gt; + * would be denied.  It is possible for an authorizer to have &amp;quot;nothing
&lt;br&gt;&amp;gt;&amp;gt; + * to say&amp;quot; regarding a particular resource.  If accessAllowed returns
&lt;br&gt;&amp;gt;&amp;gt; false,
&lt;br&gt;&amp;gt;&amp;gt; + * it does not mean that access is denied, merely that it is not
&lt;br&gt;&amp;gt;&amp;gt; explicitly allowed.
&lt;br&gt;&amp;gt;&amp;gt; + * If accessDenied returns false, it does not mean that access is allowed,
&lt;br&gt;&amp;gt;&amp;gt; merely that
&lt;br&gt;&amp;gt;&amp;gt; + * it is not explicitly denied.  Hence, if both accessAllowed and
&lt;br&gt;&amp;gt;&amp;gt; accessDenied return false,
&lt;br&gt;&amp;gt;&amp;gt; + * control will pass to the next authorizer in the chain.
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public interface AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    /**
&lt;br&gt;&amp;gt;&amp;gt; +     * Types of orderings, either ALLOW or DENY.
&lt;br&gt;&amp;gt;&amp;gt; +     */
&lt;br&gt;&amp;gt;&amp;gt; +    enum Order {ALLOW, DENY;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    /**
&lt;br&gt;&amp;gt;&amp;gt; +     * Specify the ordering for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt; +     * @return the operations for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt; +     * Operations will be performed in the order returned by the iterator.
&lt;br&gt;&amp;gt;&amp;gt; +     * It is assumed that the authorizer correctly implements each form of
&lt;br&gt;&amp;gt;&amp;gt; +     * ordering returned. It is acceptable to only return only ALLOW or
&lt;br&gt;&amp;gt;&amp;gt; DENY.
&lt;br&gt;&amp;gt;&amp;gt; +     */
&lt;br&gt;&amp;gt;&amp;gt; +    List&amp;lt;Order&amp;gt; order();
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    /**
&lt;br&gt;&amp;gt;&amp;gt; +     * Determines whether a request to &amp;quot;resourcePath&amp;quot; is allowed.
&lt;br&gt;&amp;gt;&amp;gt; +     * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt; +     * @return true if access is explicitly allowed for the path. False
&lt;br&gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt; +     * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt; resource
&lt;br&gt;&amp;gt;&amp;gt; +     * was listed, and false otherwise.  A blacklist implementation would
&lt;br&gt;&amp;gt;&amp;gt; return
&lt;br&gt;&amp;gt;&amp;gt; +     * false regardless of whether the path was in the blacklist.
&lt;br&gt;&amp;gt;&amp;gt; +     * Alternatively, if the blacklist specified an order of DENY, ALLOW,
&lt;br&gt;&amp;gt;&amp;gt; it could
&lt;br&gt;&amp;gt;&amp;gt; +     * return true from accessAllowed if the resource was not explicitly
&lt;br&gt;&amp;gt;&amp;gt; listed in its
&lt;br&gt;&amp;gt;&amp;gt; +     * blacklist.
&lt;br&gt;&amp;gt;&amp;gt; +     */
&lt;br&gt;&amp;gt;&amp;gt; +    boolean accessAllowed(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    /**
&lt;br&gt;&amp;gt;&amp;gt; +     *
&lt;br&gt;&amp;gt;&amp;gt; +     * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt; +     * @return true if access is explicitly prohibited for the path. False
&lt;br&gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt; +     * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt; resource was
&lt;br&gt;&amp;gt;&amp;gt; +     * not explicitly listed, and false otherwise. A blacklist
&lt;br&gt;&amp;gt;&amp;gt; implementation would
&lt;br&gt;&amp;gt;&amp;gt; +     * return true if the resource was explicitly denied, and false
&lt;br&gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt; +     */
&lt;br&gt;&amp;gt;&amp;gt; +    boolean accessDenied(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -305,6 +305,9 @@
&lt;br&gt;&amp;gt;&amp;gt;         binder.bind(PageRenderLinkSource.class,
&lt;br&gt;&amp;gt;&amp;gt; PageRenderLinkSourceImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;         binder.bind(ClientInfrastructure.class,
&lt;br&gt;&amp;gt;&amp;gt; ClientInfrastructureImpl.class);
&lt;br&gt;&amp;gt;&amp;gt;         binder.bind(URLRewriter.class, URLRewriterImpl.class);
&lt;br&gt;&amp;gt;&amp;gt; +        binder.bind(Dispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.class).withId(&amp;quot;AssetProtectionDispatcher&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt; WhitelistAuthorizer.class).withId(&amp;quot;WhitelistAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt; RegexAuthorizer.class).withId(&amp;quot;RegexAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;     }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;     //
&lt;br&gt;&amp;gt;&amp;gt; ========================================================================
&lt;br&gt;&amp;gt;&amp;gt; @@ -1572,13 +1575,17 @@
&lt;br&gt;&amp;gt;&amp;gt;      * and forwards onto {@link PageRenderRequestHandler}&amp;lt;/dd&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;dt&amp;gt;ComponentEvent&amp;lt;/dt&amp;gt; &amp;lt;dd&amp;gt;Identifies the {@link
&lt;br&gt;&amp;gt;&amp;gt;      * ComponentEventRequestParameters} and forwards onto the {@link
&lt;br&gt;&amp;gt;&amp;gt; ComponentEventRequestHandler}&amp;lt;/dd&amp;gt; &amp;lt;/dl&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;      */
&lt;br&gt;&amp;gt;&amp;gt; -    public static void
&lt;br&gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration)
&lt;br&gt;&amp;gt;&amp;gt; +    public static void
&lt;br&gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration,
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  @InjectService(&amp;quot;AssetProtectionDispatcher&amp;quot;) Dispatcher assetProt)
&lt;br&gt;&amp;gt;&amp;gt;     {
&lt;br&gt;&amp;gt;&amp;gt;         // Looks for the root path and renders the start page. This is
&lt;br&gt;&amp;gt;&amp;gt; maintained for compatibility
&lt;br&gt;&amp;gt;&amp;gt;         // with earlier versions of Tapestry 5, it is recommended that an
&lt;br&gt;&amp;gt;&amp;gt; Index page be used instead.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;         configuration.addInstance(&amp;quot;RootPath&amp;quot;, RootPathDispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +        //this goes before asset to make sure that only allowed assets are
&lt;br&gt;&amp;gt;&amp;gt; streamed to the client.
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;AssetProtection&amp;quot;, assetProt, &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;         // This goes first because an asset to be streamed may have an file
&lt;br&gt;&amp;gt;&amp;gt; extension, such as
&lt;br&gt;&amp;gt;&amp;gt;         // &amp;quot;.html&amp;quot;, that will confuse the later dispatchers.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; @@ -1591,6 +1598,7 @@
&lt;br&gt;&amp;gt;&amp;gt;         configuration.addInstance(&amp;quot;PageRender&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt; PageRenderDispatcher.class);
&lt;br&gt;&amp;gt;&amp;gt;     }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;     /**
&lt;br&gt;&amp;gt;&amp;gt;      * Contributes a default object renderer for type Object, plus
&lt;br&gt;&amp;gt;&amp;gt; specialized renderers for {@link
&lt;br&gt;&amp;gt;&amp;gt;      * org.apache.tapestry5.services.Request}, {@link
&lt;br&gt;&amp;gt;&amp;gt; org.apache.tapestry5.ioc.Location}, {@link
&lt;br&gt;&amp;gt;&amp;gt; @@ -2480,4 +2488,41 @@
&lt;br&gt;&amp;gt;&amp;gt;         };
&lt;br&gt;&amp;gt;&amp;gt;     }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +    /**
&lt;br&gt;&amp;gt;&amp;gt; +     * Contributes the default set of AssetPathAuthorizers into the
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt; +     * @param whitelist authorization based on explicit whitelisting.
&lt;br&gt;&amp;gt;&amp;gt; +     * @param regex authorization based on pattern matching.
&lt;br&gt;&amp;gt;&amp;gt; +     * @param conf
&lt;br&gt;&amp;gt;&amp;gt; +     */
&lt;br&gt;&amp;gt;&amp;gt; +    public static void contributeAssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt; +            @InjectService(&amp;quot;WhitelistAuthorizer&amp;quot;) AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; whitelist,
&lt;br&gt;&amp;gt;&amp;gt; +            @InjectService(&amp;quot;RegexAuthorizer&amp;quot;) AssetPathAuthorizer regex,
&lt;br&gt;&amp;gt;&amp;gt; +            OrderedConfiguration&amp;lt;AssetPathAuthorizer&amp;gt; conf)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        //putting whitelist after everything ensures that, in fact,
&lt;br&gt;&amp;gt;&amp;gt; nothing falls through.
&lt;br&gt;&amp;gt;&amp;gt; +        //also ensures that whitelist gives other authorizers the chance
&lt;br&gt;&amp;gt;&amp;gt; to act...
&lt;br&gt;&amp;gt;&amp;gt; +        conf.add(&amp;quot;regex&amp;quot;,regex,&amp;quot;before:whitelist&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        conf.add(&amp;quot;whitelist&amp;quot;, whitelist,&amp;quot;after:*&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt; regex,
&lt;br&gt;&amp;gt;&amp;gt; +                @Symbol(&amp;quot;tapestry.scriptaculous.path&amp;quot;) String scriptPath,
&lt;br&gt;&amp;gt;&amp;gt; +                @Symbol(&amp;quot;tapestry.blackbird.path&amp;quot;) String blackbirdPath,
&lt;br&gt;&amp;gt;&amp;gt; +                @Symbol(&amp;quot;tapestry.datepicker.path&amp;quot;) String datepickerPath)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        //allow any js, jpg, jpeg, png, or css under
&lt;br&gt;&amp;gt;&amp;gt; org/chenillekit/tapstry. The funky bit of ([^/.]+/)* is what allows
&lt;br&gt;&amp;gt;&amp;gt; +        //multiple paths, while not allowing any of those paths to
&lt;br&gt;&amp;gt;&amp;gt; contains ./ or ../ thereby preventing paths like:
&lt;br&gt;&amp;gt;&amp;gt; +        //org/chenillekit/tapestry/../../../foo.js
&lt;br&gt;&amp;gt;&amp;gt; +        String pathPattern =
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;([^/.]+/)*[^/.]+\\.((css)|(js)|(jpg)|(jpeg)|(png)|(gif))$&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; +        regex.add(&amp;quot;^org/chenillekit/tapestry/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        regex.add(&amp;quot;^org/apache/tapestry5/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        regex.add(blackbirdPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +        regex.add(datepickerPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +        regex.add(scriptPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +        //allow access to virtual assets. Critical for tapestry-combined
&lt;br&gt;&amp;gt;&amp;gt; js files.
&lt;br&gt;&amp;gt;&amp;gt; +        regex.add(&amp;quot;virtual/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -257,4 +257,22 @@
&lt;br&gt;&amp;gt;&amp;gt;     {
&lt;br&gt;&amp;gt;&amp;gt;         configuration.add(&amp;quot;ReverseStringsWorker&amp;quot;, new
&lt;br&gt;&amp;gt;&amp;gt; ReverseStringsWorker());
&lt;br&gt;&amp;gt;&amp;gt;     }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    public static void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; configuration) {
&lt;br&gt;&amp;gt;&amp;gt; +        //use this rather than a blanket regex (^.*.jpg$, etc.); want to
&lt;br&gt;&amp;gt;&amp;gt; be sure that tests pass from the default
&lt;br&gt;&amp;gt;&amp;gt; +        //configuration setup, (eg: this way, I realized that the
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;virtual&amp;quot; assets folder
&lt;br&gt;&amp;gt;&amp;gt; +        //needed to be opened up in the tapestry-provided contributions)
&lt;br&gt;&amp;gt;&amp;gt; rather than from some blanket configuration in the appmodule
&lt;br&gt;&amp;gt;&amp;gt; +        //opening up all css, js, etc. files.
&lt;br&gt;&amp;gt;&amp;gt; +        //would contribute to whitelist except that the resource path
&lt;br&gt;&amp;gt;&amp;gt; between ctxt and the rest of the path can change.
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/css/app\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/style\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bg\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/images/header\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightsmall\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightbig\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bottom\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/layout/images/footer\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/images/tapestry_banner\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        configuration.add(&amp;quot;^ctx/[^/]+/images/asf_logo_wide\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt;  }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.createMock;
&lt;br&gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.expect;
&lt;br&gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.*;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.AssetProtectionDispatcher;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.ClasspathAssetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Request;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Response;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcherTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    @Test
&lt;br&gt;&amp;gt;&amp;gt; +    public void ignores_nonassets() throws IOException
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        //shouldn't need any configuration here...
&lt;br&gt;&amp;gt;&amp;gt; +        List&amp;lt;AssetPathAuthorizer&amp;gt; auths = Collections.emptyList();
&lt;br&gt;&amp;gt;&amp;gt; +        Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt; +        AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,null,logger);
&lt;br&gt;&amp;gt;&amp;gt; +        Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt; +        expect(request.getPath()).andReturn(&amp;quot;start&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt; +        replay(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt; +        assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt; +        verify(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    @Test
&lt;br&gt;&amp;gt;&amp;gt; +    public void checks_authorizers() throws IOException
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt; +        List&amp;lt;AssetPathAuthorizer&amp;gt; auths = new
&lt;br&gt;&amp;gt;&amp;gt; ArrayList&amp;lt;AssetPathAuthorizer&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt; +        AssetPathAuthorizer auth = createMock(AssetPathAuthorizer.class);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  expect(auth.order()).andReturn(Arrays.asList(AssetPathAuthorizer.Order.ALLOW,
&lt;br&gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.DENY)).times(2);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        expect(auth.accessAllowed(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(false);
&lt;br&gt;&amp;gt;&amp;gt; +        expect(auth.accessDenied(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  expect(auth.accessAllowed(&amp;quot;/org/apache/tapestry/default.css&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt; +        auths.add(auth);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        logger.debug(&amp;quot;Denying access to /cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        logger.debug(&amp;quot;Allowing access to
&lt;br&gt;&amp;gt;&amp;gt; /org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt; +        Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;  expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        response.sendError(HttpServletResponse.SC_FORBIDDEN,
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        ClasspathAssetAliasManager manager =
&lt;br&gt;&amp;gt;&amp;gt; createMock(ClasspathAssetAliasManager.class);
&lt;br&gt;&amp;gt;&amp;gt; +        expect(manager.toResourcePath(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;)).andReturn(&amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        expect(manager.toResourcePath(
&lt;br&gt;&amp;gt;&amp;gt; +                RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;))
&lt;br&gt;&amp;gt;&amp;gt; +            .andReturn(&amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        replay(auth,request,response,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt; +        AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        assertTrue(disp.dispatch(request,response));
&lt;br&gt;&amp;gt;&amp;gt; +        assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt; +        verify(auth,request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,53 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RegexAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public class RegexAuthorizerTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    @Test
&lt;br&gt;&amp;gt;&amp;gt; +    public void test_regexes()
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        List&amp;lt;String&amp;gt; patterns =
&lt;br&gt;&amp;gt;&amp;gt; Arrays.asList(&amp;quot;^.*\\.png$&amp;quot;,&amp;quot;^.*\\.jpg&amp;quot;,&amp;quot;^.*\\.jpeg&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +        RegexAuthorizer auth = new RegexAuthorizer(patterns);
&lt;br&gt;&amp;gt;&amp;gt; +        String pkg = &amp;quot;assets/com/saiwaisolutions/resources/&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; +        String png = pkg + &amp;quot;foo.png&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; +        String jpg = pkg + &amp;quot;foo.jpg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; +        String jpeg = pkg + &amp;quot;foo.jpeg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; +        String xml = pkg + &amp;quot;foo.xml&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; +        test(auth,png,true);
&lt;br&gt;&amp;gt;&amp;gt; +        test(auth,jpg,true);
&lt;br&gt;&amp;gt;&amp;gt; +        test(auth,jpeg,true);
&lt;br&gt;&amp;gt;&amp;gt; +        test(auth,xml,false);
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    private static void test(RegexAuthorizer auth, String one,boolean
&lt;br&gt;&amp;gt;&amp;gt; allowed)
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        assertEquals(auth.accessAllowed(one),allowed);
&lt;br&gt;&amp;gt;&amp;gt; +        assertEquals(
&lt;br&gt;&amp;gt;&amp;gt; +                auth.accessAllowed(
&lt;br&gt;&amp;gt;&amp;gt; +                        &amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one),
&lt;br&gt;&amp;gt;&amp;gt; +                allowed);
&lt;br&gt;&amp;gt;&amp;gt; +        assertFalse(auth.accessDenied(one));
&lt;br&gt;&amp;gt;&amp;gt; +        assertFalse(auth.accessDenied(&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one));
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov  9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,45 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +//      &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/*
&lt;br&gt;&amp;gt;&amp;gt; + * Created on Jul 28, 2007
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.WhitelistAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizerTest extends Assert {
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +    @Test
&lt;br&gt;&amp;gt;&amp;gt; +    public void run()
&lt;br&gt;&amp;gt;&amp;gt; +    {
&lt;br&gt;&amp;gt;&amp;gt; +        WhitelistAuthorizer auth = new
&lt;br&gt;&amp;gt;&amp;gt; WhitelistAuthorizer(Arrays.asList(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; +        assertEquals(auth.order().get(0),
&lt;br&gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt; +        assertEquals(auth.order().get(1), AssetPathAuthorizer.Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt; +        assertEquals(auth.order().size(),2);
&lt;br&gt;&amp;gt;&amp;gt; +        assertTrue(auth.accessAllowed(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; +        assertFalse(auth.accessDenied(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +        assertFalse(auth.accessAllowed(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; +        assertTrue(auth.accessDenied(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; +    }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Howard M. Lewis Ship
&lt;br&gt;&lt;br&gt;Creator of Apache Tapestry
&lt;br&gt;&lt;br&gt;The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&lt;br&gt;(971) 678-5210
&lt;br&gt;&lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484494&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484494&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-svn-commit%3A-r834151---in--tapestry-tapestry5-trunk%3A--src-site-apt-guide--tapestry-core-src-main-java-org-apache-tapestry5-internal-services---tapestry-core-src-main-java-org-apache-tapestry5-services---tapestry-core-src-test-java-org-apache-tapestry-tp26483150s302p26484494.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484260</id>
	<title>Re: 5.1 - 5.0 next releases?</title>
	<published>2009-11-23T11:20:32Z</published>
	<updated>2009-11-23T11:20:32Z</updated>
	<author>
		<name>Andreas Andreou-4</name>
	</author>
	<content type="html">fyi, i just sent an email to infra about hudson &amp; selenium...
&lt;br&gt;&lt;br&gt;Also, it looks like tapestry-ioc is a bit unstable - hudson now gives
&lt;br&gt;those failures:
&lt;br&gt;&lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-5.1-trunk/org.apache.tapestry$tapestry-ioc/4/testReport/&lt;/a&gt;&lt;br&gt;while there's no change that could affect that...
&lt;br&gt;So, should be jvm version... i think bamboo runs with 1.5, right? i
&lt;br&gt;could set hudson to
&lt;br&gt;use that (unless someone can explain the failures)
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 8:58 PM, Igor Drobiazko
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Howard, is it possible to create builds for the branches at formos bamboo?
&lt;br&gt;&amp;gt; We need a temporal solution. I also feel uncomfortably to release 5.1.0.6
&lt;br&gt;&amp;gt; without having a single build at CI.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 8:58 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I don't feel comfortable until the code executes properly in the full
&lt;br&gt;&amp;gt;&amp;gt; stack, including browser, servlet container and Tapestry, and
&lt;br&gt;&amp;gt;&amp;gt; including Ajax updates. Anything simulated in that stack is a
&lt;br&gt;&amp;gt;&amp;gt; potential to be different than the end user's experience. Selenium is
&lt;br&gt;&amp;gt;&amp;gt; a pain in the ass, but it's as close as you'll get to hiring actual
&lt;br&gt;&amp;gt;&amp;gt; people to validate your web app.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 7:14 PM, Kalle Korhonen
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalle.o.korhonen@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; On Sun, Nov 22, 2009 at 11:42 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Integration tests aren't currently able to run (missing firefox from
&lt;br&gt;&amp;gt;&amp;gt; path)
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and all 4 failing tests in 5.1 are due to that.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 5.0 has a few more failures which confirm what i'm seeing locally
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; (
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&lt;/a&gt;&amp;nbsp;)
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; On that note, I've had very good success doing integration testing
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; with HtmlUnit and embedded Jetty. The tests run faster than
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Selenium-based ones and are more independent of the environment. The
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; recent versions of HtmlUnit run any kind of Javascript just fine
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; (dojo, prototype, etc.) but obviously it's not *exactly* the same as a
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; real browser. I've re-written both Apache Shiro's and Tynamo's (at
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Codehaus) integration tests to use the same concepts (see e.g.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; ).
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Just thought it might be worth considering - I know how challenging it
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; can be at times to rely on infrastructure you are not in control of.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; But perhaps Apache infra folks can help making firefox available on
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; the path.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; It's not difficult, just means running Xvfb (X virtual frame buffer).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Kalle
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:49 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm fine with moving stuff off of tapestry.formos.com.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I do want to maintain some site with nightly snapshots, though.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 8:39 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I have the same problem (lost password &amp; bamboo not sending email) -
&lt;br&gt;&amp;gt;&amp;gt; that's why
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I started investigating apache's hudson infrastructure...
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I got 4.1 building there,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (the trick was to set the build node to master - we were told to use
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; minerva or vesta but
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it looks like those are missing maven)
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I want to go ahead and add 5.0 and 5.1 there anyway. Howard, you
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already have an account
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but it don't see any T5 builds there, should i just go ahead?
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; As for nexus, doing a mvn release will actually just stage it in a
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; one-time only repo so that
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; anyone can try it from there. I really wanted to try that with the 5.0
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but some build failures
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; i'm having haven't allowed that - hoping to tackle them as we speak.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 3:55 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can someone please add builds for 5.1.x and 5.0.x branches to bamboo?
&lt;br&gt;&amp;gt;&amp;gt; I
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; forgot my password and bamboo fails to send me a new one.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 1:38 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What's the process for staging things in Nexus?
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Fri, Nov 20, 2009 at 7:50 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.0 branch] So, i'm basically still getting 3 test failures in
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-ioc and 2 in
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-core (jdk5 &amp; jdk6)... the good thing is i'm not getting
&lt;br&gt;&amp;gt;&amp;gt; those
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in the 5.1 branch, so, i'll try to
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look for diffs.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.1 branch] All look fine here, once we say GO, I (or anyone) can
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just try to stage the release
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in nexus and once that works, send the email for the vote
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, Nov 20, 2009 at 2:24 PM, Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thiagohp@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; +1
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Em Fri, 20 Nov 2009 07:09:03 -0200, David Rees &amp;lt;
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drees76@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2009 at 10:24 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; We should release 5.1.0.6 asap because of the security issues.
&lt;br&gt;&amp;gt;&amp;gt; What if
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; only backport already fixed issues in 5.2.0.0 snapshots,
&lt;br&gt;&amp;gt;&amp;gt; release
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; immidiately go on with 5.1.0.7?
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm a big fan of &amp;quot;release often&amp;quot; as long as people are willing
&lt;br&gt;&amp;gt;&amp;gt; to do it
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; so +1.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Dave
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate consultant,
&lt;br&gt;&amp;gt;&amp;gt; developer,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; instructor
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Owner, software architect and developer, Ars Machina Tecnologia
&lt;br&gt;&amp;gt;&amp;gt; da
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Consultor, desenvolvedor e instrutor em Java, Tapestry e
&lt;br&gt;&amp;gt;&amp;gt; Hibernate
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Coordenador e professor da Especialização em Engenharia de
&lt;br&gt;&amp;gt;&amp;gt; Software com
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me
&lt;br&gt;&amp;gt;&amp;gt; to
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;Tapestry / Tacos developer
&lt;br&gt;Open Source / JEE Consulting
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26484260&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/5.1---5.0-next-releases--tp26406209s302p26484260.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484069</id>
	<title>svn commit: r883465 - in /tapestry/tapestry5/branches/5.0: tapestry-annotations/ tapestry-annotations/.classpath tapestry-annotations/.project tapestry-test/ tapestry-test/.classpath tapestry-test/.project</title>
	<published>2009-11-23T11:07:31Z</published>
	<updated>2009-11-23T11:07:31Z</updated>
	<author>
		<name>andyhot-2</name>
	</author>
	<content type="html">Author: andyhot
&lt;br&gt;Date: Mon Nov 23 19:07:31 2009
&lt;br&gt;New Revision: 883465
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=883465&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=883465&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;TAP5-819: some more ide files ignored (5.0)
&lt;br&gt;&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.0/tapestry-annotations/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.0/tapestry-annotations/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.0/tapestry-test/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.0/tapestry-test/.project
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.0/tapestry-annotations/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.0/tapestry-test/ &amp;nbsp; (props changed)
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.0/tapestry-annotations/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:07:31 2009
&lt;br&gt;@@ -1 +1,4 @@
&lt;br&gt;&amp;nbsp;target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.0/tapestry-test/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:07:31 2009
&lt;br&gt;@@ -1,2 +1,5 @@
&lt;br&gt;&amp;nbsp;bin
&lt;br&gt;&amp;nbsp;target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r883465---in--tapestry-tapestry5-branches-5.0%3A-tapestry-annotations--tapestry-annotations-.classpath-tapestry-annotations-.project-tapestry-test--tapestry-test-.classpath-tapestry-test-.project-tp26484069s302p26484069.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26484006</id>
	<title>[jira] Updated: (TAP5-819) remove ide-specific files from all sub-modules and add them to svn:ignore</title>
	<published>2009-11-23T11:03:39Z</published>
	<updated>2009-11-23T11:03:39Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Andreas Andreou updated TAP5-819:
&lt;br&gt;---------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Fix Version/s: 5.1.0.6
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; remove ide-specific files from all sub-modules and add them to svn:ignore
&lt;br&gt;&amp;gt; -------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: TAP5-819
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-819&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-819&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Tapestry 5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Ulrich Stärk
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Kevin Menard
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Minor
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.2.0.0, 5.1.0.6, 5.0.19
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; remove ide-specific files from all sub-modules and add them to svn:ignore, along with any output directories like target.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28TAP5-819%29-remove-ide-specific-files-from-all-sub-modules-and-add-them-to-svn%3Aignore-tp25044536s302p26484006.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483960</id>
	<title>svn commit: r883462 - in /tapestry/tapestry5/branches/5.1.0.x-dev: tapestry-annotations/ tapestry-component-report/ tapestry-core/ tapestry-core/.settings/ tapestry-hibernate-core/ tapestry-hibernate/ tapestry-ioc/ tapestry-ioc/.settings/ tapestry-spri...</title>
	<published>2009-11-23T11:00:36Z</published>
	<updated>2009-11-23T11:00:36Z</updated>
	<author>
		<name>andyhot-2</name>
	</author>
	<content type="html">Author: andyhot
&lt;br&gt;Date: Mon Nov 23 19:00:32 2009
&lt;br&gt;New Revision: 883462
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=883462&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=883462&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;TAP5-819: remove ide specific files in 5.1 branch
&lt;br&gt;&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-annotations/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-annotations/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-component-report/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-component-report/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/.settings/
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-hibernate/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-hibernate/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-ioc/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-ioc/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-ioc/.settings/
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-spring/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-spring/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-test/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-test/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-tutorial1/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-tutorial1/.project
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-tutorial1/.settings/
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-upload/.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-upload/.project
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-annotations/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-component-report/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-hibernate/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-hibernate-core/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-ioc/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-spring/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-test/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-tutorial1/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-upload/ &amp;nbsp; (props changed)
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-webflow/ &amp;nbsp; (props changed)
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-annotations/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -1 +1,4 @@
&lt;br&gt;&amp;nbsp;target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-component-report/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -1,2 +1,5 @@
&lt;br&gt;&amp;nbsp;target
&lt;br&gt;&amp;nbsp;bin
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -8,3 +8,6 @@
&lt;br&gt;&amp;nbsp;testng.xml
&lt;br&gt;&amp;nbsp;null
&lt;br&gt;&amp;nbsp;bin-test
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-hibernate/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -4,3 +4,6 @@
&lt;br&gt;&amp;nbsp;cobertura.ser
&lt;br&gt;&amp;nbsp;null
&lt;br&gt;&amp;nbsp;test-output
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-hibernate-core/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (added)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -0,0 +1,4 @@
&lt;br&gt;+target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-ioc/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -5,3 +5,6 @@
&lt;br&gt;&amp;nbsp;test-output
&lt;br&gt;&amp;nbsp;null
&lt;br&gt;&amp;nbsp;bin-test
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-spring/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -4,3 +4,6 @@
&lt;br&gt;&amp;nbsp;cobertura.ser
&lt;br&gt;&amp;nbsp;null
&lt;br&gt;&amp;nbsp;bin-test
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-test/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -1,2 +1,5 @@
&lt;br&gt;&amp;nbsp;bin
&lt;br&gt;&amp;nbsp;target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-tutorial1/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -1,2 +1,5 @@
&lt;br&gt;&amp;nbsp;bin
&lt;br&gt;&amp;nbsp;target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-upload/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (original)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -3,3 +3,6 @@
&lt;br&gt;&amp;nbsp;bin
&lt;br&gt;&amp;nbsp;cobertura.ser
&lt;br&gt;&amp;nbsp;temp-testng-customsuite.xml
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;Propchange: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-webflow/
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;--- svn:ignore (added)
&lt;br&gt;+++ svn:ignore Mon Nov 23 19:00:32 2009
&lt;br&gt;@@ -0,0 +1,4 @@
&lt;br&gt;+target
&lt;br&gt;+.classpath
&lt;br&gt;+.project
&lt;br&gt;+.settings
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r883462---in--tapestry-tapestry5-branches-5.1.0.x-dev%3A-tapestry-annotations--tapestry-component-report--tapestry-core--tapestry-core-.settings--tapestry-hibernate-core--tapestry-hibernate--tapestry-ioc--tapestry-ioc-.settings--tapestry-spri...-tp26483960s302p26483960.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483924</id>
	<title>Re: 5.1 - 5.0 next releases?</title>
	<published>2009-11-23T10:58:50Z</published>
	<updated>2009-11-23T10:58:50Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">Howard, is it possible to create builds for the branches at formos bamboo?
&lt;br&gt;We need a temporal solution. I also feel uncomfortably to release 5.1.0.6
&lt;br&gt;without having a single build at CI.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 8:58 AM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I don't feel comfortable until the code executes properly in the full
&lt;br&gt;&amp;gt; stack, including browser, servlet container and Tapestry, and
&lt;br&gt;&amp;gt; including Ajax updates. Anything simulated in that stack is a
&lt;br&gt;&amp;gt; potential to be different than the end user's experience. Selenium is
&lt;br&gt;&amp;gt; a pain in the ass, but it's as close as you'll get to hiring actual
&lt;br&gt;&amp;gt; people to validate your web app.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Sun, Nov 22, 2009 at 7:14 PM, Kalle Korhonen
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalle.o.korhonen@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Sun, Nov 22, 2009 at 11:42 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Integration tests aren't currently able to run (missing firefox from
&lt;br&gt;&amp;gt; path)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; and all 4 failing tests in 5.1 are due to that.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 5.0 has a few more failures which confirm what i'm seeing locally
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; (
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/view/All/job/tapestry-5.0-trunk/3/&lt;/a&gt;&amp;nbsp;)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On that note, I've had very good success doing integration testing
&lt;br&gt;&amp;gt; &amp;gt; with HtmlUnit and embedded Jetty. The tests run faster than
&lt;br&gt;&amp;gt; &amp;gt; Selenium-based ones and are more independent of the environment. The
&lt;br&gt;&amp;gt; &amp;gt; recent versions of HtmlUnit run any kind of Javascript just fine
&lt;br&gt;&amp;gt; &amp;gt; (dojo, prototype, etc.) but obviously it's not *exactly* the same as a
&lt;br&gt;&amp;gt; &amp;gt; real browser. I've re-written both Apache Shiro's and Tynamo's (at
&lt;br&gt;&amp;gt; &amp;gt; Codehaus) integration tests to use the same concepts (see e.g.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/repos/asf/incubator/shiro/trunk/samples/web/src/test/java/org/apache/shiro/test/AbstractContainerTest.java&lt;/a&gt;&lt;br&gt;&amp;gt; ).
&lt;br&gt;&amp;gt; &amp;gt; Just thought it might be worth considering - I know how challenging it
&lt;br&gt;&amp;gt; &amp;gt; can be at times to rely on infrastructure you are not in control of.
&lt;br&gt;&amp;gt; &amp;gt; But perhaps Apache infra folks can help making firefox available on
&lt;br&gt;&amp;gt; &amp;gt; the path.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It's not difficult, just means running Xvfb (X virtual frame buffer).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Kalle
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 6:49 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm fine with moving stuff off of tapestry.formos.com.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I do want to maintain some site with nightly snapshots, though.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 8:39 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I have the same problem (lost password &amp; bamboo not sending email) -
&lt;br&gt;&amp;gt; that's why
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I started investigating apache's hudson infrastructure...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I got 4.1 building there,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hudson.zones.apache.org/hudson/job/tapestry-4.1-trunk/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; (the trick was to set the build node to master - we were told to use
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; minerva or vesta but
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; it looks like those are missing maven)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I want to go ahead and add 5.0 and 5.1 there anyway. Howard, you
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; already have an account
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but it don't see any T5 builds there, should i just go ahead?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; As for nexus, doing a mvn release will actually just stage it in a
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; one-time only repo so that
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; anyone can try it from there. I really wanted to try that with the 5.0
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; but some build failures
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; i'm having haven't allowed that - hoping to tackle them as we speak.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 3:55 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can someone please add builds for 5.1.x and 5.0.x branches to bamboo?
&lt;br&gt;&amp;gt; I
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; forgot my password and bamboo fails to send me a new one.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 1:38 PM, Howard Lewis Ship &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hlship@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What's the process for staging things in Nexus?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; On Fri, Nov 20, 2009 at 7:50 AM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.0 branch] So, i'm basically still getting 3 test failures in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-ioc and 2 in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; tapestry-core (jdk5 &amp; jdk6)... the good thing is i'm not getting
&lt;br&gt;&amp;gt; those
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in the 5.1 branch, so, i'll try to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look for diffs.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; [5.1 branch] All look fine here, once we say GO, I (or anyone) can
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; just try to stage the release
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; in nexus and once that works, send the email for the vote
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, Nov 20, 2009 at 2:24 PM, Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thiagohp@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; +1
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Em Fri, 20 Nov 2009 07:09:03 -0200, David Rees &amp;lt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drees76@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; escreveu:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2009 at 10:24 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; We should release 5.1.0.6 asap because of the security issues.
&lt;br&gt;&amp;gt; What if
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; only backport already fixed issues in 5.2.0.0 snapshots,
&lt;br&gt;&amp;gt; release
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 5.1.0.6
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; immidiately go on with 5.1.0.7?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm a big fan of &amp;quot;release often&amp;quot; as long as people are willing
&lt;br&gt;&amp;gt; to do it
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; so +1.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Dave
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Thiago H. de Paula Figueiredo
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Independent Java, Apache Tapestry 5 and Hibernate consultant,
&lt;br&gt;&amp;gt; developer,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; instructor
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Owner, software architect and developer, Ars Machina Tecnologia
&lt;br&gt;&amp;gt; da
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Informação Ltda.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Consultor, desenvolvedor e instrutor em Java, Tapestry e
&lt;br&gt;&amp;gt; Hibernate
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Coordenador e professor da Especialização em Engenharia de
&lt;br&gt;&amp;gt; Software com
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me
&lt;br&gt;&amp;gt; to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Howard M. Lewis Ship
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Creator of Apache Tapestry
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The source for Tapestry training, mentoring and support. Contact me to
&lt;br&gt;&amp;gt; learn how I can get you up and productive in Tapestry fast!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (971) 678-5210
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://howardlewisship.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://howardlewisship.com&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483924&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/5.1---5.0-next-releases--tp26406209s302p26483924.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483746</id>
	<title>Re: issues to be fixed for 5.1.0.6</title>
	<published>2009-11-23T10:46:12Z</published>
	<updated>2009-11-23T10:46:12Z</updated>
	<author>
		<name>Thiago H. de Paula Figueiredo</name>
	</author>
	<content type="html">+1
&lt;br&gt;&lt;br&gt;Em Mon, 23 Nov 2009 16:25:14 -0200, Igor Drobiazko &amp;nbsp;
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; escreveu:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Go ahead.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Nov 23, 2009 at 5:42 PM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; btw, any objections against me also applying
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-819&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-819&lt;/a&gt;&amp;nbsp;&amp;quot;remove ide-specific
&lt;br&gt;&amp;gt;&amp;gt; files from all sub-modules and add them to svn:ignore&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; to the 5.1 branch ?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Sun, Nov 22, 2009 at 4:56 PM, Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; 14 issues are fixed for 5.1.0.6 now. Please see here:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310833&amp;status=6&amp;fixfor=12314399&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310833&amp;status=6&amp;fixfor=12314399&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; The remaining issues (if I didn't miss something) are:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-748&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-748&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; It would be nice if we could fix them asap and go ahead with the &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; release.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; I'm done for this weekend.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; On Thu, Nov 19, 2009 at 3:00 PM, Ulrich Stärk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;uli@...&lt;/a&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Here is a short status update:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Am 19.11.2009 11:17 schrieb Ulrich Stärk:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;For the 5.1.0.6 release, I'd suggest to backport the fixes for the
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; following issues:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Bugs:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-913&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-913&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-779&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-779&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-767&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-767&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; will be done by Igor.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-755&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-755&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-748&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-748&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The commit for this issue covers several other issues so identifying &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; parts for just this issue will take some time. Do you think it's &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; worth
&lt;br&gt;&amp;gt;&amp;gt; it?
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-734&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-734&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-719&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-719&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-714&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-714&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-711&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-711&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Improvements:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-912&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-912&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; will be done by Igor.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-814&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-814&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-764&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-764&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-756&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-756&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I made a mistake here. Since this is for tapestry-site it's already
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; fixed...
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-138&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-138&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; will be done by Igor.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Since I can't commit changes, all patches are isolated and done &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; against
&lt;br&gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; current 5.1 branch and thus might conflict with each other. Most
&lt;br&gt;&amp;gt;&amp;gt; conflicts
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; are about adding additional items to the app1 integration test Index
&lt;br&gt;&amp;gt;&amp;gt; page or
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; adding an addtitional integration test to IntegrationTests.java but &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; one
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; conflict will also be in linksubmit.js and care has to be taken &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; there.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Uli
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Best regards,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Thiago H. de Paula Figueiredo
&lt;br&gt;Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, &amp;nbsp;
&lt;br&gt;and instructor
&lt;br&gt;Owner, software architect and developer, Ars Machina Tecnologia da &amp;nbsp;
&lt;br&gt;Informação Ltda.
&lt;br&gt;Consultor, desenvolvedor e instrutor em Java, Tapestry e Hibernate
&lt;br&gt;Coordenador e professor da Especialização em Engenharia de Software com &amp;nbsp;
&lt;br&gt;Ênfase em Java da Faculdade Pitágoras
&lt;br&gt;&lt;a href=&quot;http://www.arsmachina.com.br&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.arsmachina.com.br&lt;/a&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483746&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/issues-to-be-fixed-for-5.1.0.6-tp26423770s302p26483746.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483505</id>
	<title>Re: issues to be fixed for 5.1.0.6</title>
	<published>2009-11-23T10:30:26Z</published>
	<updated>2009-11-23T10:30:26Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">I would like to put these changes in a later release. As Ulrich already
&lt;br&gt;pointed out we should release 5.1.0.6 asap. It is only possible iff we
&lt;br&gt;backport already fixed issues. If we &amp;nbsp;would fix the both issues you
&lt;br&gt;suggested somebody else could suggest some other issues. This would delay
&lt;br&gt;the release.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 1:44 PM, Ulrich Stärk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;uli@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Oh, I missed the one for TAP5-834. I can't judge it though, since I'm not
&lt;br&gt;&amp;gt; familiar with that code or it's implications.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On second thought, TAP5-774 will probably not make it into 5.1.0.6 due to
&lt;br&gt;&amp;gt; another reason: It would break existing applications relying on Tapestry
&lt;br&gt;&amp;gt; encoding &amp; as &amp;amp;. I feel that this shouldn't be in a bugfix release.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Uli
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Am 23.11.2009 13:08 schrieb Andy Blower:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; TAP5-834 does have a patch that I added quite a long time ago. I went to
&lt;br&gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt; trouble so it would make it in the next release. It's disappointing that
&lt;br&gt;&amp;gt;&amp;gt; it's not even been looked at, or noticed even.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; TAP5-773 is a single line change as detailed in the bug report - I didn't
&lt;br&gt;&amp;gt;&amp;gt; think it warranted a patch file, but I can create one if neccessary. As
&lt;br&gt;&amp;gt;&amp;gt; for
&lt;br&gt;&amp;gt;&amp;gt; a test for 773, I'm really not familiar enough with T5's tests and test
&lt;br&gt;&amp;gt;&amp;gt; systems to even know where to start. I may be able to do it with some
&lt;br&gt;&amp;gt;&amp;gt; guidance, like if someone pointed me at where the test for this code is
&lt;br&gt;&amp;gt;&amp;gt; located.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Ulrich Stärk wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; TAP5-815 will be in the 5.1.0.6 release, Robert is just holding it open
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; for the moment.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The other two don't have patches yet and since 5.1.0.6 should be
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; realeased
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; as soon as possible due to TAP5-815, I doubt that they will make it into
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the release. If you
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; provide a patch and a test for TAP5-773 though, I'm sure that one of the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; committers will look at it.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Shouldn't be that hard since you already have an idea how to fix that.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Uli
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Am 23.11.2009 11:50 schrieb Andy Blower:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; As one of the voices calling for a 5.1 bug fix release I thought I'd
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; take
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; peek at the dev list. Glad to see things are moving, but a bit
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; disappointed
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; not to see some key (IMO) bugs not on the list.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can I suggest that these are added:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-834&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-834&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-773&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-773&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and if possible:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-815&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-815&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Andy.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Ulrich Stärk wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For the 5.1.0.6 release, I'd suggest to backport the fixes for the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; following issues:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Bugs:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-913&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-913&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-779&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-779&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-767&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-767&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-755&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-755&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-748&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-748&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-734&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-734&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-719&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-719&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-714&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-714&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-711&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-711&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Improvements:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-912&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-912&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-814&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-814&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-764&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-764&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-756&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-756&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-138&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-138&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I already began to integrate the fixes to the 5.1.0.x-dev branch and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; will
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; provide a patch covering those when I'm done.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Uli
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483505&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/issues-to-be-fixed-for-5.1.0.6-tp26423770s302p26483505.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483428</id>
	<title>Re: issues to be fixed for 5.1.0.6</title>
	<published>2009-11-23T10:25:14Z</published>
	<updated>2009-11-23T10:25:14Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">Go ahead.
&lt;br&gt;&lt;br&gt;On Mon, Nov 23, 2009 at 5:42 PM, Andreas Andreou &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; btw, any objections against me also applying
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-819&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-819&lt;/a&gt;&amp;nbsp;&amp;quot;remove ide-specific
&lt;br&gt;&amp;gt; files from all sub-modules and add them to svn:ignore&amp;quot;
&lt;br&gt;&amp;gt; to the 5.1 branch ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Sun, Nov 22, 2009 at 4:56 PM, Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;igor.drobiazko@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; 14 issues are fixed for 5.1.0.6 now. Please see here:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310833&amp;status=6&amp;fixfor=12314399&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310833&amp;status=6&amp;fixfor=12314399&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; The remaining issues (if I didn't miss something) are:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-748&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-748&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; It would be nice if we could fix them asap and go ahead with the release.
&lt;br&gt;&amp;gt; &amp;gt; I'm done for this weekend.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Thu, Nov 19, 2009 at 3:00 PM, Ulrich Stärk &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;uli@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Here is a short status update:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Am 19.11.2009 11:17 schrieb Ulrich Stärk:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;For the 5.1.0.6 release, I'd suggest to backport the fixes for the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; following issues:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Bugs:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-913&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-913&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-779&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-779&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-767&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-767&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; will be done by Igor.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-755&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-755&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-748&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-748&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; The commit for this issue covers several other issues so identifying the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; parts for just this issue will take some time. Do you think it's worth
&lt;br&gt;&amp;gt; it?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-734&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-734&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-719&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-719&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-714&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-714&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-711&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-711&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Improvements:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-912&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-912&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; will be done by Igor.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-814&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-814&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-764&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-764&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; done.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-756&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-756&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; I made a mistake here. Since this is for tapestry-site it's already
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; fixed...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-138&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-138&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; will be done by Igor.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Since I can't commit changes, all patches are isolated and done against
&lt;br&gt;&amp;gt; the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; current 5.1 branch and thus might conflict with each other. Most
&lt;br&gt;&amp;gt; conflicts
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; are about adding additional items to the app1 integration test Index
&lt;br&gt;&amp;gt; page or
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; adding an addtitional integration test to IntegrationTests.java but one
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; conflict will also be in linksubmit.js and care has to be taken there.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Uli
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt; Best regards,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Andreas Andreou - &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andyhot@...&lt;/a&gt; - &lt;a href=&quot;http://blog.andyhot.gr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.andyhot.gr&lt;/a&gt;&lt;br&gt;&amp;gt; Tapestry / Tacos developer
&lt;br&gt;&amp;gt; Open Source / JEE Consulting
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483428&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/issues-to-be-fixed-for-5.1.0.6-tp26423770s302p26483428.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483234</id>
	<title>[jira] Updated: (TAP5-896) Contribute 'properties' file extension to the configuration of ResourceDigestGenerator</title>
	<published>2009-11-23T10:13:39Z</published>
	<updated>2009-11-23T10:13:39Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-896?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-896?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Igor Drobiazko updated TAP5-896:
&lt;br&gt;--------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Fix Version/s: 5.1.0.6
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Contribute 'properties' file extension to the configuration of ResourceDigestGenerator
&lt;br&gt;&amp;gt; --------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: TAP5-896
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-896&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-896&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Tapestry 5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: tapestry-core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.1.0.5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Igor Drobiazko
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Blocker
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.2.0.0, 5.1.0.6
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is a partly solution for TAP5-815 (only for *.properties files).
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28TAP5-896%29-Contribute-%27properties%27-file-extension-to-the-configuration-of-ResourceDigestGenerator-tp25925611s302p26483234.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483224</id>
	<title>svn commit: r883441 - /tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java</title>
	<published>2009-11-23T10:12:46Z</published>
	<updated>2009-11-23T10:12:46Z</updated>
	<author>
		<name>drobiazko</name>
	</author>
	<content type="html">Author: drobiazko
&lt;br&gt;Date: Mon Nov 23 18:12:44 2009
&lt;br&gt;New Revision: 883441
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=883441&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=883441&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;TAP5-896: Contribute 'properties' file extension to the configuration of ResourceDigestGenerator
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&lt;br&gt;Modified: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=883441&amp;r1=883440&amp;r2=883441&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=883441&amp;r1=883440&amp;r2=883441&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
&lt;br&gt;+++ tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Mon Nov 23 18:12:44 2009
&lt;br&gt;@@ -1970,6 +1970,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Java class files always require a digest.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;class&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Even though properties don't contain sensible data we should protect them.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;properties&amp;quot;);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Likewise, we don't want people fishing for templates.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(InternalConstants.TEMPLATE_EXTENSION);
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r883441----tapestry-tapestry5-branches-5.1.0.x-dev-tapestry-core-src-main-java-org-apache-tapestry5-services-TapestryModule.java-tp26483224s302p26483224.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483187</id>
	<title>Re: svn commit: r834151 - in /tapestry/tapestry5/trunk: 	src/site/apt/guide/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ 	tapestry-core/src/main/java/org/apache/tapestry5/services/ tapestry-core/src/test/java/org/apache/tapestry</title>
	<published>2009-11-23T10:10:37Z</published>
	<updated>2009-11-23T10:10:37Z</updated>
	<author>
		<name>Ulrich Stärk</name>
	</author>
	<content type="html">And the application itself should be added, as I also proposed in JIRA.
&lt;br&gt;&lt;br&gt;Uli
&lt;br&gt;&lt;br&gt;Igor Drobiazko schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I think the contribution &amp;quot;^org/chenillekit/tapestry/&amp;quot; should be removed from
&lt;br&gt;&amp;gt; the configuration of the RegexpAuthorizer. App developers using Chenillekit
&lt;br&gt;&amp;gt; should contribute it.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Mon, Nov 9, 2009 at 6:23 PM, &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483187&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;robertdzeigler@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Author: robertdzeigler
&lt;br&gt;&amp;gt;&amp;gt; Date: Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; New Revision: 834151
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Log:
&lt;br&gt;&amp;gt;&amp;gt; TAP5-815: Asset dispatcher allows any file inside the webapp visible and
&lt;br&gt;&amp;gt;&amp;gt; downloadable (5.2 branch)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Modified: tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; --- tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt (original)
&lt;br&gt;&amp;gt;&amp;gt; +++ tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt Mon Nov &amp;nbsp;9
&lt;br&gt;&amp;gt;&amp;gt; 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -138,6 +138,31 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; In addition, context assets will use the URL prefix
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&amp;lt;&amp;lt;/assets/ctx/&amp;gt;&amp;gt;&amp;gt;&amp;lt;app-version&amp;gt;&amp;lt;&amp;lt;&amp;lt;/&amp;gt;&amp;gt;&amp;gt;.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +Securing Assets
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;Securing assets is an important consideration for any web application.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Many assets, such as hibernate configuration
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;files, sit in the classpath and are exposable via the Asset service,
&lt;br&gt;&amp;gt;&amp;gt; which is not desirable. &amp;nbsp;To protect these and
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;other sensitive assets, Tapestry provides the AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;This dispatcher sits in front of the
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;AssetDispatcher, the service responsible for streaming assets to the
&lt;br&gt;&amp;gt;&amp;gt; client, and watches for Asset requests.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;When an asset request comes in, the protection dispatcher checks for
&lt;br&gt;&amp;gt;&amp;gt; authorization to view the file against a
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;contributed list of AssetPathAuthorizer implementations. &amp;nbsp;Determination
&lt;br&gt;&amp;gt;&amp;gt; of whether the client can view the requested
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;resource is then made based on whether any of the contributed
&lt;br&gt;&amp;gt;&amp;gt; AssetPathAuthorizer implementations explicitly allowed
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;or denied access to the resource.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;Tapestry provides two AssetPathAuthorizer implemenations &amp;quot;out of the
&lt;br&gt;&amp;gt;&amp;gt; box&amp;quot; to which users may contribute: RegexAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;and WhitelistAuthorizer. &amp;nbsp;RegexAuthorizer uses regular expressions to
&lt;br&gt;&amp;gt;&amp;gt; determine assets which are viewable by the
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;client; any assets that match one of its (contributed) regular
&lt;br&gt;&amp;gt;&amp;gt; expressions are authorized. Anything not matched is
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;passed through to the WhitelistAuthorizer. &amp;nbsp;WhitelistAuthorizer uses an
&lt;br&gt;&amp;gt;&amp;gt; exact-matching whitelist. &amp;nbsp;Anything matching
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;exactly one its contributions is allowed; all other asset requests are
&lt;br&gt;&amp;gt;&amp;gt; denied. &amp;nbsp;The default tapestry configuration
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;contributes nothing to WhitelistAuthorizer (access will be denied to all
&lt;br&gt;&amp;gt;&amp;gt; asset requests passed through to it), and
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;explicitly allows access to css, jpg, jpeg, js, png, and gif files
&lt;br&gt;&amp;gt;&amp;gt; associated with tapestry (tapestry.js, blackbird
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;files, date picker files, etc.). &amp;nbsp;The default contribution also enables
&lt;br&gt;&amp;gt;&amp;gt; access to the css, jpg, jpeg, js, png, and gif
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;files provided by the popular chenille-kit 3rd party library. The
&lt;br&gt;&amp;gt;&amp;gt; default configuration denies access to all other
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;assets. &amp;nbsp;To enable access to your application's assets, either
&lt;br&gt;&amp;gt;&amp;gt; contribute a custom AssetPathAnalyzer, or contribute
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;appropriate regular expression or exact path contributions to
&lt;br&gt;&amp;gt;&amp;gt; RegexAuthorizer or WhitelistAuthorizer, respectively.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;See TapestryModule.contribteRegexAuthorizer for examples.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Performance Notes
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; Assets are expected to be entirely static (not changing while the
&lt;br&gt;&amp;gt;&amp;gt; application is deployed). When Tapestry generates a URL
&lt;br&gt;&amp;gt;&amp;gt; @@ -146,4 +171,4 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; asset.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; In addition, Tapestry will {{{compress.html}GZIP compress}} the content
&lt;br&gt;&amp;gt;&amp;gt; of &amp;lt;all&amp;gt; assets (if the asset
&lt;br&gt;&amp;gt;&amp;gt; - &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt; \ No newline at end of file
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.*;
&lt;br&gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * Dispatcher that handles whether to allow or deny access to particular
&lt;br&gt;&amp;gt;&amp;gt; + * assets. Actual work of authorizing a particular url is handled by
&lt;br&gt;&amp;gt;&amp;gt; + * implementations of AssetPathAuthorizer. Configuration is an ordered
&lt;br&gt;&amp;gt;&amp;gt; + * list of AssetPathAuthorizers. &amp;nbsp;Each authorizer specifies an order of
&lt;br&gt;&amp;gt;&amp;gt; + * operations as a list (see AssetPathAuthorizer.Order).
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcher implements Dispatcher
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;AssetPathAuthorizer&amp;gt; authorizers;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final ClasspathAssetAliasManager assetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Logger logger;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public AssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.authorizers = Collections.unmodifiableList(auths);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.assetAliasManager = manager;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.logger = logger;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean dispatch(Request request, Response response)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IOException
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String path = request.getPath();
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//we only protect assets, and don't examine any other url's.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!path.startsWith(RequestConstants.ASSET_PATH_PREFIX))
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = assetAliasManager.toResourcePath(path);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer auth : authorizers)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer.Order o : auth.order())
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (o == AssetPathAuthorizer.Order.ALLOW)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessAllowed(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to &amp;quot; +
&lt;br&gt;&amp;gt;&amp;gt; resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessDenied(resourcePath))
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if we get here, no Authorizer had anything useful to say about
&lt;br&gt;&amp;gt;&amp;gt; the resourcePath.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//so let it fall through.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Fell through the list of authorizers. Allowing
&lt;br&gt;&amp;gt;&amp;gt; access to: &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.regex.Pattern;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * Provides a regex-based authorization scheme for asset-access
&lt;br&gt;&amp;gt;&amp;gt; authorization.
&lt;br&gt;&amp;gt;&amp;gt; + * Note that this implementation doesn't actually deny access to anything.
&lt;br&gt;&amp;gt;&amp;gt; + * But it's placement within the chain of command of authorizers is just
&lt;br&gt;&amp;gt;&amp;gt; before
&lt;br&gt;&amp;gt;&amp;gt; + * the whitelist authorizer, which has an explicit deny policy.
&lt;br&gt;&amp;gt;&amp;gt; + * Hence, as long as the whitelist authorizer is being used in conjunction
&lt;br&gt;&amp;gt;&amp;gt; with
&lt;br&gt;&amp;gt;&amp;gt; + * the regex authorizer, there is no need to worry about accessDenied in
&lt;br&gt;&amp;gt;&amp;gt; this authorizer.
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public class RegexAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;Pattern&amp;gt; _regexes;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public RegexAuthorizer(final Collection&amp;lt;String&amp;gt; regex)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//an alternate way to construct this would be to make sure that
&lt;br&gt;&amp;gt;&amp;gt; each pattern is grouped
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//and then to regex or the various patterns together into a single
&lt;br&gt;&amp;gt;&amp;gt; pattern.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//that might be faster, but probably not enough to make a
&lt;br&gt;&amp;gt;&amp;gt; difference, and this is cleaner.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Pattern&amp;gt; tmp = new ArrayList&amp;lt;Pattern&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String exp : regex)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tmp.add(Pattern.compile(exp));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_regexes = Collections.unmodifiableCollection(tmp);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(Pattern regex : _regexes)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (regex.matcher(resourcePath).matches())
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,59 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Map;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.concurrent.ConcurrentHashMap;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * AssetPathAuthorizer that determines access rights based on exact
&lt;br&gt;&amp;gt;&amp;gt; matching to a contributed whitelist.
&lt;br&gt;&amp;gt;&amp;gt; + * Any resource not explicitly specified in the whitelist is denied
&lt;br&gt;&amp;gt;&amp;gt; access.
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW, Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;//hash the resource paths for fast lookups.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Map&amp;lt;String, Boolean&amp;gt; _paths;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public WhitelistAuthorizer(Collection&amp;lt;String&amp;gt; paths)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths = new ConcurrentHashMap&amp;lt;String, Boolean&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String path : paths)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths.put(path, true);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (_paths.containsKey(resourcePath));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return !_paths.containsKey(resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/**
&lt;br&gt;&amp;gt;&amp;gt; + * Determines whether access to an asset is allowed, denied, or
&lt;br&gt;&amp;gt;&amp;gt; undetermined.
&lt;br&gt;&amp;gt;&amp;gt; + * Each contributed authorizer makes up part of a chain of command for
&lt;br&gt;&amp;gt;&amp;gt; determining access.
&lt;br&gt;&amp;gt;&amp;gt; + * Access is explicitly allowed if accessAllowed returns true.
&lt;br&gt;&amp;gt;&amp;gt; + * Access is explicitly denied if accessDenied returns true.
&lt;br&gt;&amp;gt;&amp;gt; + * Ordering depends on the order specified by the &amp;quot;order&amp;quot; parameter.
&lt;br&gt;&amp;gt;&amp;gt; + * Hence, an implementation which specifies an order of:
&lt;br&gt;&amp;gt;&amp;gt; + * ALLOW, DENY, and returns true from both accessAllowed and accessDenied
&lt;br&gt;&amp;gt;&amp;gt; + * will allow access for all resources. With the same return values for
&lt;br&gt;&amp;gt;&amp;gt; the
&lt;br&gt;&amp;gt;&amp;gt; + * access* methods but the order switched to DENY, ALLOW, access to all
&lt;br&gt;&amp;gt;&amp;gt; resources
&lt;br&gt;&amp;gt;&amp;gt; + * would be denied. &amp;nbsp;It is possible for an authorizer to have &amp;quot;nothing
&lt;br&gt;&amp;gt;&amp;gt; + * to say&amp;quot; regarding a particular resource. &amp;nbsp;If accessAllowed returns
&lt;br&gt;&amp;gt;&amp;gt; false,
&lt;br&gt;&amp;gt;&amp;gt; + * it does not mean that access is denied, merely that it is not
&lt;br&gt;&amp;gt;&amp;gt; explicitly allowed.
&lt;br&gt;&amp;gt;&amp;gt; + * If accessDenied returns false, it does not mean that access is allowed,
&lt;br&gt;&amp;gt;&amp;gt; merely that
&lt;br&gt;&amp;gt;&amp;gt; + * it is not explicitly denied. &amp;nbsp;Hence, if both accessAllowed and
&lt;br&gt;&amp;gt;&amp;gt; accessDenied return false,
&lt;br&gt;&amp;gt;&amp;gt; + * control will pass to the next authorizer in the chain.
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +public interface AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Types of orderings, either ALLOW or DENY.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;enum Order {ALLOW, DENY;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Specify the ordering for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return the operations for this authorizer.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Operations will be performed in the order returned by the iterator.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * It is assumed that the authorizer correctly implements each form of
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * ordering returned. It is acceptable to only return only ALLOW or
&lt;br&gt;&amp;gt;&amp;gt; DENY.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;List&amp;lt;Order&amp;gt; order();
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Determines whether a request to &amp;quot;resourcePath&amp;quot; is allowed.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly allowed for the path. False
&lt;br&gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt; resource
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * was listed, and false otherwise. &amp;nbsp;A blacklist implementation would
&lt;br&gt;&amp;gt;&amp;gt; return
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * false regardless of whether the path was in the blacklist.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Alternatively, if the blacklist specified an order of DENY, ALLOW,
&lt;br&gt;&amp;gt;&amp;gt; it could
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true from accessAllowed if the resource was not explicitly
&lt;br&gt;&amp;gt;&amp;gt; listed in its
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * blacklist.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessAllowed(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly prohibited for the path. False
&lt;br&gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt;&amp;gt; resource was
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * not explicitly listed, and false otherwise. A blacklist
&lt;br&gt;&amp;gt;&amp;gt; implementation would
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true if the resource was explicitly denied, and false
&lt;br&gt;&amp;gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessDenied(String resourcePath);
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -305,6 +305,9 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(PageRenderLinkSource.class,
&lt;br&gt;&amp;gt;&amp;gt; PageRenderLinkSourceImpl.class);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(ClientInfrastructure.class,
&lt;br&gt;&amp;gt;&amp;gt; ClientInfrastructureImpl.class);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(URLRewriter.class, URLRewriterImpl.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(Dispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.class).withId(&amp;quot;AssetProtectionDispatcher&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt; WhitelistAuthorizer.class).withId(&amp;quot;WhitelistAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt;&amp;gt; RegexAuthorizer.class).withId(&amp;quot;RegexAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; //
&lt;br&gt;&amp;gt;&amp;gt; ========================================================================
&lt;br&gt;&amp;gt;&amp;gt; @@ -1572,13 +1575,17 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* and forwards onto {@link PageRenderRequestHandler}&amp;lt;/dd&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;dt&amp;gt;ComponentEvent&amp;lt;/dt&amp;gt; &amp;lt;dd&amp;gt;Identifies the {@link
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* ComponentEventRequestParameters} and forwards onto the {@link
&lt;br&gt;&amp;gt;&amp;gt; ComponentEventRequestHandler}&amp;lt;/dd&amp;gt; &amp;lt;/dl&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt;&amp;gt; - &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration,
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;@InjectService(&amp;quot;AssetProtectionDispatcher&amp;quot;) Dispatcher assetProt)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Looks for the root path and renders the start page. This is
&lt;br&gt;&amp;gt;&amp;gt; maintained for compatibility
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // with earlier versions of Tapestry 5, it is recommended that an
&lt;br&gt;&amp;gt;&amp;gt; Index page be used instead.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.addInstance(&amp;quot;RootPath&amp;quot;, RootPathDispatcher.class,
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this goes before asset to make sure that only allowed assets are
&lt;br&gt;&amp;gt;&amp;gt; streamed to the client.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;AssetProtection&amp;quot;, assetProt, &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // This goes first because an asset to be streamed may have an file
&lt;br&gt;&amp;gt;&amp;gt; extension, such as
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;quot;.html&amp;quot;, that will confuse the later dispatchers.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; @@ -1591,6 +1598,7 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.addInstance(&amp;quot;PageRender&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt; PageRenderDispatcher.class);
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Contributes a default object renderer for type Object, plus
&lt;br&gt;&amp;gt;&amp;gt; specialized renderers for {@link
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* org.apache.tapestry5.services.Request}, {@link
&lt;br&gt;&amp;gt;&amp;gt; org.apache.tapestry5.ioc.Location}, {@link
&lt;br&gt;&amp;gt;&amp;gt; @@ -2480,4 +2488,41 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Contributes the default set of AssetPathAuthorizers into the
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param whitelist authorization based on explicit whitelisting.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param regex authorization based on pattern matching.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param conf
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeAssetProtectionDispatcher(
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;WhitelistAuthorizer&amp;quot;) AssetPathAuthorizer
&lt;br&gt;&amp;gt;&amp;gt; whitelist,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;RegexAuthorizer&amp;quot;) AssetPathAuthorizer regex,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OrderedConfiguration&amp;lt;AssetPathAuthorizer&amp;gt; conf)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//putting whitelist after everything ensures that, in fact,
&lt;br&gt;&amp;gt;&amp;gt; nothing falls through.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//also ensures that whitelist gives other authorizers the chance
&lt;br&gt;&amp;gt;&amp;gt; to act...
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;regex&amp;quot;,regex,&amp;quot;before:whitelist&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;whitelist&amp;quot;, whitelist,&amp;quot;after:*&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt; regex,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.scriptaculous.path&amp;quot;) String scriptPath,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.blackbird.path&amp;quot;) String blackbirdPath,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.datepicker.path&amp;quot;) String datepickerPath)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow any js, jpg, jpeg, png, or css under
&lt;br&gt;&amp;gt;&amp;gt; org/chenillekit/tapstry. The funky bit of ([^/.]+/)* is what allows
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//multiple paths, while not allowing any of those paths to
&lt;br&gt;&amp;gt;&amp;gt; contains ./ or ../ thereby preventing paths like:
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//org/chenillekit/tapestry/../../../foo.js
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pathPattern =
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;([^/.]+/)*[^/.]+\\.((css)|(js)|(jpg)|(jpeg)|(png)|(gif))$&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/chenillekit/tapestry/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/apache/tapestry5/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(blackbirdPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(datepickerPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(scriptPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow access to virtual assets. Critical for tapestry-combined
&lt;br&gt;&amp;gt;&amp;gt; js files.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;virtual/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt; (original)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -257,4 +257,22 @@
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.add(&amp;quot;ReverseStringsWorker&amp;quot;, new
&lt;br&gt;&amp;gt;&amp;gt; ReverseStringsWorker());
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; configuration) {
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//use this rather than a blanket regex (^.*.jpg$, etc.); want to
&lt;br&gt;&amp;gt;&amp;gt; be sure that tests pass from the default
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//configuration setup, (eg: this way, I realized that the
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;virtual&amp;quot; assets folder
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//needed to be opened up in the tapestry-provided contributions)
&lt;br&gt;&amp;gt;&amp;gt; rather than from some blanket configuration in the appmodule
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//opening up all css, js, etc. files.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//would contribute to whitelist except that the resource path
&lt;br&gt;&amp;gt;&amp;gt; between ctxt and the rest of the path can change.
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/css/app\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/style\\.css$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bg\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/header\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightsmall\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightbig\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bottom\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/footer\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/tapestry_banner\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/asf_logo_wide\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.createMock;
&lt;br&gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.expect;
&lt;br&gt;&amp;gt;&amp;gt; +import static org.easymock.EasyMock.*;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.AssetProtectionDispatcher;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.ClasspathAssetAliasManager;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Request;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.Response;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public class AssetProtectionDispatcherTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void ignores_nonassets() throws IOException
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//shouldn't need any configuration here...
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = Collections.emptyList();
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,null,logger);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(request.getPath()).andReturn(&amp;quot;start&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void checks_authorizers() throws IOException
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = new
&lt;br&gt;&amp;gt;&amp;gt; ArrayList&amp;lt;AssetPathAuthorizer&amp;gt;();
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetPathAuthorizer auth = createMock(AssetPathAuthorizer.class);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;expect(auth.order()).andReturn(Arrays.asList(AssetPathAuthorizer.Order.ALLOW,
&lt;br&gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.DENY)).times(2);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(false);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessDenied(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/org/apache/tapestry/default.css&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auths.add(auth);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to /cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to
&lt;br&gt;&amp;gt;&amp;gt; /org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager =
&lt;br&gt;&amp;gt;&amp;gt; createMock(ClasspathAssetAliasManager.class);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;)).andReturn(&amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;))
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.andReturn(&amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(auth,request,response,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt;&amp;gt; AssetProtectionDispatcher(auths,manager,logger);
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(disp.dispatch(request,response));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(auth,request,response,logger);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,53 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.RegexAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public class RegexAuthorizerTest extends Assert
&lt;br&gt;&amp;gt;&amp;gt; +{
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void test_regexes()
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;String&amp;gt; patterns =
&lt;br&gt;&amp;gt;&amp;gt; Arrays.asList(&amp;quot;^.*\\.png$&amp;quot;,&amp;quot;^.*\\.jpg&amp;quot;,&amp;quot;^.*\\.jpeg&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RegexAuthorizer auth = new RegexAuthorizer(patterns);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pkg = &amp;quot;assets/com/saiwaisolutions/resources/&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String png = pkg + &amp;quot;foo.png&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpg = pkg + &amp;quot;foo.jpg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpeg = pkg + &amp;quot;foo.jpeg&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String xml = pkg + &amp;quot;foo.xml&amp;quot;;
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,png,true);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpg,true);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpeg,true);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,xml,false);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private static void test(RegexAuthorizer auth, String one,boolean
&lt;br&gt;&amp;gt;&amp;gt; allowed)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.accessAllowed(one),allowed);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auth.accessAllowed(
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one),
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowed);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(one));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; URL:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; (added)
&lt;br&gt;&amp;gt;&amp;gt; +++
&lt;br&gt;&amp;gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt;&amp;gt; @@ -0,0 +1,45 @@
&lt;br&gt;&amp;gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; +//
&lt;br&gt;&amp;gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt;&amp;gt; implied.
&lt;br&gt;&amp;gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +/*
&lt;br&gt;&amp;gt;&amp;gt; + * Created on Jul 28, 2007
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + *
&lt;br&gt;&amp;gt;&amp;gt; + */
&lt;br&gt;&amp;gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.internal.services.WhitelistAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +public class WhitelistAuthorizerTest extends Assert {
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void run()
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WhitelistAuthorizer auth = new
&lt;br&gt;&amp;gt;&amp;gt; WhitelistAuthorizer(Arrays.asList(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(0),
&lt;br&gt;&amp;gt;&amp;gt; AssetPathAuthorizer.Order.ALLOW);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(1), AssetPathAuthorizer.Order.DENY);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().size(),2);
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessAllowed(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessAllowed(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessDenied(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; +}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483187&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483187&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-svn-commit%3A-r834151---in--tapestry-tapestry5-trunk%3A--src-site-apt-guide--tapestry-core-src-main-java-org-apache-tapestry5-internal-services---tapestry-core-src-main-java-org-apache-tapestry5-services---tapestry-core-src-test-java-org-apache-tapestry-tp26483150s302p26483187.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483178</id>
	<title>[jira] Updated: (TAP5-749) The FormFragment and LinkSubmit components create a hidden field whose id ends with &quot;:hidden&quot;</title>
	<published>2009-11-23T10:09:39Z</published>
	<updated>2009-11-23T10:09:39Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Igor Drobiazko updated TAP5-749:
&lt;br&gt;--------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Fix Version/s: 5.1.0.6
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; The FormFragment and LinkSubmit components create a hidden field whose id ends with &amp;quot;:hidden&amp;quot;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: TAP5-749
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/TAP5-749&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/TAP5-749&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Tapestry 5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: tapestry-core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 5.1.0.5
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Howard M. Lewis Ship
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Robert Zeigler
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Priority: Minor
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 5.2.0.0, 5.1.0.6
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: TAP5-749-5.1.txt
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There was a bug fixed for 5.1.0.x (I'll find it later) that said that colons inside ids were bad and cause problems. Must have missed these particular cases.
&lt;br&gt;&amp;gt; &amp;lt;div id=&amp;quot;searchTextFragment&amp;quot; class=&amp;quot;&amp;quot; style=&amp;quot;overflow: visible;&amp;quot;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;input id=&amp;quot;searchTextFragment:hidden&amp;quot; type=&amp;quot;hidden&amp;quot; name=&amp;quot;t:formdata&amp;quot; value=&amp;quot;H4sIAAAAAAAAAFvzloEVAN3OqfcEAAAA&amp;quot; style=&amp;quot;&amp;quot;/&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;h3&amp;gt;Search Text&amp;lt;/h3&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/div&amp;gt;
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28TAP5-749%29-The-FormFragment-component-creates-a-hidden-field-whose-id-ends-with-%22%3Ahidden%22-tp23988898s302p26483178.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483150</id>
	<title>Re: svn commit: r834151 - in /tapestry/tapestry5/trunk:  src/site/apt/guide/ tapestry-core/src/main/java/org/apache/tapestry5/internal/services/  tapestry-core/src/main/java/org/apache/tapestry5/services/  tapestry-core/src/test/java/org/apache/tapestry</title>
	<published>2009-11-23T10:07:29Z</published>
	<updated>2009-11-23T10:07:29Z</updated>
	<author>
		<name>Igor Drobiazko</name>
	</author>
	<content type="html">I think the contribution &amp;quot;^org/chenillekit/tapestry/&amp;quot; should be removed from
&lt;br&gt;the configuration of the RegexpAuthorizer. App developers using Chenillekit
&lt;br&gt;should contribute it.
&lt;br&gt;&lt;br&gt;On Mon, Nov 9, 2009 at 6:23 PM, &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26483150&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;robertdzeigler@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Author: robertdzeigler
&lt;br&gt;&amp;gt; Date: Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; New Revision: 834151
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=834151&amp;view=rev&lt;/a&gt;&lt;br&gt;&amp;gt; Log:
&lt;br&gt;&amp;gt; TAP5-815: Asset dispatcher allows any file inside the webapp visible and
&lt;br&gt;&amp;gt; downloadable (5.2 branch)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modified: tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; --- tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt (original)
&lt;br&gt;&amp;gt; +++ tapestry/tapestry5/trunk/src/site/apt/guide/assets.apt Mon Nov &amp;nbsp;9
&lt;br&gt;&amp;gt; 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -138,6 +138,31 @@
&lt;br&gt;&amp;gt; &amp;nbsp; In addition, context assets will use the URL prefix
&lt;br&gt;&amp;gt; &amp;lt;&amp;lt;&amp;lt;/assets/ctx/&amp;gt;&amp;gt;&amp;gt;&amp;lt;app-version&amp;gt;&amp;lt;&amp;lt;&amp;lt;/&amp;gt;&amp;gt;&amp;gt;.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; +Securing Assets
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;Securing assets is an important consideration for any web application.
&lt;br&gt;&amp;gt; &amp;nbsp;Many assets, such as hibernate configuration
&lt;br&gt;&amp;gt; + &amp;nbsp;files, sit in the classpath and are exposable via the Asset service,
&lt;br&gt;&amp;gt; which is not desirable. &amp;nbsp;To protect these and
&lt;br&gt;&amp;gt; + &amp;nbsp;other sensitive assets, Tapestry provides the AssetProtectionDispatcher.
&lt;br&gt;&amp;gt; &amp;nbsp;This dispatcher sits in front of the
&lt;br&gt;&amp;gt; + &amp;nbsp;AssetDispatcher, the service responsible for streaming assets to the
&lt;br&gt;&amp;gt; client, and watches for Asset requests.
&lt;br&gt;&amp;gt; + &amp;nbsp;When an asset request comes in, the protection dispatcher checks for
&lt;br&gt;&amp;gt; authorization to view the file against a
&lt;br&gt;&amp;gt; + &amp;nbsp;contributed list of AssetPathAuthorizer implementations. &amp;nbsp;Determination
&lt;br&gt;&amp;gt; of whether the client can view the requested
&lt;br&gt;&amp;gt; + &amp;nbsp;resource is then made based on whether any of the contributed
&lt;br&gt;&amp;gt; AssetPathAuthorizer implementations explicitly allowed
&lt;br&gt;&amp;gt; + &amp;nbsp;or denied access to the resource.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;Tapestry provides two AssetPathAuthorizer implemenations &amp;quot;out of the
&lt;br&gt;&amp;gt; box&amp;quot; to which users may contribute: RegexAuthorizer
&lt;br&gt;&amp;gt; + &amp;nbsp;and WhitelistAuthorizer. &amp;nbsp;RegexAuthorizer uses regular expressions to
&lt;br&gt;&amp;gt; determine assets which are viewable by the
&lt;br&gt;&amp;gt; + &amp;nbsp;client; any assets that match one of its (contributed) regular
&lt;br&gt;&amp;gt; expressions are authorized. Anything not matched is
&lt;br&gt;&amp;gt; + &amp;nbsp;passed through to the WhitelistAuthorizer. &amp;nbsp;WhitelistAuthorizer uses an
&lt;br&gt;&amp;gt; exact-matching whitelist. &amp;nbsp;Anything matching
&lt;br&gt;&amp;gt; + &amp;nbsp;exactly one its contributions is allowed; all other asset requests are
&lt;br&gt;&amp;gt; denied. &amp;nbsp;The default tapestry configuration
&lt;br&gt;&amp;gt; + &amp;nbsp;contributes nothing to WhitelistAuthorizer (access will be denied to all
&lt;br&gt;&amp;gt; asset requests passed through to it), and
&lt;br&gt;&amp;gt; + &amp;nbsp;explicitly allows access to css, jpg, jpeg, js, png, and gif files
&lt;br&gt;&amp;gt; associated with tapestry (tapestry.js, blackbird
&lt;br&gt;&amp;gt; + &amp;nbsp;files, date picker files, etc.). &amp;nbsp;The default contribution also enables
&lt;br&gt;&amp;gt; access to the css, jpg, jpeg, js, png, and gif
&lt;br&gt;&amp;gt; + &amp;nbsp;files provided by the popular chenille-kit 3rd party library. The
&lt;br&gt;&amp;gt; default configuration denies access to all other
&lt;br&gt;&amp;gt; + &amp;nbsp;assets. &amp;nbsp;To enable access to your application's assets, either
&lt;br&gt;&amp;gt; contribute a custom AssetPathAnalyzer, or contribute
&lt;br&gt;&amp;gt; + &amp;nbsp;appropriate regular expression or exact path contributions to
&lt;br&gt;&amp;gt; RegexAuthorizer or WhitelistAuthorizer, respectively.
&lt;br&gt;&amp;gt; + &amp;nbsp;See TapestryModule.contribteRegexAuthorizer for examples.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;Performance Notes
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Assets are expected to be entirely static (not changing while the
&lt;br&gt;&amp;gt; application is deployed). When Tapestry generates a URL
&lt;br&gt;&amp;gt; @@ -146,4 +171,4 @@
&lt;br&gt;&amp;gt; &amp;nbsp; asset.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; In addition, Tapestry will {{{compress.html}GZIP compress}} the content
&lt;br&gt;&amp;gt; of &amp;lt;all&amp;gt; assets (if the asset
&lt;br&gt;&amp;gt; - &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt; \ No newline at end of file
&lt;br&gt;&amp;gt; + &amp;nbsp;is compressable, and the client supports it).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcher.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.*;
&lt;br&gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/**
&lt;br&gt;&amp;gt; + * Dispatcher that handles whether to allow or deny access to particular
&lt;br&gt;&amp;gt; + * assets. Actual work of authorizing a particular url is handled by
&lt;br&gt;&amp;gt; + * implementations of AssetPathAuthorizer. Configuration is an ordered
&lt;br&gt;&amp;gt; + * list of AssetPathAuthorizers. &amp;nbsp;Each authorizer specifies an order of
&lt;br&gt;&amp;gt; + * operations as a list (see AssetPathAuthorizer.Order).
&lt;br&gt;&amp;gt; + *
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +public class AssetProtectionDispatcher implements Dispatcher
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;AssetPathAuthorizer&amp;gt; authorizers;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final ClasspathAssetAliasManager assetAliasManager;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Logger logger;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public AssetProtectionDispatcher(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.authorizers = Collections.unmodifiableList(auths);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.assetAliasManager = manager;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.logger = logger;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean dispatch(Request request, Response response)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IOException
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String path = request.getPath();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//we only protect assets, and don't examine any other url's.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!path.startsWith(RequestConstants.ASSET_PATH_PREFIX))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = assetAliasManager.toResourcePath(path);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer auth : authorizers)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(AssetPathAuthorizer.Order o : auth.order())
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (o == AssetPathAuthorizer.Order.ALLOW)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessAllowed(resourcePath))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to &amp;quot; +
&lt;br&gt;&amp;gt; resourcePath);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (auth.accessDenied(resourcePath))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,resourcePath);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if we get here, no Authorizer had anything useful to say about
&lt;br&gt;&amp;gt; the resourcePath.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//so let it fall through.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Fell through the list of authorizers. Allowing
&lt;br&gt;&amp;gt; access to: &amp;quot; + resourcePath);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RegexAuthorizer.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt; +import java.util.regex.Pattern;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/**
&lt;br&gt;&amp;gt; + * Provides a regex-based authorization scheme for asset-access
&lt;br&gt;&amp;gt; authorization.
&lt;br&gt;&amp;gt; + * Note that this implementation doesn't actually deny access to anything.
&lt;br&gt;&amp;gt; + * But it's placement within the chain of command of authorizers is just
&lt;br&gt;&amp;gt; before
&lt;br&gt;&amp;gt; + * the whitelist authorizer, which has an explicit deny policy.
&lt;br&gt;&amp;gt; + * Hence, as long as the whitelist authorizer is being used in conjunction
&lt;br&gt;&amp;gt; with
&lt;br&gt;&amp;gt; + * the regex authorizer, there is no need to worry about accessDenied in
&lt;br&gt;&amp;gt; this authorizer.
&lt;br&gt;&amp;gt; + *
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +public class RegexAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Collection&amp;lt;Pattern&amp;gt; _regexes;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public RegexAuthorizer(final Collection&amp;lt;String&amp;gt; regex)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//an alternate way to construct this would be to make sure that
&lt;br&gt;&amp;gt; each pattern is grouped
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//and then to regex or the various patterns together into a single
&lt;br&gt;&amp;gt; pattern.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//that might be faster, but probably not enough to make a
&lt;br&gt;&amp;gt; difference, and this is cleaner.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;Pattern&amp;gt; tmp = new ArrayList&amp;lt;Pattern&amp;gt;();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String exp : regex)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tmp.add(Pattern.compile(exp));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_regexes = Collections.unmodifiableCollection(tmp);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(Pattern regex : _regexes)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (regex.matcher(resourcePath).matches())
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/WhitelistAuthorizer.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,59 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt; +import java.util.Collection;
&lt;br&gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt; +import java.util.Map;
&lt;br&gt;&amp;gt; +import java.util.concurrent.ConcurrentHashMap;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/**
&lt;br&gt;&amp;gt; + * AssetPathAuthorizer that determines access rights based on exact
&lt;br&gt;&amp;gt; matching to a contributed whitelist.
&lt;br&gt;&amp;gt; + * Any resource not explicitly specified in the whitelist is denied
&lt;br&gt;&amp;gt; access.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +public class WhitelistAuthorizer implements AssetPathAuthorizer
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public List&amp;lt;Order&amp;gt; order()
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Arrays.asList(Order.ALLOW, Order.DENY);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;//hash the resource paths for fast lookups.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private final Map&amp;lt;String, Boolean&amp;gt; _paths;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public WhitelistAuthorizer(Collection&amp;lt;String&amp;gt; paths)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths = new ConcurrentHashMap&amp;lt;String, Boolean&amp;gt;();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for(String path : paths)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_paths.put(path, true);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessAllowed(String resourcePath)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (_paths.containsKey(resourcePath));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public boolean accessDenied(String resourcePath)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return !_paths.containsKey(resourcePath);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetPathAuthorizer.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,76 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/**
&lt;br&gt;&amp;gt; + * Determines whether access to an asset is allowed, denied, or
&lt;br&gt;&amp;gt; undetermined.
&lt;br&gt;&amp;gt; + * Each contributed authorizer makes up part of a chain of command for
&lt;br&gt;&amp;gt; determining access.
&lt;br&gt;&amp;gt; + * Access is explicitly allowed if accessAllowed returns true.
&lt;br&gt;&amp;gt; + * Access is explicitly denied if accessDenied returns true.
&lt;br&gt;&amp;gt; + * Ordering depends on the order specified by the &amp;quot;order&amp;quot; parameter.
&lt;br&gt;&amp;gt; + * Hence, an implementation which specifies an order of:
&lt;br&gt;&amp;gt; + * ALLOW, DENY, and returns true from both accessAllowed and accessDenied
&lt;br&gt;&amp;gt; + * will allow access for all resources. With the same return values for
&lt;br&gt;&amp;gt; the
&lt;br&gt;&amp;gt; + * access* methods but the order switched to DENY, ALLOW, access to all
&lt;br&gt;&amp;gt; resources
&lt;br&gt;&amp;gt; + * would be denied. &amp;nbsp;It is possible for an authorizer to have &amp;quot;nothing
&lt;br&gt;&amp;gt; + * to say&amp;quot; regarding a particular resource. &amp;nbsp;If accessAllowed returns
&lt;br&gt;&amp;gt; false,
&lt;br&gt;&amp;gt; + * it does not mean that access is denied, merely that it is not
&lt;br&gt;&amp;gt; explicitly allowed.
&lt;br&gt;&amp;gt; + * If accessDenied returns false, it does not mean that access is allowed,
&lt;br&gt;&amp;gt; merely that
&lt;br&gt;&amp;gt; + * it is not explicitly denied. &amp;nbsp;Hence, if both accessAllowed and
&lt;br&gt;&amp;gt; accessDenied return false,
&lt;br&gt;&amp;gt; + * control will pass to the next authorizer in the chain.
&lt;br&gt;&amp;gt; + *
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +public interface AssetPathAuthorizer
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Types of orderings, either ALLOW or DENY.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;enum Order {ALLOW, DENY;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Specify the ordering for this authorizer.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return the operations for this authorizer.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Operations will be performed in the order returned by the iterator.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * It is assumed that the authorizer correctly implements each form of
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * ordering returned. It is acceptable to only return only ALLOW or
&lt;br&gt;&amp;gt; DENY.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;List&amp;lt;Order&amp;gt; order();
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Determines whether a request to &amp;quot;resourcePath&amp;quot; is allowed.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly allowed for the path. False
&lt;br&gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt; resource
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * was listed, and false otherwise. &amp;nbsp;A blacklist implementation would
&lt;br&gt;&amp;gt; return
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * false regardless of whether the path was in the blacklist.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Alternatively, if the blacklist specified an order of DENY, ALLOW,
&lt;br&gt;&amp;gt; it could
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true from accessAllowed if the resource was not explicitly
&lt;br&gt;&amp;gt; listed in its
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * blacklist.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessAllowed(String resourcePath);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param resourcePath
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @return true if access is explicitly prohibited for the path. False
&lt;br&gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * For example, a whitelist implementation would return true if the
&lt;br&gt;&amp;gt; resource was
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * not explicitly listed, and false otherwise. A blacklist
&lt;br&gt;&amp;gt; implementation would
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * return true if the resource was explicitly denied, and false
&lt;br&gt;&amp;gt; otherwise.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;boolean accessDenied(String resourcePath);
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt; (original)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -305,6 +305,9 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(PageRenderLinkSource.class,
&lt;br&gt;&amp;gt; PageRenderLinkSourceImpl.class);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(ClientInfrastructure.class,
&lt;br&gt;&amp;gt; ClientInfrastructureImpl.class);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binder.bind(URLRewriter.class, URLRewriterImpl.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(Dispatcher.class,
&lt;br&gt;&amp;gt; AssetProtectionDispatcher.class).withId(&amp;quot;AssetProtectionDispatcher&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt; WhitelistAuthorizer.class).withId(&amp;quot;WhitelistAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binder.bind(AssetPathAuthorizer.class,
&lt;br&gt;&amp;gt; RegexAuthorizer.class).withId(&amp;quot;RegexAuthorizer&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; //
&lt;br&gt;&amp;gt; ========================================================================
&lt;br&gt;&amp;gt; @@ -1572,13 +1575,17 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* and forwards onto {@link PageRenderRequestHandler}&amp;lt;/dd&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;dt&amp;gt;ComponentEvent&amp;lt;/dt&amp;gt; &amp;lt;dd&amp;gt;Identifies the {@link
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* ComponentEventRequestParameters} and forwards onto the {@link
&lt;br&gt;&amp;gt; ComponentEventRequestHandler}&amp;lt;/dd&amp;gt; &amp;lt;/dl&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; - &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void
&lt;br&gt;&amp;gt; contributeMasterDispatcher(OrderedConfiguration&amp;lt;Dispatcher&amp;gt; configuration,
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;@InjectService(&amp;quot;AssetProtectionDispatcher&amp;quot;) Dispatcher assetProt)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Looks for the root path and renders the start page. This is
&lt;br&gt;&amp;gt; maintained for compatibility
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // with earlier versions of Tapestry 5, it is recommended that an
&lt;br&gt;&amp;gt; Index page be used instead.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.addInstance(&amp;quot;RootPath&amp;quot;, RootPathDispatcher.class,
&lt;br&gt;&amp;gt; &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this goes before asset to make sure that only allowed assets are
&lt;br&gt;&amp;gt; streamed to the client.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;AssetProtection&amp;quot;, assetProt, &amp;quot;before:Asset&amp;quot;);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // This goes first because an asset to be streamed may have an file
&lt;br&gt;&amp;gt; extension, such as
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;quot;.html&amp;quot;, that will confuse the later dispatchers.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; @@ -1591,6 +1598,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.addInstance(&amp;quot;PageRender&amp;quot;,
&lt;br&gt;&amp;gt; PageRenderDispatcher.class);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Contributes a default object renderer for type Object, plus
&lt;br&gt;&amp;gt; specialized renderers for {@link
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* org.apache.tapestry5.services.Request}, {@link
&lt;br&gt;&amp;gt; org.apache.tapestry5.ioc.Location}, {@link
&lt;br&gt;&amp;gt; @@ -2480,4 +2488,41 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * Contributes the default set of AssetPathAuthorizers into the
&lt;br&gt;&amp;gt; AssetProtectionDispatcher.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param whitelist authorization based on explicit whitelisting.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param regex authorization based on pattern matching.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; * @param conf
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeAssetProtectionDispatcher(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;WhitelistAuthorizer&amp;quot;) AssetPathAuthorizer
&lt;br&gt;&amp;gt; whitelist,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@InjectService(&amp;quot;RegexAuthorizer&amp;quot;) AssetPathAuthorizer regex,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OrderedConfiguration&amp;lt;AssetPathAuthorizer&amp;gt; conf)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//putting whitelist after everything ensures that, in fact,
&lt;br&gt;&amp;gt; nothing falls through.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//also ensures that whitelist gives other authorizers the chance
&lt;br&gt;&amp;gt; to act...
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;regex&amp;quot;,regex,&amp;quot;before:whitelist&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conf.add(&amp;quot;whitelist&amp;quot;, whitelist,&amp;quot;after:*&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt; regex,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.scriptaculous.path&amp;quot;) String scriptPath,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.blackbird.path&amp;quot;) String blackbirdPath,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Symbol(&amp;quot;tapestry.datepicker.path&amp;quot;) String datepickerPath)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow any js, jpg, jpeg, png, or css under
&lt;br&gt;&amp;gt; org/chenillekit/tapstry. The funky bit of ([^/.]+/)* is what allows
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//multiple paths, while not allowing any of those paths to
&lt;br&gt;&amp;gt; contains ./ or ../ thereby preventing paths like:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//org/chenillekit/tapestry/../../../foo.js
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pathPattern =
&lt;br&gt;&amp;gt; &amp;quot;([^/.]+/)*[^/.]+\\.((css)|(js)|(jpg)|(jpeg)|(png)|(gif))$&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/chenillekit/tapestry/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;^org/apache/tapestry5/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(blackbirdPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(datepickerPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(scriptPath + &amp;quot;/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//allow access to virtual assets. Critical for tapestry-combined
&lt;br&gt;&amp;gt; js files.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regex.add(&amp;quot;virtual/&amp;quot; + pathPattern);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modified:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java?rev=834151&amp;r1=834150&amp;r2=834151&amp;view=diff&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt; (original)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -257,4 +257,22 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configuration.add(&amp;quot;ReverseStringsWorker&amp;quot;, new
&lt;br&gt;&amp;gt; ReverseStringsWorker());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public static void contributeRegexAuthorizer(Configuration&amp;lt;String&amp;gt;
&lt;br&gt;&amp;gt; configuration) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//use this rather than a blanket regex (^.*.jpg$, etc.); want to
&lt;br&gt;&amp;gt; be sure that tests pass from the default
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//configuration setup, (eg: this way, I realized that the
&lt;br&gt;&amp;gt; &amp;quot;virtual&amp;quot; assets folder
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//needed to be opened up in the tapestry-provided contributions)
&lt;br&gt;&amp;gt; rather than from some blanket configuration in the appmodule
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//opening up all css, js, etc. files.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//would contribute to whitelist except that the resource path
&lt;br&gt;&amp;gt; between ctxt and the rest of the path can change.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/css/app\\.css$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/style\\.css$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bg\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/header\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightsmall\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/rightbig\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/bottom\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/layout/images/footer\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/tapestry_banner\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;configuration.add(&amp;quot;^ctx/[^/]+/images/asf_logo_wide\\.gif$&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AssetProtectionDispatcherTest.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,92 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import static org.easymock.EasyMock.createMock;
&lt;br&gt;&amp;gt; +import static org.easymock.EasyMock.expect;
&lt;br&gt;&amp;gt; +import static org.easymock.EasyMock.*;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.io.IOException;
&lt;br&gt;&amp;gt; +import java.util.ArrayList;
&lt;br&gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt; +import java.util.Collections;
&lt;br&gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.internal.services.RequestConstants;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.internal.services.AssetProtectionDispatcher;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.ClasspathAssetAliasManager;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.Request;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.Response;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt; +import org.slf4j.Logger;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public class AssetProtectionDispatcherTest extends Assert
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void ignores_nonassets() throws IOException
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//shouldn't need any configuration here...
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = Collections.emptyList();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt; AssetProtectionDispatcher(auths,null,logger);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(request.getPath()).andReturn(&amp;quot;start&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(request,response,logger);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(request,response,logger);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void checks_authorizers() throws IOException
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger logger = createMock(Logger.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;AssetPathAuthorizer&amp;gt; auths = new
&lt;br&gt;&amp;gt; ArrayList&amp;lt;AssetPathAuthorizer&amp;gt;();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetPathAuthorizer auth = createMock(AssetPathAuthorizer.class);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;expect(auth.order()).andReturn(Arrays.asList(AssetPathAuthorizer.Order.ALLOW,
&lt;br&gt;&amp;gt; AssetPathAuthorizer.Order.DENY)).times(2);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(false);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(auth.accessDenied(&amp;quot;/cayenne.xml&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;expect(auth.accessAllowed(&amp;quot;/org/apache/tapestry/default.css&amp;quot;)).andReturn(true);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auths.add(auth);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Denying access to /cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logger.debug(&amp;quot;Allowing access to
&lt;br&gt;&amp;gt; /org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Request request = createMock(Request.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Response response = createMock(Response.class);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp;expect(request.getPath()).andReturn(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;response.sendError(HttpServletResponse.SC_FORBIDDEN,
&lt;br&gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ClasspathAssetAliasManager manager =
&lt;br&gt;&amp;gt; createMock(ClasspathAssetAliasManager.class);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt; &amp;quot;/cayenne.xml&amp;quot;)).andReturn(&amp;quot;/cayenne.xml&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expect(manager.toResourcePath(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RequestConstants.ASSET_PATH_PREFIX +
&lt;br&gt;&amp;gt; &amp;quot;/org/apache/tapestry/default.css&amp;quot;))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.andReturn(&amp;quot;/org/apache/tapestry/default.css&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;replay(auth,request,response,manager,logger);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AssetProtectionDispatcher disp = new
&lt;br&gt;&amp;gt; AssetProtectionDispatcher(auths,manager,logger);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(disp.dispatch(request,response));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(disp.dispatch(request, response));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verify(auth,request,response,logger);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RegexAuthorizerTest.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,53 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt; +import java.util.List;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.internal.services.RegexAuthorizer;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public class RegexAuthorizerTest extends Assert
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void test_regexes()
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;String&amp;gt; patterns =
&lt;br&gt;&amp;gt; Arrays.asList(&amp;quot;^.*\\.png$&amp;quot;,&amp;quot;^.*\\.jpg&amp;quot;,&amp;quot;^.*\\.jpeg&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RegexAuthorizer auth = new RegexAuthorizer(patterns);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String pkg = &amp;quot;assets/com/saiwaisolutions/resources/&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String png = pkg + &amp;quot;foo.png&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpg = pkg + &amp;quot;foo.jpg&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String jpeg = pkg + &amp;quot;foo.jpeg&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String xml = pkg + &amp;quot;foo.xml&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,png,true);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpg,true);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,jpeg,true);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test(auth,xml,false);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;private static void test(RegexAuthorizer auth, String one,boolean
&lt;br&gt;&amp;gt; allowed)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.accessAllowed(one),allowed);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auth.accessAllowed(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one),
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowed);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(one));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;&lt;a href=&quot;http://localhost:8080&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://localhost:8080&lt;/a&gt;&amp;quot; + one));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Added:
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt; URL:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java?rev=834151&amp;view=auto&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ==============================================================================
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt; (added)
&lt;br&gt;&amp;gt; +++
&lt;br&gt;&amp;gt; tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/WhitelistAuthorizerTest.java
&lt;br&gt;&amp;gt; Mon Nov &amp;nbsp;9 17:23:10 2009
&lt;br&gt;&amp;gt; @@ -0,0 +1,45 @@
&lt;br&gt;&amp;gt; +// Copyright 2009 The Apache Software Foundation
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;gt; +// you may not use this file except in compliance with the License.
&lt;br&gt;&amp;gt; +// You may obtain a copy of the License at
&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;gt; +//
&lt;br&gt;&amp;gt; +// Unless required by applicable law or agreed to in writing, software
&lt;br&gt;&amp;gt; +// distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;&amp;gt; +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
&lt;br&gt;&amp;gt; implied.
&lt;br&gt;&amp;gt; +// See the License for the specific language governing permissions and
&lt;br&gt;&amp;gt; +// limitations under the License.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*
&lt;br&gt;&amp;gt; + * Created on Jul 28, 2007
&lt;br&gt;&amp;gt; + *
&lt;br&gt;&amp;gt; + *
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +package org.apache.tapestry5.internal.services;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import java.util.Arrays;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +import org.testng.Assert;
&lt;br&gt;&amp;gt; +import org.testng.annotations.Test;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.internal.services.WhitelistAuthorizer;
&lt;br&gt;&amp;gt; +import org.apache.tapestry5.services.AssetPathAuthorizer;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +public class WhitelistAuthorizerTest extends Assert {
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@Test
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;public void run()
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WhitelistAuthorizer auth = new
&lt;br&gt;&amp;gt; WhitelistAuthorizer(Arrays.asList(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(0),
&lt;br&gt;&amp;gt; AssetPathAuthorizer.Order.ALLOW);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().get(1), AssetPathAuthorizer.Order.DENY);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(auth.order().size(),2);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessAllowed(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessDenied(&amp;quot;foo&amp;quot;));
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(auth.accessAllowed(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(auth.accessDenied(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&lt;br&gt;Igor Drobiazko
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-svn-commit%3A-r834151---in--tapestry-tapestry5-trunk%3A--src-site-apt-guide--tapestry-core-src-main-java-org-apache-tapestry5-internal-services---tapestry-core-src-main-java-org-apache-tapestry5-services---tapestry-core-src-test-java-org-apache-tapestry-tp26483150s302p26483150.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26483080</id>
	<title>svn commit: r883436 - in /tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main: java/org/apache/tapestry5/corelib/components/ resources/org/apache/tapestry5/ resources/org/apache/tapestry5/corelib/components/</title>
	<published>2009-11-23T10:02:51Z</published>
	<updated>2009-11-23T10:02:51Z</updated>
	<author>
		<name>drobiazko</name>
	</author>
	<content type="html">Author: drobiazko
&lt;br&gt;Date: Mon Nov 23 18:02:47 2009
&lt;br&gt;New Revision: 883436
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=883436&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=883436&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;TAP5-749: The FormFragment and LinkSubmit components create a hidden field whose id ends with &amp;quot;:hidden&amp;quot;
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormFragment.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/linksubmit.js
&lt;br&gt;&amp;nbsp; &amp;nbsp; tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
&lt;br&gt;&lt;br&gt;Modified: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormFragment.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormFragment.java?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormFragment.java?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormFragment.java (original)
&lt;br&gt;+++ tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormFragment.java Mon Nov 23 18:02:47 2009
&lt;br&gt;@@ -186,7 +186,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;name&amp;quot;, Form.FORM_DATA,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;id&amp;quot;, clientId + &amp;quot;:hidden&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;id&amp;quot;, clientId + &amp;quot;-hidden&amp;quot;,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;value&amp;quot;, componentActions.getClientData()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&lt;br&gt;Modified: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java (original)
&lt;br&gt;+++ tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java Mon Nov 23 18:02:47 2009
&lt;br&gt;@@ -87,7 +87,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.clientId = clientId;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String hiddenFieldName = this.clientId + &amp;quot;:hidden&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String hiddenFieldName = this.clientId + &amp;quot;-hidden&amp;quot;;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (request.getParameter(hiddenFieldName) != null)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&lt;br&gt;Modified: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/linksubmit.js
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/linksubmit.js?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/linksubmit.js?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/linksubmit.js (original)
&lt;br&gt;+++ tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/linksubmit.js Mon Nov 23 18:02:47 2009
&lt;br&gt;@@ -1,4 +1,4 @@
&lt;br&gt;-// &amp;nbsp;Copyright 2008 The Apache Software Foundation
&lt;br&gt;+// &amp;nbsp;Copyright 2008,2009 The Apache Software Foundation
&lt;br&gt;&amp;nbsp;//
&lt;br&gt;&amp;nbsp;// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&lt;br&gt;&amp;nbsp;// you may not use this file except in compliance with the License.
&lt;br&gt;@@ -25,13 +25,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;createHidden : function()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var hidden = new Element(&amp;quot;input&amp;quot;, { &amp;quot;type&amp;quot;:&amp;quot;hidden&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	&amp;quot;id&amp;quot;: this.element.id + &amp;quot;:hidden&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;name&amp;quot;: this.element.id + &amp;quot;:hidden&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	&amp;quot;id&amp;quot;: this.element.id + &amp;quot;-hidden&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;name&amp;quot;: this.element.id + &amp;quot;-hidden&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;value&amp;quot;: this.element.id});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.form.select(&amp;quot;input#&amp;quot; + this.element.id + &amp;quot;:hidden&amp;quot;).length == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.form.select(&amp;quot;input#&amp;quot; + this.element.id + &amp;quot;-hidden&amp;quot;).length == 0)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.element.insert({after:hidden});
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;onClick : function(event)
&lt;br&gt;&lt;br&gt;Modified: tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js?rev=883436&amp;r1=883435&amp;r2=883436&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js (original)
&lt;br&gt;+++ tapestry/tapestry5/branches/5.1.0.x-dev/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js Mon Nov 23 18:02:47 2009
&lt;br&gt;@@ -1490,7 +1490,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$T(this.element).formFragment = this;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.hidden = $(spec.element + &amp;quot;:hidden&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.hidden = $(spec.element + &amp;quot;-hidden&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.showFunc = Tapestry.ElementEffect[spec.show] || Tapestry.ElementEffect.slidedown;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.hideFunc = Tapestry.ElementEffect[spec.hide] || Tapestry.ElementEffect.slideup;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---Dev-f339.html&quot; embed=&quot;fixTarget[339]&quot; target=&quot;_top&quot; &gt;Tapestry - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r883436---in--tapestry-tapestry5-branches-5.1.0.x-dev-tapestry-core-src-main%3A-java-org-apache-tapestry5-corelib-components--resources-org-apache-tapestry5--resources-org-apache-tapestry5-corelib-components--tp26483080s302p26483080.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26482486</id>
	<title>Re: [T5]Has AjaxFormLoop-addrow-addrowlink-parameter context value?</title>
	<published>2009-11-23T09:29:03Z</published>
	<updated>2009-11-23T09:29:03Z</updated>
	<author>
		<name>Dariusz</name>
	</author>
	<content type="html">Is it possible?
&lt;br&gt;Maybe there is a workaround for this.
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;moonlee wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;I use AjaxFormLoop-addrow-addrowlink-parameter to dynamic add a row , I want to fill the row with some defult value which base on the link param user click.
&lt;br&gt;&lt;br&gt;for example:
&lt;br&gt;&lt;br&gt;tml:
&lt;br&gt;&lt;br&gt;&amp;lt;t:parameter name=&amp;quot;addRow&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;td colspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: right&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:addrowlink &amp;nbsp;&lt;b&gt;value=&amp;quot;1&amp;quot;&lt;/b&gt;&amp;gt;Add a row&amp;lt;/t:addrowlink&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/td&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;td colspan=&amp;quot;5&amp;quot; style=&amp;quot;text-align: right&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;t:addrowlink &lt;b&gt;value=&amp;quot;2&amp;quot;&lt;/b&gt;&amp;gt;Add a row&amp;lt;/t:addrowlink&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/td&amp;gt;
&lt;br&gt;&amp;lt;/t:parameter&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;java:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PersonHolder onAddRow(&lt;b&gt;Object value&lt;/b&gt;) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Create a skeleton Person and add it to the displayed list with a unique key
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Person newPerson = PersonService.findPersonById(value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PersonHolder newPersonHolder = new PersonHolder(newPerson, true, 0 - System.nanoTime());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _personHolders.add(newPersonHolder);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return newPersonHolder;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Tapestry---User-f340.html&quot; embed=&quot;fixTarget[340]&quot; target=&quot;_top&quot; &gt;Tapestry - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-T5-Has-AjaxFormLoop-addrow-addrowlink-parameter-context-value--tp24581110s302p26482486.html" />
</entry>

</feed>
