<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-12277</id>
	<title>Nabble - Roller - Dev</title>
	<updated>2009-11-26T09:23:14Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Roller---Dev-f12277.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Roller---Dev-f12277.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26532601</id>
	<title>User roles assignment</title>
	<published>2009-11-26T09:23:14Z</published>
	<updated>2009-11-26T09:23:14Z</updated>
	<author>
		<name>Christopher Blasnik</name>
	</author>
	<content type="html">Hi Dave,
&lt;br&gt;&lt;br&gt;I just created a JIRA issue: ROL-1852 
&lt;br&gt;(&lt;a href=&quot;https://issues.apache.org/jira/browse/ROL-1852&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/ROL-1852&lt;/a&gt;) for the non-functioning 
&lt;br&gt;user role managment in the 5.0 trunk of Roller (I frankly don't know if 
&lt;br&gt;the bug was yet reported on this list).
&lt;br&gt;&lt;br&gt;Several errors (userName instead of userId, openJPA persistence) lead to 
&lt;br&gt;the malfunction.
&lt;br&gt;I attached a patch and kindly ask you to check if you think the fixes 
&lt;br&gt;(especially the openJPA relevant parts) are ok.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;- Chris
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Christopher Blasnik
&lt;br&gt;UCS - unique computing solutions gmbh
&lt;br&gt;Löwengasse 2/8
&lt;br&gt;A-1030 Vienna, Austria
&lt;br&gt;&lt;a href=&quot;http://www.ucs.at/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ucs.at/&lt;/a&gt;&lt;br&gt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532601&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;c.blasnik@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/User-roles-assignment-tp26532601s12275p26532601.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26513071</id>
	<title>Re: Memcached source</title>
	<published>2009-11-25T05:57:12Z</published>
	<updated>2009-11-25T05:57:12Z</updated>
	<author>
		<name>Christopher Blasnik</name>
	</author>
	<content type="html">Dave wrote:
&lt;br&gt;&amp;gt; The source is in CVS as part of the Roller Support project:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://roller.dev.java.net/source/browse/roller/roller_support/tools/memcached&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://roller.dev.java.net/source/browse/roller/roller_support/tools/memcached&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Located at the unbearably slow Java.net hosting service because it
&lt;br&gt;&amp;gt; includes some LGPL dependency.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - Dave
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Cheers for that!
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Wed, Nov 25, 2009 at 8:10 AM, Christopher Blasnik
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26513071&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christopher.blasnik@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Dave wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Wed, Nov 25, 2009 at 4:07 AM, Christopher Blasnik
&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=26513071&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christopher.blasnik@...&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; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Is it possible to download the source code for the roller memcached
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; plugin?
&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; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; There are some download links in the blog post I wrote on this topic:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Perhaps they are stale now ;-)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Did you try those?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; - Dave
&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; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; thanks, tried everything there - only gets you the compiled plugin, but no
&lt;br&gt;&amp;gt;&amp;gt; source
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; perhaps you've got the code somewhere on your harddisk waiting to be sent to
&lt;br&gt;&amp;gt;&amp;gt; me or to be published? ;-P
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; - chris
&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; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Christopher Blasnik
&lt;br&gt;UCS - unique computing solutions gmbh
&lt;br&gt;Löwengasse 2/8
&lt;br&gt;A-1030 Vienna, Austria
&lt;br&gt;&lt;a href=&quot;http://www.ucs.at/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ucs.at/&lt;/a&gt;&lt;br&gt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26513071&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;c.blasnik@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Memcached-source-tp26509460s12275p26513071.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26512642</id>
	<title>Re: Memcached source</title>
	<published>2009-11-25T05:29:31Z</published>
	<updated>2009-11-25T05:29:31Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">The source is in CVS as part of the Roller Support project:
&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://roller.dev.java.net/source/browse/roller/roller_support/tools/memcached&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://roller.dev.java.net/source/browse/roller/roller_support/tools/memcached&lt;/a&gt;&lt;br&gt;&lt;br&gt;Located at the unbearably slow Java.net hosting service because it
&lt;br&gt;includes some LGPL dependency.
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On Wed, Nov 25, 2009 at 8:10 AM, Christopher Blasnik
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26512642&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christopher.blasnik@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dave wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Wed, Nov 25, 2009 at 4:07 AM, Christopher Blasnik
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26512642&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christopher.blasnik@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Is it possible to download the source code for the roller memcached
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; plugin?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; There are some download links in the blog post I wrote on this topic:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Perhaps they are stale now ;-)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Did you try those?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; - Dave
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; thanks, tried everything there - only gets you the compiled plugin, but no
&lt;br&gt;&amp;gt; source
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; perhaps you've got the code somewhere on your harddisk waiting to be sent to
&lt;br&gt;&amp;gt; me or to be published? ;-P
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - chris
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Memcached-source-tp26509460s12275p26512642.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26512382</id>
	<title>Re: Memcached source</title>
	<published>2009-11-25T05:10:05Z</published>
	<updated>2009-11-25T05:10:05Z</updated>
	<author>
		<name>Christopher Blasnik</name>
	</author>
	<content type="html">Dave wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, Nov 25, 2009 at 4:07 AM, Christopher Blasnik
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26512382&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christopher.blasnik@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Is it possible to download the source code for the roller memcached plugin?
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There are some download links in the blog post I wrote on this topic:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Perhaps they are stale now ;-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Did you try those?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - Dave
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;thanks, tried everything there - only gets you the compiled plugin, but 
&lt;br&gt;no source
&lt;br&gt;&lt;br&gt;perhaps you've got the code somewhere on your harddisk waiting to be 
&lt;br&gt;sent to me or to be published? ;-P
&lt;br&gt;&lt;br&gt;- chris
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Memcached-source-tp26509460s12275p26512382.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26512095</id>
	<title>Re: Memcached source</title>
	<published>2009-11-25T04:50:21Z</published>
	<updated>2009-11-25T04:50:21Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">On Wed, Nov 25, 2009 at 4:07 AM, Christopher Blasnik
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26512095&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;christopher.blasnik@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; Is it possible to download the source code for the roller memcached plugin?
&lt;br&gt;&lt;br&gt;There are some download links in the blog post I wrote on this topic:
&lt;br&gt;&lt;a href=&quot;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://rollerweblogger.org/roller/entry/howto_memcached_with_roller&lt;/a&gt;&lt;br&gt;&lt;br&gt;Perhaps they are stale now ;-)
&lt;br&gt;&lt;br&gt;Did you try those?
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Memcached-source-tp26509460s12275p26512095.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26509460</id>
	<title>Memcached source</title>
	<published>2009-11-25T01:07:56Z</published>
	<updated>2009-11-25T01:07:56Z</updated>
	<author>
		<name>Christopher Blasnik</name>
	</author>
	<content type="html">Hi Dave,
&lt;br&gt;&lt;br&gt;Is it possible to download the source code for the roller memcached plugin?
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;- Chris
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Christopher Blasnik
&lt;br&gt;UCS - unique computing solutions gmbh
&lt;br&gt;Löwengasse 2/8
&lt;br&gt;A-1030 Vienna, Austria
&lt;br&gt;&lt;a href=&quot;http://www.ucs.at/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ucs.at/&lt;/a&gt;&lt;br&gt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26509460&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;c.blasnik@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Memcached-source-tp26509460s12275p26509460.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26479428</id>
	<title>Re: trunk error - missing &quot;&gt;&quot;</title>
	<published>2009-11-23T06:50:31Z</published>
	<updated>2009-11-23T06:50:31Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">Done! Thanks. - Dave
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Sun, Nov 22, 2009 at 8:53 PM, Laszlo Csaba Lorincz
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26479428&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;laszlo.cs.lorincz@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have found an error in the trunk:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Path roller/trunk/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileView.jsp
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; line 464:                    &amp;lt;/li
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Could someone with commit rights fix it?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thank You!
&lt;br&gt;&amp;gt; Laszlo
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/trunk-error---missing-%22%3E%22-tp26472386s12275p26479428.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26472386</id>
	<title>trunk error - missing &quot;&gt;&quot;</title>
	<published>2009-11-22T17:53:25Z</published>
	<updated>2009-11-22T17:53:25Z</updated>
	<author>
		<name>Laszlo Csaba Lorincz</name>
	</author>
	<content type="html">Hi!
&lt;br&gt;&lt;br&gt;I have found an error in the trunk:
&lt;br&gt;&lt;br&gt;Path roller/trunk/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileView.jsp
&lt;br&gt;&lt;br&gt;line 464: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/li
&lt;br&gt;&lt;br&gt;Could someone with commit rights fix it?
&lt;br&gt;&lt;br&gt;Thank You!
&lt;br&gt;Laszlo
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/trunk-error---missing-%22%3E%22-tp26472386s12275p26472386.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26450166</id>
	<title>Re: migration from wordpress mu to Roller.</title>
	<published>2009-11-20T10:24:35Z</published>
	<updated>2009-11-20T10:24:35Z</updated>
	<author>
		<name>Angel Vera-2</name>
	</author>
	<content type="html">(resending.. not sure if it got send, since I just my gmail account to
&lt;br&gt;reply, if you received this message twice, my apologies)
&lt;br&gt;Hi Rajiv,
&lt;br&gt;&lt;br&gt;I created a migration framework that you can use, you will need to do some
&lt;br&gt;java coding to create the logic to to connect your wordpress database and
&lt;br&gt;then to do the mapping of the fields. If you have any question you can look
&lt;br&gt;at the sample that I did for migration from Blosom to Roller. I hope that
&lt;br&gt;helps.
&lt;br&gt;&lt;br&gt;Here is a thread discussing, what you would have to do, but if you need more
&lt;br&gt;information let me know:
&lt;br&gt;&lt;a href=&quot;http://www.mail-archive.com/dev@roller.apache.org/msg01053.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mail-archive.com/dev@.../msg01053.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;To download the migration tool, I would recomend using eclipse and
&lt;br&gt;extracting from CVS this project:
&lt;br&gt;(you can find the instructions on how to get the source out from that same
&lt;br&gt;thread above)
&lt;br&gt;&lt;a href=&quot;https://roller.dev.java.net/source/browse/roller/roller_support/tools/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://roller.dev.java.net/source/browse/roller/roller_support/tools/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On Fri, Nov 20, 2009 at 8:34 AM, Angel Vera &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26450166&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gunfus@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi Rajiv,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I created a migration framework that you can use, you will need to do some
&lt;br&gt;&amp;gt; java coding to create the logic to to connect your wordpress database and
&lt;br&gt;&amp;gt; then to do the mapping of the fields. If you have any question you can look
&lt;br&gt;&amp;gt; at the sample that I did for migration from Blosom to Roller. I hope that
&lt;br&gt;&amp;gt; helps.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Here is a thread discussing, what you would have to do, but if you need
&lt;br&gt;&amp;gt; more information let me know:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.mail-archive.com/dev@roller.apache.org/msg01053.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mail-archive.com/dev@.../msg01053.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; To download the migration tool, I would recomend using eclipse and
&lt;br&gt;&amp;gt; extracting from CVS this project:
&lt;br&gt;&amp;gt; (you can find the instructions on how to get the source out from that same
&lt;br&gt;&amp;gt; thread above)
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://roller.dev.java.net/source/browse/roller/roller_support/tools/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://roller.dev.java.net/source/browse/roller/roller_support/tools/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Angel
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Thu, Nov 19, 2009 at 1:30 PM, Rajiv Mordani &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26450166&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rajiv.mordani@...&lt;/a&gt;&amp;gt;wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; I thought I should check with this alias before I embark on doing this
&lt;br&gt;&amp;gt;&amp;gt; myself - has anyone done a migration of blogs from wordpress mu (multi user)
&lt;br&gt;&amp;gt;&amp;gt; to Roller? Is there any script available to do that?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Thanks
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; - Rajiv
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/migration-from-wordpress-mu-to-Roller.-tp26431548s12275p26450166.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26443697</id>
	<title>Re: migration from wordpress mu to Roller.</title>
	<published>2009-11-20T05:34:36Z</published>
	<updated>2009-11-20T05:34:36Z</updated>
	<author>
		<name>Angel Vera-3</name>
	</author>
	<content type="html">Hi Rajiv,
&lt;br&gt;&lt;br&gt;I created a migration framework that you can use, you will need to do some
&lt;br&gt;java coding to create the logic to to connect your wordpress database and
&lt;br&gt;then to do the mapping of the fields. If you have any question you can look
&lt;br&gt;at the sample that I did for migration from Blosom to Roller. I hope that
&lt;br&gt;helps.
&lt;br&gt;&lt;br&gt;Here is a thread discussing, what you would have to do, but if you need more
&lt;br&gt;information let me know:
&lt;br&gt;&lt;a href=&quot;http://www.mail-archive.com/dev@roller.apache.org/msg01053.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mail-archive.com/dev@.../msg01053.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;To download the migration tool, I would recomend using eclipse and
&lt;br&gt;extracting from CVS this project:
&lt;br&gt;(you can find the instructions on how to get the source out from that same
&lt;br&gt;thread above)
&lt;br&gt;&lt;a href=&quot;https://roller.dev.java.net/source/browse/roller/roller_support/tools/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://roller.dev.java.net/source/browse/roller/roller_support/tools/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Angel
&lt;br&gt;&lt;br&gt;On Thu, Nov 19, 2009 at 1:30 PM, Rajiv Mordani &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26443697&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rajiv.mordani@...&lt;/a&gt;&amp;gt;wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; &amp;nbsp; I thought I should check with this alias before I embark on doing this
&lt;br&gt;&amp;gt; myself - has anyone done a migration of blogs from wordpress mu (multi user)
&lt;br&gt;&amp;gt; to Roller? Is there any script available to do that?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - Rajiv
&lt;br&gt;&amp;gt;
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/migration-from-wordpress-mu-to-Roller.-tp26431548s12275p26443697.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26431548</id>
	<title>migration from wordpress mu to Roller.</title>
	<published>2009-11-19T10:30:08Z</published>
	<updated>2009-11-19T10:30:08Z</updated>
	<author>
		<name>Rajiv Mordani</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&amp;nbsp; &amp;nbsp; I thought I should check with this alias before I embark on doing 
&lt;br&gt;this myself - has anyone done a migration of blogs from wordpress mu 
&lt;br&gt;(multi user) to Roller? Is there any script available to do that?
&lt;br&gt;&lt;br&gt;Thanks
&lt;br&gt;&lt;br&gt;- Rajiv
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/migration-from-wordpress-mu-to-Roller.-tp26431548s12275p26431548.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26431492</id>
	<title>Re: [ANN] AppFuse 2.1.0 Milestone 1 Released</title>
	<published>2009-11-19T10:20:47Z</published>
	<updated>2009-11-19T10:20:47Z</updated>
	<author>
		<name>mraible</name>
	</author>
	<content type="html">Doh! Didn't mean to send this to roller-dev. Sorry about that. (blush)
&lt;br&gt;&lt;br&gt;Let me know if you have any Maven questions, I'd be happy to help.
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;&lt;br&gt;On Nov 19, 2009, at 1:04 PM, Dave &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26431492&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Congrats on the new milestone.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Thu, Nov 19, 2009 at 9:57 AM, Matt Raible &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26431492&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; The AppFuse Team is pleased to announce the first milestone release &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; of
&lt;br&gt;&amp;gt;&amp;gt; ...
&lt;br&gt;&amp;gt;&amp;gt; In addition, AppFuse Light has been converted to
&lt;br&gt;&amp;gt;&amp;gt; Maven&amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&lt;/a&gt;&amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;and
&lt;br&gt;&amp;gt;&amp;gt; has archetypes available too. AppFuse provides archetypes for JSF,
&lt;br&gt;&amp;gt;&amp;gt; Spring MVC, Struts 2 and Tapestry 5. The *light* archetypes are &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; available
&lt;br&gt;&amp;gt;&amp;gt; for these frameworks, as well as for Spring MVC + FreeMarker, &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; Stripes and
&lt;br&gt;&amp;gt;&amp;gt; Wicket.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BTW, I've been working on converting Roller over to Maven, complete
&lt;br&gt;&amp;gt; with a directory re-organization to match the standard Maven layout. I
&lt;br&gt;&amp;gt; hope to have a patch to share in the next week or so.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - Dave
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-ANN--AppFuse-2.1.0-Milestone-1-Released-tp26427726s12275p26431492.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26431112</id>
	<title>Re: [ANN] AppFuse 2.1.0 Milestone 1 Released</title>
	<published>2009-11-19T10:04:47Z</published>
	<updated>2009-11-19T10:04:47Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">Congrats on the new milestone.
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Thu, Nov 19, 2009 at 9:57 AM, Matt Raible &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26431112&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; The AppFuse Team is pleased to announce the first milestone release of
&lt;br&gt;&amp;gt; ...
&lt;br&gt;&amp;gt; In addition, AppFuse Light has been converted to
&lt;br&gt;&amp;gt; Maven&amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&lt;/a&gt;&amp;gt;and
&lt;br&gt;&amp;gt; has archetypes available too. AppFuse provides archetypes for JSF,
&lt;br&gt;&amp;gt; Spring MVC, Struts 2 and Tapestry 5. The *light* archetypes are available
&lt;br&gt;&amp;gt; for these frameworks, as well as for Spring MVC + FreeMarker, Stripes and
&lt;br&gt;&amp;gt; Wicket.
&lt;br&gt;&lt;br&gt;&lt;br&gt;BTW, I've been working on converting Roller over to Maven, complete
&lt;br&gt;with a directory re-organization to match the standard Maven layout. I
&lt;br&gt;hope to have a patch to share in the next week or so.
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-ANN--AppFuse-2.1.0-Milestone-1-Released-tp26427726s12275p26431112.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26427726</id>
	<title>[ANN] AppFuse 2.1.0 Milestone 1 Released</title>
	<published>2009-11-19T06:57:39Z</published>
	<updated>2009-11-19T06:57:39Z</updated>
	<author>
		<name>mraible</name>
	</author>
	<content type="html">The AppFuse Team is pleased to announce the first milestone release of
&lt;br&gt;AppFuse 2.1. This release includes upgrades to all dependencies to bring
&lt;br&gt;them up-to-date with their latest releases. Most notable are
&lt;br&gt;Hibernate&amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/upgrading_hibernate_to_3_4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/upgrading_hibernate_to_3_4&lt;/a&gt;&amp;gt;,
&lt;br&gt;Spring &amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/moving_from_spring_s_xml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/moving_from_spring_s_xml&lt;/a&gt;&amp;gt; and
&lt;br&gt;Tapestry 5.
&lt;br&gt;&lt;br&gt;Archetypes &amp;lt;&lt;a href=&quot;http://static.appfuse.org/archetypes.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://static.appfuse.org/archetypes.html&lt;/a&gt;&amp;gt; now include all the
&lt;br&gt;source for the web modules so using jetty:run and your IDE will work much
&lt;br&gt;smoother now. The backend is still embedded in JARs, enabling you to choose
&lt;br&gt;with persistence framework (Hibernate, iBATIS or JPA) you'd like to use. If
&lt;br&gt;you want to modify the source for that, add the core classes to your
&lt;br&gt;project&amp;lt;&lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+Core+Classes&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://appfuse.org/display/APF/AppFuse+Core+Classes&lt;/a&gt;&amp;gt;or run
&lt;br&gt;&amp;quot;appfuse:full-source&amp;quot;.
&lt;br&gt;&lt;br&gt;In addition, AppFuse Light has been converted to
&lt;br&gt;Maven&amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&lt;/a&gt;&amp;gt;and
&lt;br&gt;has archetypes available too. AppFuse provides archetypes for JSF,
&lt;br&gt;Spring MVC, Struts 2 and Tapestry 5. The *light* archetypes are available
&lt;br&gt;for these frameworks, as well as for Spring MVC + FreeMarker, Stripes and
&lt;br&gt;Wicket.
&lt;br&gt;&lt;br&gt;Other notable improvements:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;- Added Compass support &amp;lt;&lt;a href=&quot;http://issues.appfuse.org/browse/APF-267&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.appfuse.org/browse/APF-267&lt;/a&gt;&amp;gt; thanks
&lt;br&gt;&amp;nbsp; &amp;nbsp;to a patch from Shay Banon &amp;lt;&lt;a href=&quot;http://www.kimchy.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.kimchy.org/&lt;/a&gt;&amp;gt;.
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Upgraded from XFire to CXF
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://issues.appfuse.org/browse/APF-1125&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.appfuse.org/browse/APF-1125&lt;/a&gt;&amp;gt;for Web Services.
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Moved Maven repository to Sonatype's OSS Repository
&lt;br&gt;Hosting&amp;lt;&lt;a href=&quot;https://docs.sonatype.com/display/NX/OSS+Repository+Hosting&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://docs.sonatype.com/display/NX/OSS+Repository+Hosting&lt;/a&gt;&amp;gt;for
&lt;br&gt;snapshots and releasing to Maven Central. There are no longer any
&lt;br&gt;&amp;nbsp; &amp;nbsp;AppFuse-specific artifacts, all are available in central. Thanks to
&lt;br&gt;&amp;nbsp; &amp;nbsp;Sonatype &amp;lt;&lt;a href=&quot;http://sonatype.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sonatype.com/&lt;/a&gt;&amp;gt; for this great service and its excellent
&lt;br&gt;&amp;nbsp; &amp;nbsp;repository manager&amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/nexus_is_a_kick_ass&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/nexus_is_a_kick_ass&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;.
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Upgraded to Canoo WebTest 3.0. *Now if we could just get its Maven
&lt;br&gt;&amp;nbsp; &amp;nbsp;Plugin&amp;lt;&lt;a href=&quot;http://people.apache.org/%7Esgoeschl/download/maven-plugins/webtest-maven-plugin/site/index.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://people.apache.org/%7Esgoeschl/download/maven-plugins/webtest-maven-plugin/site/index.html&lt;/a&gt;&amp;gt;moved
&lt;br&gt;to Codehaus.
&lt;br&gt;&amp;nbsp; &amp;nbsp;*
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Added Ajaxified Body
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/ajaxified_body&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/ajaxified_body&lt;/a&gt;&amp;gt;to AppFuse Light
&lt;br&gt;archetypes.
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Infrastructure upgrades, including JIRA 4 &amp;lt;&lt;a href=&quot;http://issues.appfuse.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.appfuse.org/&lt;/a&gt;&amp;gt;,
&lt;br&gt;&amp;nbsp; &amp;nbsp;Confluence 3 &amp;lt;&lt;a href=&quot;http://appfuse.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://appfuse.org/&lt;/a&gt;&amp;gt;, FishEye 2&amp;lt;&lt;a href=&quot;http://source.appfuse.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://source.appfuse.org/&lt;/a&gt;&amp;gt;,
&lt;br&gt;&amp;nbsp; &amp;nbsp;Bamboo 2 &amp;lt;&lt;a href=&quot;http://builds.appfuse.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://builds.appfuse.org/&lt;/a&gt;&amp;gt; and Crowd
&lt;br&gt;1.6&amp;lt;&lt;a href=&quot;http://login.appfuse.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://login.appfuse.org/&lt;/a&gt;&amp;gt;.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Many thanks to Atlassian &amp;lt;&lt;a href=&quot;http://www.atlassian.com/c/NPOS/10160&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/c/NPOS/10160&lt;/a&gt;&amp;gt; and
&lt;br&gt;&amp;nbsp; &amp;nbsp;Contegix &amp;lt;&lt;a href=&quot;http://contegix.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://contegix.com/&lt;/a&gt;&amp;gt; for their excellent products and
&lt;br&gt;&amp;nbsp; &amp;nbsp;services.
&lt;br&gt;&amp;nbsp; &amp;nbsp;- For more details on specific changes see the release
&lt;br&gt;notes&amp;lt;&lt;a href=&quot;http://appfuse.org/display/APF/Release+Notes+2.1.0+M1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://appfuse.org/display/APF/Release+Notes+2.1.0+M1&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;.
&lt;br&gt;&lt;br&gt;Please note that this release does not contain updates to the documentation.
&lt;br&gt;Code generation will work, but it's likely that some content in the
&lt;br&gt;tutorials &amp;lt;&lt;a href=&quot;http://appfuse.org/display/APF/Tutorials&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://appfuse.org/display/APF/Tutorials&lt;/a&gt;&amp;gt; won't match. For
&lt;br&gt;example, you can use annotations (vs. XML) for dependency injection and
&lt;br&gt;Tapestry is a whole new framework. I'll be working on documentation over the
&lt;br&gt;next several weeks in preparation for Milestone 2.
&lt;br&gt;&lt;br&gt;AppFuse is available as several Maven archetypes. For information on
&lt;br&gt;creating a new project, please see the QuickStart
&lt;br&gt;Guide&amp;lt;&lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+QuickStart&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://appfuse.org/display/APF/AppFuse+QuickStart&lt;/a&gt;&amp;gt;.
&lt;br&gt;&lt;br&gt;&lt;br&gt;The 2.x series of AppFuse has a minimum requirement of the following
&lt;br&gt;specification versions:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;- Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Java 5+
&lt;br&gt;&lt;br&gt;If you find bugs, please create an issue in
&lt;br&gt;JIRA&amp;lt;&lt;a href=&quot;http://issues.appfuse.org/secure/CreateIssue%21default.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.appfuse.org/secure/CreateIssue%21default.jspa&lt;/a&gt;&amp;gt;
&lt;br&gt;.
&lt;br&gt;&lt;br&gt;Thanks to everyone for their help contributing code, writing documentation,
&lt;br&gt;posting to the mailing lists, and logging issues.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;&lt;br&gt;P.S. Also posted to AppFuse
&lt;br&gt;News&amp;lt;&lt;a href=&quot;http://appfuse.org/display/APF/2009/11/19/AppFuse+2.1.0+Milestone+1+Released&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://appfuse.org/display/APF/2009/11/19/AppFuse+2.1.0+Milestone+1+Released&lt;/a&gt;&amp;gt;and
&lt;br&gt;my
&lt;br&gt;blog &amp;lt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_2_1_milestone_1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://raibledesigns.com/rd/entry/appfuse_2_1_milestone_1&lt;/a&gt;&amp;gt;.
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-ANN--AppFuse-2.1.0-Milestone-1-Released-tp26427726s12275p26427726.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26427058</id>
	<title>AW: theme reloading</title>
	<published>2009-11-19T06:15:12Z</published>
	<updated>2009-11-19T06:15:12Z</updated>
	<author>
		<name>Matthias Schmidt-14</name>
	</author>
	<content type="html">Thanks, Greg!! 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-----Ursprüngliche Nachricht-----
&lt;br&gt;Von: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Greg.Huber@...&lt;/a&gt; [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Greg.Huber@...&lt;/a&gt;] 
&lt;br&gt;Gesendet: Donnerstag, 19. November 2009 14:52
&lt;br&gt;An: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Betreff: Re: theme reloading
&lt;br&gt;&lt;br&gt;Hello,
&lt;br&gt;&lt;br&gt;I have created ROL-1847 with a patch for the trunk.
&lt;br&gt;&lt;br&gt;I also do not have the trunk setup as a project so i have copied the mods and therefore unable to test it, but the source project &amp;nbsp;works OK.
&lt;br&gt;&lt;br&gt;Cheers Greg
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Matt Raible &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt;
&lt;br&gt;19/11/2009 12:18
&lt;br&gt;Please respond to
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;To
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;cc
&lt;br&gt;&lt;br&gt;Subject
&lt;br&gt;Re: theme reloading
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Any chance you could provide this as a patch? I believe this would be
&lt;br&gt;a nice feature to have in Roller's core.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;&lt;br&gt;On Thu, Nov 19, 2009 at 6:43 AM, &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Greg.Huber@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Remembered a while back someone asked if it was possible to reload a 
&lt;br&gt;theme
&lt;br&gt;&amp;gt; rather than restarting the container for development purposes.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Rather than upgrading my laptop I decided to see if it was possible.
&lt;br&gt;&amp;gt; Roller needs a few mods, but seems to work, also does not seem to be 
&lt;br&gt;much
&lt;br&gt;&amp;gt; of an overhead either.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Add a method to theme manager
&lt;br&gt;&amp;gt;
&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; * This is a development only method which reloads theme data 
&lt;br&gt;from
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; themes
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * stored on the filesystem in the webapp /themes/ directory.
&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; * @param reloadTheme
&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;the reload theme
&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 true, if theme was reloaded from disk
&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;public boolean reLoadThemeFromDisk(String reloadTheme);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; also impl:
&lt;br&gt;&amp;gt;
&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; * @see ThemeManager#reLoadThemeFromDisk(String)
&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;public boolean reLoadThemeFromDisk(String reloadTheme) {
&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;boolean reloaded = false;
&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;try {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Theme theme = new 
&lt;/div&gt;SharedThemeFromDir(this.themeDir
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; + File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ reloadTheme);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (theme != null) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Theme loadedTheme = (Theme)
&lt;br&gt;&amp;gt; themes.get(theme.getId());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (loadedTheme != null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; 
&lt;/div&gt;theme.getLastModified()
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp;.after(loadedTheme.getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;themes.remove(theme.getId());
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;themes.put(theme.getId(), theme);
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reloaded = 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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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;} catch (Throwable unexpected) {
&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;log.error(&amp;quot;Problem reloading theme &amp;quot; +
&lt;br&gt;&amp;gt; reloadTheme, unexpected);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return reloaded;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modify SharedThemeFromDir to update the last modified in SharedTheme: 
&lt;/div&gt;&amp;nbsp;see
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; **** Set Last Modified *****
&lt;br&gt;&amp;gt;
&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; * Load all the elements of this theme from disk and cache them.
&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;private void loadThemeFromDisk() throws
&lt;br&gt;&amp;gt; ThemeInitializationException {
&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;log.debug(&amp;quot;Parsing theme descriptor for &amp;quot; +
&lt;br&gt;&amp;gt; this.themeDir);
&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;ThemeMetadata themeMetadata = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&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;// lookup theme descriptor and parse it
&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;ThemeMetadataParser parser = new
&lt;br&gt;&amp;gt; ThemeMetadataParser();
&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;InputStream is = new 
&lt;/div&gt;FileInputStream(this.themeDir
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; + File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;theme.xml&amp;quot;);
&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;themeMetadata = parser.unmarshall(is);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&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;throw new ThemeInitializationException(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Unable to parse theme descriptor
&lt;br&gt;&amp;gt; for theme &amp;quot;
&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp;+ this.themeDir,
&lt;br&gt;&amp;gt; ex);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.debug(&amp;quot;Loading Theme &amp;quot; + themeMetadata.getName());
&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;// use parsed theme descriptor to load Theme data
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setId(themeMetadata.getId());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setName(themeMetadata.getName());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setDescription(themeMetadata.getName());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setAuthor(themeMetadata.getAuthor());
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; **** Set Last Modified *****
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// setLastModified(new Date());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setEnabled(true);
&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;// load resource representing preview image
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;File previewFile = new File(this.themeDir + 
&lt;/div&gt;File.separator
&lt;div class='shrinkable-quote'&gt;&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ themeMetadata.getPreviewImage());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!previewFile.exists() || !previewFile.canRead()) {
&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;log.warn(&amp;quot;Couldn't read theme [&amp;quot; + this.getName()
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;] preview image file [&amp;quot;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ themeMetadata.getPreviewImage()
&lt;br&gt;&amp;gt; + &amp;quot;]&amp;quot;);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.previewImage = new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getPreviewImage(), previewFile);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// load stylesheet if possible
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (themeMetadata.getStylesheet() != null) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeMetadataTemplate stylesheetTmpl =
&lt;br&gt;&amp;gt; themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getStylesheet();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct File object from path
&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;File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; stylesheetTmpl.getContentsFile());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// read stylesheet contents
&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;String contents = loadTemplateFile(templateFile);
&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;if (contents == null) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if we don't have any contents then 
&lt;/div&gt;skip
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; this one
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.error(&amp;quot;Couldn't load stylesheet theme
&lt;br&gt;&amp;gt; [&amp;quot; + this.getName()
&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;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;] template file [&amp;quot; +
&lt;br&gt;&amp;gt; templateFile + &amp;quot;]&amp;quot;);
&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;} else {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeTemplate representing
&lt;br&gt;&amp;gt; this file
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharedThemeTemplate theme_template = new
&lt;br&gt;&amp;gt; SharedThemeTemplate(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this,
&lt;br&gt;&amp;gt; themeMetadata.getId() + &amp;quot;:&amp;quot;
&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; &amp;nbsp;WebsiteTemplate.ACTION_CUSTOM,
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getDescription(), contents, stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getLink(), new Date(templateFile
&lt;br&gt;&amp;gt; &amp;nbsp;.lastModified()), stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getTemplateLanguage(), false, false);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// store it
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.stylesheet = theme_template;
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to templates list
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addTemplate(theme_template);
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// **** Set Last Modified *****
&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;setLastModified(new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()));
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// go through static resources and add them to the theme
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator resourcesIter =
&lt;br&gt;&amp;gt; themeMetadata.getResources().iterator();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (resourcesIter.hasNext()) {
&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;resourcePath = (String) resourcesIter.next();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeResource object from resource
&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;File resourceFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ resourcePath);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Continue reading theme even if problem
&lt;br&gt;&amp;gt; encountered with one file
&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;if (!resourceFile.exists() ||
&lt;br&gt;&amp;gt; !resourceFile.canRead()) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.warn(&amp;quot;Couldn't read &amp;nbsp;theme [&amp;quot; +
&lt;br&gt;&amp;gt; this.getName()
&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;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;] resource file [&amp;quot; +
&lt;br&gt;&amp;gt; resourcePath + &amp;quot;]&amp;quot;);
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to the theme
&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;setResource(resourcePath, new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resourcePath, resourceFile));
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// **** Set Last Modified *****
&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;Date lstModified = new
&lt;br&gt;&amp;gt; Date(resourceFile.lastModified());
&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;if (getLastModified() == null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setLastModified(lstModified);
&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;}
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// go through templates and read in contents to a
&lt;br&gt;&amp;gt; ThemeTemplate
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeTemplate theme_template = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeMetadataTemplate templateMetadata = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator templatesIter =
&lt;br&gt;&amp;gt; themeMetadata.getTemplates().iterator();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (templatesIter.hasNext()) {
&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;templateMetadata = (ThemeMetadataTemplate)
&lt;br&gt;&amp;gt; templatesIter.next();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct File object from path
&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;File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; templateMetadata.getContentsFile());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String contents = loadTemplateFile(templateFile);
&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;if (contents == null) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if we don't have any contents then 
&lt;/div&gt;skip
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; this one
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new
&lt;br&gt;&amp;gt; ThemeInitializationException(&amp;quot;Couldn't load theme [&amp;quot;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ this.getName() + &amp;quot;]
&lt;br&gt;&amp;gt; template file [&amp;quot; + templateFile
&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;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;]&amp;quot;);
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeTemplate representing this file
&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;theme_template = new SharedThemeTemplate(this,
&lt;br&gt;&amp;gt; themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getId()
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;:&amp;quot; +
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getAction(),
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getDescription(), contents,
&lt;br&gt;&amp;gt; templateMetadata.getLink(),
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()), templateMetadata
&lt;br&gt;&amp;gt; &amp;nbsp;.getTemplateLanguage(),
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;templateMetadata.isHidden(),
&lt;br&gt;&amp;gt; templateMetadata.isNavbar());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to the theme
&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;addTemplate(theme_template);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// &amp;nbsp;**** Set Last Modified *****
&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;Date lstModified = new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified());
&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;if (getLastModified() == null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setLastModified(lstModified);
&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;}
&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;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Then in PageServlet reload the theme and then clear the caches
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // generate cache key
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String cacheKey = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSiteWide) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cacheKey = siteWideCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt; &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;cacheKey = weblogPageCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // **** Development only. Reload if theme has been modified &amp;nbsp;***
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if
&lt;br&gt;&amp;gt; (WebloggerConfig.getBooleanProperty(&amp;quot;site.themeReloadMode&amp;quot;)) {
&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;try {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeManager manager = null;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;manager =
&lt;br&gt;&amp;gt; WebloggerFactory.getWeblogger().getThemeManager();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean reloaded =
&lt;br&gt;&amp;gt; manager.reLoadThemeFromDisk(website.getEditorTheme());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (reloaded) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSiteWide) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;siteWideCache.clear();
&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;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; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;websitePageCache.clear();
&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;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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e1) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// ignored
&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;}
&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;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;// cached content checking
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) &amp;&amp;
&lt;br&gt;&amp;gt; request.getAttribute(&amp;quot;skipCache&amp;quot;) == null) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers Greg
&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; Share our environment commitment - conserve resources and contribute to 
&lt;/div&gt;the reduction of CO2 emissions by not printing the email unless absolutely 
&lt;br&gt;necessary to do so.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Any opinions expressed are those of the author, not Ricoh UK Ltd. This 
&lt;br&gt;communication does not constitute either offer or acceptance of any 
&lt;br&gt;contractually binding agreement. Such offer or acceptance must be 
&lt;br&gt;communicated in writing. It is the responsibility of the recipient to 
&lt;br&gt;ensure this email and attachments are free from computer viruses before 
&lt;br&gt;use and the sender accepts no responsibility or liability for any such 
&lt;br&gt;computer viruses.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ricoh UK Ltd. may monitor the content of emails sent and received via 
&lt;br&gt;its network for the purpose of ensuring compliance with its policies and 
&lt;br&gt;procedures. This communication contains information, which may be 
&lt;br&gt;confidential or privileged. The information is intended solely for the use 
&lt;br&gt;of the individual or entity named above. If you are not the intended 
&lt;br&gt;recipient, be aware that any disclosure, copying, distribution or use of 
&lt;br&gt;the contents of this information is prohibited. If you have received this 
&lt;br&gt;communication in error, please notify the sender immediately by return 
&lt;br&gt;email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 
&lt;br&gt;(0) 208 261 4000 if you need assistance.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Registered in England No: 473236
&lt;br&gt;&amp;gt; VAT No: GB524161280
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Share our environment commitment - conserve resources and contribute to the reduction of CO2 emissions by not printing the email unless absolutely necessary to do so. 
&lt;br&gt;&lt;br&gt;Any opinions expressed are those of the author, not Ricoh UK Ltd. This communication does not constitute either offer or acceptance of any contractually binding agreement. Such offer or acceptance must be communicated in writing. It is the responsibility of the recipient to ensure this email and attachments are free from computer viruses before use and the sender accepts no responsibility or liability for any such computer viruses. 
&lt;br&gt;&lt;br&gt;Ricoh UK Ltd. may monitor the content of emails sent and received via its network for the purpose of ensuring compliance with its policies and procedures. This communication contains information, which may be confidential or privileged. The information is intended solely for the use of the individual or entity named above. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you have received this communication in error, please notify the sender immediately by return email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26427058&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 (0) 208 261 4000 if you need assistance. 
&lt;br&gt;&lt;br&gt;Registered in England No: 473236 
&lt;br&gt;VAT No: GB524161280 &amp;nbsp;
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26427058.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26426648</id>
	<title>Re: theme reloading</title>
	<published>2009-11-19T05:51:34Z</published>
	<updated>2009-11-19T05:51:34Z</updated>
	<author>
		<name>Greg.Huber</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;I have created ROL-1847 with a patch for the trunk.
&lt;br&gt;&lt;br&gt;I also do not have the trunk setup as a project so i have copied the mods 
&lt;br&gt;and therefore unable to test it, but the source project &amp;nbsp;works OK.
&lt;br&gt;&lt;br&gt;Cheers Greg
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Matt Raible &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26426648&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt; 
&lt;br&gt;19/11/2009 12:18
&lt;br&gt;Please respond to
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26426648&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;To
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26426648&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;cc
&lt;br&gt;&lt;br&gt;Subject
&lt;br&gt;Re: theme reloading
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Any chance you could provide this as a patch? I believe this would be
&lt;br&gt;a nice feature to have in Roller's core.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;&lt;br&gt;On Thu, Nov 19, 2009 at 6:43 AM, &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26426648&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Greg.Huber@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Remembered a while back someone asked if it was possible to reload a 
&lt;br&gt;theme
&lt;br&gt;&amp;gt; rather than restarting the container for development purposes.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Rather than upgrading my laptop I decided to see if it was possible.
&lt;br&gt;&amp;gt; Roller needs a few mods, but seems to work, also does not seem to be 
&lt;br&gt;much
&lt;br&gt;&amp;gt; of an overhead either.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Add a method to theme manager
&lt;br&gt;&amp;gt;
&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; * This is a development only method which reloads theme data 
&lt;br&gt;from
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; themes
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * stored on the filesystem in the webapp /themes/ directory.
&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; * @param reloadTheme
&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;the reload theme
&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 true, if theme was reloaded from disk
&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;public boolean reLoadThemeFromDisk(String reloadTheme);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; also impl:
&lt;br&gt;&amp;gt;
&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; * @see ThemeManager#reLoadThemeFromDisk(String)
&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;public boolean reLoadThemeFromDisk(String reloadTheme) {
&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;boolean reloaded = false;
&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;try {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Theme theme = new 
&lt;/div&gt;SharedThemeFromDir(this.themeDir
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; + File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ reloadTheme);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (theme != null) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Theme loadedTheme = (Theme)
&lt;br&gt;&amp;gt; themes.get(theme.getId());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (loadedTheme != null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; 
&lt;/div&gt;theme.getLastModified()
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp;.after(loadedTheme.getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;themes.remove(theme.getId());
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;themes.put(theme.getId(), theme);
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reloaded = 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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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;} catch (Throwable unexpected) {
&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;log.error(&amp;quot;Problem reloading theme &amp;quot; +
&lt;br&gt;&amp;gt; reloadTheme, unexpected);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return reloaded;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modify SharedThemeFromDir to update the last modified in SharedTheme: 
&lt;/div&gt;&amp;nbsp;see
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; **** Set Last Modified *****
&lt;br&gt;&amp;gt;
&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; * Load all the elements of this theme from disk and cache them.
&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;private void loadThemeFromDisk() throws
&lt;br&gt;&amp;gt; ThemeInitializationException {
&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;log.debug(&amp;quot;Parsing theme descriptor for &amp;quot; +
&lt;br&gt;&amp;gt; this.themeDir);
&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;ThemeMetadata themeMetadata = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&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;// lookup theme descriptor and parse it
&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;ThemeMetadataParser parser = new
&lt;br&gt;&amp;gt; ThemeMetadataParser();
&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;InputStream is = new 
&lt;/div&gt;FileInputStream(this.themeDir
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; + File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;theme.xml&amp;quot;);
&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;themeMetadata = parser.unmarshall(is);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&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;throw new ThemeInitializationException(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Unable to parse theme descriptor
&lt;br&gt;&amp;gt; for theme &amp;quot;
&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp;+ this.themeDir,
&lt;br&gt;&amp;gt; ex);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.debug(&amp;quot;Loading Theme &amp;quot; + themeMetadata.getName());
&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;// use parsed theme descriptor to load Theme data
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setId(themeMetadata.getId());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setName(themeMetadata.getName());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setDescription(themeMetadata.getName());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setAuthor(themeMetadata.getAuthor());
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; **** Set Last Modified *****
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// setLastModified(new Date());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setEnabled(true);
&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;// load resource representing preview image
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;File previewFile = new File(this.themeDir + 
&lt;/div&gt;File.separator
&lt;div class='shrinkable-quote'&gt;&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ themeMetadata.getPreviewImage());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!previewFile.exists() || !previewFile.canRead()) {
&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;log.warn(&amp;quot;Couldn't read theme [&amp;quot; + this.getName()
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;] preview image file [&amp;quot;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ themeMetadata.getPreviewImage()
&lt;br&gt;&amp;gt; + &amp;quot;]&amp;quot;);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.previewImage = new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getPreviewImage(), previewFile);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// load stylesheet if possible
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (themeMetadata.getStylesheet() != null) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeMetadataTemplate stylesheetTmpl =
&lt;br&gt;&amp;gt; themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getStylesheet();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct File object from path
&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;File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; stylesheetTmpl.getContentsFile());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// read stylesheet contents
&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;String contents = loadTemplateFile(templateFile);
&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;if (contents == null) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if we don't have any contents then 
&lt;/div&gt;skip
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; this one
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.error(&amp;quot;Couldn't load stylesheet theme
&lt;br&gt;&amp;gt; [&amp;quot; + this.getName()
&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;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;] template file [&amp;quot; +
&lt;br&gt;&amp;gt; templateFile + &amp;quot;]&amp;quot;);
&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;} else {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeTemplate representing
&lt;br&gt;&amp;gt; this file
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharedThemeTemplate theme_template = new
&lt;br&gt;&amp;gt; SharedThemeTemplate(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this,
&lt;br&gt;&amp;gt; themeMetadata.getId() + &amp;quot;:&amp;quot;
&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; &amp;nbsp;WebsiteTemplate.ACTION_CUSTOM,
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getDescription(), contents, stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getLink(), new Date(templateFile
&lt;br&gt;&amp;gt; &amp;nbsp;.lastModified()), stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getTemplateLanguage(), false, false);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// store it
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.stylesheet = theme_template;
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to templates list
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addTemplate(theme_template);
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// **** Set Last Modified *****
&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;setLastModified(new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()));
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// go through static resources and add them to the theme
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator resourcesIter =
&lt;br&gt;&amp;gt; themeMetadata.getResources().iterator();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (resourcesIter.hasNext()) {
&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;resourcePath = (String) resourcesIter.next();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeResource object from resource
&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;File resourceFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ resourcePath);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Continue reading theme even if problem
&lt;br&gt;&amp;gt; encountered with one file
&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;if (!resourceFile.exists() ||
&lt;br&gt;&amp;gt; !resourceFile.canRead()) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.warn(&amp;quot;Couldn't read &amp;nbsp;theme [&amp;quot; +
&lt;br&gt;&amp;gt; this.getName()
&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;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;] resource file [&amp;quot; +
&lt;br&gt;&amp;gt; resourcePath + &amp;quot;]&amp;quot;);
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to the theme
&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;setResource(resourcePath, new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resourcePath, resourceFile));
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// **** Set Last Modified *****
&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;Date lstModified = new
&lt;br&gt;&amp;gt; Date(resourceFile.lastModified());
&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;if (getLastModified() == null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setLastModified(lstModified);
&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;}
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// go through templates and read in contents to a
&lt;br&gt;&amp;gt; ThemeTemplate
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeTemplate theme_template = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeMetadataTemplate templateMetadata = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator templatesIter =
&lt;br&gt;&amp;gt; themeMetadata.getTemplates().iterator();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (templatesIter.hasNext()) {
&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;templateMetadata = (ThemeMetadataTemplate)
&lt;br&gt;&amp;gt; templatesIter.next();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct File object from path
&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;File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; templateMetadata.getContentsFile());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String contents = loadTemplateFile(templateFile);
&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;if (contents == null) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if we don't have any contents then 
&lt;/div&gt;skip
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; this one
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new
&lt;br&gt;&amp;gt; ThemeInitializationException(&amp;quot;Couldn't load theme [&amp;quot;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ this.getName() + &amp;quot;]
&lt;br&gt;&amp;gt; template file [&amp;quot; + templateFile
&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;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;]&amp;quot;);
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeTemplate representing this file
&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;theme_template = new SharedThemeTemplate(this,
&lt;br&gt;&amp;gt; themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getId()
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;:&amp;quot; +
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getAction(),
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getDescription(), contents,
&lt;br&gt;&amp;gt; templateMetadata.getLink(),
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()), templateMetadata
&lt;br&gt;&amp;gt; &amp;nbsp;.getTemplateLanguage(),
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;templateMetadata.isHidden(),
&lt;br&gt;&amp;gt; templateMetadata.isNavbar());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to the theme
&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;addTemplate(theme_template);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// &amp;nbsp;**** Set Last Modified *****
&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;Date lstModified = new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified());
&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;if (getLastModified() == null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setLastModified(lstModified);
&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;}
&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;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Then in PageServlet reload the theme and then clear the caches
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // generate cache key
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String cacheKey = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSiteWide) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cacheKey = siteWideCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt; &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;cacheKey = weblogPageCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // **** Development only. Reload if theme has been modified &amp;nbsp;***
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if
&lt;br&gt;&amp;gt; (WebloggerConfig.getBooleanProperty(&amp;quot;site.themeReloadMode&amp;quot;)) {
&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;try {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeManager manager = null;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;manager =
&lt;br&gt;&amp;gt; WebloggerFactory.getWeblogger().getThemeManager();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean reloaded =
&lt;br&gt;&amp;gt; manager.reLoadThemeFromDisk(website.getEditorTheme());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (reloaded) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSiteWide) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;siteWideCache.clear();
&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;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; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;websitePageCache.clear();
&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;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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e1) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// ignored
&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;}
&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;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;// cached content checking
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) &amp;&amp;
&lt;br&gt;&amp;gt; request.getAttribute(&amp;quot;skipCache&amp;quot;) == null) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers Greg
&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; Share our environment commitment - conserve resources and contribute to 
&lt;/div&gt;the reduction of CO2 emissions by not printing the email unless absolutely 
&lt;br&gt;necessary to do so.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Any opinions expressed are those of the author, not Ricoh UK Ltd. This 
&lt;br&gt;communication does not constitute either offer or acceptance of any 
&lt;br&gt;contractually binding agreement. Such offer or acceptance must be 
&lt;br&gt;communicated in writing. It is the responsibility of the recipient to 
&lt;br&gt;ensure this email and attachments are free from computer viruses before 
&lt;br&gt;use and the sender accepts no responsibility or liability for any such 
&lt;br&gt;computer viruses.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ricoh UK Ltd. may monitor the content of emails sent and received via 
&lt;br&gt;its network for the purpose of ensuring compliance with its policies and 
&lt;br&gt;procedures. This communication contains information, which may be 
&lt;br&gt;confidential or privileged. The information is intended solely for the use 
&lt;br&gt;of the individual or entity named above. If you are not the intended 
&lt;br&gt;recipient, be aware that any disclosure, copying, distribution or use of 
&lt;br&gt;the contents of this information is prohibited. If you have received this 
&lt;br&gt;communication in error, please notify the sender immediately by return 
&lt;br&gt;email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26426648&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 
&lt;br&gt;(0) 208 261 4000 if you need assistance.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Registered in England No: 473236
&lt;br&gt;&amp;gt; VAT No: GB524161280
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Share our environment commitment - conserve resources and contribute to the reduction of CO2 emissions by not printing the email unless absolutely necessary to do so. 
&lt;br&gt;&lt;br&gt;Any opinions expressed are those of the author, not Ricoh UK Ltd. This communication does not constitute either offer or acceptance of any contractually binding agreement. Such offer or acceptance must be communicated in writing. It is the responsibility of the recipient to ensure this email and attachments are free from computer viruses before use and the sender accepts no responsibility or liability for any such computer viruses. 
&lt;br&gt;&lt;br&gt;Ricoh UK Ltd. may monitor the content of emails sent and received via its network for the purpose of ensuring compliance with its policies and procedures. This communication contains information, which may be confidential or privileged. The information is intended solely for the use of the individual or entity named above. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you have received this communication in error, please notify the sender immediately by return email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26426648&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 (0) 208 261 4000 if you need assistance. 
&lt;br&gt;&lt;br&gt;Registered in England No: 473236 
&lt;br&gt;VAT No: GB524161280 &amp;nbsp;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26426648.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26425388</id>
	<title>Re: theme reloading</title>
	<published>2009-11-19T04:28:35Z</published>
	<updated>2009-11-19T04:28:35Z</updated>
	<author>
		<name>Greg.Huber</name>
	</author>
	<content type="html">Matt,
&lt;br&gt;&lt;br&gt;OK, will try and create one.
&lt;br&gt;&lt;br&gt;&lt;br&gt;also forgot to add on the first email:
&lt;br&gt;&lt;br&gt;Yyou also need to delete the style sheet from the db (webpage file) for 
&lt;br&gt;the weblog you are developing with, otherwise roller will use the db 
&lt;br&gt;version rather than the theme version. &amp;nbsp;N.B. every time the stylesheet tab 
&lt;br&gt;is selected in Design, it will copy a new version to the db!.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Cheers Greg
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Matt Raible &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425388&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt; 
&lt;br&gt;19/11/2009 12:18
&lt;br&gt;Please respond to
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425388&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;To
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425388&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;cc
&lt;br&gt;&lt;br&gt;Subject
&lt;br&gt;Re: theme reloading
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Any chance you could provide this as a patch? I believe this would be
&lt;br&gt;a nice feature to have in Roller's core.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;&lt;br&gt;On Thu, Nov 19, 2009 at 6:43 AM, &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425388&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Greg.Huber@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Remembered a while back someone asked if it was possible to reload a 
&lt;br&gt;theme
&lt;br&gt;&amp;gt; rather than restarting the container for development purposes.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Rather than upgrading my laptop I decided to see if it was possible.
&lt;br&gt;&amp;gt; Roller needs a few mods, but seems to work, also does not seem to be 
&lt;br&gt;much
&lt;br&gt;&amp;gt; of an overhead either.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Add a method to theme manager
&lt;br&gt;&amp;gt;
&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; * This is a development only method which reloads theme data 
&lt;br&gt;from
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; themes
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * stored on the filesystem in the webapp /themes/ directory.
&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; * @param reloadTheme
&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;the reload theme
&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 true, if theme was reloaded from disk
&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;public boolean reLoadThemeFromDisk(String reloadTheme);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; also impl:
&lt;br&gt;&amp;gt;
&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; * @see ThemeManager#reLoadThemeFromDisk(String)
&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;public boolean reLoadThemeFromDisk(String reloadTheme) {
&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;boolean reloaded = false;
&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;try {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Theme theme = new 
&lt;/div&gt;SharedThemeFromDir(this.themeDir
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; + File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ reloadTheme);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (theme != null) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Theme loadedTheme = (Theme)
&lt;br&gt;&amp;gt; themes.get(theme.getId());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (loadedTheme != null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; 
&lt;/div&gt;theme.getLastModified()
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp;.after(loadedTheme.getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;themes.remove(theme.getId());
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;themes.put(theme.getId(), theme);
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reloaded = 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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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;} catch (Throwable unexpected) {
&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;log.error(&amp;quot;Problem reloading theme &amp;quot; +
&lt;br&gt;&amp;gt; reloadTheme, unexpected);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return reloaded;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modify SharedThemeFromDir to update the last modified in SharedTheme: 
&lt;/div&gt;&amp;nbsp;see
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; **** Set Last Modified *****
&lt;br&gt;&amp;gt;
&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; * Load all the elements of this theme from disk and cache them.
&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;private void loadThemeFromDisk() throws
&lt;br&gt;&amp;gt; ThemeInitializationException {
&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;log.debug(&amp;quot;Parsing theme descriptor for &amp;quot; +
&lt;br&gt;&amp;gt; this.themeDir);
&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;ThemeMetadata themeMetadata = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&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;// lookup theme descriptor and parse it
&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;ThemeMetadataParser parser = new
&lt;br&gt;&amp;gt; ThemeMetadataParser();
&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;InputStream is = new 
&lt;/div&gt;FileInputStream(this.themeDir
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; + File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;theme.xml&amp;quot;);
&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;themeMetadata = parser.unmarshall(is);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&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;throw new ThemeInitializationException(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Unable to parse theme descriptor
&lt;br&gt;&amp;gt; for theme &amp;quot;
&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp;+ this.themeDir,
&lt;br&gt;&amp;gt; ex);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.debug(&amp;quot;Loading Theme &amp;quot; + themeMetadata.getName());
&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;// use parsed theme descriptor to load Theme data
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setId(themeMetadata.getId());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setName(themeMetadata.getName());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setDescription(themeMetadata.getName());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setAuthor(themeMetadata.getAuthor());
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; **** Set Last Modified *****
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// setLastModified(new Date());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setEnabled(true);
&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;// load resource representing preview image
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;File previewFile = new File(this.themeDir + 
&lt;/div&gt;File.separator
&lt;div class='shrinkable-quote'&gt;&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ themeMetadata.getPreviewImage());
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!previewFile.exists() || !previewFile.canRead()) {
&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;log.warn(&amp;quot;Couldn't read theme [&amp;quot; + this.getName()
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;] preview image file [&amp;quot;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ themeMetadata.getPreviewImage()
&lt;br&gt;&amp;gt; + &amp;quot;]&amp;quot;);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.previewImage = new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getPreviewImage(), previewFile);
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// load stylesheet if possible
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (themeMetadata.getStylesheet() != null) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeMetadataTemplate stylesheetTmpl =
&lt;br&gt;&amp;gt; themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getStylesheet();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct File object from path
&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;File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; stylesheetTmpl.getContentsFile());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// read stylesheet contents
&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;String contents = loadTemplateFile(templateFile);
&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;if (contents == null) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if we don't have any contents then 
&lt;/div&gt;skip
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; this one
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.error(&amp;quot;Couldn't load stylesheet theme
&lt;br&gt;&amp;gt; [&amp;quot; + this.getName()
&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;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;] template file [&amp;quot; +
&lt;br&gt;&amp;gt; templateFile + &amp;quot;]&amp;quot;);
&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;} else {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeTemplate representing
&lt;br&gt;&amp;gt; this file
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharedThemeTemplate theme_template = new
&lt;br&gt;&amp;gt; SharedThemeTemplate(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this,
&lt;br&gt;&amp;gt; themeMetadata.getId() + &amp;quot;:&amp;quot;
&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; &amp;nbsp;WebsiteTemplate.ACTION_CUSTOM,
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getDescription(), contents, stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getLink(), new Date(templateFile
&lt;br&gt;&amp;gt; &amp;nbsp;.lastModified()), stylesheetTmpl
&lt;br&gt;&amp;gt; &amp;nbsp;.getTemplateLanguage(), false, false);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// store it
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.stylesheet = theme_template;
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to templates list
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addTemplate(theme_template);
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// **** Set Last Modified *****
&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;setLastModified(new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()));
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// go through static resources and add them to the theme
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String resourcePath = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator resourcesIter =
&lt;br&gt;&amp;gt; themeMetadata.getResources().iterator();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (resourcesIter.hasNext()) {
&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;resourcePath = (String) resourcesIter.next();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeResource object from resource
&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;File resourceFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ resourcePath);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Continue reading theme even if problem
&lt;br&gt;&amp;gt; encountered with one file
&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;if (!resourceFile.exists() ||
&lt;br&gt;&amp;gt; !resourceFile.canRead()) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log.warn(&amp;quot;Couldn't read &amp;nbsp;theme [&amp;quot; +
&lt;br&gt;&amp;gt; this.getName()
&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;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;] resource file [&amp;quot; +
&lt;br&gt;&amp;gt; resourcePath + &amp;quot;]&amp;quot;);
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to the theme
&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;setResource(resourcePath, new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resourcePath, resourceFile));
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// **** Set Last Modified *****
&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;Date lstModified = new
&lt;br&gt;&amp;gt; Date(resourceFile.lastModified());
&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;if (getLastModified() == null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setLastModified(lstModified);
&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;}
&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;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// go through templates and read in contents to a
&lt;br&gt;&amp;gt; ThemeTemplate
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeTemplate theme_template = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeMetadataTemplate templateMetadata = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator templatesIter =
&lt;br&gt;&amp;gt; themeMetadata.getTemplates().iterator();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (templatesIter.hasNext()) {
&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;templateMetadata = (ThemeMetadataTemplate)
&lt;br&gt;&amp;gt; templatesIter.next();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct File object from path
&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;File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+
&lt;br&gt;&amp;gt; templateMetadata.getContentsFile());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String contents = loadTemplateFile(templateFile);
&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;if (contents == null) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// if we don't have any contents then 
&lt;/div&gt;skip
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; this one
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new
&lt;br&gt;&amp;gt; ThemeInitializationException(&amp;quot;Couldn't load theme [&amp;quot;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ this.getName() + &amp;quot;]
&lt;br&gt;&amp;gt; template file [&amp;quot; + templateFile
&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;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;]&amp;quot;);
&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;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// construct ThemeTemplate representing this file
&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;theme_template = new SharedThemeTemplate(this,
&lt;br&gt;&amp;gt; themeMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getId()
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;:&amp;quot; +
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getAction(),
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.getDescription(), contents,
&lt;br&gt;&amp;gt; templateMetadata.getLink(),
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()), templateMetadata
&lt;br&gt;&amp;gt; &amp;nbsp;.getTemplateLanguage(),
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;templateMetadata.isHidden(),
&lt;br&gt;&amp;gt; templateMetadata.isNavbar());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add it to the theme
&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;addTemplate(theme_template);
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// &amp;nbsp;**** Set Last Modified *****
&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;Date lstModified = new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified());
&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;if (getLastModified() == null
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setLastModified(lstModified);
&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;}
&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;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Then in PageServlet reload the theme and then clear the caches
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // generate cache key
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String cacheKey = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSiteWide) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cacheKey = siteWideCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt; &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;cacheKey = weblogPageCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // **** Development only. Reload if theme has been modified &amp;nbsp;***
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if
&lt;br&gt;&amp;gt; (WebloggerConfig.getBooleanProperty(&amp;quot;site.themeReloadMode&amp;quot;)) {
&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;try {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ThemeManager manager = null;
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;manager =
&lt;br&gt;&amp;gt; WebloggerFactory.getWeblogger().getThemeManager();
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean reloaded =
&lt;br&gt;&amp;gt; manager.reLoadThemeFromDisk(website.getEditorTheme());
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (reloaded) {
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isSiteWide) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;siteWideCache.clear();
&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;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; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;websitePageCache.clear();
&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;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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e1) {
&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// ignored
&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;}
&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;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;// cached content checking
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) &amp;&amp;
&lt;br&gt;&amp;gt; request.getAttribute(&amp;quot;skipCache&amp;quot;) == null) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers Greg
&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; Share our environment commitment - conserve resources and contribute to 
&lt;/div&gt;the reduction of CO2 emissions by not printing the email unless absolutely 
&lt;br&gt;necessary to do so.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Any opinions expressed are those of the author, not Ricoh UK Ltd. This 
&lt;br&gt;communication does not constitute either offer or acceptance of any 
&lt;br&gt;contractually binding agreement. Such offer or acceptance must be 
&lt;br&gt;communicated in writing. It is the responsibility of the recipient to 
&lt;br&gt;ensure this email and attachments are free from computer viruses before 
&lt;br&gt;use and the sender accepts no responsibility or liability for any such 
&lt;br&gt;computer viruses.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ricoh UK Ltd. may monitor the content of emails sent and received via 
&lt;br&gt;its network for the purpose of ensuring compliance with its policies and 
&lt;br&gt;procedures. This communication contains information, which may be 
&lt;br&gt;confidential or privileged. The information is intended solely for the use 
&lt;br&gt;of the individual or entity named above. If you are not the intended 
&lt;br&gt;recipient, be aware that any disclosure, copying, distribution or use of 
&lt;br&gt;the contents of this information is prohibited. If you have received this 
&lt;br&gt;communication in error, please notify the sender immediately by return 
&lt;br&gt;email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425388&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 
&lt;br&gt;(0) 208 261 4000 if you need assistance.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Registered in England No: 473236
&lt;br&gt;&amp;gt; VAT No: GB524161280
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Share our environment commitment - conserve resources and contribute to the reduction of CO2 emissions by not printing the email unless absolutely necessary to do so. 
&lt;br&gt;&lt;br&gt;Any opinions expressed are those of the author, not Ricoh UK Ltd. This communication does not constitute either offer or acceptance of any contractually binding agreement. Such offer or acceptance must be communicated in writing. It is the responsibility of the recipient to ensure this email and attachments are free from computer viruses before use and the sender accepts no responsibility or liability for any such computer viruses. 
&lt;br&gt;&lt;br&gt;Ricoh UK Ltd. may monitor the content of emails sent and received via its network for the purpose of ensuring compliance with its policies and procedures. This communication contains information, which may be confidential or privileged. The information is intended solely for the use of the individual or entity named above. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you have received this communication in error, please notify the sender immediately by return email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425388&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 (0) 208 261 4000 if you need assistance. 
&lt;br&gt;&lt;br&gt;Registered in England No: 473236 
&lt;br&gt;VAT No: GB524161280 &amp;nbsp;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26425388.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26425246</id>
	<title>Re: theme reloading</title>
	<published>2009-11-19T04:17:29Z</published>
	<updated>2009-11-19T04:17:29Z</updated>
	<author>
		<name>mraible</name>
	</author>
	<content type="html">Any chance you could provide this as a patch? I believe this would be
&lt;br&gt;a nice feature to have in Roller's core.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;&lt;br&gt;On Thu, Nov 19, 2009 at 6:43 AM, &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425246&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Greg.Huber@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Remembered a while back someone asked if it was possible to reload a theme
&lt;br&gt;&amp;gt; rather than restarting the container for development purposes.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Rather than upgrading my laptop I decided to see if it was possible.
&lt;br&gt;&amp;gt; Roller needs a few mods, but seems to work, also does not seem to be much
&lt;br&gt;&amp;gt; of an overhead either.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Add a method to theme manager
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        /**
&lt;br&gt;&amp;gt;         * This is a development only method which reloads theme data from
&lt;br&gt;&amp;gt; themes
&lt;br&gt;&amp;gt;         * stored on the filesystem in the webapp /themes/ directory.
&lt;br&gt;&amp;gt;         *
&lt;br&gt;&amp;gt;         * @param reloadTheme
&lt;br&gt;&amp;gt;         *            the reload theme
&lt;br&gt;&amp;gt;         *
&lt;br&gt;&amp;gt;         * @return true, if theme was reloaded from disk
&lt;br&gt;&amp;gt;         */
&lt;br&gt;&amp;gt;        public boolean reLoadThemeFromDisk(String reloadTheme);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; also impl:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        /**
&lt;br&gt;&amp;gt;         * @see ThemeManager#reLoadThemeFromDisk(String)
&lt;br&gt;&amp;gt;         */
&lt;br&gt;&amp;gt;        public boolean reLoadThemeFromDisk(String reloadTheme) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                boolean reloaded = false;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                try {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        Theme theme = new SharedThemeFromDir(this.themeDir
&lt;br&gt;&amp;gt; + File.separator
&lt;br&gt;&amp;gt;                                        + reloadTheme);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        if (theme != null) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                Theme loadedTheme = (Theme)
&lt;br&gt;&amp;gt; themes.get(theme.getId());
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                if (loadedTheme != null
&lt;br&gt;&amp;gt;                                                &amp;&amp; theme.getLastModified()
&lt;br&gt;&amp;gt;  .after(loadedTheme.getLastModified())) {
&lt;br&gt;&amp;gt;                                        themes.remove(theme.getId());
&lt;br&gt;&amp;gt;                                        themes.put(theme.getId(), theme);
&lt;br&gt;&amp;gt;                                        reloaded = true;
&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;                } catch (Throwable unexpected) {
&lt;br&gt;&amp;gt;                        log.error(&amp;quot;Problem reloading theme &amp;quot; +
&lt;br&gt;&amp;gt; reloadTheme, unexpected);
&lt;br&gt;&amp;gt;                }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                return reloaded;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Modify SharedThemeFromDir to update the last modified in SharedTheme:  see
&lt;br&gt;&amp;gt; **** Set Last Modified *****
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        /**
&lt;br&gt;&amp;gt;         * Load all the elements of this theme from disk and cache them.
&lt;br&gt;&amp;gt;         */
&lt;br&gt;&amp;gt;        private void loadThemeFromDisk() throws
&lt;br&gt;&amp;gt; ThemeInitializationException {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                log.debug(&amp;quot;Parsing theme descriptor for &amp;quot; +
&lt;br&gt;&amp;gt; this.themeDir);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                ThemeMetadata themeMetadata = null;
&lt;br&gt;&amp;gt;                try {
&lt;br&gt;&amp;gt;                        // lookup theme descriptor and parse it
&lt;br&gt;&amp;gt;                        ThemeMetadataParser parser = new
&lt;br&gt;&amp;gt; ThemeMetadataParser();
&lt;br&gt;&amp;gt;                        InputStream is = new FileInputStream(this.themeDir
&lt;br&gt;&amp;gt; + File.separator
&lt;br&gt;&amp;gt;                                        + &amp;quot;theme.xml&amp;quot;);
&lt;br&gt;&amp;gt;                        themeMetadata = parser.unmarshall(is);
&lt;br&gt;&amp;gt;                } catch (Exception ex) {
&lt;br&gt;&amp;gt;                        throw new ThemeInitializationException(
&lt;br&gt;&amp;gt;                                        &amp;quot;Unable to parse theme descriptor
&lt;br&gt;&amp;gt; for theme &amp;quot;
&lt;br&gt;&amp;gt;                                                        + this.themeDir,
&lt;br&gt;&amp;gt; ex);
&lt;br&gt;&amp;gt;                }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                log.debug(&amp;quot;Loading Theme &amp;quot; + themeMetadata.getName());
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                // use parsed theme descriptor to load Theme data
&lt;br&gt;&amp;gt;                setId(themeMetadata.getId());
&lt;br&gt;&amp;gt;                setName(themeMetadata.getName());
&lt;br&gt;&amp;gt;                setDescription(themeMetadata.getName());
&lt;br&gt;&amp;gt;                setAuthor(themeMetadata.getAuthor());
&lt;br&gt;&amp;gt;                                 **** Set Last Modified *****
&lt;br&gt;&amp;gt;                // setLastModified(new Date());
&lt;br&gt;&amp;gt;                setEnabled(true);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                // load resource representing preview image
&lt;br&gt;&amp;gt;                File previewFile = new File(this.themeDir + File.separator
&lt;br&gt;&amp;gt;                                + themeMetadata.getPreviewImage());
&lt;br&gt;&amp;gt;                if (!previewFile.exists() || !previewFile.canRead()) {
&lt;br&gt;&amp;gt;                        log.warn(&amp;quot;Couldn't read theme [&amp;quot; + this.getName()
&lt;br&gt;&amp;gt;                                        + &amp;quot;] preview image file [&amp;quot;
&lt;br&gt;&amp;gt;                                        + themeMetadata.getPreviewImage()
&lt;br&gt;&amp;gt; + &amp;quot;]&amp;quot;);
&lt;br&gt;&amp;gt;                } else {
&lt;br&gt;&amp;gt;                        this.previewImage = new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(themeMetadata
&lt;br&gt;&amp;gt;                                        .getPreviewImage(), previewFile);
&lt;br&gt;&amp;gt;                }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                // load stylesheet if possible
&lt;br&gt;&amp;gt;                if (themeMetadata.getStylesheet() != null) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        ThemeMetadataTemplate stylesheetTmpl =
&lt;br&gt;&amp;gt; themeMetadata
&lt;br&gt;&amp;gt;                                        .getStylesheet();
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // construct File object from path
&lt;br&gt;&amp;gt;                        File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&lt;br&gt;&amp;gt;                                        +
&lt;br&gt;&amp;gt; stylesheetTmpl.getContentsFile());
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // read stylesheet contents
&lt;br&gt;&amp;gt;                        String contents = loadTemplateFile(templateFile);
&lt;br&gt;&amp;gt;                        if (contents == null) {
&lt;br&gt;&amp;gt;                                // if we don't have any contents then skip
&lt;br&gt;&amp;gt; this one
&lt;br&gt;&amp;gt;                                log.error(&amp;quot;Couldn't load stylesheet theme
&lt;br&gt;&amp;gt; [&amp;quot; + this.getName()
&lt;br&gt;&amp;gt;                                                + &amp;quot;] template file [&amp;quot; +
&lt;br&gt;&amp;gt; templateFile + &amp;quot;]&amp;quot;);
&lt;br&gt;&amp;gt;                        } else {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                // construct ThemeTemplate representing
&lt;br&gt;&amp;gt; this file
&lt;br&gt;&amp;gt;                                SharedThemeTemplate theme_template = new
&lt;br&gt;&amp;gt; SharedThemeTemplate(
&lt;br&gt;&amp;gt;                                                this,
&lt;br&gt;&amp;gt; themeMetadata.getId() + &amp;quot;:&amp;quot;
&lt;br&gt;&amp;gt;                                                                +
&lt;br&gt;&amp;gt; stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt;  WebsiteTemplate.ACTION_CUSTOM,
&lt;br&gt;&amp;gt;                                                stylesheetTmpl.getName(),
&lt;br&gt;&amp;gt; stylesheetTmpl
&lt;br&gt;&amp;gt;  .getDescription(), contents, stylesheetTmpl
&lt;br&gt;&amp;gt;  .getLink(), new Date(templateFile
&lt;br&gt;&amp;gt;  .lastModified()), stylesheetTmpl
&lt;br&gt;&amp;gt;  .getTemplateLanguage(), false, false);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                // store it
&lt;br&gt;&amp;gt;                                this.stylesheet = theme_template;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                // add it to templates list
&lt;br&gt;&amp;gt;                                addTemplate(theme_template);
&lt;br&gt;&amp;gt;                        }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // **** Set Last Modified *****
&lt;br&gt;&amp;gt;                        setLastModified(new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()));
&lt;br&gt;&amp;gt;                }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                // go through static resources and add them to the theme
&lt;br&gt;&amp;gt;                String resourcePath = null;
&lt;br&gt;&amp;gt;                Iterator resourcesIter =
&lt;br&gt;&amp;gt; themeMetadata.getResources().iterator();
&lt;br&gt;&amp;gt;                while (resourcesIter.hasNext()) {
&lt;br&gt;&amp;gt;                        resourcePath = (String) resourcesIter.next();
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // construct ThemeResource object from resource
&lt;br&gt;&amp;gt;                        File resourceFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&lt;br&gt;&amp;gt;                                        + resourcePath);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // Continue reading theme even if problem
&lt;br&gt;&amp;gt; encountered with one file
&lt;br&gt;&amp;gt;                        if (!resourceFile.exists() ||
&lt;br&gt;&amp;gt; !resourceFile.canRead()) {
&lt;br&gt;&amp;gt;                                log.warn(&amp;quot;Couldn't read  theme [&amp;quot; +
&lt;br&gt;&amp;gt; this.getName()
&lt;br&gt;&amp;gt;                                                + &amp;quot;] resource file [&amp;quot; +
&lt;br&gt;&amp;gt; resourcePath + &amp;quot;]&amp;quot;);
&lt;br&gt;&amp;gt;                                continue;
&lt;br&gt;&amp;gt;                        }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // add it to the theme
&lt;br&gt;&amp;gt;                        setResource(resourcePath, new
&lt;br&gt;&amp;gt; SharedThemeResourceFromDir(
&lt;br&gt;&amp;gt;                                        resourcePath, resourceFile));
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // **** Set Last Modified *****
&lt;br&gt;&amp;gt;                        Date lstModified = new
&lt;br&gt;&amp;gt; Date(resourceFile.lastModified());
&lt;br&gt;&amp;gt;                        if (getLastModified() == null
&lt;br&gt;&amp;gt;                                        ||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&lt;br&gt;&amp;gt;                                setLastModified(lstModified);
&lt;br&gt;&amp;gt;                        }
&lt;br&gt;&amp;gt;                }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                // go through templates and read in contents to a
&lt;br&gt;&amp;gt; ThemeTemplate
&lt;br&gt;&amp;gt;                ThemeTemplate theme_template = null;
&lt;br&gt;&amp;gt;                ThemeMetadataTemplate templateMetadata = null;
&lt;br&gt;&amp;gt;                Iterator templatesIter =
&lt;br&gt;&amp;gt; themeMetadata.getTemplates().iterator();
&lt;br&gt;&amp;gt;                while (templatesIter.hasNext()) {
&lt;br&gt;&amp;gt;                        templateMetadata = (ThemeMetadataTemplate)
&lt;br&gt;&amp;gt; templatesIter.next();
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // construct File object from path
&lt;br&gt;&amp;gt;                        File templateFile = new File(this.themeDir +
&lt;br&gt;&amp;gt; File.separator
&lt;br&gt;&amp;gt;                                        +
&lt;br&gt;&amp;gt; templateMetadata.getContentsFile());
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        String contents = loadTemplateFile(templateFile);
&lt;br&gt;&amp;gt;                        if (contents == null) {
&lt;br&gt;&amp;gt;                                // if we don't have any contents then skip
&lt;br&gt;&amp;gt; this one
&lt;br&gt;&amp;gt;                                throw new
&lt;br&gt;&amp;gt; ThemeInitializationException(&amp;quot;Couldn't load theme [&amp;quot;
&lt;br&gt;&amp;gt;                                                + this.getName() + &amp;quot;]
&lt;br&gt;&amp;gt; template file [&amp;quot; + templateFile
&lt;br&gt;&amp;gt;                                                + &amp;quot;]&amp;quot;);
&lt;br&gt;&amp;gt;                        }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // construct ThemeTemplate representing this file
&lt;br&gt;&amp;gt;                        theme_template = new SharedThemeTemplate(this,
&lt;br&gt;&amp;gt; themeMetadata
&lt;br&gt;&amp;gt;                                        .getId()
&lt;br&gt;&amp;gt;                                        + &amp;quot;:&amp;quot; +
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&lt;br&gt;&amp;gt;                                        .getAction(),
&lt;br&gt;&amp;gt; templateMetadata.getName(), templateMetadata
&lt;br&gt;&amp;gt;                                        .getDescription(), contents,
&lt;br&gt;&amp;gt; templateMetadata.getLink(),
&lt;br&gt;&amp;gt;                                        new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified()), templateMetadata
&lt;br&gt;&amp;gt;  .getTemplateLanguage(),
&lt;br&gt;&amp;gt;                                        templateMetadata.isHidden(),
&lt;br&gt;&amp;gt; templateMetadata.isNavbar());
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        // add it to the theme
&lt;br&gt;&amp;gt;                        addTemplate(theme_template);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        //  **** Set Last Modified *****
&lt;br&gt;&amp;gt;                        Date lstModified = new
&lt;br&gt;&amp;gt; Date(templateFile.lastModified());
&lt;br&gt;&amp;gt;                        if (getLastModified() == null
&lt;br&gt;&amp;gt;                                        ||
&lt;br&gt;&amp;gt; lstModified.after(getLastModified())) {
&lt;br&gt;&amp;gt;                                setLastModified(lstModified);
&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; Then in PageServlet reload the theme and then clear the caches
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // generate cache key
&lt;br&gt;&amp;gt;        String cacheKey = null;
&lt;br&gt;&amp;gt;        if (isSiteWide) {
&lt;br&gt;&amp;gt;            cacheKey = siteWideCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt;        } else {
&lt;br&gt;&amp;gt;            cacheKey = weblogPageCache.generateKey(pageRequest);
&lt;br&gt;&amp;gt;        }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // **** Development only. Reload if theme has been modified  ***
&lt;br&gt;&amp;gt;                if
&lt;br&gt;&amp;gt; (WebloggerConfig.getBooleanProperty(&amp;quot;site.themeReloadMode&amp;quot;)) {
&lt;br&gt;&amp;gt;                        try {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                ThemeManager manager = null;
&lt;br&gt;&amp;gt;                                manager =
&lt;br&gt;&amp;gt; WebloggerFactory.getWeblogger().getThemeManager();
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                boolean reloaded =
&lt;br&gt;&amp;gt; manager.reLoadThemeFromDisk(website.getEditorTheme());
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                if (reloaded) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                                        if (isSiteWide) {
&lt;br&gt;&amp;gt;                                                siteWideCache.clear();
&lt;br&gt;&amp;gt;                                        } else {
&lt;br&gt;&amp;gt;                                                websitePageCache.clear();
&lt;br&gt;&amp;gt;                                        }
&lt;br&gt;&amp;gt;                                }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;                        } catch (Exception e1) {
&lt;br&gt;&amp;gt;                                // ignored
&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;  // cached content checking
&lt;br&gt;&amp;gt;        if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) &amp;&amp;
&lt;br&gt;&amp;gt; request.getAttribute(&amp;quot;skipCache&amp;quot;) == null) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers Greg
&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; Share our environment commitment - conserve resources and contribute to the reduction of CO2 emissions by not printing the email unless absolutely necessary to do so.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Any opinions expressed are those of the author, not Ricoh UK Ltd. This communication does not constitute either offer or acceptance of any contractually binding agreement. Such offer or acceptance must be communicated in writing. It is the responsibility of the recipient to ensure this email and attachments are free from computer viruses before use and the sender accepts no responsibility or liability for any such computer viruses.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ricoh UK Ltd. may monitor the content of emails sent and received via its network for the purpose of ensuring compliance with its policies and procedures. This communication contains information, which may be confidential or privileged. The information is intended solely for the use of the individual or entity named above. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you have received this communication in error, please notify the sender immediately by return email with a copy to  &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26425246&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 (0) 208 261 4000 if you need assistance.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Registered in England No: 473236
&lt;br&gt;&amp;gt; VAT No: GB524161280
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26425246.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26424812</id>
	<title>theme reloading</title>
	<published>2009-11-19T03:43:26Z</published>
	<updated>2009-11-19T03:43:26Z</updated>
	<author>
		<name>Greg.Huber</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;Remembered a while back someone asked if it was possible to reload a theme 
&lt;br&gt;rather than restarting the container for development purposes. 
&lt;br&gt;&lt;br&gt;Rather than upgrading my laptop I decided to see if it was possible. 
&lt;br&gt;Roller needs a few mods, but seems to work, also does not seem to be much 
&lt;br&gt;of an overhead either.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Add a method to theme manager
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This is a development only method which reloads theme data from 
&lt;br&gt;themes
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* stored on the filesystem in the webapp /themes/ directory.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @param reloadTheme
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the reload theme
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return true, if theme was reloaded from disk
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean reLoadThemeFromDisk(String reloadTheme);
&lt;br&gt;&lt;br&gt;&lt;br&gt;also impl:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @see ThemeManager#reLoadThemeFromDisk(String)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean reLoadThemeFromDisk(String reloadTheme) {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; boolean reloaded = false;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&lt;br&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; Theme theme = new SharedThemeFromDir(this.themeDir 
&lt;br&gt;+ File.separator
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + reloadTheme);
&lt;br&gt;&lt;br&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; if (theme != null) {
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Theme loadedTheme = (Theme) 
&lt;br&gt;themes.get(theme.getId());
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (loadedTheme != null
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; theme.getLastModified()
&lt;br&gt;&amp;nbsp;.after(loadedTheme.getLastModified())) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; themes.remove(theme.getId());
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; themes.put(theme.getId(), theme);
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reloaded = true;
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&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; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Throwable unexpected) {
&lt;br&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; log.error(&amp;quot;Problem reloading theme &amp;quot; + 
&lt;br&gt;reloadTheme, unexpected);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return reloaded;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;Modify SharedThemeFromDir to update the last modified in SharedTheme: &amp;nbsp;see 
&lt;br&gt;**** Set Last Modified *****
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Load all the elements of this theme from disk and cache them.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private void loadThemeFromDisk() throws 
&lt;br&gt;ThemeInitializationException {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.debug(&amp;quot;Parsing theme descriptor for &amp;quot; + 
&lt;br&gt;this.themeDir);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ThemeMetadata themeMetadata = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&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; // lookup theme descriptor and parse it
&lt;br&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; ThemeMetadataParser parser = new 
&lt;br&gt;ThemeMetadataParser();
&lt;br&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; InputStream is = new FileInputStream(this.themeDir 
&lt;br&gt;+ File.separator
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + &amp;quot;theme.xml&amp;quot;);
&lt;br&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; themeMetadata = parser.unmarshall(is);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception ex) {
&lt;br&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; throw new ThemeInitializationException(
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;Unable to parse theme descriptor 
&lt;br&gt;for theme &amp;quot;
&lt;br&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp; + this.themeDir, 
&lt;br&gt;ex);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.debug(&amp;quot;Loading Theme &amp;quot; + themeMetadata.getName());
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // use parsed theme descriptor to load Theme data
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setId(themeMetadata.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setName(themeMetadata.getName());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setDescription(themeMetadata.getName());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setAuthor(themeMetadata.getAuthor());
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;**** Set Last Modified *****
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // setLastModified(new Date());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setEnabled(true);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // load resource representing preview image
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File previewFile = new File(this.themeDir + File.separator
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + themeMetadata.getPreviewImage());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!previewFile.exists() || !previewFile.canRead()) {
&lt;br&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; log.warn(&amp;quot;Couldn't read theme [&amp;quot; + this.getName()
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + &amp;quot;] preview image file [&amp;quot;
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + themeMetadata.getPreviewImage() 
&lt;br&gt;+ &amp;quot;]&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&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; this.previewImage = new 
&lt;br&gt;SharedThemeResourceFromDir(themeMetadata
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .getPreviewImage(), previewFile);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // load stylesheet if possible
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (themeMetadata.getStylesheet() != null) {
&lt;br&gt;&lt;br&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; ThemeMetadataTemplate stylesheetTmpl = 
&lt;br&gt;themeMetadata
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .getStylesheet();
&lt;br&gt;&lt;br&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; // construct File object from path
&lt;br&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; File templateFile = new File(this.themeDir + 
&lt;br&gt;File.separator
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + 
&lt;br&gt;stylesheetTmpl.getContentsFile());
&lt;br&gt;&lt;br&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; // read stylesheet contents
&lt;br&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; String contents = loadTemplateFile(templateFile);
&lt;br&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; if (contents == null) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // if we don't have any contents then skip 
&lt;br&gt;this one
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.error(&amp;quot;Couldn't load stylesheet theme 
&lt;br&gt;[&amp;quot; + this.getName()
&lt;br&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;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;] template file [&amp;quot; + 
&lt;br&gt;templateFile + &amp;quot;]&amp;quot;);
&lt;br&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; } else {
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // construct ThemeTemplate representing 
&lt;br&gt;this file
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedThemeTemplate theme_template = new 
&lt;br&gt;SharedThemeTemplate(
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this, 
&lt;br&gt;themeMetadata.getId() + &amp;quot;:&amp;quot;
&lt;br&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;nbsp; &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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + 
&lt;br&gt;stylesheetTmpl.getName(),
&lt;br&gt;&amp;nbsp;WebsiteTemplate.ACTION_CUSTOM,
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stylesheetTmpl.getName(), 
&lt;br&gt;stylesheetTmpl
&lt;br&gt;&amp;nbsp;.getDescription(), contents, stylesheetTmpl
&lt;br&gt;&amp;nbsp;.getLink(), new Date(templateFile
&lt;br&gt;&amp;nbsp;.lastModified()), stylesheetTmpl
&lt;br&gt;&amp;nbsp;.getTemplateLanguage(), false, false);
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // store it
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.stylesheet = theme_template;
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // add it to templates list
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addTemplate(theme_template);
&lt;br&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; }
&lt;br&gt;&lt;br&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; // **** Set Last Modified *****
&lt;br&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; setLastModified(new 
&lt;br&gt;Date(templateFile.lastModified()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // go through static resources and add them to the theme
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String resourcePath = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Iterator resourcesIter = 
&lt;br&gt;themeMetadata.getResources().iterator();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (resourcesIter.hasNext()) {
&lt;br&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; resourcePath = (String) resourcesIter.next();
&lt;br&gt;&lt;br&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; // construct ThemeResource object from resource
&lt;br&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; File resourceFile = new File(this.themeDir + 
&lt;br&gt;File.separator
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + resourcePath);
&lt;br&gt;&lt;br&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; // Continue reading theme even if problem 
&lt;br&gt;encountered with one file
&lt;br&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; if (!resourceFile.exists() || 
&lt;br&gt;!resourceFile.canRead()) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.warn(&amp;quot;Couldn't read &amp;nbsp;theme [&amp;quot; + 
&lt;br&gt;this.getName()
&lt;br&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;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;] resource file [&amp;quot; + 
&lt;br&gt;resourcePath + &amp;quot;]&amp;quot;);
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;
&lt;br&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; }
&lt;br&gt;&lt;br&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; // add it to the theme
&lt;br&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; setResource(resourcePath, new 
&lt;br&gt;SharedThemeResourceFromDir(
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resourcePath, resourceFile));
&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;nbsp; &amp;nbsp; &amp;nbsp; // **** Set Last Modified *****
&lt;br&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; Date lstModified = new 
&lt;br&gt;Date(resourceFile.lastModified());
&lt;br&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; if (getLastModified() == null
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; || 
&lt;br&gt;lstModified.after(getLastModified())) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setLastModified(lstModified);
&lt;br&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; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // go through templates and read in contents to a 
&lt;br&gt;ThemeTemplate
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ThemeTemplate theme_template = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ThemeMetadataTemplate templateMetadata = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Iterator templatesIter = 
&lt;br&gt;themeMetadata.getTemplates().iterator();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (templatesIter.hasNext()) {
&lt;br&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; templateMetadata = (ThemeMetadataTemplate) 
&lt;br&gt;templatesIter.next();
&lt;br&gt;&lt;br&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; // construct File object from path
&lt;br&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; File templateFile = new File(this.themeDir + 
&lt;br&gt;File.separator
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + 
&lt;br&gt;templateMetadata.getContentsFile());
&lt;br&gt;&lt;br&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; String contents = loadTemplateFile(templateFile);
&lt;br&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; if (contents == null) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // if we don't have any contents then skip 
&lt;br&gt;this one
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new 
&lt;br&gt;ThemeInitializationException(&amp;quot;Couldn't load theme [&amp;quot;
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + this.getName() + &amp;quot;] 
&lt;br&gt;template file [&amp;quot; + templateFile
&lt;br&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;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;]&amp;quot;);
&lt;br&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; }
&lt;br&gt;&lt;br&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; // construct ThemeTemplate representing this file
&lt;br&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; theme_template = new SharedThemeTemplate(this, 
&lt;br&gt;themeMetadata
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .getId()
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + &amp;quot;:&amp;quot; + 
&lt;br&gt;templateMetadata.getName(), templateMetadata
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .getAction(), 
&lt;br&gt;templateMetadata.getName(), templateMetadata
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .getDescription(), contents, 
&lt;br&gt;templateMetadata.getLink(),
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new 
&lt;br&gt;Date(templateFile.lastModified()), templateMetadata
&lt;br&gt;&amp;nbsp;.getTemplateLanguage(),
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; templateMetadata.isHidden(), 
&lt;br&gt;templateMetadata.isNavbar());
&lt;br&gt;&lt;br&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; // add it to the theme
&lt;br&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; addTemplate(theme_template);
&lt;br&gt;&lt;br&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;nbsp;**** Set Last Modified *****
&lt;br&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; Date lstModified = new 
&lt;br&gt;Date(templateFile.lastModified());
&lt;br&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; if (getLastModified() == null
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; || 
&lt;br&gt;lstModified.after(getLastModified())) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setLastModified(lstModified);
&lt;br&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; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &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;Then in PageServlet reload the theme and then clear the caches
&lt;br&gt;&lt;br&gt;// generate cache key
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String cacheKey = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (isSiteWide) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cacheKey = siteWideCache.generateKey(pageRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cacheKey = weblogPageCache.generateKey(pageRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;// **** Development only. Reload if theme has been modified &amp;nbsp;***
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if 
&lt;br&gt;(WebloggerConfig.getBooleanProperty(&amp;quot;site.themeReloadMode&amp;quot;)) {
&lt;br&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; try {
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ThemeManager manager = null;
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; manager = 
&lt;br&gt;WebloggerFactory.getWeblogger().getThemeManager();
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; boolean reloaded = 
&lt;br&gt;manager.reLoadThemeFromDisk(website.getEditorTheme());
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (reloaded) {
&lt;br&gt;&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (isSiteWide) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; siteWideCache.clear();
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; websitePageCache.clear();
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&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; } catch (Exception e1) {
&lt;br&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;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ignored
&lt;br&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; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp;// cached content checking
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) &amp;&amp; 
&lt;br&gt;request.getAttribute(&amp;quot;skipCache&amp;quot;) == null) {
&lt;br&gt;&lt;br&gt;&lt;br&gt;Cheers Greg
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Share our environment commitment - conserve resources and contribute to the reduction of CO2 emissions by not printing the email unless absolutely necessary to do so. 
&lt;br&gt;&lt;br&gt;Any opinions expressed are those of the author, not Ricoh UK Ltd. This communication does not constitute either offer or acceptance of any contractually binding agreement. Such offer or acceptance must be communicated in writing. It is the responsibility of the recipient to ensure this email and attachments are free from computer viruses before use and the sender accepts no responsibility or liability for any such computer viruses. 
&lt;br&gt;&lt;br&gt;Ricoh UK Ltd. may monitor the content of emails sent and received via its network for the purpose of ensuring compliance with its policies and procedures. This communication contains information, which may be confidential or privileged. The information is intended solely for the use of the individual or entity named above. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you have received this communication in error, please notify the sender immediately by return email with a copy to &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26424812&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;postmaster@...&lt;/a&gt; . Please contact us on +44 (0) 208 261 4000 if you need assistance. 
&lt;br&gt;&lt;br&gt;Registered in England No: 473236 
&lt;br&gt;VAT No: GB524161280 &amp;nbsp;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26424812.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26411114</id>
	<title>Re: Adding line breaks to inbound comments</title>
	<published>2009-11-18T08:34:12Z</published>
	<updated>2009-11-18T08:34:12Z</updated>
	<author>
		<name>mraible</name>
	</author>
	<content type="html">Yep. I get comment notifications and go in and add &amp;lt;br/&amp;gt; tags (or wrap with
&lt;br&gt;&amp;lt;p&amp;gt;) tags.
&lt;br&gt;&lt;br&gt;On Wed, Nov 18, 2009 at 11:29 AM, Dave &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26411114&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I'm not aware of an existing way to do that.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm curious, how do you do that formatting? Do you go into the
&lt;br&gt;&amp;gt; database to do it?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - Dave
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Wed, Nov 18, 2009 at 10:38 AM, Matt Raible &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26411114&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; I spend a lot of time formatting comments for readers of my blog. Is
&lt;br&gt;&amp;gt; there a
&lt;br&gt;&amp;gt; &amp;gt; way to automate this process so \n is replaced with &amp;lt;br/&amp;gt; when the
&lt;br&gt;&amp;gt; comment
&lt;br&gt;&amp;gt; &amp;gt; is submitted? I'd like to keep the HTML subset enabled, but line breaks
&lt;br&gt;&amp;gt; &amp;gt; should be automatic. I realize I could change my comment renderer, but I
&lt;br&gt;&amp;gt; &amp;gt; don't want to change past comments, just new ones.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Thanks,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Matt
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26411114.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26411024</id>
	<title>Re: Adding line breaks to inbound comments</title>
	<published>2009-11-18T08:29:52Z</published>
	<updated>2009-11-18T08:29:52Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">I'm not aware of an existing way to do that.
&lt;br&gt;&lt;br&gt;I'm curious, how do you do that formatting? Do you go into the
&lt;br&gt;database to do it?
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Wed, Nov 18, 2009 at 10:38 AM, Matt Raible &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26411024&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matt@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I spend a lot of time formatting comments for readers of my blog. Is there a
&lt;br&gt;&amp;gt; way to automate this process so \n is replaced with &amp;lt;br/&amp;gt; when the comment
&lt;br&gt;&amp;gt; is submitted? I'd like to keep the HTML subset enabled, but line breaks
&lt;br&gt;&amp;gt; should be automatic. I realize I could change my comment renderer, but I
&lt;br&gt;&amp;gt; don't want to change past comments, just new ones.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Matt
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26411024.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26410105</id>
	<title>Adding line breaks to inbound comments</title>
	<published>2009-11-18T07:38:32Z</published>
	<updated>2009-11-18T07:38:32Z</updated>
	<author>
		<name>mraible</name>
	</author>
	<content type="html">I spend a lot of time formatting comments for readers of my blog. Is there a
&lt;br&gt;way to automate this process so \n is replaced with &amp;lt;br/&amp;gt; when the comment
&lt;br&gt;is submitted? I'd like to keep the HTML subset enabled, but line breaks
&lt;br&gt;should be automatic. I realize I could change my comment renderer, but I
&lt;br&gt;don't want to change past comments, just new ones.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Matt
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-line-breaks-to-inbound-comments-tp26410105s12275p26410105.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26397378</id>
	<title>Re: Search does not return result when handle contains underscore (_)</title>
	<published>2009-11-17T12:53:24Z</published>
	<updated>2009-11-17T12:53:24Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">Done:
&lt;br&gt;&lt;a href=&quot;https://issues.apache.org/jira/browse/ROL-1846&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/ROL-1846&lt;/a&gt;&lt;br&gt;&lt;br&gt;--- On Tue, 11/17/09, Dave &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397378&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: Dave &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397378&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Re: Search does not return result when handle contains underscore (_)
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397378&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Date: Tuesday, November 17, 2009, 6:39 AM
&lt;br&gt;&lt;br&gt;Hi Jery,
&lt;br&gt;&lt;br&gt;Thanks for the bug reports and suggested fixes!
&lt;br&gt;&lt;br&gt;Please file these as bugs and include a your patch there.
&lt;br&gt;   &lt;a href=&quot;https://issues.apache.org/roller&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/roller&lt;/a&gt;&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;- Dave
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Tue, Nov 17, 2009 at 8:22 AM, Jery Wang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397378&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jery_wang2002@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I found a bug where when website handle contains underscore '_', the term only takes the first phrase before underscore
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Anyone can patch the trunk?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The patch:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- roller_trunk_org/apps/weblogger/web/src/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java    2009-11-08 00:18:11.663437673 +1100
&lt;br&gt;&amp;gt; +++ roller_trunk/apps/weblogger/web/src/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java        2009-11-18 00:01:09.968130558 +1100
&lt;br&gt;&amp;gt; @@ -110,8 +110,7 @@
&lt;br&gt;&amp;gt;                  SEARCH_FIELDS, SEARCH_FLAGS,
&lt;br&gt;&amp;gt;                  new StandardAnalyzer(Version.LUCENE_CURRENT));
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -            Term tUsername =
&lt;br&gt;&amp;gt; -                IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE, websiteHandle);
&lt;br&gt;&amp;gt; +            Term tUsername = new Term(FieldConstants.WEBSITE_HANDLE, websiteHandle);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;              if (tUsername != null) {
&lt;br&gt;&amp;gt;                  BooleanQuery bQuery = new BooleanQuery();
&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;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26397378.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26391088</id>
	<title>Re: Search does not return result when handle contains underscore (_)</title>
	<published>2009-11-17T06:39:38Z</published>
	<updated>2009-11-17T06:39:38Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">Hi Jery,
&lt;br&gt;&lt;br&gt;Thanks for the bug reports and suggested fixes!
&lt;br&gt;&lt;br&gt;Please file these as bugs and include a your patch there.
&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://issues.apache.org/roller&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/roller&lt;/a&gt;&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;- Dave
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Tue, Nov 17, 2009 at 8:22 AM, Jery Wang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26391088&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jery_wang2002@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I found a bug where when website handle contains underscore '_', the term only takes the first phrase before underscore
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Anyone can patch the trunk?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The patch:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- roller_trunk_org/apps/weblogger/web/src/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java    2009-11-08 00:18:11.663437673 +1100
&lt;br&gt;&amp;gt; +++ roller_trunk/apps/weblogger/web/src/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java        2009-11-18 00:01:09.968130558 +1100
&lt;br&gt;&amp;gt; @@ -110,8 +110,7 @@
&lt;br&gt;&amp;gt;                  SEARCH_FIELDS, SEARCH_FLAGS,
&lt;br&gt;&amp;gt;                  new StandardAnalyzer(Version.LUCENE_CURRENT));
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -            Term tUsername =
&lt;br&gt;&amp;gt; -                IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE, websiteHandle);
&lt;br&gt;&amp;gt; +            Term tUsername = new Term(FieldConstants.WEBSITE_HANDLE, websiteHandle);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;              if (tUsername != null) {
&lt;br&gt;&amp;gt;                  BooleanQuery bQuery = new BooleanQuery();
&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;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26391088.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26389848</id>
	<title>Search does not return result when handle contains underscore (_)</title>
	<published>2009-11-17T05:22:47Z</published>
	<updated>2009-11-17T05:22:47Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">I found a bug where when website handle contains underscore '_', the term only takes the first phrase before underscore
&lt;br&gt;&lt;br&gt;Anyone can patch the trunk?
&lt;br&gt;&lt;br&gt;The patch:
&lt;br&gt;&lt;br&gt;--- roller_trunk_org/apps/weblogger/web/src/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java    2009-11-08 00:18:11.663437673 +1100
&lt;br&gt;+++ roller_trunk/apps/weblogger/web/src/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java        2009-11-18 00:01:09.968130558 +1100
&lt;br&gt;@@ -110,8 +110,7 @@
&lt;br&gt;                 SEARCH_FIELDS, SEARCH_FLAGS,
&lt;br&gt;                 new StandardAnalyzer(Version.LUCENE_CURRENT));
&lt;br&gt;             
&lt;br&gt;-            Term tUsername =
&lt;br&gt;-                IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE, websiteHandle);
&lt;br&gt;+            Term tUsername = new Term(FieldConstants.WEBSITE_HANDLE, websiteHandle);
&lt;br&gt;             
&lt;br&gt;             if (tUsername != null) {
&lt;br&gt;                 BooleanQuery bQuery = new BooleanQuery();
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26389848.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26371473</id>
	<title>Re: Bug in roller calendar due to different timezone between java vm timezone and weblog (user) timezone</title>
	<published>2009-11-16T04:59:35Z</published>
	<updated>2009-11-16T04:59:35Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">Here are the list of format that MAY require timezone to be set:
&lt;br&gt;&lt;br&gt;src/java/org/apache/roller/weblogger/pojos/WeblogEntry.java:            return format.format(getPubTime());
&lt;br&gt;src/java/org/apache/roller/weblogger/pojos/WeblogEntry.java:            return format.format(getUpdateTime());
&lt;br&gt;&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java:                dateString = mStarDateFormat.format(
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java:                sb.append( mSingleDayFormat.format( day ) );
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java:                sb.append( mSingleDayFormat.format( day ) );
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java:            dateString = mStarDateFormat.format(entry.getPubTime());
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java:            pw.print( formatTitle.format(day) );
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java:            mDayNames[dnum] = dayFormatter.format(dayNameCal.getTime());
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java:            return DateUtil.format(date,format);
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel.java:            return DateUtil.format(date,format);
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/model/UtilitiesModel.java:        return format.format(d);
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.day.next&amp;quot;, new Object[] {dayFormat.format(day)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.day.prev&amp;quot;, new Object[] {dayFormat.format(day)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.day.nextCollection&amp;quot;, new Object[] {dayFormat.format(nextDay)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.day.prevCollection&amp;quot;, new Object[] {dayFormat.format(prevDay)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.month.next&amp;quot;, new Object[] {monthFormat.format(month)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.month.prev&amp;quot;, new Object[] {monthFormat.format(month)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.month.nextCollection&amp;quot;, new Object[] {monthFormat.format(nextMonth)});
&lt;br&gt;src/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java:            return messageUtils.getString(&amp;quot;weblogEntriesPager.month.prevCollection&amp;quot;, new Object[] {monthFormat.format(prevMonth)});
&lt;br&gt;&lt;br&gt;&lt;br&gt;--- On Mon, 11/16/09, Jery Wang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371473&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jery_wang2002@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: Jery Wang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371473&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jery_wang2002@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Bug in roller calendar due to different timezone between java vm timezone and weblog (user) timezone
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371473&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Date: Monday, November 16, 2009, 4:53 AM
&lt;br&gt;&lt;br&gt;Hi,
&lt;br&gt;&lt;br&gt;I am not sure if others had this bug before:
&lt;br&gt;&lt;br&gt;1. Java JVM use timezone A
&lt;br&gt;2. User use timezone B where timezone A and B more than 12 hours. Because roller shift the hours to noon.
&lt;br&gt;&lt;br&gt;3. the date that has entry has url different from what is shown. For example, clicking November 16 will show entry November 15 because the url is 20091115
&lt;br&gt;&lt;br&gt;I made patch:
&lt;br&gt;&lt;br&gt;--- roller_trunk_org/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java    2009-11-08 00:18:10.582128527 +1100
&lt;br&gt;+++ roller_trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java        2009-11-16 23:34:07.130778563 +1100
&lt;br&gt;@@ -1099,6 +1099,7 @@
&lt;br&gt;         }
&lt;br&gt;         
&lt;br&gt;         SimpleDateFormat formatter = DateUtil.get8charDateFormat();
&lt;br&gt;+       formatter.setTimeZone(website.getTimeZoneInstance());
&lt;br&gt;         for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
&lt;br&gt;             WeblogEntry entry = (WeblogEntry) wbItr.next();
&lt;br&gt;             Date sDate = DateUtil.getNoonOfDay(entry.getPubTime(), cal);
&lt;br&gt;&lt;br&gt;&lt;br&gt;Please verify if this is necessary. I checked the result is correct, i.e., clicking November 16 will show entry with url contains 20091116
&lt;br&gt;&lt;br&gt;&lt;br&gt;If this is a bug, I did 
&lt;br&gt;&lt;br&gt;grep --regexp=&amp;quot;\.format\b&amp;quot; * -R | sed '/build/d' | sed '/\.svn/d' | sed '/Binary/d' | sed '/docs/d' | sed '/^web\//d' | less
&lt;br&gt;&lt;br&gt;inside apps/weblogger and there are some SimpleDateFormat format being used without setting it with the correct timezone. But I have difficulties to decide which one needs to set its timezone with the website (user) timezone.
&lt;br&gt;&lt;br&gt;Anyone can help?
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Jery
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;      
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26371473.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26371408</id>
	<title>Re: Multiple domains (one for each weblog)</title>
	<published>2009-11-16T04:55:11Z</published>
	<updated>2009-11-16T04:55:11Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">You need to use regex. 
&lt;br&gt;&lt;br&gt;--- On Mon, 11/16/09, Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Re: Multiple domains (one for each weblog)
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Date: Monday, November 16, 2009, 2:50 AM
&lt;br&gt;&lt;br&gt;that is a clue, i will try it.
&lt;br&gt;&lt;br&gt;   can u show me a little example of how to do that ? any way i will search.
&lt;br&gt;&lt;br&gt;thanks!
&lt;br&gt;&lt;br&gt;2009/11/16 Jery Wang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jery_wang2002@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; If you use apache use mod_rewrite
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- On Sun, 11/15/09, Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; From: Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Subject: Multiple domains (one for each weblog)
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26371408&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Date: Sunday, November 15, 2009, 5:54 AM
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi all,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     first my configuration are: Apache Roller 4.0.1, Apache Tomcat 6.0.20,
&lt;br&gt;&amp;gt; Apache Httpd 2.2.9, i have a dedicated server machine where i can configure
&lt;br&gt;&amp;gt; mutiple domains.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     I try search it every where, but i didnt found =[
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     I m want to put each of my weblogs at your owner domain, but i get no
&lt;br&gt;&amp;gt; clue how to do that
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     I have my main domain, with many weblogs &lt;a href=&quot;http://mymaindomain.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     all of my weblogs are like contexts of this domains
&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://mymaindomain.com/firstblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/firstblog&lt;/a&gt;&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://mymaindomain.com/secondblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/secondblog&lt;/a&gt;&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://mymaindomain.com/otherblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/otherblog&lt;/a&gt;&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://mymaindomain.com/moreoneblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/moreoneblog&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     and i wanna to change that to:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://firstblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://firstblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://secondblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://secondblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://otherblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://otherblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt;     &lt;a href=&quot;http://moreoneblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://moreoneblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     all of this domains are on the same server, on the same Tomcat, with
&lt;br&gt;&amp;gt; virtual hosts, i can point all to roller context, but in this case all open
&lt;br&gt;&amp;gt; my main blog, i need to use a main blog for each case based at domain name.
&lt;br&gt;&amp;gt; Any one try it ? can any one help me ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ps.: Sorry for my english.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Tomaz Lavieri
&lt;br&gt;&amp;gt; Sun Certified Java Programmer (SCJP 6)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; meu blog =&amp;gt; &lt;a href=&quot;http://blog.tomazlavieri.com.br/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.tomazlavieri.com.br/&lt;/a&gt;&lt;br&gt;&amp;gt; twitter =&amp;gt; &lt;a href=&quot;http://twitter.com/tomazlavieri&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/tomazlavieri&lt;/a&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;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Tomaz Lavieri
&lt;br&gt;Sun Certified Java Programmer (SCJP 6)
&lt;br&gt;&lt;br&gt;meu blog =&amp;gt; &lt;a href=&quot;http://blog.tomazlavieri.com.br/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.tomazlavieri.com.br/&lt;/a&gt;&lt;br&gt;twitter =&amp;gt; &lt;a href=&quot;http://twitter.com/tomazlavieri&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/tomazlavieri&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26371408.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26371390</id>
	<title>Bug in roller calendar due to different timezone between java vm timezone and weblog (user) timezone</title>
	<published>2009-11-16T04:53:59Z</published>
	<updated>2009-11-16T04:53:59Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I am not sure if others had this bug before:
&lt;br&gt;&lt;br&gt;1. Java JVM use timezone A
&lt;br&gt;2. User use timezone B where timezone A and B more than 12 hours. Because roller shift the hours to noon.
&lt;br&gt;&lt;br&gt;3. the date that has entry has url different from what is shown. For example, clicking November 16 will show entry November 15 because the url is 20091115
&lt;br&gt;&lt;br&gt;I made patch:
&lt;br&gt;&lt;br&gt;--- roller_trunk_org/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java    2009-11-08 00:18:10.582128527 +1100
&lt;br&gt;+++ roller_trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogEntryManagerImpl.java        2009-11-16 23:34:07.130778563 +1100
&lt;br&gt;@@ -1099,6 +1099,7 @@
&lt;br&gt;         }
&lt;br&gt;         
&lt;br&gt;         SimpleDateFormat formatter = DateUtil.get8charDateFormat();
&lt;br&gt;+       formatter.setTimeZone(website.getTimeZoneInstance());
&lt;br&gt;         for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
&lt;br&gt;             WeblogEntry entry = (WeblogEntry) wbItr.next();
&lt;br&gt;             Date sDate = DateUtil.getNoonOfDay(entry.getPubTime(), cal);
&lt;br&gt;&lt;br&gt;&lt;br&gt;Please verify if this is necessary. I checked the result is correct, i.e., clicking November 16 will show entry with url contains 20091116
&lt;br&gt;&lt;br&gt;&lt;br&gt;If this is a bug, I did 
&lt;br&gt;&lt;br&gt;grep --regexp=&amp;quot;\.format\b&amp;quot; * -R | sed '/build/d' | sed '/\.svn/d' | sed '/Binary/d' | sed '/docs/d' | sed '/^web\//d' | less
&lt;br&gt;&lt;br&gt;inside apps/weblogger and there are some SimpleDateFormat format being used without setting it with the correct timezone. But I have difficulties to decide which one needs to set its timezone with the website (user) timezone.
&lt;br&gt;&lt;br&gt;Anyone can help?
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Jery
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26371390.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26369936</id>
	<title>Re: Multiple domains (one for each weblog)</title>
	<published>2009-11-16T02:50:31Z</published>
	<updated>2009-11-16T02:50:31Z</updated>
	<author>
		<name>Tomaz Lavieri</name>
	</author>
	<content type="html">that is a clue, i will try it.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;can u show me a little example of how to do that ? any way i will search.
&lt;br&gt;&lt;br&gt;thanks!
&lt;br&gt;&lt;br&gt;2009/11/16 Jery Wang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369936&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jery_wang2002@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; If you use apache use mod_rewrite
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- On Sun, 11/15/09, Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369936&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; From: Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369936&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Subject: Multiple domains (one for each weblog)
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369936&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Date: Sunday, November 15, 2009, 5:54 AM
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi all,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; first my configuration are: Apache Roller 4.0.1, Apache Tomcat 6.0.20,
&lt;br&gt;&amp;gt; Apache Httpd 2.2.9, i have a dedicated server machine where i can configure
&lt;br&gt;&amp;gt; mutiple domains.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; I try search it every where, but i didnt found =[
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; I m want to put each of my weblogs at your owner domain, but i get no
&lt;br&gt;&amp;gt; clue how to do that
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; I have my main domain, with many weblogs &lt;a href=&quot;http://mymaindomain.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; all of my weblogs are like contexts of this domains
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/firstblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/firstblog&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/secondblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/secondblog&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/otherblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/otherblog&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/moreoneblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/moreoneblog&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; and i wanna to change that to:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://firstblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://firstblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://secondblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://secondblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://otherblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://otherblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://moreoneblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://moreoneblog.com/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; all of this domains are on the same server, on the same Tomcat, with
&lt;br&gt;&amp;gt; virtual hosts, i can point all to roller context, but in this case all open
&lt;br&gt;&amp;gt; my main blog, i need to use a main blog for each case based at domain name.
&lt;br&gt;&amp;gt; Any one try it ? can any one help me ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ps.: Sorry for my english.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Tomaz Lavieri
&lt;br&gt;&amp;gt; Sun Certified Java Programmer (SCJP 6)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; meu blog =&amp;gt; &lt;a href=&quot;http://blog.tomazlavieri.com.br/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.tomazlavieri.com.br/&lt;/a&gt;&lt;br&gt;&amp;gt; twitter =&amp;gt; &lt;a href=&quot;http://twitter.com/tomazlavieri&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/tomazlavieri&lt;/a&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;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Tomaz Lavieri
&lt;br&gt;Sun Certified Java Programmer (SCJP 6)
&lt;br&gt;&lt;br&gt;meu blog =&amp;gt; &lt;a href=&quot;http://blog.tomazlavieri.com.br/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.tomazlavieri.com.br/&lt;/a&gt;&lt;br&gt;twitter =&amp;gt; &lt;a href=&quot;http://twitter.com/tomazlavieri&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/tomazlavieri&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26369936.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26369879</id>
	<title>Re: Multiple domains (one for each weblog)</title>
	<published>2009-11-16T02:45:14Z</published>
	<updated>2009-11-16T02:45:14Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">If you use apache use mod_rewrite
&lt;br&gt;&lt;br&gt;--- On Sun, 11/15/09, Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369879&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: Tomaz Lavieri &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369879&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tomazlavieri@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Multiple domains (one for each weblog)
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26369879&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Date: Sunday, November 15, 2009, 5:54 AM
&lt;br&gt;&lt;br&gt;Hi all,
&lt;br&gt;&lt;br&gt;    first my configuration are: Apache Roller 4.0.1, Apache Tomcat 6.0.20,
&lt;br&gt;Apache Httpd 2.2.9, i have a dedicated server machine where i can configure
&lt;br&gt;mutiple domains.
&lt;br&gt;&lt;br&gt;    I try search it every where, but i didnt found =[
&lt;br&gt;&lt;br&gt;    I m want to put each of my weblogs at your owner domain, but i get no
&lt;br&gt;clue how to do that
&lt;br&gt;&lt;br&gt;    I have my main domain, with many weblogs &lt;a href=&quot;http://mymaindomain.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;    all of my weblogs are like contexts of this domains
&lt;br&gt;    &lt;a href=&quot;http://mymaindomain.com/firstblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/firstblog&lt;/a&gt;&lt;br&gt;    &lt;a href=&quot;http://mymaindomain.com/secondblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/secondblog&lt;/a&gt;&lt;br&gt;    &lt;a href=&quot;http://mymaindomain.com/otherblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/otherblog&lt;/a&gt;&lt;br&gt;    &lt;a href=&quot;http://mymaindomain.com/moreoneblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/moreoneblog&lt;/a&gt;&lt;br&gt;&lt;br&gt;    and i wanna to change that to:
&lt;br&gt;&lt;br&gt;    &lt;a href=&quot;http://firstblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://firstblog.com/&lt;/a&gt;&lt;br&gt;    &lt;a href=&quot;http://secondblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://secondblog.com/&lt;/a&gt;&lt;br&gt;    &lt;a href=&quot;http://otherblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://otherblog.com/&lt;/a&gt;&lt;br&gt;    &lt;a href=&quot;http://moreoneblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://moreoneblog.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;    all of this domains are on the same server, on the same Tomcat, with
&lt;br&gt;virtual hosts, i can point all to roller context, but in this case all open
&lt;br&gt;my main blog, i need to use a main blog for each case based at domain name.
&lt;br&gt;Any one try it ? can any one help me ?
&lt;br&gt;&lt;br&gt;Ps.: Sorry for my english.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Tomaz Lavieri
&lt;br&gt;Sun Certified Java Programmer (SCJP 6)
&lt;br&gt;&lt;br&gt;meu blog =&amp;gt; &lt;a href=&quot;http://blog.tomazlavieri.com.br/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.tomazlavieri.com.br/&lt;/a&gt;&lt;br&gt;twitter =&amp;gt; &lt;a href=&quot;http://twitter.com/tomazlavieri&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/tomazlavieri&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26369879.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26359289</id>
	<title>Multiple domains (one for each weblog)</title>
	<published>2009-11-15T05:54:45Z</published>
	<updated>2009-11-15T05:54:45Z</updated>
	<author>
		<name>Tomaz Lavieri</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; first my configuration are: Apache Roller 4.0.1, Apache Tomcat 6.0.20,
&lt;br&gt;Apache Httpd 2.2.9, i have a dedicated server machine where i can configure
&lt;br&gt;mutiple domains.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; I try search it every where, but i didnt found =[
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; I m want to put each of my weblogs at your owner domain, but i get no
&lt;br&gt;clue how to do that
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; I have my main domain, with many weblogs &lt;a href=&quot;http://mymaindomain.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; all of my weblogs are like contexts of this domains
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/firstblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/firstblog&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/secondblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/secondblog&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/otherblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/otherblog&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://mymaindomain.com/moreoneblog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mymaindomain.com/moreoneblog&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; and i wanna to change that to:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://firstblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://firstblog.com/&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://secondblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://secondblog.com/&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://otherblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://otherblog.com/&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://moreoneblog.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://moreoneblog.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; all of this domains are on the same server, on the same Tomcat, with
&lt;br&gt;virtual hosts, i can point all to roller context, but in this case all open
&lt;br&gt;my main blog, i need to use a main blog for each case based at domain name.
&lt;br&gt;Any one try it ? can any one help me ?
&lt;br&gt;&lt;br&gt;Ps.: Sorry for my english.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Tomaz Lavieri
&lt;br&gt;Sun Certified Java Programmer (SCJP 6)
&lt;br&gt;&lt;br&gt;meu blog =&amp;gt; &lt;a href=&quot;http://blog.tomazlavieri.com.br/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.tomazlavieri.com.br/&lt;/a&gt;&lt;br&gt;twitter =&amp;gt; &lt;a href=&quot;http://twitter.com/tomazlavieri&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://twitter.com/tomazlavieri&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Multiple-domains-%28one-for-each-weblog%29-tp26359289s12275p26359289.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26351136</id>
	<title>November 2009 board report</title>
	<published>2009-11-14T07:50:26Z</published>
	<updated>2009-11-14T07:50:26Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">Here's the status report I intend to submit to the Apache board:
&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/November+2009+Board+Report&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/ROLLER/November+2009+Board+Report&lt;/a&gt;&lt;br&gt;&lt;br&gt;Comments? Feedback?
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/November-2009-board-report-tp26351136s12275p26351136.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26298842</id>
	<title>Re: Putting roller in a webapp and Container Managed Authentication</title>
	<published>2009-11-11T02:03:02Z</published>
	<updated>2009-11-11T02:03:02Z</updated>
	<author>
		<name>Christopher Blasnik</name>
	</author>
	<content type="html">Hi Jery &amp; Dave,
&lt;br&gt;&lt;br&gt;Also using the beta1 of v5.0 I found that the source of the problem is 
&lt;br&gt;an invalid variable declaration for both &amp;quot;mediaFileURL&amp;quot; and 
&lt;br&gt;&amp;quot;mediaFileThumbnailURL&amp;quot; in MediaFileImageChooser.jsp.
&lt;br&gt;&lt;br&gt;Here's the original code:
&lt;br&gt;&lt;br&gt;&amp;lt;s:url id=&amp;quot;mediaFileURL&amp;quot; includeContext=&amp;quot;false&amp;quot;
&lt;br&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;nbsp; &amp;nbsp; value=&amp;quot;/%{#mediaFile.permalink&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;
&lt;br&gt;&amp;lt;s:url id=&amp;quot;mediaFileThumbnailURL&amp;quot;
&lt;br&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;nbsp; &amp;nbsp; value=&amp;quot;/%{#mediaFile.thumbnailURL&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;
&lt;br&gt;&lt;br&gt;Here's the fixed version:
&lt;br&gt;&lt;br&gt;&amp;lt;s:url id=&amp;quot;mediaFileURL&amp;quot; includeContext=&amp;quot;false&amp;quot;
&lt;br&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;nbsp; &amp;nbsp; value=&amp;quot;%{#mediaFile.permalink}&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;
&lt;br&gt;&amp;lt;s:url id=&amp;quot;mediaFileThumbnailURL&amp;quot;
&lt;br&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;nbsp; &amp;nbsp; value=&amp;quot;%{#mediaFile.thumbnailURL}&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;
&lt;br&gt;&lt;br&gt;notice the missing &amp;quot;}&amp;quot;
&lt;br&gt;&lt;br&gt;I also had the problem that the onclick java script within this jsp 
&lt;br&gt;added the root context twice to the url, hence I added a quick fix for 
&lt;br&gt;that, too:
&lt;br&gt;&lt;br&gt;original:
&lt;br&gt;&lt;br&gt;function onSelectImage(name, url) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; window.parent.onSelectImage(name, '&amp;lt;s:property 
&lt;br&gt;value=&amp;quot;absoluteSiteURL&amp;quot; /&amp;gt;' + url);
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;my adapted version:
&lt;br&gt;&lt;br&gt;function onSelectImage(name, url) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(url.match(&amp;quot;^&amp;quot; + url) == url) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; window.parent.onSelectImage(name, url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; window.parent.onSelectImage(name, '&amp;lt;s:property 
&lt;br&gt;value=&amp;quot;absoluteSiteURL&amp;quot; /&amp;gt;' + url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;With these fixes applied the lightbox image chooser works greatly.
&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;- Chris
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Christopher Blasnik
&lt;br&gt;UCS - unique computing solutions gmbh
&lt;br&gt;Löwengasse 2/8
&lt;br&gt;A-1030 Vienna, Austria
&lt;br&gt;&lt;a href=&quot;http://www.ucs.at/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ucs.at/&lt;/a&gt;&lt;br&gt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26298842&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;c.blasnik@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Jery Wang wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello David,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks. I am currently using it and I found a couple of bugs. I just use sed to change the code. The bug: you add image to rich text editor when you create entry and the image does not appear inside the rte. But if you don't find this maybe because I don't install it properly. 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The sed:
&lt;br&gt;&amp;gt; sed -i 's|onclick=&amp;quot;onSelectImage('\''&amp;lt;s:property value=&amp;quot;#mediaFile.name&amp;quot;/&amp;gt;'\'','\''&amp;lt;s:property value=&amp;quot;%{mediaFileURL}&amp;quot; /&amp;gt;'\'')&amp;quot; &amp;gt;|onclick=&amp;quot;onSelectImage('\''&amp;lt;s:property value=&amp;quot;#mediaFile.name&amp;quot;/&amp;gt;'\'','\''&amp;lt;s:property value=&amp;quot;#mediaFile.permalink&amp;quot; /&amp;gt;'\'')&amp;quot; &amp;gt;|g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt; sed -i 's|&amp;lt;img border=&amp;quot;0&amp;quot; src='\''&amp;lt;s:property value=&amp;quot;%{mediaFileThumbnailURL}&amp;quot; /&amp;gt;'\''|&amp;lt;img border=&amp;quot;0&amp;quot; src='\''&amp;lt;s:property value=&amp;quot;#mediaFile.thumbnailURL&amp;quot; /&amp;gt;'\''|g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt; sed -i 's|window.parent.onSelectImage(name, '\''&amp;lt;s:property value=&amp;quot;absoluteSiteURL&amp;quot; /&amp;gt;'\'' + url);|window.parent.onSelectImage(name, url);|g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt; sed -i 's|&amp;lt;s:url id=&amp;quot;mediaFileURL&amp;quot; includeContext=&amp;quot;false&amp;quot;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt; sed -i 's|value=&amp;quot;/%{#mediaFile.permalink&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt; sed -i 's|&amp;lt;s:url id=&amp;quot;mediaFileThumbnailURL&amp;quot;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt; sed -i 's|value=&amp;quot;/%{#mediaFile.thumbnailURL&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I also get:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; [11/11/09 01:42:06:006 EST] &amp;nbsp;WARN ognl.OgnlValueStack: Error setting expression 'weblogEdit.post' with value '[Ljava.lang.String;@6dafde02'
&lt;br&gt;&amp;gt; ognl.OgnlException: target is null for setProperty(null, &amp;quot;post&amp;quot;, [Ljava.lang.String;@6dafde02)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2219)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.SimpleNode.setValue(SimpleNode.java:301)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.ASTChain.setValueBody(ASTChain.java:227)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.SimpleNode.setValue(SimpleNode.java:301)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at ognl.Ognl.setValue(Ognl.java:737)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:222)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.struts2.util.UIActionPrepareInterceptor.intercept(UIActionPrepareInterceptor.java:52)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.struts2.util.UISecurityInterceptor.intercept(UISecurityInterceptor.java:103)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.struts2.util.UIActionInterceptor.intercept(UIActionInterceptor.java:80)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.rendering.filters.RequestMappingFilter.doFilter(RequestMappingFilter.java:140)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.core.filters.InitFilter.doFilter(InitFilter.java:71)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.core.filters.PersistenceSessionFilter.doFilter(PersistenceSessionFilter.java:60)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.core.filters.BootstrapFilter.doFilter(BootstrapFilter.java:65)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.core.filters.SchemeEnforcementFilter.doFilter(SchemeEnforcementFilter.java:121)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.roller.weblogger.ui.core.filters.CharEncodingFilter.doFilter(CharEncodingFilter.java:77)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.lang.Thread.run(Thread.java:619)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards,
&lt;br&gt;&amp;gt; Jery
&lt;br&gt;&amp;gt; --- On Sun, 11/8/09, David Johnson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26298842&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; From: David Johnson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26298842&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Subject: Re: Putting roller in a webapp and Container Managed Authentication
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26298842&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Date: Sunday, November 8, 2009, 8:48 AM
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Nov 6, 2009, at 12:13 AM, Jery Wang wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Is there an easy way to put roller inside a webapp under a sub directory (not in its own webapp container)?
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi Jery,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Roller isn't really designed to be integrated into another web application.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; However, on many some Java app servers you nest web applications. For example, on my Tomcat-base site I have Roller at the root level / and JSPWiki at /wiki.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; I tried with the manual, even source code, but I still don't know how to customize the user authentication so that it can use already existing user table (not rolleruser).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; And if I intend to use CMA, is it as easy turning on the container managed authentication flag in roller-custom.properties?
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In Roller 5.0 you will be able to enable standard CMA and plug in you own user manager, but you have to implement a somewhat complex UserManager interface yourself (written in Java).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Roller 5.0 is not ready for release yet, but we do now have a beta build available. Are you interested in testing the Roller 5.0 beta?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - Dave
&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Putting-roller-in-a-webapp-and-Container-Managed-Authentication-tp26227045s12275p26298842.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26295861</id>
	<title>Re: Putting roller in a webapp and Container Managed Authentication</title>
	<published>2009-11-10T20:21:55Z</published>
	<updated>2009-11-10T20:21:55Z</updated>
	<author>
		<name>Jery Wang</name>
	</author>
	<content type="html">Hello David,
&lt;br&gt;&lt;br&gt;Thanks. I am currently using it and I found a couple of bugs. I just use sed to change the code. The bug: you add image to rich text editor when you create entry and the image does not appear inside the rte. But if you don't find this maybe because I don't install it properly. 
&lt;br&gt;&lt;br&gt;The sed:
&lt;br&gt;sed -i 's|onclick=&amp;quot;onSelectImage('\''&amp;lt;s:property value=&amp;quot;#mediaFile.name&amp;quot;/&amp;gt;'\'','\''&amp;lt;s:property value=&amp;quot;%{mediaFileURL}&amp;quot; /&amp;gt;'\'')&amp;quot; &amp;gt;|onclick=&amp;quot;onSelectImage('\''&amp;lt;s:property value=&amp;quot;#mediaFile.name&amp;quot;/&amp;gt;'\'','\''&amp;lt;s:property value=&amp;quot;#mediaFile.permalink&amp;quot; /&amp;gt;'\'')&amp;quot; &amp;gt;|g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;sed -i 's|&amp;lt;img border=&amp;quot;0&amp;quot; src='\''&amp;lt;s:property value=&amp;quot;%{mediaFileThumbnailURL}&amp;quot; /&amp;gt;'\''|&amp;lt;img border=&amp;quot;0&amp;quot; src='\''&amp;lt;s:property value=&amp;quot;#mediaFile.thumbnailURL&amp;quot; /&amp;gt;'\''|g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;sed -i 's|window.parent.onSelectImage(name, '\''&amp;lt;s:property value=&amp;quot;absoluteSiteURL&amp;quot; /&amp;gt;'\'' + url);|window.parent.onSelectImage(name, url);|g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;sed -i 's|&amp;lt;s:url id=&amp;quot;mediaFileURL&amp;quot; includeContext=&amp;quot;false&amp;quot;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;sed -i 's|value=&amp;quot;/%{#mediaFile.permalink&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;sed -i 's|&amp;lt;s:url id=&amp;quot;mediaFileThumbnailURL&amp;quot;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;sed -i 's|value=&amp;quot;/%{#mediaFile.thumbnailURL&amp;quot;&amp;gt;&amp;lt;/s:url&amp;gt;||g' web/WEB-INF/jsps/editor/MediaFileImageChooser.jsp
&lt;br&gt;&lt;br&gt;&lt;br&gt;I also get:
&lt;br&gt;&lt;br&gt;[11/11/09 01:42:06:006 EST]  WARN ognl.OgnlValueStack: Error setting expression 'weblogEdit.post' with value '[Ljava.lang.String;@6dafde02'
&lt;br&gt;ognl.OgnlException: target is null for setProperty(null, &amp;quot;post&amp;quot;, [Ljava.lang.String;@6dafde02)
&lt;br&gt;        at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2219)
&lt;br&gt;        at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
&lt;br&gt;        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
&lt;br&gt;        at ognl.SimpleNode.setValue(SimpleNode.java:301)
&lt;br&gt;        at ognl.ASTChain.setValueBody(ASTChain.java:227)
&lt;br&gt;        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
&lt;br&gt;        at ognl.SimpleNode.setValue(SimpleNode.java:301)
&lt;br&gt;        at ognl.Ognl.setValue(Ognl.java:737)
&lt;br&gt;        at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
&lt;br&gt;        at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
&lt;br&gt;        at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
&lt;br&gt;        at com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:222)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
&lt;br&gt;        at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.roller.weblogger.ui.struts2.util.UIActionPrepareInterceptor.intercept(UIActionPrepareInterceptor.java:52)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.roller.weblogger.ui.struts2.util.UISecurityInterceptor.intercept(UISecurityInterceptor.java:103)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.roller.weblogger.ui.struts2.util.UIActionInterceptor.intercept(UIActionInterceptor.java:80)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
&lt;br&gt;        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&lt;br&gt;        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
&lt;br&gt;        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
&lt;br&gt;        at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.roller.weblogger.ui.rendering.filters.RequestMappingFilter.doFilter(RequestMappingFilter.java:140)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.roller.weblogger.ui.core.filters.InitFilter.doFilter(InitFilter.java:71)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.roller.weblogger.ui.core.filters.PersistenceSessionFilter.doFilter(PersistenceSessionFilter.java:60)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.roller.weblogger.ui.core.filters.BootstrapFilter.doFilter(BootstrapFilter.java:65)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
&lt;br&gt;        at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
&lt;br&gt;        at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
&lt;br&gt;        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
&lt;br&gt;        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
&lt;br&gt;        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
&lt;br&gt;        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
&lt;br&gt;        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
&lt;br&gt;        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
&lt;br&gt;        at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
&lt;br&gt;        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
&lt;br&gt;        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.roller.weblogger.ui.core.filters.SchemeEnforcementFilter.doFilter(SchemeEnforcementFilter.java:121)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.roller.weblogger.ui.core.filters.CharEncodingFilter.doFilter(CharEncodingFilter.java:77)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
&lt;br&gt;        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
&lt;br&gt;        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
&lt;br&gt;        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
&lt;br&gt;        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
&lt;br&gt;        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
&lt;br&gt;        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
&lt;br&gt;        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
&lt;br&gt;        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
&lt;br&gt;        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
&lt;br&gt;        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
&lt;br&gt;        at java.lang.Thread.run(Thread.java:619)
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Jery
&lt;br&gt;--- On Sun, 11/8/09, David Johnson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26295861&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;From: David Johnson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26295861&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;snoopdave@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Re: Putting roller in a webapp and Container Managed Authentication
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26295861&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Date: Sunday, November 8, 2009, 8:48 AM
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Nov 6, 2009, at 12:13 AM, Jery Wang wrote:
&lt;br&gt;&amp;gt; Is there an easy way to put roller inside a webapp under a sub directory (not in its own webapp container)?
&lt;br&gt;&lt;br&gt;Hi Jery,
&lt;br&gt;&lt;br&gt;Roller isn't really designed to be integrated into another web application.
&lt;br&gt;&lt;br&gt;However, on many some Java app servers you nest web applications. For example, on my Tomcat-base site I have Roller at the root level / and JSPWiki at /wiki.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; I tried with the manual, even source code, but I still don't know how to customize the user authentication so that it can use already existing user table (not rolleruser).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; And if I intend to use CMA, is it as easy turning on the container managed authentication flag in roller-custom.properties?
&lt;br&gt;&lt;br&gt;In Roller 5.0 you will be able to enable standard CMA and plug in you own user manager, but you have to implement a somewhat complex UserManager interface yourself (written in Java).
&lt;br&gt;&lt;br&gt;Roller 5.0 is not ready for release yet, but we do now have a beta build available. Are you interested in testing the Roller 5.0 beta?
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Putting-roller-in-a-webapp-and-Container-Managed-Authentication-tp26227045s12275p26295861.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26255444</id>
	<title>Re: Putting roller in a webapp and Container Managed Authentication</title>
	<published>2009-11-08T08:48:17Z</published>
	<updated>2009-11-08T08:48:17Z</updated>
	<author>
		<name>Dave-401</name>
	</author>
	<content type="html">&lt;br&gt;On Nov 6, 2009, at 12:13 AM, Jery Wang wrote:
&lt;br&gt;&amp;gt; Is there an easy way to put roller inside a webapp under a sub &amp;nbsp;
&lt;br&gt;&amp;gt; directory (not in its own webapp container)?
&lt;br&gt;&lt;br&gt;Hi Jery,
&lt;br&gt;&lt;br&gt;Roller isn't really designed to be integrated into another web &amp;nbsp;
&lt;br&gt;application.
&lt;br&gt;&lt;br&gt;However, on many some Java app servers you nest web applications. For &amp;nbsp;
&lt;br&gt;example, on my Tomcat-base site I have Roller at the root level / and &amp;nbsp;
&lt;br&gt;JSPWiki at /wiki.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; I tried with the manual, even source code, but I still don't know &amp;nbsp;
&lt;br&gt;&amp;gt; how to customize the user authentication so that it can use already &amp;nbsp;
&lt;br&gt;&amp;gt; existing user table (not rolleruser).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; And if I intend to use CMA, is it as easy turning on the container &amp;nbsp;
&lt;br&gt;&amp;gt; managed authentication flag in roller-custom.properties?
&lt;br&gt;&lt;br&gt;In Roller 5.0 you will be able to enable standard CMA and plug in you &amp;nbsp;
&lt;br&gt;own user manager, but you have to implement a somewhat complex &amp;nbsp;
&lt;br&gt;UserManager interface yourself (written in Java).
&lt;br&gt;&lt;br&gt;Roller 5.0 is not ready for release yet, but we do now have a beta &amp;nbsp;
&lt;br&gt;build available. Are you interested in testing the Roller 5.0 beta?
&lt;br&gt;&lt;br&gt;- Dave
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Putting-roller-in-a-webapp-and-Container-Managed-Authentication-tp26227045s12275p26255444.html" />
</entry>

</feed>
